Subversion Repositories SmartDukaan

Rev

Rev 10912 | Rev 13035 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
162 naveen 1
package in.shop2020.creation.controllers;
2
 
1051 rajveer 3
import in.shop2020.content.security.User;
4
import in.shop2020.content.security.UserManager;
201 naveen 5
import in.shop2020.metamodel.core.Bullet;
204 naveen 6
import in.shop2020.metamodel.core.CompositeDataObject;
162 naveen 7
import in.shop2020.metamodel.core.Entity;
1051 rajveer 8
import in.shop2020.metamodel.core.EntityState;
7964 amit.gupta 9
import in.shop2020.metamodel.core.EntityStatus;
204 naveen 10
import in.shop2020.metamodel.core.EnumDataObject;
201 naveen 11
import in.shop2020.metamodel.core.Feature;
198 naveen 12
import in.shop2020.metamodel.core.FreeformContent;
201 naveen 13
import in.shop2020.metamodel.core.PrimitiveDataObject;
198 naveen 14
import in.shop2020.metamodel.core.Slide;
242 naveen 15
import in.shop2020.metamodel.definitions.Catalog;
198 naveen 16
import in.shop2020.metamodel.definitions.Category;
4959 amit.gupta 17
import in.shop2020.metamodel.definitions.ChildSlideDefinition;
204 naveen 18
import in.shop2020.metamodel.definitions.CompositeDefinition;
19
import in.shop2020.metamodel.definitions.CompositePartDefinition;
198 naveen 20
import in.shop2020.metamodel.definitions.DefinitionsContainer;
310 rajveer 21
import in.shop2020.metamodel.definitions.EditorialImportance;
201 naveen 22
import in.shop2020.metamodel.definitions.FeatureDefinition;
23
import in.shop2020.metamodel.definitions.SlideDefinition;
24
import in.shop2020.metamodel.definitions.SlideFeatureDefinition;
4129 mandeep.dh 25
import in.shop2020.metamodel.util.CreationUtils;
198 naveen 26
import in.shop2020.metamodel.util.ExpandedBullet;
201 naveen 27
import in.shop2020.metamodel.util.ExpandedBulletDefinition;
162 naveen 28
import in.shop2020.metamodel.util.ExpandedEntity;
201 naveen 29
import in.shop2020.metamodel.util.ExpandedFeature;
30
import in.shop2020.metamodel.util.ExpandedFeatureDefinition;
198 naveen 31
import in.shop2020.metamodel.util.ExpandedSlide;
32
import in.shop2020.metamodel.util.ExpandedSlideDefinition;
5945 mandeep.dh 33
import in.shop2020.model.v1.catalog.CatalogServiceException;
739 chandransh 34
import in.shop2020.model.v1.catalog.Item;
35
import in.shop2020.model.v1.catalog.status;
3127 rajveer 36
import in.shop2020.thrift.clients.CatalogClient;
11873 amit.gupta 37
import in.shop2020.util.EntityUtils;
7958 amit.gupta 38
import in.shop2020.util.NewCMP;
162 naveen 39
import in.shop2020.util.Utils;
40
 
7962 amit.gupta 41
import java.text.DecimalFormat;
5760 amit.gupta 42
import java.text.MessageFormat;
4129 mandeep.dh 43
import java.text.SimpleDateFormat;
208 naveen 44
import java.util.ArrayList;
45
import java.util.Arrays;
46
import java.util.Collection;
4129 mandeep.dh 47
import java.util.Date;
208 naveen 48
import java.util.HashMap;
49
import java.util.List;
6877 amit.gupta 50
import java.util.Locale;
208 naveen 51
import java.util.Map;
1051 rajveer 52
import java.util.Set;
450 rajveer 53
import java.util.StringTokenizer;
208 naveen 54
 
5180 amit.gupta 55
import org.apache.commons.lang.StringEscapeUtils;
208 naveen 56
import org.apache.commons.lang.StringUtils;
162 naveen 57
import org.apache.juli.logging.Log;
58
import org.apache.juli.logging.LogFactory;
1051 rajveer 59
import org.apache.struts2.convention.annotation.InterceptorRef;
60
import org.apache.struts2.convention.annotation.InterceptorRefs;
162 naveen 61
import org.apache.struts2.convention.annotation.Result;
62
import org.apache.struts2.convention.annotation.Results;
208 naveen 63
import org.apache.struts2.rest.DefaultHttpHeaders;
64
import org.apache.struts2.rest.HttpHeaders;
4129 mandeep.dh 65
import org.apache.thrift.TException;
162 naveen 66
 
242 naveen 67
 
1051 rajveer 68
@InterceptorRefs({
69
    @InterceptorRef("myDefault"),
70
    @InterceptorRef("login")
71
})
72
 
162 naveen 73
@Results({
74
    @Result(name="success", type="redirectAction", 
198 naveen 75
    		params = {"actionName" , "entity"}),
76
    @Result(name="redirect", location="${url}", type="redirect")
162 naveen 77
})
242 naveen 78
 
