Subversion Repositories SmartDukaan

Rev

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
 
206 naveen 436
			// Collect unit
437
			String[] unitIDs = this.reqparams.get(featureDefIDString + "_unit");
438
			long unitID = 0L;
439
			if(unitIDs != null && unitIDs.length > 0) {
440
				unitID = Long.parseLong(unitIDs[0]);
441
			}
442
 
201 naveen 443
			// Composite
444
			if(expBulletDef.isComposite()) {
204 naveen 445
				log.info("Composite");
201 naveen 446
 
204 naveen 447
				CompositeDataObject compositeDataObject = 
448
					new CompositeDataObject();
449
 
450
				CompositeDefinition compositeDef = 
451
					(CompositeDefinition)expBulletDef.getDatatypeDefinition(); 
452
 
453
				List<CompositePartDefinition> compositeParts = 
454
					compositeDef.getCompositePartDefinitions();
455
 
456
				for(int j=0;j<compositeParts.size();j++) {
457
					String[] partValues = this.reqparams.get(
458
							featureDefIDString + "_" + j);
459
 
460
					if(partValues != null && partValues.length > 0) {
461
						compositeDataObject.addPrimitiveDataObject(
462
							new PrimitiveDataObject(partValues[0]));
463
					}
464
				}
465
 
466
				Bullet bullet = new Bullet(compositeDataObject);
467
 
206 naveen 468
				if(unitID != 0L) {
469
					bullet.setUnitID(unitID);
470
				}
471
 
204 naveen 472
				bullets.add(bullet);
201 naveen 473
			}
474
 
475
			// Enumerated
476
			else if(expBulletDef.isEnumerated()) {
204 naveen 477
				log.info("Enumerated");
478
 
479
				String[] bulletValues = this.reqparams.get(featureDefIDString);
480
				if(bulletValues == null || bulletValues.length == 0) {
481
					continue;
482
				}
201 naveen 483
 
204 naveen 484
				log.info("bulletValues:" + Arrays.toString(bulletValues));
206 naveen 485
 
204 naveen 486
 
206 naveen 487
				for(int i=0;i<bulletValues.length;i++) {
488
					EnumDataObject enumDataObject = 
489
						new EnumDataObject(Long.parseLong(bulletValues[i]));
490
 
491
					Bullet bullet = new Bullet(enumDataObject);
492
 
493
					if(unitID != 0L) {
494
						bullet.setUnitID(unitID);
495
					}
496
 
497
					bullets.add(bullet);
498
				}
201 naveen 499
			}
500
 
501
			// Primitive
502
			else {
204 naveen 503
				log.info("Primitive");
504
 
505
				String[] bulletValues = this.reqparams.get(featureDefIDString);
506
				if(bulletValues == null || bulletValues.length == 0) {
507
					continue;
508
				}
509
 
510
				log.info("bulletValues:" + Arrays.toString(bulletValues));
511
 
206 naveen 512
				for(int i=0;i<bulletValues.length;i++) {
513
					Bullet bullet = new Bullet(
514
							new PrimitiveDataObject(bulletValues[i]));
515
 
516
					if(unitID != 0L) {
517
						bullet.setUnitID(unitID);
518
					}
519
 
520
					bullets.add(bullet);
521
				}
201 naveen 522
			}
523
 
524
			feature.setBullets(bullets);
525
 
526
			// FFC
527
			FreeformContent featureFFC = 
528
				this.getFreeformContent(featureDefIDString);
529
 
530
			feature.setFreeformContent(featureFFC);
531
 
532
			features.add(feature);
533
		}
534
 
535
		return features;
536
	}
537
 
538
	/**
539
     * 
540
     * @param ID
541
     * @return
542
     */
543
    private FreeformContent getFreeformContent(String ID) {
544
		FreeformContent ffc = new FreeformContent();
545
		String[] ffts = this.reqparams.get(ID + "_fft");
546
		if(ffts != null) {
547
			ffc.setFreeformTexts(Arrays.asList(ffts));
548
		}
549
 
550
		String[] imgURLs = this.reqparams.get(ID + "_image_url");
551
		if(imgURLs != null) {
552
			ffc.setImageURLs(Arrays.asList(imgURLs));
553
		}
554
 
555
		String[] youtubeURLs = 
556
			this.reqparams.get(ID + "_youtube_url");
557
		if(youtubeURLs != null) {
558
			ffc.setYoutubeURLs(Arrays.asList(youtubeURLs));
559
		}
560
 
561
		log.info("ffc:" + ffc);
562
		return ffc;
563
	}
