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