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
 
208 naveen 3
import in.shop2020.creation.util.CreationUtils;
201 naveen 4
import in.shop2020.metamodel.core.Bullet;
204 naveen 5
import in.shop2020.metamodel.core.CompositeDataObject;
162 naveen 6
import in.shop2020.metamodel.core.Entity;
204 naveen 7
import in.shop2020.metamodel.core.EnumDataObject;
201 naveen 8
import in.shop2020.metamodel.core.Feature;
198 naveen 9
import in.shop2020.metamodel.core.FreeformContent;
201 naveen 10
import in.shop2020.metamodel.core.PrimitiveDataObject;
198 naveen 11
import in.shop2020.metamodel.core.Slide;
12
import in.shop2020.metamodel.definitions.Category;
208 naveen 13
import in.shop2020.metamodel.definitions.CategorySlideDefinition;
204 naveen 14
import in.shop2020.metamodel.definitions.CompositeDefinition;
15
import in.shop2020.metamodel.definitions.CompositePartDefinition;
198 naveen 16
import in.shop2020.metamodel.definitions.DefinitionsContainer;
162 naveen 17
import in.shop2020.metamodel.definitions.EntityContainer;
201 naveen 18
import in.shop2020.metamodel.definitions.FeatureDefinition;
19
import in.shop2020.metamodel.definitions.SlideDefinition;
20
import in.shop2020.metamodel.definitions.SlideFeatureDefinition;
198 naveen 21
import in.shop2020.metamodel.util.ExpandedBullet;
201 naveen 22
import in.shop2020.metamodel.util.ExpandedBulletDefinition;
162 naveen 23
import in.shop2020.metamodel.util.ExpandedEntity;
201 naveen 24
import in.shop2020.metamodel.util.ExpandedFeature;
25
import in.shop2020.metamodel.util.ExpandedFeatureDefinition;
198 naveen 26
import in.shop2020.metamodel.util.ExpandedSlide;
27
import in.shop2020.metamodel.util.ExpandedSlideDefinition;
162 naveen 28
import in.shop2020.metamodel.util.SequenceGenerator;
29
import in.shop2020.util.DBUtils;
30
import in.shop2020.util.Utils;
31
 
208 naveen 32
import java.util.ArrayList;
33
import java.util.Arrays;
34
import java.util.Collection;
35
import java.util.HashMap;
36
import java.util.List;
37
import java.util.Map;
38
 
39
import org.apache.commons.lang.StringUtils;
162 naveen 40
import org.apache.juli.logging.Log;
41
import org.apache.juli.logging.LogFactory;
42
import org.apache.struts2.convention.annotation.Result;
43
import org.apache.struts2.convention.annotation.Results;
44
import org.apache.struts2.interceptor.ParameterAware;
208 naveen 45
import org.apache.struts2.rest.DefaultHttpHeaders;
46
import org.apache.struts2.rest.HttpHeaders;
162 naveen 47
 
