Subversion Repositories SmartDukaan

Rev

Rev 6894 | Rev 7100 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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