Subversion Repositories SmartDukaan

Rev

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