48
@Results({
49
    @Result(name="success", type="redirectAction", 
198 naveen 50
    		params = {"actionName" , "entity"}),
51
    @Result(name="redirect", location="${url}", type="redirect")
162 naveen 52
})
53
public class EntityController implements ParameterAware {
54
 
55
	/**
56
	 * 
57
	 */
58
	private static Log log = LogFactory.getLog(EntityController.class);
59
 
60
	/**
61
	 * 
62
	 */
63
	private String id;
64
 
65
	private ExpandedEntity expEntity;
66
 
67
	private Collection<Entity> entities;
68
 
69
	private Map<String, String[]> reqparams;
70
 
198 naveen 71
	private EntityContainer ents;
72
 
73
	private DefinitionsContainer defs;
74
 
213 naveen 75
	private long firstSlideDefID;
198 naveen 76
 
77
	private ExpandedSlideDefinition expSlideDef;
78
 
79
	private ExpandedSlide expSlide;
80
 
81
	private String redirectURL;
82
 
83
	private Exception exception;
84
 
85
	private String errorString;
86
 
87
	private long newCurrentSlideDefinitionID;
88
 
89
	private long newNextSlideDefinitionID;
90
 
91
	private long newPrevSlideDefinitionID;
92
 
93
 
162 naveen 94
    // GET /entity
95
    public HttpHeaders index() {
96
    	log.info("EntityController.index");
97
 
98
    	EntityContainer ents = new EntityContainer();
99
 
100
    	try {
101
			this.entities = ents.getEntities().values();
102
		} catch (Exception e) {
208 naveen 103
			log.error(CreationUtils.getStackTrace(e));
104
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 105
			return new DefaultHttpHeaders("fatal");
162 naveen 106
		}
107
 
208 naveen 108
        return new DefaultHttpHeaders("index").disableCaching();
162 naveen 109
    }
110
 
111
    // GET /entity
112
    public String create() {
113
    	log.info("EntityController.create");
114
 
115
		SequenceGenerator sg;
116
		try {
117
			sg = SequenceGenerator.getInstance();
118
			long entityID = sg.getNextSequence(SequenceGenerator.ENTITY);
119
 
120
			String categoryID = this.reqparams.get("category")[0];
121
			Entity entity = new Entity(entityID, Long.parseLong(categoryID));
122
 
123
			entity.setBrand(this.reqparams.get("brand")[0]);
124
			entity.setModelName(this.reqparams.get("modelname")[0]);
125
			entity.setModelNumber(this.reqparams.get("modelnumber")[0]);
126
 
198 naveen 127
			this.addEntity(entity);
162 naveen 128
 
129
	    	this.setId(new Long(entityID).toString());
130
		} catch (Exception e) {
208 naveen 131
			log.error(CreationUtils.getStackTrace(e));
132
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 133
			return "fatal";
162 naveen 134
		}
198 naveen 135
 
136
		this.redirectURL = "entity/" + this.getId() + "/edit";
162 naveen 137
 
198 naveen 138
		return "redirect";
162 naveen 139
    }
140
 
141
    // GET /entity/1/edit
142
    public String edit() {
143
    	log.info("EntityController.edit");
144
 
145
    	long entityID = Long.parseLong(this.getId());
146
    	log.info("entityID:" + entityID);
147
 
198 naveen 148
    	EntityContainer ents = this.getEntityContainer();
149
    	DefinitionsContainer defs = this.getDefinitionsContainer();
162 naveen 150
 
151
    	try {
152
			this.expEntity = ents.getExpandedEntity(entityID);
198 naveen 153
			//log.info("this.expEntity:" + this.expEntity);
154
 
155
			long catID = this.expEntity.getCategoryID();
213 naveen 156
			List<Long> slideDefIDs = defs.getCategorySlideSequence(catID);
198 naveen 157
 
213 naveen 158
			this.firstSlideDefID = slideDefIDs.get(0);
198 naveen 159
 
162 naveen 160
		} catch (Exception e) {
208 naveen 161
			log.error(CreationUtils.getStackTrace(e));
162
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 163
			return "fatal";
162 naveen 164
		}
165
 
166
        return "edit";
167
    }
198 naveen 168
 
169
 
170
    public String getUrl() {
171
    	return this.redirectURL;
172
    }
162 naveen 173
 
174
    // GET /entity/new
175
    public String editNew() {
176
    	log.info("EntityController.editNew");
177
 
178
        return "editNew";
179
    }
180
 
181
    // GET /entity/1
182
    public String update() {
183
    	log.info("EntityController.update");
184
 
198 naveen 185
    	long entityID = Long.parseLong(this.getId());
186
    	log.info("entityID:" + entityID);
187
 
188
    	EntityContainer ents = this.getEntityContainer();
189
    	DefinitionsContainer defs = this.getDefinitionsContainer();
190
 
191
    	try {
192
			this.expEntity = ents.getExpandedEntity(entityID);
193
			//log.info("this.expEntity:" + this.expEntity);
194
 
213 naveen 195
			long currentSlideDefID = 0L;
196
			long nextSlideDefID = 0L;
197
			long prevSlideDefID = 0L;
198 naveen 198
 
213 naveen 199
			String[] currentslideDefIDStrings = 
200
				this.reqparams.get("currentslideDefID");
198 naveen 201
 
213 naveen 202
			String[] nextslideDefIDStrings = 
203
				this.reqparams.get("nextslideDefID");
198 naveen 204
 
213 naveen 205
			String[] prevslideDefIDStrings = 
206
				this.reqparams.get("prevslideDefID");
198 naveen 207
 
208
			// Current Slide ID
213 naveen 209
			if(currentslideDefIDStrings != null && 
210
					currentslideDefIDStrings.length > 0) {
198 naveen 211
				try {
213 naveen 212
					currentSlideDefID = Long.parseLong(
213
							currentslideDefIDStrings[0]);
198 naveen 214
				}
215
				catch (NumberFormatException nfe) {}
216
			}
217
 
218
			// Next Slide ID
213 naveen 219
			if(nextslideDefIDStrings != null && 
220
					nextslideDefIDStrings.length > 0) {
198 naveen 221
				try {
213 naveen 222
					nextSlideDefID = Long.parseLong(nextslideDefIDStrings[0]);
198 naveen 223
				}
224
				catch (NumberFormatException nfe) {}
225
			}
226
 
227
			// Prev Slide ID
213 naveen 228
			if(prevslideDefIDStrings != null && 
229
					prevslideDefIDStrings.length > 0) {
198 naveen 230
				try {
213 naveen 231
					prevSlideDefID = Long.parseLong(prevslideDefIDStrings[0]);
198 naveen 232
				}
233
				catch (NumberFormatException nfe) {}
234
			}
213 naveen 235
			log.info("currentSlideDefID:" + currentSlideDefID);
236
			log.info("nextSlideDefID:" + nextSlideDefID);
237
			log.info("prevSlideDefID:" + prevSlideDefID);
198 naveen 238
 
239
			// Save on basic info page
213 naveen 240
			if (this.reqparams.containsKey("save") && currentSlideDefID == 0L) {
198 naveen 241
				log.info("Save");
242
 
243
				Entity entity = this.expEntity.getEntity();
244
 
245
				String categoryID = this.reqparams.get("category")[0];
246
 
247
				entity.setCategoryID(Long.parseLong(categoryID));
248
				entity.setBrand(this.reqparams.get("brand")[0]);
249
				entity.setModelName(this.reqparams.get("modelname")[0]);
250
				entity.setModelNumber(this.reqparams.get("modelnumber")[0]);
251
 
252
				this.updateEntity(entity);
253
 
254
				return "success";
255
			}
256
 
257
			long catID = this.expEntity.getCategoryID();
258
			List<Long> slideIDs = defs.getCategorySlideSequence(catID);
259
			log.info("slideIDs:"+slideIDs);
260
 
208 naveen 261
			boolean skip = false;
262
			if(this.reqparams.containsKey("skipprev") || 
263
					this.reqparams.containsKey("skipnext")) {
264
				skip = true;
265
			}
266
 
267
			boolean next = this.reqparams.containsKey("skipnext") || 
268
				this.reqparams.containsKey("next");
269
 
270
			boolean prev = this.reqparams.containsKey("skipprev") || 
271
			this.reqparams.containsKey("prev");
272
 
273
 
198 naveen 274
			// Save or Next or Prev - When editing a slide
275
			int currentSlideIndex = 0;
213 naveen 276
			currentSlideIndex = slideIDs.indexOf(new Long(currentSlideDefID));
208 naveen 277
			log.info("currentSlideIndex:" + currentSlideIndex);
198 naveen 278
 
213 naveen 279
			if(!skip && currentSlideDefID != 0L) {
198 naveen 280
				Entity entity = this.expEntity.getEntity();
281
 
213 naveen 282
				// Create new instance and override existing
283
				Slide currentSlide = this.createSlide(currentSlideDefID);
198 naveen 284
 
213 naveen 285
				entity.addSlide(currentSlide);
198 naveen 286
 
287
				// Store
288
				this.updateEntity(entity);
289
				//log.info("entity:" + entity);
290
			}
291
 
215 naveen 292
			// Skip will delete current slide from entity
293
			else if(skip && currentSlideDefID != 0L) {
294
				Entity entity = this.expEntity.getEntity();
295
				entity.removeSlide(currentSlideDefID);
296
 
297
				// Store
298
				this.updateEntity(entity);
299
				//log.info("entity:" + entity);
300
			}
301
 
198 naveen 302
			boolean showAnotherSlide = false;
303
 
304
			// -2 : Not set
305
			// -1 : Not found
306
			int newCurrentIndex = -2;  
307
			int newNextIndex = -2;
308
			int newPrevIndex = -2;
309
 
310
			// Next
213 naveen 311
			if(next && nextSlideDefID != 0L) {
198 naveen 312
				log.info("Next");
313
 
314
				// Decide on next slide ID
213 naveen 315
				int nextSlideIndex = slideIDs.indexOf(new Long(nextSlideDefID));
198 naveen 316
				log.info("nextSlideIndex:"+nextSlideIndex);
317
 
318
				// New Current
319
				if (nextSlideIndex == -1) {
213 naveen 320
					this.setErrorString("Invalid Next slide ID " + 
321
							nextSlideDefID);
198 naveen 322
					return "fatal";
323
				}
324
 
325
				newCurrentIndex = nextSlideIndex;
326
 
327
				// New Next
328
				if (newCurrentIndex != slideIDs.size()-1) {
329
					newNextIndex = newCurrentIndex + 1;
330
				}
331
 
332
				// New Prev.
213 naveen 333
				if(currentSlideDefID != 0L) {
198 naveen 334
					newPrevIndex = currentSlideIndex;
335
				}
336
 
337
				showAnotherSlide = true;
338
			}
339
 
340
			// Prev
213 naveen 341
			if(prev && prevSlideDefID != 0L) {
198 naveen 342
				log.info("Prev");
343
 
344
				// Decide on prev slide ID
213 naveen 345
				int prevSlideIndex = slideIDs.indexOf(new Long(prevSlideDefID));
198 naveen 346
				log.info("prevSlideIndex:" + prevSlideIndex);
347
 
348
				if (prevSlideIndex == -1) {
213 naveen 349
					this.setErrorString("Invalid Prev slide ID " + 
350
							prevSlideDefID);
198 naveen 351
					return "fatal";
352
				}
353
 
354
				// New Next
213 naveen 355
				if(currentSlideDefID != 0L) {
198 naveen 356
					newNextIndex = currentSlideIndex;
357
				}
358
 
359
				// New Current
360
				newCurrentIndex = prevSlideIndex;
361
 
362
				// New Prev.
363
				if (newCurrentIndex != 0) {
364
					newPrevIndex = newCurrentIndex - 1;
365
				}
366
 
367
				showAnotherSlide = true;
368
			}
369
 
370
			if(showAnotherSlide) {
213 naveen 371
 				log.info("newCurrentIndex:" + newCurrentIndex);
372
				log.info("newNextIndex:" + newNextIndex);
373
				log.info("newPrevIndex:" + newPrevIndex);
198 naveen 374
 
375
				if(newCurrentIndex != -2) {
376
					this.setNewCurrentSlideDefinitionID(
377
							slideIDs.get(newCurrentIndex).longValue());
378
				}
379
 
380
				if(newNextIndex != -2) {
381
					this.setNewNextSlideDefinitionID(
382
							slideIDs.get(newNextIndex).longValue());
383
				}
384
 
385
				if(newPrevIndex != -2) {
386
					this.setNewPrevSlideDefinitionID(
387
							slideIDs.get(newPrevIndex).longValue());
388
				}
389
 
390
				// Current Slide Definition
391
				this.expSlideDef = defs.getExpandedSlideDefinition(
392
						this.getNewCurrentSlideDefinitionID());
393
 
394
				// Current Slide Instance
395
				this.expSlide = this.expEntity.getExpandedSlide(
396
						this.getNewCurrentSlideDefinitionID());
204 naveen 397
				//log.info("this.expSlide:" + this.expSlide);
198 naveen 398
 
399
				return "editSlide";
400
			}
401
		}
402
    	catch (Exception e) {
208 naveen 403
			log.error(CreationUtils.getStackTrace(e));
404
			this.setErrorString(CreationUtils.getStackTrace(e));
198 naveen 405
			return "fatal";
406
    	}
407
 
408
        return "success";
162 naveen 409
    }
213 naveen 410
 
162 naveen 411
    /**
201 naveen 412
     * 
213 naveen 413
     * @param slideDefID
414
     * @return
415
     * @throws Exception
416
     */
417
    private Slide createSlide(long slideDefID) throws Exception {
418
		Slide slide = new Slide(slideDefID);
419
 
420
		// Slide free-form content
421
		FreeformContent slideFFC = this.getFreeformContent(
422
				"slide_" + slideDefID);
423
 
424
		log.info("slideFFC:" + slideFFC);
425
 
426
		slide.setFreeformContent(slideFFC);
427
		//log.info("currentSlide:" + currentSlide);
428
 
429
		// Collect Feature bullets
430
		List<Feature> features = this.createFeatures(slide);
431
		log.info("features:" + features);
432
 
433
		slide.setFeatures(features);
434
 
435
		// Collect children slides
436
		SlideDefinition slideDef = 
437
			this.getDefinitionsContainer().getSlideDefinition(slideDefID);
438
 
439
		List<Long> childrenSlideIDs = slideDef.getChildrenSlideDefinitionIDs();
440
		if(childrenSlideIDs != null) {
441
			List<Slide> childrenSlides = new ArrayList<Slide>();
442
			for (Long childSlideID : childrenSlideIDs) {
443
				Slide childSlide = this.createSlide(childSlideID.longValue());
444
				if(childSlide != null) {
445
					childrenSlides.add(childSlide);
446
				}
447
			}
448
 
449
			slide.setChildrenSlides(childrenSlides);
450
		}
451
 
452
		return slide;
453
    }
454
 
455
    /**
456
     * 
201 naveen 457
     * @param slide
458
     * @return
459
     * @throws Exception
460
     */
461
    private List<Feature> createFeatures(Slide slide) throws Exception {
462
 
463
		long slideDefID = slide.getSlideDefinitionID();
464
		SlideDefinition slideDef = defs.getSlideDefinition(slideDefID);
465
 
466
		List<SlideFeatureDefinition> slideFeatureDefs = 
467
			slideDef.getSlideFeatureDefinitions();
468
 
469
		DefinitionsContainer defs = this.getDefinitionsContainer();
470
 
471
		List<Feature> features = new ArrayList<Feature>();	
472
		for(SlideFeatureDefinition slideFeatureDef : slideFeatureDefs) {
473
			long featureDefinitionID = slideFeatureDef.getFeatureDefintionID();
215 naveen 474
			log.info("featureDefinitionID:" + featureDefinitionID);
204 naveen 475
 
215 naveen 476
			// Ignore skipped featured
477
			String[] skipvalue = 
478
				this.reqparams.get(featureDefinitionID + "_skip");
479
			log.info("skipvalue:" + Arrays.toString(skipvalue));
480
 
481
			if(skipvalue != null && skipvalue.length > 0 && 
482
					skipvalue[0].equals("on")) {
483
				continue;
484
			}
485
 
201 naveen 486
			String featureDefIDString = 
487
				new Long(featureDefinitionID).toString();
488
 
489
			Feature feature = new Feature(featureDefinitionID);
490
 
491
			// Bullets
492
			List<Bullet> bullets = new ArrayList<Bullet>();
493
			FeatureDefinition featureDef = defs.getFeatureDefinition(
494
					featureDefinitionID);
204 naveen 495
			log.info("featureDef:" + featureDef);
201 naveen 496
 
497
			ExpandedFeatureDefinition expFeatureDef = 
498
				new ExpandedFeatureDefinition(featureDef);
499
 
500
			ExpandedBulletDefinition expBulletDef = 
501
				expFeatureDef.getExpandedBulletDefinition();
502
 
206 naveen 503
			// Collect unit
504
			String[] unitIDs = this.reqparams.get(featureDefIDString + "_unit");
505
			long unitID = 0L;
506
			if(unitIDs != null && unitIDs.length > 0) {
507
				unitID = Long.parseLong(unitIDs[0]);
508
			}
509
 
201 naveen 510
			// Composite
511
			if(expBulletDef.isComposite()) {
204 naveen 512
				log.info("Composite");
201 naveen 513
 
204 naveen 514
				CompositeDataObject compositeDataObject = 
515
					new CompositeDataObject();
516
 
517
				CompositeDefinition compositeDef = 
518
					(CompositeDefinition)expBulletDef.getDatatypeDefinition(); 
519
 
520
				List<CompositePartDefinition> compositeParts = 
521
					compositeDef.getCompositePartDefinitions();
522
 
523
				for(int j=0;j<compositeParts.size();j++) {
524
					String[] partValues = this.reqparams.get(
208 naveen 525
							featureDefIDString + "_" + (j + 1));
204 naveen 526
 
527
					if(partValues != null && partValues.length > 0) {
528
						compositeDataObject.addPrimitiveDataObject(
529
							new PrimitiveDataObject(partValues[0]));
530
					}
531
				}
532
 
533
				Bullet bullet = new Bullet(compositeDataObject);
534
 
206 naveen 535
				if(unitID != 0L) {
536
					bullet.setUnitID(unitID);
537
				}
538
 
204 naveen 539
				bullets.add(bullet);
201 naveen 540
			}
541
 
542
			// Enumerated
543
			else if(expBulletDef.isEnumerated()) {
204 naveen 544
				log.info("Enumerated");
545
 
546
				String[] bulletValues = this.reqparams.get(featureDefIDString);
547
				if(bulletValues == null || bulletValues.length == 0) {
548
					continue;
549
				}
201 naveen 550
 
204 naveen 551
				log.info("bulletValues:" + Arrays.toString(bulletValues));
206 naveen 552
 
204 naveen 553
 
206 naveen 554
				for(int i=0;i<bulletValues.length;i++) {
555
					EnumDataObject enumDataObject = 
556
						new EnumDataObject(Long.parseLong(bulletValues[i]));
557
 
558
					Bullet bullet = new Bullet(enumDataObject);
559
 
560
					if(unitID != 0L) {
561
						bullet.setUnitID(unitID);
562
					}
563
 
564
					bullets.add(bullet);
565
				}
201 naveen 566
			}
567
 
568
			// Primitive
569
			else {
204 naveen 570
				log.info("Primitive");
571
 
572
				String[] bulletValues = this.reqparams.get(featureDefIDString);
573
				if(bulletValues == null || bulletValues.length == 0) {
574
					continue;
575
				}
576
 
577
				log.info("bulletValues:" + Arrays.toString(bulletValues));
578
 
206 naveen 579
				for(int i=0;i<bulletValues.length;i++) {
580
					Bullet bullet = new Bullet(
581
							new PrimitiveDataObject(bulletValues[i]));
582
 
583
					if(unitID != 0L) {
584
						bullet.setUnitID(unitID);
585
					}
586
 
587
					bullets.add(bullet);
588
				}
201 naveen 589
			}
590
 
591
			feature.setBullets(bullets);
592
 
593
			// FFC
594
			FreeformContent featureFFC = 
595
				this.getFreeformContent(featureDefIDString);
596
 
597
			feature.setFreeformContent(featureFFC);
598
 
599
			features.add(feature);
600
		}
601
 
602
		return features;
603
	}
604
 
605
	/**
606
     * 
607
     * @param ID
608
     * @return
609
     */
610
    private FreeformContent getFreeformContent(String ID) {
611
		FreeformContent ffc = new FreeformContent();
612
		String[] ffts = this.reqparams.get(ID + "_fft");
613
		if(ffts != null) {
614
			ffc.setFreeformTexts(Arrays.asList(ffts));
615
		}
616
 
210 naveen 617
		String[] imgRefs = this.reqparams.get(ID + "_image_references");
618
		if(imgRefs != null) {
619
			ffc.setMedia("image", Arrays.asList(imgRefs));
201 naveen 620
		}
621
 
210 naveen 622
		String[] youtubeRefs = 
623
			this.reqparams.get(ID + "_youtube_references");
624
		if(youtubeRefs != null) {
625
			ffc.setMedia("youtube", Arrays.asList(youtubeRefs));
201 naveen 626
		}
627
 
628
		log.info("ffc:" + ffc);
629
		return ffc;
630
	}
213 naveen 631
 
632
 
633
    /**
634
     * 
635
     * @param slideDefinitionID
636
     * @return
637
     */
638
	public ExpandedSlide getChildSlide(long slideDefinitionID) {
639
		return this.getChildSlide(this.expSlide, slideDefinitionID);
640
	}
641
 
642
 
643
    /**
644
     * 
645
     * @param expSlide
646
     * @param slideDefinitionID
647
     * @return
648
     */
649
	public ExpandedSlide getChildSlide(ExpandedSlide expSlide, 
650
			long slideDefinitionID) {
651
 
652
		List<ExpandedSlide> childrenSlides = 
653
			expSlide.getExpandedChildrenSlides();
654
 
655
		ExpandedSlide resultSlide = null;
656
 
657
		if(childrenSlides != null) {
658
			for(ExpandedSlide childSlide : childrenSlides) {
659
				if(childSlide.getSlideDefinitionID() == slideDefinitionID) {
660
					return childSlide;
661
				}
662
 
663
				resultSlide = this.getChildSlide(childSlide, slideDefinitionID);
664
				if(resultSlide == null) {
665
					continue;
666
				}
667
				else {
668
					break;
669
				}
670
			}
671
		}
672
 
673
		return resultSlide;
674
	}
201 naveen 675
 
676
	/**
162 naveen 677
	 * @return the entities
678
	 */
679
	public Collection<Entity> getEntities() {
680
		return entities;
681
	}
682
 
683
    /**
684
	 * @return the entities
685
	 */
686
	public ExpandedEntity getEntity() {
687
		return expEntity;
688
	}
689
 
198 naveen 690
    /**
691
	 * @return the current slide to edit
692
	 */
693
	public ExpandedSlideDefinition getExpandedSlideDefinition() {
694
		return expSlideDef;
695
	}
213 naveen 696
 
697
	/**
698
	 * 
699
	 * @param slideDefID
700
	 * @return
701
	 */
702
	public ExpandedSlideDefinition getExpandedSlideDefinition(long slideDefID) {
703
		DefinitionsContainer defs = this.getDefinitionsContainer();
704
 
705
		try {
706
			return defs.getExpandedSlideDefinition(slideDefID);
707
		} catch (Exception e) {
708
			return null;
709
		}
710
	}
162 naveen 711
 
712
	/**
713
     * 
714
     * @param id
715
     */
716
    public void setId(String id) {
717
        this.id = id;
718
    }
719
 
720
    /**
721
     * 
722
     */
723
    public String getId() {
724
    	return this.id;
725
    }
726
 
198 naveen 727
	/**
728
	 * @return the firstSlideID
729
	 */
213 naveen 730
	public long getFirstSlideDefID() {
731
		return firstSlideDefID;
198 naveen 732
	}
733
 
162 naveen 734
	@Override
735
	public void setParameters(Map<String, String[]> reqmap) {
736
		log.info("setParameters:" + reqmap);
737
 
738
		this.reqparams = reqmap;
739
	}
740
 
198 naveen 741
	public Map<String, String> getCategories() throws Exception {
742
		DefinitionsContainer defs = this.getDefinitionsContainer();
743
		Map<String, String> cats = new HashMap<String, String>();
744
 
745
		List<Category> children = defs.getChildrenCategories(10001L);
746
		for(Category child : children) {
747
			cats.put(new Long(child.getID()).toString(), child.getLabel());
748
		}
749
 
750
		return cats;
751
	}
752
 
753
	public String getBrandString() throws Exception {
754
		List<String> brands = this.getBrands();
755
		return "\"" + StringUtils.join(brands, "\", \"") + "\"";
756
	}
757
 
758
	public List<String> getBrands() throws Exception {
759
		EntityContainer ents = this.getEntityContainer();
760
		List<String> brands = new ArrayList<String>();
761
 
762
		List<ExpandedBullet> expBullets;
763
 
764
		expBullets = ents.getLearnedBullets(
765
				Utils.BRAND_FEATURE_DEFINITION_ID);
766
 
767
		for(ExpandedBullet expBullet : expBullets) {
768
			brands.add(expBullet.getValue());
769
		}
770
 
771
		return brands;
772
	}
773
 
774
    private EntityContainer getEntityContainer() {
775
    	if(this.ents == null) {
776
    		this.ents = new EntityContainer();
777
    	}
778
 
779
	    return this.ents;
780
    }
781
 
782
    private DefinitionsContainer getDefinitionsContainer() {
783
    	if(this.defs == null) {
784
    		this.defs = new DefinitionsContainer();
785
    	}
786
 
787
	    return this.defs;
788
    }
789
 
790
    /**
791
     * 
792
     * @param entity
793
     * @throws Exception
794
     */
795
	private void addEntity(Entity entity) throws Exception {			
796
		EntityContainer entContainer = new EntityContainer();
797
 
798
		entContainer.addEntity(entity);
799
 
800
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
801
				"entities" + ".ser");
802
 
803
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
804
			"entitiesbycategory" + ".ser";
805
 
806
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
807
				entitiesbycategoryDBFile);
