Subversion Repositories SmartDukaan

Rev

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