Subversion Repositories SmartDukaan

Rev

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