808
	}
809
 
810
    /**
811
     * 
812
     * @param entity
813
     * @throws Exception
814
     */
815
	private void updateEntity(Entity entity) throws Exception {			
816
		EntityContainer entContainer = new EntityContainer();
817
 
818
		entContainer.updateEntity(entity);
819
 
820
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
821
				"entities" + ".ser");
822
 
823
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
824
			"entitiesbycategory" + ".ser";
825
 
826
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
827
				entitiesbycategoryDBFile);
828
	}
829
 
162 naveen 830
	/**
198 naveen 831
	 * @param exception the exception to set
832
	 */
833
	public void setException(Exception exception) {
834
		this.exception = exception;
835
	}
836
 
837
	/**
838
	 * @return the exception
839
	 */
840
	public Exception getException() {
841
		return exception;
842
	}
843
 
844
	/**
845
	 * @param errorString the exceptionString to set
846
	 */
847
	public void setErrorString(String errorString) {
848
		this.errorString = errorString;
849
	}
850
 
851
	/**
852
	 * @return the exceptionString
853
	 */
854
	public String getErrorString() {
855
		return errorString;
856
	}
857
 
858
	/**
859
	 * @param newCurrentSlideID the newCurrentSlideID to set
860
	 */
861
	public void setNewCurrentSlideDefinitionID(
862
			long newCurrentSlideDefinitionID) {
863
		this.newCurrentSlideDefinitionID = newCurrentSlideDefinitionID;
864
	}
