Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
162 naveen 1
package in.shop2020.creation.controllers;
2
 
3
import java.io.PrintWriter;
4
import java.io.StringWriter;
5
import java.io.Writer;
198 naveen 6
import java.util.ArrayList;
7
import java.util.Arrays;
162 naveen 8
import java.util.Collection;
198 naveen 9
import java.util.HashMap;
10
import java.util.List;
162 naveen 11
import java.util.Map;
12
 
13
import in.shop2020.metamodel.core.Entity;
198 naveen 14
import in.shop2020.metamodel.core.FreeformContent;
15
import in.shop2020.metamodel.core.Slide;
16
import in.shop2020.metamodel.definitions.Category;
17
import in.shop2020.metamodel.definitions.DefinitionsContainer;
162 naveen 18
import in.shop2020.metamodel.definitions.EntityContainer;
198 naveen 19
import in.shop2020.metamodel.util.ExpandedBullet;
162 naveen 20
import in.shop2020.metamodel.util.ExpandedEntity;
198 naveen 21
import in.shop2020.metamodel.util.ExpandedSlide;
22
import in.shop2020.metamodel.util.ExpandedSlideDefinition;
162 naveen 23
import in.shop2020.metamodel.util.SequenceGenerator;
24
import in.shop2020.util.DBUtils;
25
import in.shop2020.util.Utils;
26
 
27
import org.apache.juli.logging.Log;
28
import org.apache.juli.logging.LogFactory;
29
import org.apache.struts2.rest.DefaultHttpHeaders;
30
import org.apache.struts2.rest.HttpHeaders;
31
 
32
import org.apache.struts2.convention.annotation.Result;
33
import org.apache.struts2.convention.annotation.Results;
34
import org.apache.struts2.interceptor.ParameterAware;
35
 
198 naveen 36
import org.apache.commons.lang.StringUtils;
37
 
