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
 
3
import java.io.PrintWriter;
4
import java.io.StringWriter;
5
import java.io.Writer;
198 naveen 6
import java.util.ArrayList;
7
import java.util.Arrays;
162 naveen 8
import java.util.Collection;
198 naveen 9
import java.util.HashMap;
10
import java.util.List;
162 naveen 11
import java.util.Map;
12
 
201 naveen 13
import in.shop2020.metamodel.core.Bullet;
204 naveen 14
import in.shop2020.metamodel.core.CompositeDataObject;
162 naveen 15
import in.shop2020.metamodel.core.Entity;
204 naveen 16
import in.shop2020.metamodel.core.EnumDataObject;
201 naveen 17
import in.shop2020.metamodel.core.Feature;
198 naveen 18
import in.shop2020.metamodel.core.FreeformContent;
201 naveen 19
import in.shop2020.metamodel.core.PrimitiveDataObject;
198 naveen 20
import in.shop2020.metamodel.core.Slide;
21
import in.shop2020.metamodel.definitions.Category;
204 naveen 22
import in.shop2020.metamodel.definitions.CompositeDefinition;
23
import in.shop2020.metamodel.definitions.CompositePartDefinition;
198 naveen 24
import in.shop2020.metamodel.definitions.DefinitionsContainer;
162 naveen 25
import in.shop2020.metamodel.definitions.EntityContainer;
201 naveen 26
import in.shop2020.metamodel.definitions.FeatureDefinition;
27
import in.shop2020.metamodel.definitions.SlideDefinition;
28
import in.shop2020.metamodel.definitions.SlideFeatureDefinition;
198 naveen 29
import in.shop2020.metamodel.util.ExpandedBullet;
201 naveen 30
import in.shop2020.metamodel.util.ExpandedBulletDefinition;
162 naveen 31
import in.shop2020.metamodel.util.ExpandedEntity;
201 naveen 32
import in.shop2020.metamodel.util.ExpandedFeature;
33
import in.shop2020.metamodel.util.ExpandedFeatureDefinition;
198 naveen 34
import in.shop2020.metamodel.util.ExpandedSlide;
35
import in.shop2020.metamodel.util.ExpandedSlideDefinition;
162 naveen 36
import in.shop2020.metamodel.util.SequenceGenerator;
37
import in.shop2020.util.DBUtils;
38
import in.shop2020.util.Utils;
39
 
40
import org.apache.juli.logging.Log;
41
import org.apache.juli.logging.LogFactory;
42
import org.apache.struts2.rest.DefaultHttpHeaders;
43
import org.apache.struts2.rest.HttpHeaders;
44
 
45
import org.apache.struts2.convention.annotation.Result;
46
import org.apache.struts2.convention.annotation.Results;
47
import org.apache.struts2.interceptor.ParameterAware;
48
 
198 naveen 49
import org.apache.commons.lang.StringUtils;
50
 