865
 
866
	/**
867
	 * @return the newCurrentSlideID
868
	 */
869
	public long getNewCurrentSlideDefinitionID() {
870
		return newCurrentSlideDefinitionID;
871
	}
872
 
873
	/**
874
	 * @param newNextSlideID the newNextSlideID to set
875
	 */
876
	public void setNewNextSlideDefinitionID(long newNextSlideDefinitionID) {
877
		this.newNextSlideDefinitionID = newNextSlideDefinitionID;
878
	}
879
 
880
	/**
881
	 * @return the newNextSlideID
882
	 */
883
	public long getNewNextSlideDefinitionID() {
884
		return newNextSlideDefinitionID;
885
	}
886
 
887
	/**
888
	 * @param expSlide the expSlide to set
889
	 */
890
	public void setExpandedSlide(ExpandedSlide expSlide) {
891
		this.expSlide = expSlide;
892
	}
893
 
894
	/**
895
	 * @return the expSlide
896
	 */
897
	public ExpandedSlide getExpandedSlide() {
898
		return expSlide;
899
	}
900
 
901
	/**
902
	 * @param newPrevSlideDefinitionID the newPrevSlideDefinitionID to set
903
	 */
904
	public void setNewPrevSlideDefinitionID(long newPrevSlideDefinitionID) {
905
		this.newPrevSlideDefinitionID = newPrevSlideDefinitionID;
906
	}