162 naveen 38
@Results({
39
    @Result(name="success", type="redirectAction", 
198 naveen 40
    		params = {"actionName" , "entity"}),
41
    @Result(name="redirect", location="${url}", type="redirect")
162 naveen 42
})
43
public class EntityController implements ParameterAware {
44
 
45
	/**
46
	 * 
47
	 */
48
	private static Log log = LogFactory.getLog(EntityController.class);
49
 
50
	/**
51
	 * 
52
	 */
53
	private String id;
54
 
55
	private ExpandedEntity expEntity;
56
 
57
	private Collection<Entity> entities;
58
 
59
	private Map<String, String[]> reqparams;
60
 
198 naveen 61
	private EntityContainer ents;
62
 
63
	private DefinitionsContainer defs;
64
 
65
	private long firstSlideID;
66
 
67
	private ExpandedSlideDefinition expSlideDef;
68
 
69
	private ExpandedSlide expSlide;
70
 
71
	private String redirectURL;
72
 
73
	private Exception exception;
74
 
75
	private String errorString;
76
 
77
	private long newCurrentSlideDefinitionID;
78
 
79
	private long newNextSlideDefinitionID;
80
 
81
	private long newPrevSlideDefinitionID;
82
 
83
 
162 naveen 84
    // GET /entity
85
    public HttpHeaders index() {
86
    	log.info("EntityController.index");
87
 
88
    	EntityContainer ents = new EntityContainer();
89
 
90
    	try {
91
			this.entities = ents.getEntities().values();
92
		} catch (Exception e) {
93
			log.error(this.getStackTrace(e));
198 naveen 94
			this.setErrorString(this.getStackTrace(e));
95
			return new DefaultHttpHeaders("fatal");
162 naveen 96
		}
97
 
98
        return new DefaultHttpHeaders("index")
99
            .disableCaching();
100
    }
101
 
102
    // GET /entity
103
    public String create() {
104
    	log.info("EntityController.create");
105
 
106
		SequenceGenerator sg;
107
		try {
108
			sg = SequenceGenerator.getInstance();
109
			long entityID = sg.getNextSequence(SequenceGenerator.ENTITY);
110
 
111
			String categoryID = this.reqparams.get("category")[0];
112
			Entity entity = new Entity(entityID, Long.parseLong(categoryID));
113
 
114
			entity.setBrand(this.reqparams.get("brand")[0]);
115
			entity.setModelName(this.reqparams.get("modelname")[0]);
116
			entity.setModelNumber(this.reqparams.get("modelnumber")[0]);
117
 
198 naveen 118
			this.addEntity(entity);
162 naveen 119
 
120
	    	this.setId(new Long(entityID).toString());
121
		} catch (Exception e) {
122
			log.error(this.getStackTrace(e));
198 naveen 123
			this.setErrorString(this.getStackTrace(e));
124
			return "fatal";
162 naveen 125
		}
198 naveen 126
 
127
		this.redirectURL = "entity/" + this.getId() + "/edit";
162 naveen 128
 
198 naveen 129
		return "redirect";
162 naveen 130
    }
131
 
132
    // GET /entity/1/edit
133
    public String edit() {
134
    	log.info("EntityController.edit");
135
 
136
    	long entityID = Long.parseLong(this.getId());
137
    	log.info("entityID:" + entityID);
138
 
198 naveen 139
    	EntityContainer ents = this.getEntityContainer();
140
    	DefinitionsContainer defs = this.getDefinitionsContainer();
162 naveen 141
 
142
    	try {
143
			this.expEntity = ents.getExpandedEntity(entityID);
198 naveen 144
			//log.info("this.expEntity:" + this.expEntity);
145
 
146
			long catID = this.expEntity.getCategoryID();
147
			List<Long> slideIDs = defs.getCategorySlideSequence(catID);
148
 
149
			this.firstSlideID = slideIDs.get(0);
150
 
162 naveen 151
		} catch (Exception e) {
152
			log.error(this.getStackTrace(e));
198 naveen 153
			this.setErrorString(this.getStackTrace(e));
154
			return "fatal";
162 naveen 155
		}
156
 
157
        return "edit";
158
    }
198 naveen 159
 
160
 
161
    public String getUrl() {
162
    	return this.redirectURL;
163
    }
162 naveen 164
 
165
    // GET /entity/new
166
    public String editNew() {
167
    	log.info("EntityController.editNew");
168
 
169
        return "editNew";
170
    }
171
 
172
    // GET /entity/1
173
    public String update() {
174
    	log.info("EntityController.update");
175
 
198 naveen 176
    	long entityID = Long.parseLong(this.getId());
177
    	log.info("entityID:" + entityID);
178
 
179
    	EntityContainer ents = this.getEntityContainer();
180
    	DefinitionsContainer defs = this.getDefinitionsContainer();
181
 
182
    	try {
183
			this.expEntity = ents.getExpandedEntity(entityID);
184
			//log.info("this.expEntity:" + this.expEntity);
185
 
186
			long currentSlideID = 0L;
187
			long nextSlideID = 0L;
188
			long prevSlideID = 0L;
189
 
190
			String[] currentslideIDStrings = 
191
				this.reqparams.get("currentslideID");
192
 
193
			String[] nextslideIDStrings = this.reqparams.get("nextslideID");
194
 
195
			String[] prevslideIDStrings = this.reqparams.get("prevslideID");
196
 
197
			// Current Slide ID
198
			if(currentslideIDStrings != null && 
199
					currentslideIDStrings.length > 0) {
200
				try {
201
					currentSlideID = Long.parseLong(currentslideIDStrings[0]);
202
				}
203
				catch (NumberFormatException nfe) {}
204
			}
205
 
206
			// Next Slide ID
207
			if(nextslideIDStrings != null && 
208
					nextslideIDStrings.length > 0) {
209
				try {
210
					nextSlideID = Long.parseLong(nextslideIDStrings[0]);
211
				}
212
				catch (NumberFormatException nfe) {}
213
			}
214
 
215
			// Prev Slide ID
216
			if(prevslideIDStrings != null && 
217
					prevslideIDStrings.length > 0) {
218
				try {
219
					prevSlideID = Long.parseLong(prevslideIDStrings[0]);
220
				}
221
				catch (NumberFormatException nfe) {}
222
			}
223
			log.info("currentSlideID:" + currentSlideID);
224
			log.info("nextSlideID:" + nextSlideID);
225
			log.info("prevSlideID:" + prevSlideID);
226
 
227
			// Save on basic info page
228
			if (this.reqparams.containsKey("save") && currentSlideID == 0L) {
229
				log.info("Save");
230
 
231
				Entity entity = this.expEntity.getEntity();
232
 
233
				String categoryID = this.reqparams.get("category")[0];
234
 
235
				entity.setCategoryID(Long.parseLong(categoryID));
236
				entity.setBrand(this.reqparams.get("brand")[0]);
237
				entity.setModelName(this.reqparams.get("modelname")[0]);
238
				entity.setModelNumber(this.reqparams.get("modelnumber")[0]);
239
 
240
				this.updateEntity(entity);
241
 
242
				return "success";
243
			}
244
 
245
			long catID = this.expEntity.getCategoryID();
246
			List<Long> slideIDs = defs.getCategorySlideSequence(catID);
247
			log.info("slideIDs:"+slideIDs);
248
 
249
			// Save or Next or Prev - When editing a slide
250
			int currentSlideIndex = 0;
251
			if(currentSlideID != 0L) {
252
				currentSlideIndex = slideIDs.indexOf(new Long(currentSlideID));
253
				log.info("currentSlideIndex:" + currentSlideIndex);
254
 
255
				Entity entity = this.expEntity.getEntity();
256
 
257
				// Update Entity Record
258
				Slide currentSlide = entity.getSlide(currentSlideID);
259
 
260
				// Slide free-form content
261
				FreeformContent slideFFC = new FreeformContent();
262
				String[] slideFFTs = this.reqparams.get("slide_fft");
263
				if(slideFFTs != null) {
264
					slideFFC.setFreeformTexts(Arrays.asList(slideFFTs));
265
				}
266
 
267
				String[] slideImgURLs = this.reqparams.get("slide_image_url");
268
				if(slideImgURLs != null) {
269
					slideFFC.setImageURLs(Arrays.asList(slideImgURLs));
270
				}
271
 
272
				String[] slideYoutubeURLs = 
273
					this.reqparams.get("slide_youtube_url");
274
				if(slideYoutubeURLs != null) {
275
					slideFFC.setYoutubeURLs(Arrays.asList(slideYoutubeURLs));
276
				}
277
				log.info("slideFFC:" + slideFFC);
278
 
279
				currentSlide.setFreeformContent(slideFFC);
280
				//log.info("currentSlide:" + currentSlide);
281
 
282
				// Store
283
				this.updateEntity(entity);
284
				//log.info("entity:" + entity);
285
			}
286
 
287
			boolean showAnotherSlide = false;
288
 
289
			// -2 : Not set
290
			// -1 : Not found
291
			int newCurrentIndex = -2;  
292
			int newNextIndex = -2;
293
			int newPrevIndex = -2;
294
 
295
			// Next
296
			if(this.reqparams.containsKey("next") && nextSlideID != 0L) {
297
				log.info("Next");
298
 
299
				// Decide on next slide ID
300
				int nextSlideIndex = slideIDs.indexOf(new Long(nextSlideID));
301
				log.info("nextSlideIndex:"+nextSlideIndex);
302
 
303
				// New Current
304
				if (nextSlideIndex == -1) {
305
					this.setErrorString("Invalid Next slide ID " + nextSlideID);
306
					return "fatal";
307
				}
308
 
309
				newCurrentIndex = nextSlideIndex;
310
 
311
				// New Next
312
				if (newCurrentIndex != slideIDs.size()-1) {
313
					newNextIndex = newCurrentIndex + 1;
314
				}
315
 
316
				// New Prev.
317
				if(currentSlideID != 0L) {
318
					newPrevIndex = currentSlideIndex;
319
				}
320
 
321
				showAnotherSlide = true;
322
			}
323
 
324
			// Prev
325
			if(this.reqparams.containsKey("prev") && prevSlideID != 0L) {
326
				log.info("Prev");
327
 
328
				// Decide on prev slide ID
329
				int prevSlideIndex = slideIDs.indexOf(new Long(prevSlideID));
330
				log.info("prevSlideIndex:" + prevSlideIndex);
331
 
332
				if (prevSlideIndex == -1) {
333
					this.setErrorString("Invalid Prev slide ID " + prevSlideID);
334
					return "fatal";
335
				}
336
 
337
				// New Next
338
				if(currentSlideID != 0L) {
339
					newNextIndex = currentSlideIndex;
340
				}
341
 
342
				// New Current
343
				newCurrentIndex = prevSlideIndex;
344
 
345
				// New Prev.
346
				if (newCurrentIndex != 0) {
347
					newPrevIndex = newCurrentIndex - 1;
348
				}
349
 
350
				showAnotherSlide = true;
351
			}
352
 
353
			if(showAnotherSlide) {
354
 				log.info("newCurrentIndex:"+newCurrentIndex);
355
				log.info("newNextIndex:"+newNextIndex);
356
				log.info("newPrevIndex:"+newPrevIndex);
357
 
358
				if(newCurrentIndex != -2) {
359
					this.setNewCurrentSlideDefinitionID(
360
							slideIDs.get(newCurrentIndex).longValue());
361
				}
362
 
363
				if(newNextIndex != -2) {
364
					this.setNewNextSlideDefinitionID(
365
							slideIDs.get(newNextIndex).longValue());
366
				}
367
 
368
				if(newPrevIndex != -2) {
369
					this.setNewPrevSlideDefinitionID(
370
							slideIDs.get(newPrevIndex).longValue());
371
				}
372
 
373
				// Current Slide Definition
374
				this.expSlideDef = defs.getExpandedSlideDefinition(
375
						this.getNewCurrentSlideDefinitionID());
376
 
377
				// Current Slide Instance
378
				this.expSlide = this.expEntity.getExpandedSlide(
379
						this.getNewCurrentSlideDefinitionID());
380
				log.info("this.expSlide:" + this.expSlide);
381
 
382
				return "editSlide";
383
			}
384
		}
385
    	catch (Exception e) {
386
			log.error(this.getStackTrace(e));
387
			this.setErrorString(this.getStackTrace(e));
388
			return "fatal";
389
    	}
390
 
391
        return "success";
162 naveen 392
    }
393
 
394
    /**
395
	 * @return the entities
396
	 */
397
	public Collection<Entity> getEntities() {
398
		return entities;
399
	}
400
 
401
    /**
402
	 * @return the entities
403
	 */
404
	public ExpandedEntity getEntity() {
405
		return expEntity;
406
	}
407
 
198 naveen 408
    /**
409
	 * @return the current slide to edit
410
	 */
411
	public ExpandedSlideDefinition getExpandedSlideDefinition() {
412
		return expSlideDef;
413
	}
162 naveen 414
 
415
	/**
416
     * 
417
     * @param id
418
     */
419
    public void setId(String id) {
420
        this.id = id;
421
    }
422
 
423
    /**
424
     * 
425
     */
426
    public String getId() {
427
    	return this.id;
428
    }
429
 
198 naveen 430
	/**
431
	 * @return the firstSlideID
432
	 */
433
	public long getFirstSlideID() {
434
		return firstSlideID;
435
	}
436
 
162 naveen 437
	@Override
438
	public void setParameters(Map<String, String[]> reqmap) {
439
		log.info("setParameters:" + reqmap);
440
 
441
		this.reqparams = reqmap;
442
	}
443
 
198 naveen 444
	public Map<String, String> getCategories() throws Exception {
445
		DefinitionsContainer defs = this.getDefinitionsContainer();
446
		Map<String, String> cats = new HashMap<String, String>();
447
 
448
		List<Category> children = defs.getChildrenCategories(10001L);
449
		for(Category child : children) {
450
			cats.put(new Long(child.getID()).toString(), child.getLabel());
451
		}
452
 
453
		return cats;
454
	}
455
 
456
	public String getBrandString() throws Exception {
457
		List<String> brands = this.getBrands();
458
		return "\"" + StringUtils.join(brands, "\", \"") + "\"";
459
	}
460
 
461
	public List<String> getBrands() throws Exception {
462
		EntityContainer ents = this.getEntityContainer();
463
		List<String> brands = new ArrayList<String>();
464
 
465
		List<ExpandedBullet> expBullets;
466
 
467
		expBullets = ents.getLearnedBullets(
468
				Utils.BRAND_FEATURE_DEFINITION_ID);
469
 
470
		for(ExpandedBullet expBullet : expBullets) {
471
			brands.add(expBullet.getValue());
472
		}
473
 
474
		return brands;
475
	}
476
 
477
    private EntityContainer getEntityContainer() {
478
    	if(this.ents == null) {
479
    		this.ents = new EntityContainer();
480
    	}
481
 
482
	    return this.ents;
483
    }
484
 
485
    private DefinitionsContainer getDefinitionsContainer() {
486
    	if(this.defs == null) {
487
    		this.defs = new DefinitionsContainer();
488
    	}
489
 
490
	    return this.defs;
491
    }
492
 
493
    /**
494
     * 
495
     * @param entity
496
     * @throws Exception
497
     */
498
	private void addEntity(Entity entity) throws Exception {			
499
		EntityContainer entContainer = new EntityContainer();
500
 
501
		entContainer.addEntity(entity);
502
 
503
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
504
				"entities" + ".ser");
505
 
506
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
507
			"entitiesbycategory" + ".ser";
508
 
509
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
510
				entitiesbycategoryDBFile);