162 naveen 51
@Results({
52
    @Result(name="success", type="redirectAction", 
198 naveen 53
    		params = {"actionName" , "entity"}),
54
    @Result(name="redirect", location="${url}", type="redirect")
162 naveen 55
})
56
public class EntityController implements ParameterAware {
57
 
58
	/**
59
	 * 
60
	 */
61
	private static Log log = LogFactory.getLog(EntityController.class);
62
 
63
	/**
64
	 * 
65
	 */
66
	private String id;
67
 
68
	private ExpandedEntity expEntity;
69
 
70
	private Collection<Entity> entities;
71
 
72
	private Map<String, String[]> reqparams;
73
 
198 naveen 74
	private EntityContainer ents;
75
 
76
	private DefinitionsContainer defs;
77
 
78
	private long firstSlideID;
79
 
80
	private ExpandedSlideDefinition expSlideDef;
81
 
82
	private ExpandedSlide expSlide;
83
 
84
	private String redirectURL;
85
 
86
	private Exception exception;
87
 
88
	private String errorString;
89
 
90
	private long newCurrentSlideDefinitionID;
91
 
92
	private long newNextSlideDefinitionID;
93
 
94
	private long newPrevSlideDefinitionID;
95
 
96
 
162 naveen 97
    // GET /entity
98
    public HttpHeaders index() {
99
    	log.info("EntityController.index");
100
 
101
    	EntityContainer ents = new EntityContainer();
102
 
103
    	try {
104
			this.entities = ents.getEntities().values();
105
		} catch (Exception e) {
106
			log.error(this.getStackTrace(e));
198 naveen 107
			this.setErrorString(this.getStackTrace(e));
108
			return new DefaultHttpHeaders("fatal");
162 naveen 109
		}
110
 
111
        return new DefaultHttpHeaders("index")
112
            .disableCaching();
113
    }
114
 
115
    // GET /entity
116
    public String create() {
117
    	log.info("EntityController.create");
118
 
119
		SequenceGenerator sg;
120
		try {
121
			sg = SequenceGenerator.getInstance();
122
			long entityID = sg.getNextSequence(SequenceGenerator.ENTITY);
123
 
124
			String categoryID = this.reqparams.get("category")[0];
125
			Entity entity = new Entity(entityID, Long.parseLong(categoryID));
126
 
127
			entity.setBrand(this.reqparams.get("brand")[0]);
128
			entity.setModelName(this.reqparams.get("modelname")[0]);
129
			entity.setModelNumber(this.reqparams.get("modelnumber")[0]);
130
 
198 naveen 131
			this.addEntity(entity);
162 naveen 132
 
133
	    	this.setId(new Long(entityID).toString());
134
		} catch (Exception e) {
135
			log.error(this.getStackTrace(e));
198 naveen 136
			this.setErrorString(this.getStackTrace(e));
137
			return "fatal";
162 naveen 138
		}
198 naveen 139
 
140
		this.redirectURL = "entity/" + this.getId() + "/edit";
162 naveen 141
 
198 naveen 142
		return "redirect";
162 naveen 143
    }
144
 
145
    // GET /entity/1/edit
146
    public String edit() {
147
    	log.info("EntityController.edit");
148
 
149
    	long entityID = Long.parseLong(this.getId());
150
    	log.info("entityID:" + entityID);
151
 
198 naveen 152
    	EntityContainer ents = this.getEntityContainer();
153
    	DefinitionsContainer defs = this.getDefinitionsContainer();
162 naveen 154
 
155
    	try {
156
			this.expEntity = ents.getExpandedEntity(entityID);
198 naveen 157
			//log.info("this.expEntity:" + this.expEntity);
158
 
159
			long catID = this.expEntity.getCategoryID();
160
			List<Long> slideIDs = defs.getCategorySlideSequence(catID);
161
 
162
			this.firstSlideID = slideIDs.get(0);
163
 
162 naveen 164
		} catch (Exception e) {
165
			log.error(this.getStackTrace(e));
198 naveen 166
			this.setErrorString(this.getStackTrace(e));
167
			return "fatal";
162 naveen 168
		}
169
 
170
        return "edit";
171
    }
198 naveen 172
 
173
 
174
    public String getUrl() {
175
    	return this.redirectURL;
176
    }
162 naveen 177
 
178
    // GET /entity/new
179
    public String editNew() {
180
    	log.info("EntityController.editNew");
181
 
182
        return "editNew";
183
    }
184
 
185
    // GET /entity/1
186
    public String update() {
187
    	log.info("EntityController.update");
188
 
198 naveen 189
    	long entityID = Long.parseLong(this.getId());
190
    	log.info("entityID:" + entityID);
191
 
192
    	EntityContainer ents = this.getEntityContainer();
193
    	DefinitionsContainer defs = this.getDefinitionsContainer();
194
 
195
    	try {
196
			this.expEntity = ents.getExpandedEntity(entityID);
197
			//log.info("this.expEntity:" + this.expEntity);
198
 
199
			long currentSlideID = 0L;
200
			long nextSlideID = 0L;
201
			long prevSlideID = 0L;
202
 
203
			String[] currentslideIDStrings = 
204
				this.reqparams.get("currentslideID");
205
 
206
			String[] nextslideIDStrings = this.reqparams.get("nextslideID");
207
 
208
			String[] prevslideIDStrings = this.reqparams.get("prevslideID");
209
 
210
			// Current Slide ID
211
			if(currentslideIDStrings != null && 
212
					currentslideIDStrings.length > 0) {
213
				try {
214
					currentSlideID = Long.parseLong(currentslideIDStrings[0]);
215
				}
216
				catch (NumberFormatException nfe) {}
217
			}
218
 
219
			// Next Slide ID
220
			if(nextslideIDStrings != null && 
221
					nextslideIDStrings.length > 0) {
222
				try {
223
					nextSlideID = Long.parseLong(nextslideIDStrings[0]);
224
				}
225
				catch (NumberFormatException nfe) {}
226
			}
227
 
228
			// Prev Slide ID
229
			if(prevslideIDStrings != null && 
230
					prevslideIDStrings.length > 0) {
231
				try {
232
					prevSlideID = Long.parseLong(prevslideIDStrings[0]);
233
				}
234
				catch (NumberFormatException nfe) {}
235
			}
236
			log.info("currentSlideID:" + currentSlideID);
237
			log.info("nextSlideID:" + nextSlideID);
238
			log.info("prevSlideID:" + prevSlideID);
239
 
240
			// Save on basic info page
241
			if (this.reqparams.containsKey("save") && currentSlideID == 0L) {
242
				log.info("Save");
243
 
244
				Entity entity = this.expEntity.getEntity();
245
 
246
				String categoryID = this.reqparams.get("category")[0];
247
 
248
				entity.setCategoryID(Long.parseLong(categoryID));
249
				entity.setBrand(this.reqparams.get("brand")[0]);
250
				entity.setModelName(this.reqparams.get("modelname")[0]);
251
				entity.setModelNumber(this.reqparams.get("modelnumber")[0]);
252
 
253
				this.updateEntity(entity);
254
 
255
				return "success";
256
			}
257
 
258
			long catID = this.expEntity.getCategoryID();
259
			List<Long> slideIDs = defs.getCategorySlideSequence(catID);
260
			log.info("slideIDs:"+slideIDs);
261
 
262
			// Save or Next or Prev - When editing a slide
263
			int currentSlideIndex = 0;
264
			if(currentSlideID != 0L) {
265
				currentSlideIndex = slideIDs.indexOf(new Long(currentSlideID));
266
				log.info("currentSlideIndex:" + currentSlideIndex);
267
 
268
				Entity entity = this.expEntity.getEntity();
269
 
270
				// Update Entity Record
271
				Slide currentSlide = entity.getSlide(currentSlideID);
272
 
273
				// Slide free-form content
201 naveen 274
				FreeformContent slideFFC = this.getFreeformContent("slide");
198 naveen 275
				log.info("slideFFC:" + slideFFC);
276
 
277
				currentSlide.setFreeformContent(slideFFC);
278
				//log.info("currentSlide:" + currentSlide);
279
 
201 naveen 280
				// Collect Feature bullets
281
				List<Feature> features = this.createFeatures(currentSlide);
282
				log.info("features:" + features);
283
 
284
				currentSlide.setFeatures(features);
285
 
198 naveen 286
				// Store
287
				this.updateEntity(entity);
288
				//log.info("entity:" + entity);
289
			}
290
 
291
			boolean showAnotherSlide = false;
292
 
293
			// -2 : Not set
294
			// -1 : Not found
295
			int newCurrentIndex = -2;  
296
			int newNextIndex = -2;
297
			int newPrevIndex = -2;
298
 
299
			// Next
300
			if(this.reqparams.containsKey("next") && nextSlideID != 0L) {
301
				log.info("Next");
302
 
303
				// Decide on next slide ID
304
				int nextSlideIndex = slideIDs.indexOf(new Long(nextSlideID));
305
				log.info("nextSlideIndex:"+nextSlideIndex);
306
 
307
				// New Current
308
				if (nextSlideIndex == -1) {
309
					this.setErrorString("Invalid Next slide ID " + nextSlideID);
310
					return "fatal";
311
				}
312
 
313
				newCurrentIndex = nextSlideIndex;
314
 
315
				// New Next
316
				if (newCurrentIndex != slideIDs.size()-1) {
317
					newNextIndex = newCurrentIndex + 1;
318
				}
319
 
320
				// New Prev.
321
				if(currentSlideID != 0L) {
322
					newPrevIndex = currentSlideIndex;
323
				}
324
 
325
				showAnotherSlide = true;
326
			}
327
 
328
			// Prev
329
			if(this.reqparams.containsKey("prev") && prevSlideID != 0L) {
330
				log.info("Prev");
331
 
332
				// Decide on prev slide ID
333
				int prevSlideIndex = slideIDs.indexOf(new Long(prevSlideID));
334
				log.info("prevSlideIndex:" + prevSlideIndex);
335
 
336
				if (prevSlideIndex == -1) {
337
					this.setErrorString("Invalid Prev slide ID " + prevSlideID);
338
					return "fatal";
339
				}
340
 
341
				// New Next
342
				if(currentSlideID != 0L) {
343
					newNextIndex = currentSlideIndex;
344
				}
345
 
346
				// New Current
347
				newCurrentIndex = prevSlideIndex;
348
 
349
				// New Prev.
350
				if (newCurrentIndex != 0) {
351
					newPrevIndex = newCurrentIndex - 1;
352
				}
353
 
354
				showAnotherSlide = true;
355
			}
356
 
357
			if(showAnotherSlide) {
358
 				log.info("newCurrentIndex:"+newCurrentIndex);
359
				log.info("newNextIndex:"+newNextIndex);
360
				log.info("newPrevIndex:"+newPrevIndex);
361
 
362
				if(newCurrentIndex != -2) {
363
					this.setNewCurrentSlideDefinitionID(
364
							slideIDs.get(newCurrentIndex).longValue());
365
				}
366
 
367
				if(newNextIndex != -2) {
368
					this.setNewNextSlideDefinitionID(
369
							slideIDs.get(newNextIndex).longValue());
370
				}
371
 
372
				if(newPrevIndex != -2) {
373
					this.setNewPrevSlideDefinitionID(
374
							slideIDs.get(newPrevIndex).longValue());
375
				}
376
 
377
				// Current Slide Definition
378
				this.expSlideDef = defs.getExpandedSlideDefinition(
379
						this.getNewCurrentSlideDefinitionID());
380
 
381
				// Current Slide Instance
382
				this.expSlide = this.expEntity.getExpandedSlide(
383
						this.getNewCurrentSlideDefinitionID());
204 naveen 384
				//log.info("this.expSlide:" + this.expSlide);
198 naveen 385
 
386
				return "editSlide";
387
			}
388
		}
389
    	catch (Exception e) {
390
			log.error(this.getStackTrace(e));
391
			this.setErrorString(this.getStackTrace(e));
392
			return "fatal";
393
    	}
394
 
395
        return "success";
162 naveen 396
    }
397
 
398
    /**
201 naveen 399
     * 
400
     * @param slide
401
     * @return
402
     * @throws Exception
403
     */
404
    private List<Feature> createFeatures(Slide slide) throws Exception {
405
 
406
		long slideDefID = slide.getSlideDefinitionID();
407
		SlideDefinition slideDef = defs.getSlideDefinition(slideDefID);
408
 
409
		List<SlideFeatureDefinition> slideFeatureDefs = 
410
			slideDef.getSlideFeatureDefinitions();
411
 
412
		DefinitionsContainer defs = this.getDefinitionsContainer();
413
 
414
		List<Feature> features = new ArrayList<Feature>();	
415
		for(SlideFeatureDefinition slideFeatureDef : slideFeatureDefs) {
416
			long featureDefinitionID = slideFeatureDef.getFeatureDefintionID();
204 naveen 417
			log.info("featureDefinitionID:"+featureDefinitionID);
418
 
201 naveen 419
			String featureDefIDString = 
420
				new Long(featureDefinitionID).toString();
421
 
422
			Feature feature = new Feature(featureDefinitionID);
423
 
424
			// Bullets
425
			List<Bullet> bullets = new ArrayList<Bullet>();
426
			FeatureDefinition featureDef = defs.getFeatureDefinition(
427
					featureDefinitionID);
204 naveen 428
			log.info("featureDef:" + featureDef);
201 naveen 429
 
430
			ExpandedFeatureDefinition expFeatureDef = 
431
				new ExpandedFeatureDefinition(featureDef);
432
 
433
			ExpandedBulletDefinition expBulletDef = 
434
				expFeatureDef.getExpandedBulletDefinition();
435
 
436
			// Composite
437
			if(expBulletDef.isComposite()) {
204 naveen 438
				log.info("Composite");
201 naveen 439
 
204 naveen 440
				CompositeDataObject compositeDataObject = 
441
					new CompositeDataObject();
442
 
443
				CompositeDefinition compositeDef = 
444
					(CompositeDefinition)expBulletDef.getDatatypeDefinition(); 
445
 
446
				List<CompositePartDefinition> compositeParts = 
447
					compositeDef.getCompositePartDefinitions();
448
 
449
				for(int j=0;j<compositeParts.size();j++) {
450
					String[] partValues = this.reqparams.get(
451
							featureDefIDString + "_" + j);
452
 
453
					if(partValues != null && partValues.length > 0) {
454
						compositeDataObject.addPrimitiveDataObject(
455
							new PrimitiveDataObject(partValues[0]));
456
					}
457
				}
458
 
459
				Bullet bullet = new Bullet(compositeDataObject);
460
 
461
				bullets.add(bullet);
201 naveen 462
			}
463
 
464
			// Enumerated
465
			else if(expBulletDef.isEnumerated()) {
204 naveen 466
				log.info("Enumerated");
467
 
468
				String[] bulletValues = this.reqparams.get(featureDefIDString);
469
				if(bulletValues == null || bulletValues.length == 0) {
470
					continue;
471
				}
201 naveen 472
 
204 naveen 473
				log.info("bulletValues:" + Arrays.toString(bulletValues));
474
 
475
				EnumDataObject enumDataObject = 
476
					new EnumDataObject(Long.parseLong(bulletValues[0]));
477
 
478
				Bullet bullet = new Bullet(enumDataObject);
479
 
480
				bullets.add(bullet);
201 naveen 481
			}
482
 
483
			// Primitive
484
			else {
204 naveen 485
				log.info("Primitive");
486
 
487
				String[] bulletValues = this.reqparams.get(featureDefIDString);
488
				if(bulletValues == null || bulletValues.length == 0) {
489
					continue;
490
				}
491
 
492
				log.info("bulletValues:" + Arrays.toString(bulletValues));
493
 
201 naveen 494
				Bullet bullet = new Bullet(
495
						new PrimitiveDataObject(bulletValues[0]));
496
 
497
				bullets.add(bullet);
498
			}
499
 
500
			feature.setBullets(bullets);
501
 
502
			// FFC
503
			FreeformContent featureFFC = 
504
				this.getFreeformContent(featureDefIDString);
505
 
506
			feature.setFreeformContent(featureFFC);
507
 
508
			features.add(feature);
509
		}
510
 
511
		return features;
512
	}
513
 
514
	/**
515
     * 
516
     * @param ID
517
     * @return
518
     */
519
    private FreeformContent getFreeformContent(String ID) {
520
		FreeformContent ffc = new FreeformContent();
521
		String[] ffts = this.reqparams.get(ID + "_fft");
522
		if(ffts != null) {
523
			ffc.setFreeformTexts(Arrays.asList(ffts));
524
		}
525
 
526
		String[] imgURLs = this.reqparams.get(ID + "_image_url");
527
		if(imgURLs != null) {
528
			ffc.setImageURLs(Arrays.asList(imgURLs));
529
		}
530
 
531
		String[] youtubeURLs = 
532
			this.reqparams.get(ID + "_youtube_url");
533
		if(youtubeURLs != null) {
534
			ffc.setYoutubeURLs(Arrays.asList(youtubeURLs));
535
		}
536
 
537
		log.info("ffc:" + ffc);
538
		return ffc;
539
	}
540
 
541
	/**
162 naveen 542
	 * @return the entities
543
	 */
544
	public Collection<Entity> getEntities() {
545
		return entities;
546
	}
547
 
548
    /**
549
	 * @return the entities
550
	 */
551
	public ExpandedEntity getEntity() {
552
		return expEntity;
553
	}
554
 
198 naveen 555
    /**
556
	 * @return the current slide to edit
557
	 */
558
	public ExpandedSlideDefinition getExpandedSlideDefinition() {
559
		return expSlideDef;
560
	}
162 naveen 561
 
562
	/**
563
     * 
564
     * @param id
565
     */
566
    public void setId(String id) {
567
        this.id = id;
568
    }
569
 
570
    /**
571
     * 
572
     */
573
    public String getId() {
574
    	return this.id;
575
    }
576
 
198 naveen 577
	/**
578
	 * @return the firstSlideID
579
	 */
580
	public long getFirstSlideID() {
581
		return firstSlideID;
582
	}
583
 
162 naveen 584
	@Override
585
	public void setParameters(Map<String, String[]> reqmap) {
586
		log.info("setParameters:" + reqmap);
587
 
588
		this.reqparams = reqmap;
589
	}
590
 
198 naveen 591
	public Map<String, String> getCategories() throws Exception {
592
		DefinitionsContainer defs = this.getDefinitionsContainer();
593
		Map<String, String> cats = new HashMap<String, String>();
594
 
595
		List<Category> children = defs.getChildrenCategories(10001L);
596
		for(Category child : children) {
597
			cats.put(new Long(child.getID()).toString(), child.getLabel());
598
		}
599
 
600
		return cats;
601
	}
602
 
603
	public String getBrandString() throws Exception {
604
		List<String> brands = this.getBrands();
605
		return "\"" + StringUtils.join(brands, "\", \"") + "\"";
606
	}
607
 
608
	public List<String> getBrands() throws Exception {
609
		EntityContainer ents = this.getEntityContainer();
610
		List<String> brands = new ArrayList<String>();
611
 
612
		List<ExpandedBullet> expBullets;
613
 
614
		expBullets = ents.getLearnedBullets(
615
				Utils.BRAND_FEATURE_DEFINITION_ID);
616
 
617
		for(ExpandedBullet expBullet : expBullets) {
618
			brands.add(expBullet.getValue());
619
		}
620
 
621
		return brands;
622
	}
623
 
624
    private EntityContainer getEntityContainer() {
625
    	if(this.ents == null) {
626
    		this.ents = new EntityContainer();
627
    	}
628
 
629
	    return this.ents;
630
    }
631
 
632
    private DefinitionsContainer getDefinitionsContainer() {
633
    	if(this.defs == null) {
634
    		this.defs = new DefinitionsContainer();
635
    	}
636
 
637
	    return this.defs;
638
    }
639
 
640
    /**
641
     * 
642
     * @param entity
643
     * @throws Exception
644
     */
645
	private void addEntity(Entity entity) throws Exception {			
646
		EntityContainer entContainer = new EntityContainer();
647
 
648
		entContainer.addEntity(entity);
649
 
650
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
651
				"entities" + ".ser");
652
 
653
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
654
			"entitiesbycategory" + ".ser";
655
 
656
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
657
				entitiesbycategoryDBFile);