907
 
908
	/**
909
	 * @return the newPrevSlideDefinitionID
910
	 */
911
	public long getNewPrevSlideDefinitionID() {
912
		return newPrevSlideDefinitionID;
913
	}
914
 
915
	/**
162 naveen 916
	 * 
200 naveen 917
	 * @param featureDefinitionID
918
	 * @return
919
	 * @throws Exception
920
	 */
921
	public String getLearnedValuesString(long featureDefinitionID) 
922
			throws Exception {
206 naveen 923
		List<String> learnedValues = this.getLearnedValues(featureDefinitionID);
924
		if(learnedValues == null) {
925
			return "";
926
		}
927
 
928
		return "\"" + StringUtils.join(learnedValues, "\", \"") + "\"";
929
	}
930
 
931
	/**
932
	 * 
933
	 * @param featureDefinitionID
934
	 * @return
935
	 * @throws Exception
936
	 */
937
	public List<String> getLearnedValues(long featureDefinitionID) 
938
			throws Exception {
200 naveen 939
		EntityContainer ents = this.getEntityContainer();
940
		List<ExpandedBullet> learnedBullets = 
941
			ents.getLearnedBullets(featureDefinitionID);
942
 
201 naveen 943
		if(learnedBullets == null) {
206 naveen 944
			return null;
201 naveen 945
		}
946
 
200 naveen 947
		List<String> learnedValues = new ArrayList<String>();
948
		for(ExpandedBullet expBullet : learnedBullets) {
949
			learnedValues.add(expBullet.getValue());
950
		}
951
 
206 naveen 952
		return learnedValues;
200 naveen 953
	}