511
	}
512
 
513
    /**
514
     * 
515
     * @param entity
516
     * @throws Exception
517
     */
518
	private void updateEntity(Entity entity) throws Exception {			
519
		EntityContainer entContainer = new EntityContainer();
520
 
521
		entContainer.updateEntity(entity);
522
 
523
		DBUtils.store(entContainer.getEntities(), Utils.ENTITIES_DB_PATH + 
524
				"entities" + ".ser");
525
 
526
		String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
527
			"entitiesbycategory" + ".ser";
528
 
529
		DBUtils.store(entContainer.getEntitiesbyCategory(), 
530
				entitiesbycategoryDBFile);
531
	}
532
 
162 naveen 533
	/**
198 naveen 534
	 * @param exception the exception to set
535
	 */
536
	public void setException(Exception exception) {
537
		this.exception = exception;
538
	}
539
 
540
	/**
541
	 * @return the exception
542
	 */
543
	public Exception getException() {
544
		return exception;
545
	}
546
 
547
	/**
548
	 * @param errorString the exceptionString to set
549
	 */
550
	public void setErrorString(String errorString) {
551
		this.errorString = errorString;
552
	}
553
 
554
	/**
555
	 * @return the exceptionString
556
	 */
557
	public String getErrorString() {
558
		return errorString;
559
	}