658
	}
659
 
660
    /**
661
     * 
662
     * @param entity
663
     * @throws Exception
664
     */
665
	private void updateEntity(Entity entity) throws Exception {			
666
		EntityContainer entContainer = new EntityContainer();
667
 
668
		entContainer.updateEntity(entity);
669
 
670
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
671
				"entities" + ".ser");
672
 
673
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
674
			"entitiesbycategory" + ".ser";
675
 
676
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
677
				entitiesbycategoryDBFile);
678
	}
679
 
162 naveen 680
	/**
198 naveen 681
	 * @param exception the exception to set
682
	 */
683
	public void setException(Exception exception) {
684
		this.exception = exception;
685
	}
686
 
687
	/**
688
	 * @return the exception
689
	 */
690
	public Exception getException() {
691
		return exception;
692
	}
693
 
694
	/**
695
	 * @param errorString the exceptionString to set
696
	 */
697
	public void setErrorString(String errorString) {
698
		this.errorString = errorString;
699
	}
700
 
701
	/**
702
	 * @return the exceptionString
703
	 */
704
	public String getErrorString() {
705
		return errorString;
706
	}
707
 
708
	/**
709
	 * @param newCurrentSlideID the newCurrentSlideID to set
710
	 */
711
	public void setNewCurrentSlideDefinitionID(
712
			long newCurrentSlideDefinitionID) {
713
		this.newCurrentSlideDefinitionID = newCurrentSlideDefinitionID;
714
	}