1051 rajveer 79
public class EntityController extends BaseController {
162 naveen 80
 
81
	/**
82
	 * 
83
	 */
242 naveen 84
	private static final long serialVersionUID = 1L;
6894 amit.gupta 85
 
7100 amit.gupta 86
	private static Date lastEntityCreation = new Date(System.currentTimeMillis() - (60 * 60 * 1000)); 
242 naveen 87
 
88
	/**
89
	 * 
90
	 */
162 naveen 91
	private static Log log = LogFactory.getLog(EntityController.class);
92
 
93
	/**
94
	 * 
95
	 */
96
	private String id;
97
 
6877 amit.gupta 98
	private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH", Locale.ENGLISH);
99
 
162 naveen 100
	private ExpandedEntity expEntity;
101
 
1051 rajveer 102
	private Entity entity = null;
250 naveen 103
 
1051 rajveer 104
	private Map<Long, EntityState> entitiesState;
162 naveen 105
 
1051 rajveer 106
	private DefinitionsContainer defs = Catalog.getInstance().getDefinitionsContainer();
198 naveen 107
 
213 naveen 108
	private long firstSlideDefID;
198 naveen 109
 
110
	private ExpandedSlideDefinition expSlideDef;
111
 
112
	private ExpandedSlide expSlide;
113
 
114
	private String redirectURL;
115
 
116
	private Exception exception;
117
 
118
	private String errorString;
119
 
120
	private long newCurrentSlideDefinitionID;
121
 
122
	private long newNextSlideDefinitionID;
123
 
124
	private long newPrevSlideDefinitionID;
242 naveen 125
 
250 naveen 126
	private Map<Long, List<Long>> catSlides;
516 rajveer 127
 
128
	private Map<Long, List<Entity>> catEntities;
1051 rajveer 129
 
2095 rajveer 130
	private List<Long> inconsistentEntities;
4129 mandeep.dh 131
 
132
    private long entityId;
133
    private List<Item> items;
134
 
135
    // GET /entity/1
242 naveen 136
    public String show() {
137
    	log.info("EntityController.show");
138
 
139
    	try {
140
    		long entityID = Long.parseLong(this.getId());
141
    		log.info("entityID:" + entityID);
142
 
1051 rajveer 143
    		if(!UserManager.getUserManager().canView(getUsername(), entityID)){
144
    			return "fatel";
145
    		}
146
 
250 naveen 147
			this.expEntity = this.getExpandedEntity(entityID);
242 naveen 148
 
149
			return "show";
150
		} catch (Exception e) {
151
			log.error(CreationUtils.getStackTrace(e));
152
			this.setErrorString(CreationUtils.getStackTrace(e));
153
			return "fatal";
154
		}
155
    }
198 naveen 156
 
162 naveen 157
    // GET /entity
158
    public HttpHeaders index() {
159
    	log.info("EntityController.index");
1152 rajveer 160
 
162 naveen 161
    	try {
1051 rajveer 162
			this.entitiesState = CreationUtils.getEntitiesState();
2095 rajveer 163
			inconsistentEntities = CreationUtils.getInconsistentEntities();
1152 rajveer 164
			//Must be called after getting entities state
165
			createEntitiesForItemsInProcess();
2095 rajveer 166
 
162 naveen 167
		} catch (Exception e) {
208 naveen 168
			log.error(CreationUtils.getStackTrace(e));
169
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 170
			return new DefaultHttpHeaders("fatal");
162 naveen 171
		}
172
 
208 naveen 173
        return new DefaultHttpHeaders("index").disableCaching();
162 naveen 174
    }
175
 
176
    // GET /entity
177
    public String create() {
178
    	log.info("EntityController.create");
179
 
1051 rajveer 180
    	if(!UserManager.getUserManager().canCreate(getUsername())){
181
			return "success";
182
		}
183
 
162 naveen 184
		try {
1152 rajveer 185
			// Generate new entityID from cms
3127 rajveer 186
			CatalogClient catalogServiceClient = new CatalogClient();	
1152 rajveer 187
			long entityID =  catalogServiceClient.getClient().generateNewEntityID();
188
 
162 naveen 189
			String categoryID = this.reqparams.get("category")[0];
190
			Entity entity = new Entity(entityID, Long.parseLong(categoryID));
191
 
2607 rajveer 192
			entity.setBrand((this.reqparams.get("brand")[0]).trim());
193
			entity.setModelName((this.reqparams.get("modelname")[0]).trim());
194
			entity.setModelNumber((this.reqparams.get("modelnumber")[0]).trim());
162 naveen 195
 
1152 rajveer 196
			EntityState entityState = new EntityState(entityID, Long.parseLong(categoryID), getUsername());
2607 rajveer 197
			entityState.setBrand((this.reqparams.get("brand")[0]).trim());
198
			entityState.setModelName((this.reqparams.get("modelname")[0]).trim());
199
			entityState.setModelNumber((this.reqparams.get("modelnumber")[0]).trim());
162 naveen 200
 
2607 rajveer 201
 
1051 rajveer 202
			CreationUtils.createEntity(entity, entityState);
203
 
162 naveen 204
	    	this.setId(new Long(entityID).toString());
205
		} catch (Exception e) {
208 naveen 206
			log.error(CreationUtils.getStackTrace(e));
207
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 208
			return "fatal";
162 naveen 209
		}
198 naveen 210
 
211
		this.redirectURL = "entity/" + this.getId() + "/edit";
162 naveen 212
 
198 naveen 213
		return "redirect";
162 naveen 214
    }
215
 
216
    // GET /entity/1/edit
8749 amit.gupta 217
    public String edit() throws Exception {
162 naveen 218
    	log.info("EntityController.edit");
219
 
220
    	long entityID = Long.parseLong(this.getId());
221
    	log.info("entityID:" + entityID);
1051 rajveer 222
    	if(!UserManager.getUserManager().canEdit(getUsername(), entityID)){
223
    		addActionError("You can not edit as this entity is not assigned to you");
224
			return "success";
225
		}
162 naveen 226
 
227
    	try {
250 naveen 228
			this.expEntity = this.getExpandedEntity(entityID);
198 naveen 229
			//log.info("this.expEntity:" + this.expEntity);
242 naveen 230
 
231
			String[] inputSlideDefIDs = this.reqparams.get("slideDefID");
232
			long inputSlideDefID = 0L;
233
			if(inputSlideDefIDs != null && inputSlideDefIDs.length > 0) {
234
				try {
235
					inputSlideDefID = Long.parseLong(inputSlideDefIDs[0]);
236
				} catch (NumberFormatException nfe) {}
237
			}
1051 rajveer 238
			long categoryID = CreationUtils.getEntity(entityID).getCategoryID();
310 rajveer 239
 
240
			log.info("Entity ID:" + entityID + "   CategoryID " + categoryID );
1051 rajveer 241
 
310 rajveer 242
			//Changed to make correct order of borrowed slides 
1051 rajveer 243
			//List<Long> slideDefIDs = CreationUtils.getSlideSequence(entityID, categoryID);
310 rajveer 244
 
1051 rajveer 245
			List<Long> slideDefIDs = expEntity.getSlideSequence();
242 naveen 246
			log.info("slideDefIDs:" + slideDefIDs);
1051 rajveer 247
			if(slideDefIDs == null){
248
				slideDefIDs = Catalog.getInstance().getDefinitionsContainer().getCategorySlideSequence(categoryID);
249
			}
198 naveen 250
 
1051 rajveer 251
			log.info("slideDefIDs:" + slideDefIDs);
252
 
242 naveen 253
			// Edit the entity from a specific slide
254
			if(slideDefIDs != null && inputSlideDefID != 0L) {
255
 
256
				// -2 : Not set
257
				// -1 : Not found
258
				int currentIndex = slideDefIDs.indexOf(
259
						new Long(inputSlideDefID));
260
 
261
				int nextIndex = -2;
499 rajveer 262
				if(currentIndex+1 != slideDefIDs.size()) {
242 naveen 263
					nextIndex = currentIndex + 1;
264
				}
499 rajveer 265
;
242 naveen 266
				int prevIndex = -2;
267
				if(currentIndex != 0) {
268
					prevIndex = currentIndex - 1;
269
				}
499 rajveer 270
 
242 naveen 271
				this.setNewCurrentSlideDefinitionID(
272
						slideDefIDs.get(currentIndex).longValue());
273
				if(nextIndex != -2) {
499 rajveer 274
					log.info("p7" + "---slidedefids:"+slideDefIDs+ "---nextIndex:"+nextIndex);
275
					log.info("p7" + "---currentslide:"+currentIndex+ "---prevslide:"+prevIndex);
242 naveen 276
					this.setNewNextSlideDefinitionID(
277
							slideDefIDs.get(nextIndex).longValue());
278
				}
279
 
280
				if(prevIndex != -2) {
281
					this.setNewPrevSlideDefinitionID(
282
							slideDefIDs.get(prevIndex).longValue());
283
				}
198 naveen 284
 
242 naveen 285
				// Current Slide Definition
286
				this.expSlideDef = defs.getExpandedSlideDefinition(
287
						inputSlideDefID);
288
				// Current Slide Instance
289
				this.expSlide = this.expEntity.getExpandedSlide(
290
						inputSlideDefID);
291
				return "editSlide";
292
			}
162 naveen 293
		} catch (Exception e) {
208 naveen 294
			log.error(CreationUtils.getStackTrace(e));
295
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 296
			return "fatal";
162 naveen 297
		}
298
 
299
        return "edit";
300
    }
198 naveen 301
 
250 naveen 302
    /**
303
     * 
304
     * @return
305
     */
198 naveen 306
    public String getUrl() {
307
    	return this.redirectURL;
308
    }
250 naveen 309
 
310
    /**
311
     * 
312
     * @return
313
     */
162 naveen 314
    // GET /entity/new
315
    public String editNew() {
316
    	log.info("EntityController.editNew");
317
 
1051 rajveer 318
    	if(!UserManager.getUserManager().canCreate(getUsername())){
319
    		addActionError("You do not have rights to create an entity.");
320
			return "success";
321
		}
322
 
162 naveen 323
        return "editNew";
324
    }
250 naveen 325
 
326
    /**
327
     * 
328
     * @return
8749 amit.gupta 329
     * @throws Exception 
250 naveen 330
     */
162 naveen 331
    // GET /entity/1
8749 amit.gupta 332
    public String update() throws Exception {
162 naveen 333
    	log.info("EntityController.update");
334
 
198 naveen 335
    	long entityID = Long.parseLong(this.getId());
336
    	log.info("entityID:" + entityID);
337
 
1051 rajveer 338
    	if(!UserManager.getUserManager().canEdit(getUsername(), entityID)){
339
			return "success";
340
		}
198 naveen 341
 
342
    	try {
250 naveen 343
			this.expEntity = this.getExpandedEntity(entityID);
2607 rajveer 344
 
242 naveen 345
			// Save and Go to slides selection page
346
			if (this.reqparams.containsKey("slides")) {
2607 rajveer 347
 
242 naveen 348
				Entity entity = this.expEntity.getEntity();
1051 rajveer 349
 
242 naveen 350
				String categoryID = this.reqparams.get("category")[0];
351
 
352
				entity.setCategoryID(Long.parseLong(categoryID));
353
 
2607 rajveer 354
				entity.setBrand((this.reqparams.get("brand")[0]).trim());
355
				entity.setModelName((this.reqparams.get("modelname")[0]).trim());
356
				entity.setModelNumber((this.reqparams.get("modelnumber")[0]).trim());
357
 
1152 rajveer 358
				EntityState entityState = CreationUtils.getEntityState(entity.getID());
359
				entityState.setCategoryID(Long.parseLong(categoryID));
2607 rajveer 360
				entityState.setBrand((this.reqparams.get("brand")[0]).trim());
361
				entityState.setModelName((this.reqparams.get("modelname")[0]).trim());
362
				entityState.setModelNumber((this.reqparams.get("modelnumber")[0]).trim());
5906 rajveer 363
				updateTitleAndMetaDescription(entity);
1051 rajveer 364
				CreationUtils.updateEntity(entity);
1152 rajveer 365
				CreationUtils.updateEntityState(entityState);
242 naveen 366
 
367
				this.redirectURL = "/slides/" + this.getId() + "/edit";
368
				return "redirect";
369
			}
198 naveen 370
 
213 naveen 371
			long currentSlideDefID = 0L;
372
			long nextSlideDefID = 0L;
373
			long prevSlideDefID = 0L;
250 naveen 374
			long gotoSlideDefID = 0L;
198 naveen 375
 
213 naveen 376
			String[] currentslideDefIDStrings = 
377
				this.reqparams.get("currentslideDefID");
198 naveen 378
 
213 naveen 379
			String[] nextslideDefIDStrings = 
380
				this.reqparams.get("nextslideDefID");
198 naveen 381
 
213 naveen 382
			String[] prevslideDefIDStrings = 
383
				this.reqparams.get("prevslideDefID");
198 naveen 384
 
250 naveen 385
			String[] gotoslideDefIDStrings = 
386
				this.reqparams.get("gotoslideDefID");
387
			log.info("gotoslideDefIDStrings:" + 
388
					Arrays.toString(gotoslideDefIDStrings));
389
 
198 naveen 390
			// Current Slide ID
213 naveen 391
			if(currentslideDefIDStrings != null && 
392
					currentslideDefIDStrings.length > 0) {
198 naveen 393
				try {
213 naveen 394
					currentSlideDefID = Long.parseLong(
395
							currentslideDefIDStrings[0]);
198 naveen 396
				}
397
				catch (NumberFormatException nfe) {}
398
			}
399
 
400
			// Next Slide ID
213 naveen 401
			if(nextslideDefIDStrings != null && 
402
					nextslideDefIDStrings.length > 0) {
198 naveen 403
				try {
213 naveen 404
					nextSlideDefID = Long.parseLong(nextslideDefIDStrings[0]);
198 naveen 405
				}
406
				catch (NumberFormatException nfe) {}
407
			}
408
 
409
			// Prev Slide ID
213 naveen 410
			if(prevslideDefIDStrings != null && 
411
					prevslideDefIDStrings.length > 0) {
198 naveen 412
				try {
213 naveen 413
					prevSlideDefID = Long.parseLong(prevslideDefIDStrings[0]);
198 naveen 414
				}
415
				catch (NumberFormatException nfe) {}
416
			}
250 naveen 417
 
418
			// Go to Slide ID
419
			if(gotoslideDefIDStrings != null && 
420
					gotoslideDefIDStrings.length > 0) {
421
				try {
422
					gotoSlideDefID = Long.parseLong(gotoslideDefIDStrings[0]);
423
				}
424
				catch (NumberFormatException nfe) {}
425
			}
426
 
213 naveen 427
			log.info("currentSlideDefID:" + currentSlideDefID);
428
			log.info("nextSlideDefID:" + nextSlideDefID);
429
			log.info("prevSlideDefID:" + prevSlideDefID);
250 naveen 430
			log.info("gotoSlideDefID:" + gotoSlideDefID);
198 naveen 431
 
242 naveen 432
 
198 naveen 433
			// Save on basic info page
213 naveen 434
			if (this.reqparams.containsKey("save") && currentSlideDefID == 0L) {
198 naveen 435
				log.info("Save");
436
 
437
				Entity entity = this.expEntity.getEntity();
438
 
439
				String categoryID = this.reqparams.get("category")[0];
440
 
441
				entity.setCategoryID(Long.parseLong(categoryID));
2607 rajveer 442
				entity.setBrand((this.reqparams.get("brand")[0]).trim());
443
				entity.setModelName((this.reqparams.get("modelname")[0]).trim());
444
				entity.setModelNumber((this.reqparams.get("modelnumber")[0]).trim());
198 naveen 445
 
1051 rajveer 446
				CreationUtils.updateEntity(entity);
198 naveen 447
 
448
				return "success";
449
			}
450
 
250 naveen 451
			List<Long> slideIDs = this.getSlideSequence(entityID);
198 naveen 452
			log.info("slideIDs:"+slideIDs);
242 naveen 453
			if(slideIDs == null) {
454
				this.setErrorString("Slides need to be picked first!");
455
				return "fatal";
456
			}
198 naveen 457
 
1051 rajveer 458
 
208 naveen 459
			boolean skip = false;
460
			if(this.reqparams.containsKey("skipprev") || 
461
					this.reqparams.containsKey("skipnext")) {
462
				skip = true;
463
			}
464
 
465
			boolean next = this.reqparams.containsKey("skipnext") || 
466
				this.reqparams.containsKey("next");
467
 
468
			boolean prev = this.reqparams.containsKey("skipprev") || 
242 naveen 469
				this.reqparams.containsKey("prev");
208 naveen 470
 
250 naveen 471
			boolean go = this.reqparams.containsKey("goto");
472
 
473
			// Save or Next or Prev or Go - When editing a slide
198 naveen 474
			int currentSlideIndex = 0;
213 naveen 475
			currentSlideIndex = slideIDs.indexOf(new Long(currentSlideDefID));
208 naveen 476
			log.info("currentSlideIndex:" + currentSlideIndex);
198 naveen 477
 
213 naveen 478
			if(!skip && currentSlideDefID != 0L) {
198 naveen 479
				Entity entity = this.expEntity.getEntity();
213 naveen 480
				// Create new instance and override existing
481
				Slide currentSlide = this.createSlide(currentSlideDefID);
482
				entity.addSlide(currentSlide);
1051 rajveer 483
				CreationUtils.updateEntity(entity);
198 naveen 484
			}
485
 
215 naveen 486
			// Skip will delete current slide from entity
487
			else if(skip && currentSlideDefID != 0L) {
488
				Entity entity = this.expEntity.getEntity();
489
				entity.removeSlide(currentSlideDefID);
490
				// Store
1051 rajveer 491
				CreationUtils.updateEntity(entity);
215 naveen 492
			}
2607 rajveer 493
 
198 naveen 494
			boolean showAnotherSlide = false;
495
 
496
			// -2 : Not set
497
			// -1 : Not found
498
			int newCurrentIndex = -2;  
499
			int newNextIndex = -2;
500
			int newPrevIndex = -2;
501
 
502
			// Next
213 naveen 503
			if(next && nextSlideDefID != 0L) {
198 naveen 504
				log.info("Next");
1051 rajveer 505
				log.info("p10");
198 naveen 506
				// Decide on next slide ID
213 naveen 507
				int nextSlideIndex = slideIDs.indexOf(new Long(nextSlideDefID));
198 naveen 508
				log.info("nextSlideIndex:"+nextSlideIndex);
509
 
510
				// New Current
511
				if (nextSlideIndex == -1) {
213 naveen 512
					this.setErrorString("Invalid Next slide ID " + 
513
							nextSlideDefID);
198 naveen 514
					return "fatal";
515
				}
516
 
517
				newCurrentIndex = nextSlideIndex;
518
 
519
				// New Next
520
				if (newCurrentIndex != slideIDs.size()-1) {
521
					newNextIndex = newCurrentIndex + 1;
522
				}
523
 
524
				// New Prev.
213 naveen 525
				if(currentSlideDefID != 0L) {
198 naveen 526
					newPrevIndex = currentSlideIndex;
527
				}
528
 
529
				showAnotherSlide = true;
530
			}
531
 
532
			// Prev
213 naveen 533
			if(prev && prevSlideDefID != 0L) {
198 naveen 534
				log.info("Prev");
1051 rajveer 535
				log.info("p11");
198 naveen 536
				// Decide on prev slide ID
213 naveen 537
				int prevSlideIndex = slideIDs.indexOf(new Long(prevSlideDefID));
198 naveen 538
				log.info("prevSlideIndex:" + prevSlideIndex);
539
 
540
				if (prevSlideIndex == -1) {
213 naveen 541
					this.setErrorString("Invalid Prev slide ID " + 
542
							prevSlideDefID);
198 naveen 543
					return "fatal";
544
				}
545
 
546
				// New Next
213 naveen 547
				if(currentSlideDefID != 0L) {
198 naveen 548
					newNextIndex = currentSlideIndex;
549
				}
550
 
551
				// New Current
552
				newCurrentIndex = prevSlideIndex;
553
 
554
				// New Prev.
555
				if (newCurrentIndex != 0) {
556
					newPrevIndex = newCurrentIndex - 1;
557
				}
558
 
559
				showAnotherSlide = true;
560
			}
561
 
250 naveen 562
			// Go to
563
			if(go && gotoSlideDefID != 0) {
564
				log.info("Goto");
1051 rajveer 565
				log.info("p12");
250 naveen 566
				int gotoSlideIndex = slideIDs.indexOf(new Long(gotoSlideDefID));
567
				log.info("gotoSlideIndex:" + gotoSlideIndex);
568
 
569
				if (gotoSlideIndex == -1) {
570
					this.setErrorString("Invalid Go to slide ID " + 
571
							gotoSlideDefID);
572
					return "fatal";
573
				}
574
 
575
				// New Next
576
				if(gotoSlideIndex != slideIDs.size()-1) {
577
					newNextIndex = gotoSlideIndex + 1;
578
				}
579
 
580
				// New Current
581
				newCurrentIndex = gotoSlideIndex;
582
 
583
				// New Prev.
584
				if (gotoSlideIndex != 0) {
585
					newPrevIndex = gotoSlideIndex - 1;
586
				}
587
 
588
				showAnotherSlide = true;
589
			}
590
 
198 naveen 591
			if(showAnotherSlide) {
213 naveen 592
 				log.info("newCurrentIndex:" + newCurrentIndex);
593
				log.info("newNextIndex:" + newNextIndex);
594
				log.info("newPrevIndex:" + newPrevIndex);
198 naveen 595
 
1051 rajveer 596
				log.info("p13");
597
 
198 naveen 598
				if(newCurrentIndex != -2) {
599
					this.setNewCurrentSlideDefinitionID(
600
							slideIDs.get(newCurrentIndex).longValue());
601
				}
602
 
603
				if(newNextIndex != -2) {
604
					this.setNewNextSlideDefinitionID(
605
							slideIDs.get(newNextIndex).longValue());
606
				}
607
 
608
				if(newPrevIndex != -2) {
609
					this.setNewPrevSlideDefinitionID(
610
							slideIDs.get(newPrevIndex).longValue());
611
				}
242 naveen 612
 
613
				long newCurrentSlideDefID = 
614
					this.getNewCurrentSlideDefinitionID();
615
				log.info("newCurrentSlideDefID:" + newCurrentSlideDefID);
198 naveen 616
 
617
				// Current Slide Definition
618
				this.expSlideDef = defs.getExpandedSlideDefinition(
242 naveen 619
						newCurrentSlideDefID);
198 naveen 620
 
621
				// Current Slide Instance
622
				this.expSlide = this.expEntity.getExpandedSlide(
242 naveen 623
						newCurrentSlideDefID);
198 naveen 624
 
242 naveen 625
				log.info("this.expSlide is null: " + (this.expSlide == null));
626
 
198 naveen 627
				return "editSlide";
628
			}
629
		}
630
    	catch (Exception e) {
208 naveen 631
			log.error(CreationUtils.getStackTrace(e));
632
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 633
			return "fatal";
634
    	}
635
 
636
        return "success";
162 naveen 637
    }
213 naveen 638
 
5906 rajveer 639
    private void updateTitleAndMetaDescription(Entity entity) {
5760 amit.gupta 640
		Slide summarySlide = entity.getSlide(130054l);
641
		if (summarySlide != null){
642
			List<Feature> features = summarySlide.getFeatures();
643
			if(features != null){
644
				for(Feature f : features) {
645
					if(f.getFeatureDefinitionID()==120132l){
646
						if(f.getBullets() == null){
647
							f.setBullets(new ArrayList<Bullet>());
648
						}else {
649
							f.getBullets().clear();
650
						}
5914 amit.gupta 651
						Bullet titleBullet = new Bullet(new PrimitiveDataObject(getTitle()));
5760 amit.gupta 652
						f.getBullets().add(titleBullet);
653
					}
654
					else if(f.getFeatureDefinitionID()==120133l){
655
						if(f.getBullets() == null){
656
							f.setBullets(new ArrayList<Bullet>());
657
						}else {
658
							f.getBullets().clear();
659
						}
5914 amit.gupta 660
						Bullet metaDescBullet = new Bullet(new PrimitiveDataObject(getMetaDescription()));
5760 amit.gupta 661
						f.getBullets().add(metaDescBullet);
662
					}
663
				}
664
			}
665
		}
666
	}
667
 
5914 amit.gupta 668
    public String getTitle(){
5760 amit.gupta 669
    	String brand = entity.getBrand();
670
    	String modelName = entity.getModelName();
671
    	String modelNumber = entity.getModelNumber();
672
    	String titleString = "";
673
    	if(StringUtils.isEmpty(modelName)){
674
    		titleString = brand + " " + modelNumber + " Price in India | Specifications, Features and Reviews";
675
    	}else {
10912 amit.gupta 676
    		titleString = brand + " " + modelName  + " " + modelNumber +" Price in India | Specifications, Features and Reviews";
5760 amit.gupta 677
    	}
678
    	return titleString;
679
    }
680
 
5914 amit.gupta 681
    public String getMetaDescription(){
6041 amit.gupta 682
    	Category cat = defs.getCategory(entity.getCategoryID());
683
    	Category parentCategory = cat.getParentCategory();
5760 amit.gupta 684
    	String categoryName = parentCategory.getLabel();
685
    	if (parentCategory.getID()== Utils.MOBILE_ACCESSORIES_CATEGORY){
6041 amit.gupta 686
    		categoryName = cat.getLabel();
5760 amit.gupta 687
    	}
688
    	String template = "Buy {0} {1} {2} at $minPriceItem.getSellingPrice(). All {3} are 100% Original and carry full Manufacturers Warranty since we procure directly from the Brand. Free Next Day Delivery.";
689
    	return MessageFormat.format(template, entity.getBrand(), entity.getModelName(), entity.getModelNumber(), categoryName.toLowerCase());
690
    }
691
 
692
	/**
201 naveen 693
     * 
250 naveen 694
     * @param entityID
695
     * @return
696
     * @throws Exception 
697
     */
698
    public long getBorrowedCategoryID(long slideDefID) throws Exception {
699
    	long entityID = Long.parseLong(this.getId());
1051 rajveer 700
    	entity = CreationUtils.getEntity(entityID);
250 naveen 701
    	Long entityCatID = new Long(entity.getCategoryID());
702
 
703
    	Map<Long, List<Long>> catSlides = this.getRawSlideSequence(entityID);
704
 
705
    	Long lSlideDefID = new Long(slideDefID);
706
    	if(catSlides != null) {
707
    		for(Long catID : catSlides.keySet()) {
708
    			List<Long> slideDefIDs = catSlides.get(catID);
709
    			if(slideDefIDs.contains(lSlideDefID) && 
710
    					!catID.equals(entityCatID)) {
711
    				return catID.longValue();
712
    			}
713
    		}
714
    	}
715
 
716
    	return 0L;
717
    }
718
 
719
	/**
720
     * 
721
     * @param entityID
722
     * @return
723
     * @throws Exception 
724
     */
725
    private List<Long> getSlideSequence(long entityID) throws Exception {
1051 rajveer 726
    	//this.catSlides = this.getRawSlideSequence(entityID);
727
    	//return CreationUtils.getSlideSequence(this.catSlides);
728
    	return entity.getSlideSequence();
250 naveen 729
	}
730
 
731
    /**
732
     * 
733
     * @param entityID
734
     * @return
735
     * @throws Exception
736
     */
737
	private Map<Long, List<Long>> getRawSlideSequence(long entityID) 
738
		throws Exception {
739
		if(this.catSlides == null) {
1051 rajveer 740
			this.catSlides = defs.getCategorySlideSequence();
250 naveen 741
		}
742
 
743
		return this.catSlides;
744
	}
745
 
746
 
747
	/**
748
     * 
213 naveen 749
     * @param slideDefID
750
     * @return
751
     * @throws Exception
752
     */
753
    private Slide createSlide(long slideDefID) throws Exception {
754
		Slide slide = new Slide(slideDefID);
755
 
1176 rajveer 756
//		long borrowedCategoryID = this.getBorrowedCategoryID(slideDefID);
757
//		log.info("borrowedCategoryID:" + borrowedCategoryID);
758
//		
759
//		if(borrowedCategoryID != 0L) {
760
//			slide.setBorrowedCategoryID(borrowedCategoryID);
761
//		}
250 naveen 762
 
213 naveen 763
		// Slide free-form content
764
		FreeformContent slideFFC = this.getFreeformContent(
765
				"slide_" + slideDefID);
766
 
767
		log.info("slideFFC:" + slideFFC);
768
 
769
		slide.setFreeformContent(slideFFC);
770
		//log.info("currentSlide:" + currentSlide);
771
 
772
		// Collect Feature bullets
773
		List<Feature> features = this.createFeatures(slide);
774
		log.info("features:" + features);
775
 
776
		slide.setFeatures(features);
777
 
778
		// Collect children slides
1051 rajveer 779
		SlideDefinition slideDef = this.defs.getSlideDefinition(slideDefID);
213 naveen 780
 
4959 amit.gupta 781
		List<ChildSlideDefinition> childrenSlides = slideDef.getChildSlideDefinitions();
782
		if(childrenSlides != null) {
783
			List<Slide> childSlides = new ArrayList<Slide>();
784
			for (ChildSlideDefinition childSlideDef : childrenSlides) {
785
				// Ignore skipped featured
786
				String[] skipvalue = 
787
					this.reqparams.get(childSlideDef.getId() + "_skip");
788
				log.info("skipvalue for " + childSlideDef.getId() + " :" + Arrays.toString(skipvalue));
789
 
790
				if(skipvalue != null && skipvalue.length > 0 && 
791
						skipvalue[0].equals("on")) {
792
					continue;
793
				}
794
 
795
				Slide childSlide = this.createSlide(childSlideDef.getId());
213 naveen 796
				if(childSlide != null) {
4959 amit.gupta 797
					childSlides.add(childSlide);
213 naveen 798
				}
799
			}
800
 
4959 amit.gupta 801
			slide.setChildrenSlides(childSlides);
213 naveen 802
		}
803
 
804
		return slide;
805
    }
806
 
807
    /**
808
     * 
201 naveen 809
     * @param slide
810
     * @return
811
     * @throws Exception
812
     */
813
    private List<Feature> createFeatures(Slide slide) throws Exception {
814
 
815
		long slideDefID = slide.getSlideDefinitionID();
816
		SlideDefinition slideDef = defs.getSlideDefinition(slideDefID);
817
 
818
		List<SlideFeatureDefinition> slideFeatureDefs = 
819
			slideDef.getSlideFeatureDefinitions();
820
 
821
		List<Feature> features = new ArrayList<Feature>();	
822
		for(SlideFeatureDefinition slideFeatureDef : slideFeatureDefs) {
823
			long featureDefinitionID = slideFeatureDef.getFeatureDefintionID();
215 naveen 824
			log.info("featureDefinitionID:" + featureDefinitionID);
204 naveen 825
 
215 naveen 826
			// Ignore skipped featured
827
			String[] skipvalue = 
828
				this.reqparams.get(featureDefinitionID + "_skip");
829
			log.info("skipvalue:" + Arrays.toString(skipvalue));
830
 
831
			if(skipvalue != null && skipvalue.length > 0 && 
832
					skipvalue[0].equals("on")) {
833
				continue;
834
			}
835
 
201 naveen 836
			String featureDefIDString = 
837
				new Long(featureDefinitionID).toString();
838
 
839
			Feature feature = new Feature(featureDefinitionID);
310 rajveer 840
 
201 naveen 841
			FeatureDefinition featureDef = defs.getFeatureDefinition(
842
					featureDefinitionID);
204 naveen 843
			log.info("featureDef:" + featureDef);
201 naveen 844
 
845
			ExpandedFeatureDefinition expFeatureDef = 
846
				new ExpandedFeatureDefinition(featureDef);
847
 
848
			ExpandedBulletDefinition expBulletDef = 
849
				expFeatureDef.getExpandedBulletDefinition();
850
 
310 rajveer 851
			boolean isBlank = false;
852
 
853
			// Check if feature has no bullets
854
			// Composite
855
			if(expBulletDef.isComposite()) {
856
				CompositeDefinition compositeDef = (CompositeDefinition)
857
					expBulletDef.getDatatypeDefinition(); 
858
 
859
				List<CompositePartDefinition> compositeParts = 
860
					compositeDef.getCompositePartDefinitions();
861
 
862
				boolean allPartsBlank = true;
863
				for(int j=0;j<compositeParts.size();j++) {
864
					String[] partValues = this.reqparams.get(
865
							featureDefIDString + "_" + (j + 1));
866
 
867
					if(partValues != null && partValues.length > 0) {
868
						allPartsBlank = false;
869
					}
870
				}
871
 
872
				isBlank = allPartsBlank;
873
			}
874
 
875
			// Enumerated and Primitive
876
			else {
877
				String[] bulletValues =	this.reqparams.get(featureDefIDString);
878
				if(bulletValues == null || bulletValues.length == 0) {
879
					isBlank = true;
880
				}
881
			}
882
 
883
			// Has no bullets
884
			if(isBlank) {
403 rajveer 885
 
886
				// Mandatory
887
				// or optional/recommended but allows blanck and not skipped
310 rajveer 888
				if(slideFeatureDef.getEditorialImportance() == 
480 rajveer 889
					EditorialImportance.MANDATORY || expFeatureDef.allowsBlank()) {
890
					// FFC
891
					FreeformContent featureFFC = 
892
						this.getFreeformContent(featureDefIDString);
893
 
894
					feature.setFreeformContent(featureFFC);
895
 
310 rajveer 896
					features.add(feature);
897
				}
898
 
899
				continue;
900
			}
901
 
902
			// Bullets
903
			List<Bullet> bullets = new ArrayList<Bullet>();
904
 
206 naveen 905
			// Collect unit
906
			String[] unitIDs = this.reqparams.get(featureDefIDString + "_unit");
907
			long unitID = 0L;
908
			if(unitIDs != null && unitIDs.length > 0) {
909
				unitID = Long.parseLong(unitIDs[0]);
910
			}
911
 
201 naveen 912
			// Composite
913
			if(expBulletDef.isComposite()) {
204 naveen 914
				log.info("Composite");
201 naveen 915
 
204 naveen 916
				CompositeDataObject compositeDataObject = 
917
					new CompositeDataObject();
918
 
919
				CompositeDefinition compositeDef = 
920
					(CompositeDefinition)expBulletDef.getDatatypeDefinition(); 
921
 
922
				List<CompositePartDefinition> compositeParts = 
923
					compositeDef.getCompositePartDefinitions();
924
 
925
				for(int j=0;j<compositeParts.size();j++) {
926
					String[] partValues = this.reqparams.get(
208 naveen 927
							featureDefIDString + "_" + (j + 1));
204 naveen 928
 
929
					if(partValues != null && partValues.length > 0) {
930
						compositeDataObject.addPrimitiveDataObject(
931
							new PrimitiveDataObject(partValues[0]));
932
					}
933
				}
934
 
935
				Bullet bullet = new Bullet(compositeDataObject);
936
 
206 naveen 937
				if(unitID != 0L) {
938
					bullet.setUnitID(unitID);
939
				}
940
 
204 naveen 941
				bullets.add(bullet);
201 naveen 942
			}
943
 
944
			// Enumerated
945
			else if(expBulletDef.isEnumerated()) {
204 naveen 946
				log.info("Enumerated");
310 rajveer 947
 
204 naveen 948
				String[] bulletValues = this.reqparams.get(featureDefIDString);
949
				log.info("bulletValues:" + Arrays.toString(bulletValues));
206 naveen 950
 
204 naveen 951
 
206 naveen 952
				for(int i=0;i<bulletValues.length;i++) {
953
					EnumDataObject enumDataObject = 
954
						new EnumDataObject(Long.parseLong(bulletValues[i]));
955
 
956
					Bullet bullet = new Bullet(enumDataObject);
957
 
958
					if(unitID != 0L) {
959
						bullet.setUnitID(unitID);
960
					}
961
 
962
					bullets.add(bullet);
963
				}
201 naveen 964
			}
965
 
966
			// Primitive
967
			else {
204 naveen 968
				log.info("Primitive");
310 rajveer 969
 
204 naveen 970
				String[] bulletValues = this.reqparams.get(featureDefIDString);
971
				log.info("bulletValues:" + Arrays.toString(bulletValues));
972
 
206 naveen 973
				for(int i=0;i<bulletValues.length;i++) {
974
					Bullet bullet = new Bullet(
975
							new PrimitiveDataObject(bulletValues[i]));
976
 
977
					if(unitID != 0L) {
978
						bullet.setUnitID(unitID);
979
					}
980
 
981
					bullets.add(bullet);
982
				}
201 naveen 983
			}
984
 
985
			feature.setBullets(bullets);
986
 
987
			// FFC
988
			FreeformContent featureFFC = 
989
				this.getFreeformContent(featureDefIDString);
990
 
991
			feature.setFreeformContent(featureFFC);
992
 
993
			features.add(feature);
994
		}
995
 
996
		return features;
997
	}
998
 
242 naveen 999
    // DELETE /entity/1000001
1000
    /**
1001
     * 
1002
     */
1003
    public String destroy() {
250 naveen 1004
    	log.info("#### EntityController.destroy ####");
242 naveen 1005
 
1006
    	long entityID = Long.parseLong(this.getId());
1007
    	log.info("entityID:" + entityID);
1008
 
1051 rajveer 1009
    	if(!UserManager.getUserManager().canDelete(getUsername(), entityID)){
1010
    		addActionError("You do not have rights to delete an entity");
1011
    		return "success";
1012
		}
1013
 
242 naveen 1014
		// Store
1015
		try {
250 naveen 1016
	    	CreationUtils.deleteEntity(entityID);
242 naveen 1017
		} catch (Exception e) {
1018
			log.error(CreationUtils.getStackTrace(e));
1019
			this.setErrorString(CreationUtils.getStackTrace(e));
1020
			return "fatal";
1021
		}
1022
        addActionMessage("Entity deleted successfully");
1023
        return "success";
1024
    }
201 naveen 1025
	/**
1026
     * 
1027
     * @param ID
1028
     * @return
1029
     */
1030
    private FreeformContent getFreeformContent(String ID) {
450 rajveer 1031
 
1032
 
201 naveen 1033
		FreeformContent ffc = new FreeformContent();
1034
		String[] ffts = this.reqparams.get(ID + "_fft");
1035
		if(ffts != null) {
1036
			ffc.setFreeformTexts(Arrays.asList(ffts));
1037
		}
1038
 
450 rajveer 1039
    	System.out.println("String is " + ID);
1040
 
1041
    	StringTokenizer tokenizer = new StringTokenizer(ID,"_");
1042
    	if(tokenizer.nextToken().compareTo("slide") == 0  ){
1043
    		long slideId = Long.parseLong(tokenizer.nextToken());
1044
    		FreeformContent old_ffc = null;
1045
    		if(this.entity.getSlide(slideId) != null){
1046
    			old_ffc = this.entity.getSlide(slideId).getFreeformContent();
1047
    			if(old_ffc != null){
1051 rajveer 1048
    				ffc.setMedias(old_ffc.getMedias());    			
450 rajveer 1049
    			}
1050
    		}
1051
    	}
201 naveen 1052
 
1053
 
450 rajveer 1054
//		String[] imgRefs = this.reqparams.get(ID + "_image_references");
1055
//		if(imgRefs != null) {
1056
//			ffc.setMedia("image", Arrays.asList(imgRefs));
1057
//		}
1058
//		
1059
//		String[] youtubeRefs = 
1060
//			this.reqparams.get(ID + "_youtube_references");
1061
//		if(youtubeRefs != null) {
1062
//			ffc.setMedia("youtube", Arrays.asList(youtubeRefs));
1063
//		}
1064
 
201 naveen 1065
		log.info("ffc:" + ffc);
1066
		return ffc;
1067
	}
213 naveen 1068
 
1069
 
1070
    /**
1071
     * 
1072
     * @param slideDefinitionID
1073
     * @return
1074
     */
1075
	public ExpandedSlide getChildSlide(long slideDefinitionID) {
242 naveen 1076
		if(this.expSlide == null) {
1077
			return null;
1078
		}
1079
 
213 naveen 1080
		return this.getChildSlide(this.expSlide, slideDefinitionID);
1081
	}
1082
 
1083
 
1084
    /**
1085
     * 
1086
     * @param expSlide
1087
     * @param slideDefinitionID
1088
     * @return
1089
     */
1090
	public ExpandedSlide getChildSlide(ExpandedSlide expSlide, 
1091
			long slideDefinitionID) {
1092
 
1093
		List<ExpandedSlide> childrenSlides = 
1094
			expSlide.getExpandedChildrenSlides();
1095
 
1096
		ExpandedSlide resultSlide = null;
1097
 
1098
		if(childrenSlides != null) {
1099
			for(ExpandedSlide childSlide : childrenSlides) {
1100
				if(childSlide.getSlideDefinitionID() == slideDefinitionID) {
1101
					return childSlide;
1102
				}
1103
 
1104
				resultSlide = this.getChildSlide(childSlide, slideDefinitionID);
1105
				if(resultSlide == null) {
1106
					continue;
1107
				}
1108
				else {
1109
					break;
1110
				}
1111
			}
1112
		}
1113
 
1114
		return resultSlide;
1115
	}
201 naveen 1116
 
1117
	/**
162 naveen 1118
	 * @return the entities
1119
	 */
516 rajveer 1120
	public Map<Long, List<Entity>> getEntitiesByCategory() {
1121
		return catEntities;
1122
	}
1123
 
1051 rajveer 1124
		/**
739 chandransh 1125
	 * Inquires about items in the IN_PROCESS state with the Catalog service and
1126
	 * creates those entities which do not exist in the CMS already.
1127
	 * 
1128
	 * @return A List of entities fetched from the catalog.
1129
	 */
1130
	private void createEntitiesForItemsInProcess(){
6894 amit.gupta 1131
		//Do once in every hour
7099 amit.gupta 1132
		if (new Date().getTime() - lastEntityCreation.getTime() > 20*60*1000) {
6894 amit.gupta 1133
			try {
1134
				CatalogClient csc = new CatalogClient();
1135
				in.shop2020.model.v1.catalog.CatalogService.Client iclient = csc.getClient();
1136
				List<Item> items = iclient.getAllItemsByStatus(status.IN_PROCESS);
1137
				for(Item item: items){
1138
					long entityID = item.getCatalogItemId();
1139
					if(!this.entitiesState.containsKey(entityID)){
1140
						log.info("#### Going to add the entity with id: ####" + entityID);
1141
						Entity entity = new Entity(entityID, -1);
1142
						entity.setBrand(item.getBrand());
1143
						entity.setModelNumber(item.getModelNumber() + " (" + item.getProductGroup() + ")");
1144
						entity.setModelName((item.getModelName()==null) ? "" : item.getModelName());
1145
						EntityState entityState = new EntityState(entityID, -1, UserManager.getUserManager().getAdminName());
1146
						entityState.setBrand(item.getBrand());
1147
						entityState.setModelNumber(item.getModelNumber() + " (" + item.getProductGroup() + ")");
1148
						entityState.setModelName((item.getModelName()==null) ? "" : item.getModelName());
1149
						CreationUtils.createEntity(entity, entityState);
1150
					}else
1151
						log.info("###Everything went all right and we got an entity");
1152
				}
1153
			} catch (Exception e) {
1154
				e.printStackTrace();
739 chandransh 1155
			}
6894 amit.gupta 1156
			lastEntityCreation = new Date();
739 chandransh 1157
		}
1158
	}
250 naveen 1159
 
162 naveen 1160
    /**
1161
	 * @return the entities
1162
	 */
1163
	public ExpandedEntity getEntity() {
1164
		return expEntity;
1165
	}
1166
 
198 naveen 1167
    /**
1168
	 * @return the current slide to edit
1169
	 */
1170
	public ExpandedSlideDefinition getExpandedSlideDefinition() {
1171
		return expSlideDef;
1172
	}
213 naveen 1173
 
1174
	/**
1175
	 * 
1176
	 * @param slideDefID
1177
	 * @return
1178
	 */
1179
	public ExpandedSlideDefinition getExpandedSlideDefinition(long slideDefID) {
1180
		try {
1181
			return defs.getExpandedSlideDefinition(slideDefID);
1182
		} catch (Exception e) {
1183
			return null;
1184
		}
1185
	}
162 naveen 1186
 
1187
	/**
1188
     * 
1189
     * @param id
1190
     */
1191
    public void setId(String id) {
1192
        this.id = id;
1193
    }
1194
 
1195
    /**
1196
     * 
1197
     */
1198
    public String getId() {
1199
    	return this.id;
1200
    }
1201
 
198 naveen 1202
	/**
1203
	 * @return the firstSlideID
1204
	 */
213 naveen 1205
	public long getFirstSlideDefID() {
1206
		return firstSlideDefID;
198 naveen 1207
	}
1208
 
448 rajveer 1209
	public String getCategoriesTree()  throws Exception {
1210
		Map<String, String> cats = new HashMap<String, String>();
1211
 
1051 rajveer 1212
		List<Category> children = defs.getChildrenCategories(Catalog.getInstance().getRootCategory().getID());
448 rajveer 1213
		for(Category child : children) {
1214
			cats.put(new Long(child.getID()).toString(), child.getLabel());
1215
		}
1216
		return "";
1217
	}
1218
 
198 naveen 1219
	public Map<String, String> getCategories() throws Exception {
1220
		Map<String, String> cats = new HashMap<String, String>();
1221
 
1051 rajveer 1222
		List<Category> children = defs.getChildrenCategories(Catalog.getInstance().getRootCategory().getID());
198 naveen 1223
		for(Category child : children) {
1224
			cats.put(new Long(child.getID()).toString(), child.getLabel());
1225
		}
1226
 
1227
		return cats;
1228
	}
448 rajveer 1229
 
2424 rajveer 1230
 
1231
	public Map<String, String> getLeafcategories() throws Exception {
1232
		Map<String, String> cats = new HashMap<String, String>();
1233
		List<Category> children = defs.getChildrenCategories(Catalog.getInstance().getRootCategory().getID());
1234
		for(Category child : children) {
1235
			if(child.getChildrenCategory() == null){
1236
				cats.put(new Long(child.getID()).toString(), child.getLabel());	
1237
			}else{
1238
				List<Category> grandChildren = defs.getChildrenCategories(child.getID());
1239
				for(Category grandChild: grandChildren){
1240
					if(grandChild.getChildrenCategory() == null){
1241
						cats.put(new Long(grandChild.getID()).toString(), grandChild.getLabel());
1242
					}
1243
				}
1244
			}
1245
 
1246
		}
1247
 
1248
		return cats;
1249
	}
1250
 
448 rajveer 1251
	public Map<String, String> getSubcategories() throws Exception {
1252
		Map<String, String> cats = new HashMap<String, String>();
1253
 
1051 rajveer 1254
		List<Category> children = defs.getChildrenCategories(Catalog.getInstance().getRootCategory().getID());
448 rajveer 1255
		for(Category child : children) {
1256
			List<Category> grandChildren = defs.getChildrenCategories(child.getID());
1257
			for(Category grandchild : grandChildren) {
1258
				cats.put(new Long(grandchild.getID()).toString(), grandchild.getLabel());
1259
			}
1260
		}
1261
 
1262
		return cats;
1263
	}
1264
	public String getCategoriesString() throws Exception {
1265
		StringBuilder categoryString = new StringBuilder();
1266
 
1267
		categoryString.append("<label for=\"basecategory\">Category: </label>");
1268
		categoryString.append("\n");
1269
		categoryString.append("<select id=\"basecategory\"  name=\"basecategory\" >"); 
1270
		categoryString.append("\n");
1051 rajveer 1271
		List<Category> children = defs.getChildrenCategories(Catalog.getInstance().getRootCategory().getID());
448 rajveer 1272
		for(Category child : children) {
1273
			categoryString.append("<option value=\"" + new Long(child.getID()).toString() + "\">" + child.getLabel() + "</option>");
1274
			categoryString.append("\n");
1275
		}
1276
		categoryString.append("</select>");
1277
		categoryString.append("\n");
1278
		categoryString.append("<br/>");
1279
		categoryString.append("\n");
1280
 
1281
		categoryString.append("<label for=\"category\">Sub Category: </label>");
1282
		categoryString.append("\n");
1283
		categoryString.append("<select id=\"category\" name=\"category\" >");
1284
		categoryString.append("\n");
1285
		for(Category child : children) {
1286
			List<Category> grandChildren = defs.getChildrenCategories(child.getID());
1287
			for(Category grandchild : grandChildren) {
1288
				categoryString.append("<option value=\"" + new Long(grandchild.getID()).toString() + "\" selected=\"$selected\" class = \""+ child.getID()  + "\">" + grandchild.getLabel() + "</option>");
1289
				categoryString.append("\n");
1290
			}
1291
		}
1292
		categoryString.append("</select>");
1293
		categoryString.append("\n");
1294
		categoryString.append("<br/>");
1295
 
1296
		return categoryString.toString();
1297
 
1298
	}
1299
 
1300
 
250 naveen 1301
	/**
1302
	 * 
1303
	 * @return
1304
	 * @throws Exception
1305
	 */
198 naveen 1306
	public String getBrandString() throws Exception {
1307
		List<String> brands = this.getBrands();
1308
		return "\"" + StringUtils.join(brands, "\", \"") + "\"";
1309
	}
1310
 
250 naveen 1311
	/**
1312
	 * 
1313
	 * @return
1314
	 * @throws Exception
1315
	 */
198 naveen 1316
	public List<String> getBrands() throws Exception {
1051 rajveer 1317
 
198 naveen 1318
		List<String> brands = new ArrayList<String>();
1319
 
1320
		List<ExpandedBullet> expBullets;
1321
 
1051 rajveer 1322
		expBullets = CreationUtils.getLearnedBullets(Utils.BRAND_FEATURE_DEFINITION_ID);
1323
		if(expBullets!=null){
1324
			for(ExpandedBullet expBullet : expBullets) {
1325
				brands.add(expBullet.getValue());
1326
			}
198 naveen 1327
		}
1328
		return brands;
1329
	}
1330
 
1331
 
245 naveen 1332
	/**
198 naveen 1333
	 * @param exception the exception to set
1334
	 */
1335
	public void setException(Exception exception) {
1336
		this.exception = exception;
1337
	}
1338
 
1339
	/**
1340
	 * @return the exception
1341
	 */
1342
	public Exception getException() {
1343
		return exception;
1344
	}
1345
 
1346
	/**
1347
	 * @param errorString the exceptionString to set
1348
	 */
1349
	public void setErrorString(String errorString) {
1350
		this.errorString = errorString;
1351
	}
1352
 
1353
	/**
1354
	 * @return the exceptionString
1355
	 */
1356
	public String getErrorString() {
1357
		return errorString;
1358
	}
1359
 
1360
	/**
1361
	 * @param newCurrentSlideID the newCurrentSlideID to set
1362
	 */
1363
	public void setNewCurrentSlideDefinitionID(
1364
			long newCurrentSlideDefinitionID) {
1365
		this.newCurrentSlideDefinitionID = newCurrentSlideDefinitionID;
1366
	}
1367
 
1368
	/**
1369
	 * @return the newCurrentSlideID
1370
	 */
1371
	public long getNewCurrentSlideDefinitionID() {
1372
		return newCurrentSlideDefinitionID;
1373
	}
1374
 
1051 rajveer 1375
 
198 naveen 1376
	/**
1377
	 * @param newNextSlideID the newNextSlideID to set
1378
	 */
1379
	public void setNewNextSlideDefinitionID(long newNextSlideDefinitionID) {
1380
		this.newNextSlideDefinitionID = newNextSlideDefinitionID;
1381
	}
1382
 
1383
	/**
1384
	 * @return the newNextSlideID
1385
	 */
1386
	public long getNewNextSlideDefinitionID() {
1387
		return newNextSlideDefinitionID;
1388
	}
1389
 
1390
	/**
1391
	 * @param expSlide the expSlide to set
1392
	 */
1393
	public void setExpandedSlide(ExpandedSlide expSlide) {
1394
		this.expSlide = expSlide;
1395
	}
1396
 
1397
	/**
1398
	 * @return the expSlide
1399
	 */
1400
	public ExpandedSlide getExpandedSlide() {
1401
		return expSlide;
1402
	}
1403
 
1404
	/**
1405
	 * @param newPrevSlideDefinitionID the newPrevSlideDefinitionID to set
1406
	 */
1407
	public void setNewPrevSlideDefinitionID(long newPrevSlideDefinitionID) {
1408
		this.newPrevSlideDefinitionID = newPrevSlideDefinitionID;
1409
	}
1410
 
1411
	/**
1412
	 * @return the newPrevSlideDefinitionID
1413
	 */
1414
	public long getNewPrevSlideDefinitionID() {
1415
		return newPrevSlideDefinitionID;
1416
	}
1417
 
1418
	/**
162 naveen 1419
	 * 
200 naveen 1420
	 * @param featureDefinitionID
1421
	 * @return
1422
	 * @throws Exception
1423
	 */
1424
	public String getLearnedValuesString(long featureDefinitionID) 
1425
			throws Exception {
206 naveen 1426
		List<String> learnedValues = this.getLearnedValues(featureDefinitionID);
6012 amit.gupta 1427
		List<String> escapedLearnedValues = new ArrayList<String>();
206 naveen 1428
		if(learnedValues == null) {
1429
			return "";
1430
		}
6012 amit.gupta 1431
		for(String learnedVal : learnedValues){
1432
			escapedLearnedValues.add(StringEscapeUtils.escapeJavaScript(learnedVal));
1433
		}
206 naveen 1434
 
6012 amit.gupta 1435
		return "\"" + StringUtils.join(escapedLearnedValues, "\", \"") + "\"";
206 naveen 1436
	}
1437
 
1438
	/**
1439
	 * 
1440
	 * @param featureDefinitionID
1441
	 * @return
1442
	 * @throws Exception
1443
	 */
1444
	public List<String> getLearnedValues(long featureDefinitionID) 
1445
			throws Exception {
1051 rajveer 1446
		List<ExpandedBullet> learnedBullets = CreationUtils.getLearnedBullets(featureDefinitionID);
200 naveen 1447
 
201 naveen 1448
		if(learnedBullets == null) {
206 naveen 1449
			return null;
201 naveen 1450
		}
1451
 
200 naveen 1452
		List<String> learnedValues = new ArrayList<String>();
1453
		for(ExpandedBullet expBullet : learnedBullets) {
1454
			learnedValues.add(expBullet.getValue());
1455
		}
1456
 
206 naveen 1457
		return learnedValues;
200 naveen 1458
	}
1459
 
1460
	/**
1461
	 * 
201 naveen 1462
	 * @param featureDefinitionID
1463
	 * @return
1464
	 * @throws Exception
1465
	 */
1466
	public ExpandedFeature getFeature(long featureDefinitionID) 
1467
		throws Exception {
215 naveen 1468
		if(this.expSlide != null) {
1152 rajveer 1469
			Feature feature = CreationUtils.getFeature(this.expSlide, featureDefinitionID);
215 naveen 1470
 
1471
			if(feature == null) {
1472
				return null;
1473
			}
1474
			return new ExpandedFeature(feature);
201 naveen 1475
		}
1476
 
215 naveen 1477
		return null;
201 naveen 1478
	}
1479
 
1480
	/**
1481
	 * 
162 naveen 1482
	 * @return
1483
	 */
208 naveen 1484
	public String getEditorialImportance() {
242 naveen 1485
		// Now that slides are selected upfront
1486
		return "Mandatory";
1487
 
1488
		/*
208 naveen 1489
		long catID = this.expEntity.getCategoryID();
1490
		long slideDefID = this.getNewCurrentSlideDefinitionID();
1491
 
1492
		try {
1493
			List<CategorySlideDefinition> catSlideDefs =
1494
				defs.getCategorySlideDefinitions(catID);
1495
			for(CategorySlideDefinition catSlideDef : catSlideDefs) {
1496
				if(catSlideDef.getSlideDefintionID() == slideDefID) {
1497
					return catSlideDef.getEditorialImportance().toString();
1498
				}
1499
			}
1500
		} catch (Exception e) {
1501
			log.error(CreationUtils.getStackTrace(e));
1502
    	}
1503
 
1504
		return "";
242 naveen 1505
		*/
162 naveen 1506
	}
210 naveen 1507
 
242 naveen 1508
 
1051 rajveer 1509
 
242 naveen 1510
	/**
1511
	 * 
1512
	 * @return
1513
	 */
1514
	public String getCategoryName(long categoryID) {
739 chandransh 1515
		if(categoryID==-1)
1516
			return "Yet to be Asssigned";
242 naveen 1517
		try {
1051 rajveer 1518
			return this.defs.getCategory(categoryID).getLabel();
1519
 
242 naveen 1520
		} catch (Exception e) {
1521
			return null;
1522
		}
1523
	}
250 naveen 1524
 
1525
	/**
1526
	 * 
1527
	 * @return
1528
	 */
1529
	public List<String[]> getSlides() {
1530
		try {
1531
			long entityID = Long.parseLong(this.getId());
1051 rajveer 1532
			List<Long> slideDefIDs = CreationUtils.getEntity(entityID).getSlideSequence();
250 naveen 1533
 
1534
			List<String[]> slideData = new ArrayList<String[]>();
1051 rajveer 1535
 
250 naveen 1536
			for(Long slideDefID : slideDefIDs) {
1537
				SlideDefinition slideDef = defs.getSlideDefinition(slideDefID);
1538
				String label = slideDef.getLabel();
1539
 
1540
				slideData.add(new String[] {slideDefID.toString(), label});
1541
			}
1542
 
1543
			return slideData;
1544
		} catch (Exception e) {
1545
			log.error(CreationUtils.getStackTrace(e));
1546
 
1547
			return null;
1548
		}
1549
	} 
4129 mandeep.dh 1550
 
1551
	public String getCatalogDetails() {
1552
	    try {
1553
	        CatalogClient catalogServiceClient = new CatalogClient();
1554
            items = catalogServiceClient.getClient().getItemsByCatalogId(entityId);
5945 mandeep.dh 1555
        } catch (CatalogServiceException e) {
4129 mandeep.dh 1556
            log.error("Could not fetch item for entity id: " + entityId, e);
1557
        } catch (TException e) {
1558
            log.error("Could not fetch item for enitty id: " + entityId, e);
1559
        }
1560
 
1561
        return "catalog-details";
1562
	}
1563
 
1564
	public String convertDate(long date) {
1565
	    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM, yyyy hh:mm a");
1566
	    return sdf.format(new Date(date));
1567
	}
1568
 
250 naveen 1569
    /**
1570
     * 
1571
     * @param entityID
1572
     * @return
1573
     * @throws Exception 
1574
     */
1575
    private ExpandedEntity getExpandedEntity(long entityID) throws Exception {
1576
    	if(this.expEntity == null) {
1577
    		if(this.entity == null) {
1051 rajveer 1578
    			this.entity = CreationUtils.getEntity(entityID);
250 naveen 1579
    		}
1051 rajveer 1580
    		this.expEntity = new ExpandedEntity(entity);
250 naveen 1581
    	}
1582
 
1583
    	return this.expEntity;
1584
    }
1585
 
1051 rajveer 1586
    public Map<Long, EntityState> getEntitiesState(){
1587
    	return this.entitiesState;
1588
    }
1589
 
1590
    public Set<String> getAllUserNames(){
1591
    	return UserManager.getUserManager().getAllUserNames();
1592
    }
1593
 
1594
    public Collection<User> getAllUsers(){
1595
    	return UserManager.getUserManager().getAllUsers();
1596
    }
1597
 
2095 rajveer 1598
    public List<Long> getInconsistentEntities(){
1599
        return this.inconsistentEntities;
1600
    }
4129 mandeep.dh 1601
 
1602
    /**
1603
     * @return the entityId
1604
     */
1605
    public long getEntityId() {
1606
        return entityId;
1607
    }
1608
 
1609
    /**
1610
     * @param entityId the entityId to set
1611
     */
1612
    public void setEntityId(long entityId) {
1613
        this.entityId = entityId;
1614
    }
1615
 
1616
    /**
1617
     * @return the items
1618
     */
1619
    public List<Item> getItems() {
1620
        return items;
1621
    }
1622
 
1623
    /**
1624
     * @param items the items to set
1625
     */
1626
    public void setItems(List<Item> items) {
1627
        this.items = items;
1628
    }
5180 amit.gupta 1629
 
1630
    public String getJavascriptSafe(String string){
1631
    	return StringEscapeUtils.escapeJavaScript(string);
1632
    }
6877 amit.gupta 1633
 
1634
    public String getFormattedDate(Date date){
1635
    	return sdf.format(date);
1636
    }
7958 amit.gupta 1637
 
8025 amit.gupta 1638
    public Map<Object, Double> getScores() throws Exception{
7971 amit.gupta 1639
    	Long entityId = Long.parseLong(this.id);
8025 amit.gupta 1640
    	Map<Object,Double> finalScores = new HashMap<Object, Double>();
7965 amit.gupta 1641
    	EntityState es = CreationUtils.getEntityState(entityId);
7966 amit.gupta 1642
    	if (es!=null && es.getCategoryID() > 0) {
8659 amit.gupta 1643
	    	if((es.getCategoryID() == 10006l) && !es.getStatus().equals(EntityStatus.UNASSIGNED)){
7966 amit.gupta 1644
		    	NewCMP cmp = new NewCMP(Arrays.asList(this.entity));
1645
				try {
8024 amit.gupta 1646
					//get Scores on the basis of evaluation
7975 amit.gupta 1647
					Map<Long, Map<Long, Double>> scoreMap = cmp.getSlideScores(0);
8025 amit.gupta 1648
					finalScores = new HashMap<Object, Double>(scoreMap.get(entityId));
1649
					finalScores.put(130054L, cmp.getFinalScores(scoreMap).get(entityId)/10);
8024 amit.gupta 1650
					finalScores.put("actual", cmp.getFinalScores(scoreMap).get(entityId)/10);
7966 amit.gupta 1651
 
8024 amit.gupta 1652
					Map<Long, Double> customScores = CreationUtils.getCustomSlideComparisonScores(entityId);
1653
					if(customScores != null){
1654
						//now update scoreMap if any of the slide score has been customised
1655
						for (Map.Entry<Long, Double> entry : scoreMap.get(entityId).entrySet()){
1656
							if(customScores.containsKey(entry.getKey())){
1657
								entry.setValue(customScores.get(entry.getKey()));
1658
							}
1659
						}
1660
						finalScores.put("custom", cmp.getFinalScores(scoreMap).get(entityId)/10);
1661
					}
1662
 
7966 amit.gupta 1663
				} catch (Exception e) {
1664
					System.out.println("Some error occurred");
1665
					e.printStackTrace();
1666
				}
1667
				DecimalFormat oneDForm = new DecimalFormat("#.#");
8025 amit.gupta 1668
				for(Map.Entry<Object, Double> scoreEntry : finalScores.entrySet()){
7966 amit.gupta 1669
					scoreEntry.setValue(Double.valueOf(oneDForm.format(scoreEntry.getValue())));
1670
				}
8024 amit.gupta 1671
				return finalScores;
7966 amit.gupta 1672
	    	} else {
8025 amit.gupta 1673
	    		return new HashMap<Object, Double>();
7966 amit.gupta 1674
	    	}
7963 amit.gupta 1675
    	} else {
8025 amit.gupta 1676
    		return new HashMap<Object, Double>();
7963 amit.gupta 1677
    	}
7958 amit.gupta 1678
    }
1679
 
11873 amit.gupta 1680
    public String getEntityNoSlashURL(){
1681
    	return EntityUtils.getEntityNoSlashURL(expEntity);
1682
    }
1051 rajveer 1683
 
1684
}
448 rajveer 1685