564
 
565
	/**
162 naveen 566
	 * @return the entities
567
	 */
568
	public Collection<Entity> getEntities() {
569
		return entities;
570
	}
571
 
572
    /**
573
	 * @return the entities
574
	 */
575
	public ExpandedEntity getEntity() {
576
		return expEntity;
577
	}
578
 
198 naveen 579
    /**
580
	 * @return the current slide to edit
581
	 */
582
	public ExpandedSlideDefinition getExpandedSlideDefinition() {
583
		return expSlideDef;
584
	}
162 naveen 585
 
586
	/**
587
     * 
588
     * @param id
589
     */
590
    public void setId(String id) {
591
        this.id = id;
592
    }
593
 
594
    /**
595
     * 
596
     */
597
    public String getId() {
598
    	return this.id;
599
    }
600
 
198 naveen 601
	/**
602
	 * @return the firstSlideID
603
	 */
604
	public long getFirstSlideID() {
605
		return firstSlideID;
606
	}
607
 
162 naveen 608
	@Override
609
	public void setParameters(Map<String, String[]> reqmap) {
610
		log.info("setParameters:" + reqmap);
611
 
612
		this.reqparams = reqmap;
613
	}
614
 
198 naveen 615
	public Map<String, String> getCategories() throws Exception {
616
		DefinitionsContainer defs = this.getDefinitionsContainer();
617
		Map<String, String> cats = new HashMap<String, String>();
618
 
619
		List<Category> children = defs.getChildrenCategories(10001L);
620
		for(Category child : children) {
621
			cats.put(new Long(child.getID()).toString(), child.getLabel());
622
		}
623
 
624
		return cats;
625
	}
626
 
627
	public String getBrandString() throws Exception {
628
		List<String> brands = this.getBrands();
629
		return "\"" + StringUtils.join(brands, "\", \"") + "\"";
630
	}
631
 
632
	public List<String> getBrands() throws Exception {
633
		EntityContainer ents = this.getEntityContainer();
634
		List<String> brands = new ArrayList<String>();
635
 
636
		List<ExpandedBullet> expBullets;
637
 
638
		expBullets = ents.getLearnedBullets(
639
				Utils.BRAND_FEATURE_DEFINITION_ID);
640
 
641
		for(ExpandedBullet expBullet : expBullets) {
642
			brands.add(expBullet.getValue());
643
		}
644
 
645
		return brands;
646
	}
647
 
648
    private EntityContainer getEntityContainer() {
649
    	if(this.ents == null) {
650
    		this.ents = new EntityContainer();
651
    	}
652
 
653
	    return this.ents;
654
    }
655
 
656
    private DefinitionsContainer getDefinitionsContainer() {
657
    	if(this.defs == null) {
658
    		this.defs = new DefinitionsContainer();
659
    	}
660
 
661
	    return this.defs;
662
    }
663
 
664
    /**
665
     * 
666
     * @param entity
667
     * @throws Exception
668
     */
669
	private void addEntity(Entity entity) throws Exception {			
670
		EntityContainer entContainer = new EntityContainer();
671
 
672
		entContainer.addEntity(entity);
673
 
674
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
675
				"entities" + ".ser");
676
 
677
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
678
			"entitiesbycategory" + ".ser";
679
 
680
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
681
				entitiesbycategoryDBFile);
682
	}
683
 
684
    /**
685
     * 
686
     * @param entity
687
     * @throws Exception
688
     */
689
	private void updateEntity(Entity entity) throws Exception {			
690
		EntityContainer entContainer = new EntityContainer();
691
 
692
		entContainer.updateEntity(entity);
693
 
694
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
695
				"entities" + ".ser");
696
 
697
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
698
			"entitiesbycategory" + ".ser";
699
 
700
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
701
				entitiesbycategoryDBFile);
702
	}
703
 
162 naveen 704
	/**
198 naveen 705
	 * @param exception the exception to set
706
	 */
707
	public void setException(Exception exception) {
708
		this.exception = exception;
709
	}
710
 
711
	/**
712
	 * @return the exception
713
	 */
714
	public Exception getException() {
715
		return exception;
716
	}
717
 
718
	/**
719
	 * @param errorString the exceptionString to set
720
	 */
721
	public void setErrorString(String errorString) {
722
		this.errorString = errorString;
723
	}
724
 