715
 
716
	/**
717
	 * @return the newCurrentSlideID
718
	 */
719
	public long getNewCurrentSlideDefinitionID() {
720
		return newCurrentSlideDefinitionID;
721
	}
722
 
723
	/**
724
	 * @param newNextSlideID the newNextSlideID to set
725
	 */
726
	public void setNewNextSlideDefinitionID(long newNextSlideDefinitionID) {
727
		this.newNextSlideDefinitionID = newNextSlideDefinitionID;
728
	}
729
 
730
	/**
731
	 * @return the newNextSlideID
732
	 */
733
	public long getNewNextSlideDefinitionID() {
734
		return newNextSlideDefinitionID;
735
	}
736
 
737
	/**
738
	 * @param expSlide the expSlide to set
739
	 */
740
	public void setExpandedSlide(ExpandedSlide expSlide) {
741
		this.expSlide = expSlide;
742
	}
743
 
744
	/**
745
	 * @return the expSlide
746
	 */
747
	public ExpandedSlide getExpandedSlide() {
748
		return expSlide;
749
	}
750
 
751
	/**
752
	 * @param newPrevSlideDefinitionID the newPrevSlideDefinitionID to set
753
	 */
754
	public void setNewPrevSlideDefinitionID(long newPrevSlideDefinitionID) {
755
		this.newPrevSlideDefinitionID = newPrevSlideDefinitionID;
756
	}