560
 
561
	/**
562
	 * @param newCurrentSlideID the newCurrentSlideID to set
563
	 */
564
	public void setNewCurrentSlideDefinitionID(
565
			long newCurrentSlideDefinitionID) {
566
		this.newCurrentSlideDefinitionID = newCurrentSlideDefinitionID;
567
	}
568
 
569
	/**
570
	 * @return the newCurrentSlideID
571
	 */
572
	public long getNewCurrentSlideDefinitionID() {
573
		return newCurrentSlideDefinitionID;
574
	}
575
 
576
	/**
577
	 * @param newNextSlideID the newNextSlideID to set
578
	 */
579
	public void setNewNextSlideDefinitionID(long newNextSlideDefinitionID) {
580
		this.newNextSlideDefinitionID = newNextSlideDefinitionID;
581
	}
582
 
583
	/**
584
	 * @return the newNextSlideID
585
	 */
586
	public long getNewNextSlideDefinitionID() {
587
		return newNextSlideDefinitionID;
588
	}
589
 
590
	/**
591
	 * @param expSlide the expSlide to set
592
	 */
593
	public void setExpandedSlide(ExpandedSlide expSlide) {
594
		this.expSlide = expSlide;
595
	}
596
 
597
	/**
598
	 * @return the expSlide
599
	 */
