Subversion Repositories SmartDukaan

Rev

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