757
 
758
	/**
759
	 * @return the newPrevSlideDefinitionID
760
	 */
761
	public long getNewPrevSlideDefinitionID() {
762
		return newPrevSlideDefinitionID;
763
	}
764
 
765
	/**
162 naveen 766
	 * 
200 naveen 767
	 * @param featureDefinitionID
768
	 * @return
769
	 * @throws Exception
770
	 */
771
	public String getLearnedValuesString(long featureDefinitionID) 
772
			throws Exception {
773
		EntityContainer ents = this.getEntityContainer();
774
		List<ExpandedBullet> learnedBullets = 
775
			ents.getLearnedBullets(featureDefinitionID);
776
 
201 naveen 777
		if(learnedBullets == null) {
778
			return "";
779
		}
780
 
200 naveen 781
		List<String> learnedValues = new ArrayList<String>();
782
		for(ExpandedBullet expBullet : learnedBullets) {
783
			learnedValues.add(expBullet.getValue());
784
		}
785
 
786
		return "\"" + StringUtils.join(learnedValues, "\", \"") + "\"";
787
	}
788
 
789
	/**
790
	 * 
201 naveen 791
	 * @param featureDefinitionID
792
	 * @return
793
	 * @throws Exception
794
	 */
795
	public ExpandedFeature getFeature(long featureDefinitionID) 
796
		throws Exception {
797
		EntityContainer ents = this.getEntityContainer();
798
 
799
		Feature feature = ents.getFeature(this.expSlide, featureDefinitionID);
800
		if(feature == null) {
801
			return null;
802
		}
803
 
804
		return new ExpandedFeature(feature);
805
	}
806
 
807
	/**
808
	 * 
162 naveen 809
	 * @param aThrowable
810
	 * @return
811
	 */
812
	private String getStackTrace(Throwable aThrowable) {
813
	    final Writer result = new StringWriter();
814
	    final PrintWriter printWriter = new PrintWriter(result);
815
	    aThrowable.printStackTrace(printWriter);
816
	    return result.toString();
817
	}
818
 
819
}