600
	public ExpandedSlide getExpandedSlide() {
601
		return expSlide;
602
	}
603
 
604
	/**
605
	 * @param newPrevSlideDefinitionID the newPrevSlideDefinitionID to set
606
	 */
607
	public void setNewPrevSlideDefinitionID(long newPrevSlideDefinitionID) {
608
		this.newPrevSlideDefinitionID = newPrevSlideDefinitionID;
609
	}
610
 
611
	/**
612
	 * @return the newPrevSlideDefinitionID
613
	 */
614
	public long getNewPrevSlideDefinitionID() {
615
		return newPrevSlideDefinitionID;
616
	}
617
 
618
	/**
162 naveen 619
	 * 
200 naveen 620
	 * @param featureDefinitionID
621
	 * @return
622
	 * @throws Exception
623
	 */
624
	public String getLearnedValuesString(long featureDefinitionID) 
625
			throws Exception {
626
		EntityContainer ents = this.getEntityContainer();
627
		List<ExpandedBullet> learnedBullets = 
628
			ents.getLearnedBullets(featureDefinitionID);
629
 
630
		List<String> learnedValues = new ArrayList<String>();
631
		for(ExpandedBullet expBullet : learnedBullets) {
632
			learnedValues.add(expBullet.getValue());
633
		}
634
 
635
		return "\"" + StringUtils.join(learnedValues, "\", \"") + "\"";
636
	}
637
 
638
	/**
639
	 * 
162 naveen 640
	 * @param aThrowable
641
	 * @return
642
	 */
643
	private String getStackTrace(Throwable aThrowable) {
644
	    final Writer result = new StringWriter();
645
	    final PrintWriter printWriter = new PrintWriter(result);
646
	    aThrowable.printStackTrace(printWriter);
647
	    return result.toString();
648
	}
649
 
650
}