Subversion Repositories SmartDukaan

Rev

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

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