954
 
955
	/**
956
	 * 
201 naveen 957
	 * @param featureDefinitionID
958
	 * @return
959
	 * @throws Exception
960
	 */
961
	public ExpandedFeature getFeature(long featureDefinitionID) 
962
		throws Exception {
963
		EntityContainer ents = this.getEntityContainer();
964
 
215 naveen 965
		if(this.expSlide != null) {
966
			Feature feature = ents.getFeature(
967
					this.expSlide, featureDefinitionID);
968
 
969
			if(feature == null) {
970
				return null;
971
			}
972
			return new ExpandedFeature(feature);
201 naveen 973
		}
974
 
215 naveen 975
		return null;
201 naveen 976
	}
977
 
978
	/**
979
	 * 
162 naveen 980
	 * @return
981
	 */
208 naveen 982
	public String getEditorialImportance() {
983
		long catID = this.expEntity.getCategoryID();
984
		long slideDefID = this.getNewCurrentSlideDefinitionID();
985
 
986
		try {
987
			List<CategorySlideDefinition> catSlideDefs =
988
				defs.getCategorySlideDefinitions(catID);
989
			for(CategorySlideDefinition catSlideDef : catSlideDefs) {
990
				if(catSlideDef.getSlideDefintionID() == slideDefID) {
991
					return catSlideDef.getEditorialImportance().toString();
992
				}
993
			}
994
		} catch (Exception e) {
995
			log.error(CreationUtils.getStackTrace(e));
996
    	}
997
 
998
		return "";
162 naveen 999
	}
210 naveen 1000
 
1001
	/**
1002
	 * 
1003
	 * @return
1004
	 * @throws Exception 
1005
	 * @throws NumberFormatException 
1006
	 */
1007
	public List<String> getMediaLabels(String type) {
1008
		try {
1009
			return CreationUtils.getMediaLabels(Long.parseLong(this.getId()), 
1010
					type);
1011
		}
1012
		catch(Exception nfe) {
1013
			return null;
1014
		}
1015
	}
162 naveen 1016
}