725
	/**
726
	 * @return the exceptionString
727
	 */
728
	public String getErrorString() {
729
		return errorString;
730
	}
731
 
732
	/**
733
	 * @param newCurrentSlideID the newCurrentSlideID to set
734
	 */
735
	public void setNewCurrentSlideDefinitionID(
736
			long newCurrentSlideDefinitionID) {
737
		this.newCurrentSlideDefinitionID = newCurrentSlideDefinitionID;
738
	}
739
 
740
	/**
741
	 * @return the newCurrentSlideID
742
	 */
743
	public long getNewCurrentSlideDefinitionID() {
744
		return newCurrentSlideDefinitionID;
745
	}
746
 
747
	/**
748
	 * @param newNextSlideID the newNextSlideID to set
749
	 */
750
	public void setNewNextSlideDefinitionID(long newNextSlideDefinitionID) {
751
		this.newNextSlideDefinitionID = newNextSlideDefinitionID;
752
	}
753
 
754
	/**
755
	 * @return the newNextSlideID
756
	 */
757
	public long getNewNextSlideDefinitionID() {
758
		return newNextSlideDefinitionID;
759
	}
760
 
761
	/**
762
	 * @param expSlide the expSlide to set
763
	 */
764
	public void setExpandedSlide(ExpandedSlide expSlide) {
765
		this.expSlide = expSlide;
766
	}
767
 
768
	/**
769
	 * @return the expSlide
770
	 */
771
	public ExpandedSlide getExpandedSlide() {
772
		return expSlide;
773
	}
774
 
775
	/**
776
	 * @param newPrevSlideDefinitionID the newPrevSlideDefinitionID to set
777
	 */
778
	public void setNewPrevSlideDefinitionID(long newPrevSlideDefinitionID) {
779
		this.newPrevSlideDefinitionID = newPrevSlideDefinitionID;
780
	}
781
 
782
	/**
783
	 * @return the newPrevSlideDefinitionID
784
	 */
785
	public long getNewPrevSlideDefinitionID() {
786
		return newPrevSlideDefinitionID;
787
	}
788
 
789
	/**
162 naveen 790
	 * 
200 naveen 791
	 * @param featureDefinitionID
792
	 * @return
793
	 * @throws Exception
794
	 */
795
	public String getLearnedValuesString(long featureDefinitionID) 
796
			throws Exception {
206 naveen 797
		List<String> learnedValues = this.getLearnedValues(featureDefinitionID);
798
		if(learnedValues == null) {
799
			return "";
800
		}
801
 
802
		return "\"" + StringUtils.join(learnedValues, "\", \"") + "\"";
803
	}
804
 
805
	/**
806
	 * 
807
	 * @param featureDefinitionID
808
	 * @return
809
	 * @throws Exception
810
	 */
811
	public List<String> getLearnedValues(long featureDefinitionID) 
812
			throws Exception {
200 naveen 813
		EntityContainer ents = this.getEntityContainer();
814
		List<ExpandedBullet> learnedBullets = 
815
			ents.getLearnedBullets(featureDefinitionID);
816
 
201 naveen 817
		if(learnedBullets == null) {
206 naveen 818
			return null;
201 naveen 819
		}
820
 
200 naveen 821
		List<String> learnedValues = new ArrayList<String>();
822
		for(ExpandedBullet expBullet : learnedBullets) {
823
			learnedValues.add(expBullet.getValue());
824
		}
825
 
206 naveen 826
		return learnedValues;
200 naveen 827
	}
828
 
829
	/**
830
	 * 
201 naveen 831
	 * @param featureDefinitionID
832
	 * @return
833
	 * @throws Exception
834
	 */
835
	public ExpandedFeature getFeature(long featureDefinitionID) 
836
		throws Exception {
837
		EntityContainer ents = this.getEntityContainer();
838
 
839
		Feature feature = ents.getFeature(this.expSlide, featureDefinitionID);
840
		if(feature == null) {
841
			return null;
842
		}
843
 
844
		return new ExpandedFeature(feature);
845
	}
846
 
847
	/**
848
	 * 
162 naveen 849
	 * @param aThrowable
850
	 * @return
851
	 */
852
	private String getStackTrace(Throwable aThrowable) {
853
	    final Writer result = new StringWriter();
854
	    final PrintWriter printWriter = new PrintWriter(result);
855
	    aThrowable.printStackTrace(printWriter);
856
	    return result.toString();
857
	}
858
 
859
}