Subversion Repositories SmartDukaan

Rev

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