Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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