Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
242 naveen 1
/**
2
 * 
3
 */
4
package in.shop2020.creation.controllers;
5
 
480 rajveer 6
import in.shop2020.metamodel.util.CreationUtils;
242 naveen 7
import in.shop2020.metamodel.core.Entity;
249 naveen 8
import in.shop2020.metamodel.core.Slide;
480 rajveer 9
import in.shop2020.metamodel.definitions.Catalog;
242 naveen 10
import in.shop2020.metamodel.definitions.Category;
11
import in.shop2020.metamodel.definitions.CategorySlideDefinition;
12
import in.shop2020.metamodel.definitions.DefinitionsContainer;
13
 
14
import java.util.ArrayList;
15
import java.util.Arrays;
16
import java.util.HashMap;
250 naveen 17
import java.util.LinkedHashMap;
242 naveen 18
import java.util.List;
19
import java.util.Map;
20
 
21
import org.apache.juli.logging.Log;
22
import org.apache.juli.logging.LogFactory;
1051 rajveer 23
import org.apache.struts2.convention.annotation.InterceptorRef;
24
import org.apache.struts2.convention.annotation.InterceptorRefs;
242 naveen 25
import org.apache.struts2.convention.annotation.Result;
26
import org.apache.struts2.convention.annotation.Results;
27
 
1051 rajveer 28
@InterceptorRefs({
29
    @InterceptorRef("myDefault"),
30
    @InterceptorRef("login")
31
})
32
 
242 naveen 33
@Results({
34
    @Result(name="success", type="redirectAction", 
35
    		params = {"actionName" , "slides"}),
36
    @Result(name="redirect", location="${url}", type="redirect")
37
})
38
 
1051 rajveer 39
public class SlidesController extends BaseController {
242 naveen 40
 
41
	/**
42
	 * 
43
	 */
44
	private static final long serialVersionUID = 1L;
45
 
46
	/**
47
	 * 
48
	 */
49
	private static Log log = LogFactory.getLog(SlidesController.class);
50
 
51
	/**
52
	 * 
53
	 */
54
	private String id;
55
	private String redirectURL;
56
	private Map<String, String[]> reqparams;
1051 rajveer 57
	private DefinitionsContainer defs = Catalog.getInstance().getDefinitionsContainer();
58
	private List<List<String[]>> allSlidesData = new ArrayList<List<String[]>>();
242 naveen 59
 
953 chandransh 60
	/**
61
	 * Key: Slide Definition Id
62
	 * Value: Category Slide Definition
63
	 */
250 naveen 64
	private Map<Long, CategorySlideDefinition> mapAllCatSlideDefs = 
242 naveen 65
		new HashMap<Long, CategorySlideDefinition>();
66
 
250 naveen 67
	private Entity entity;
242 naveen 68
	/**
69
	 * 
70
	 * @return
71
	 */
72
    public String edit() {
73
    	log.info("SlidesController.edit");
74
 
75
    	long entityID = Long.parseLong(this.getId());
76
    	log.info("entityID:" + entityID);
77
 
78
    	try {
1051 rajveer 79
    		entity = CreationUtils.getEntity(entityID);
242 naveen 80
 
1051 rajveer 81
    		//List<Long> selection = CreationUtils.getSlideSequence(entityID, entity.getCategoryID());
82
    		List<Long> selection = entity.getSlideSequence();
83
    		if(selection == null){
84
    			entity.setSlideSequence(Catalog.getInstance().getDefinitionsContainer().getCategorySlideSequence(entity.getCategoryID()));
85
    			CreationUtils.updateEntity(entity);
86
    			selection = entity.getSlideSequence();
87
    		}
242 naveen 88
    		log.info("selection:" + selection);
89
 
90
    		// Entity's category first
91
			long catID = entity.getCategoryID();
92
			List<String[]> slidesData = this.getSlidesData(catID, selection, 
93
					true);
94
 
95
			this.allSlidesData.add(slidesData);
96
 
97
			// Get slides for rest of the categories
499 rajveer 98
			long parentCatID  = (defs.getCategory(catID)).getParentCategory().getID();
99
 
100
			List<Category> cats = defs.getChildrenCategories(parentCatID);
242 naveen 101
			for(Category cat : cats) {
102
				if(cat.getID() != catID) {
103
					List<String[]> thisSlidesData = 
104
						this.getSlidesData(cat.getID(), selection, false);
953 chandransh 105
					if(!thisSlidesData.isEmpty()){
106
						this.allSlidesData.add(thisSlidesData);
107
					}
242 naveen 108
				}
109
			}
110
 
111
		} catch (Exception e) {
112
			log.error(CreationUtils.getStackTrace(e));
113
			this.setErrorString(CreationUtils.getStackTrace(e));
114
			return "fatal";
115
		}
116
    	return "edit";
117
    }
118
 
1068 rajveer 119
    public String show(){
120
	    if(this.reqparams.get("sequence") != null){
121
			String itemlist = this.reqparams.get("sequence")[0];
122
			long entityID = Long.parseLong(this.getId());
123
			try {
124
				this.entity = CreationUtils.getEntity(entityID);
125
				List<Long> slideSequence = entity.getSlideSequence();
126
				List<Long> newSlideSequence = new ArrayList<Long>();
127
				String[] items = itemlist.split("-");
128
				for(int i = 0; i < items.length; i++){
129
					newSlideSequence.add(slideSequence.get(Integer.parseInt(items[i]))); 
130
				}
131
				entity.setSlideSequence(newSlideSequence);
132
				CreationUtils.updateEntity(entity);
133
			} catch (Exception e) {
134
				// TODO Auto-generated catch block
135
				e.printStackTrace();
136
			}
137
		}
138
	    this.redirectURL = "/slides/" + this.getId() + "/edit";
139
    	return "redirect";
140
    }
141
 
242 naveen 142
    /**
143
     * 
144
     * @return
145
     */
146
    public String update() {
147
    	log.info("SlidesController.update");
480 rajveer 148
    	for(String reqparam: this.reqparams.keySet()){
149
    		String[] values = this.reqparams.get(reqparam);
150
    		for(String value: values){
151
    			System.out.println("Param:   " + reqparam + "Value:   " + value);
152
    		}
153
    	}
1068 rajveer 154
 
1051 rajveer 155
    	//FIXME
156
    	/*  Need to fix me while reordering
480 rajveer 157
    	if(this.reqparams.get("slideid") != null){
158
    		long slideId = Long.parseLong(this.reqparams.get("slideid")[0]);
159
    		long afterSlideId = Long.parseLong(this.reqparams.get("afterslide")[0]);
160
    		long entityID = Long.parseLong(this.getId());
161
 
162
//	    	List<Long> slideSequence = CreationUtils.getSlideSequence(entityID);
163
//	    	List<Long> newSlideSequence = new ArrayList<Long>();
164
//	    	
165
//	    	for(Long slide: slideSequence){
166
//	    		newSlideSequence.add(slide);
167
//	    		if(slide.equals(new Long(afterSlideId))){
168
//	    			newSlideSequence.add(new Long(slideId));
169
//	    		}
170
//	    	}
171
 
172
    	try{
1051 rajveer 173
    		entity = CreationUtils.getEntity(entityID);
480 rajveer 174
 
1051 rajveer 175
	    	//Map<Long, List<Long>> catSlideSequence = CreationUtils.getRawSlideSequence(entityID);
176
 
177
	    	Map<Long, List<Long>> catSlideSequence = defs.getCategorySlideSequence();
480 rajveer 178
 
179
	    	List<Long> allSlideSequence = catSlideSequence.get(new Long(-1));
180
	    	List<Long> newAllSlideSequence = new ArrayList<Long>();
181
 
182
	    	catSlideSequence.remove(new Long(-1));
183
	    	Map<Long, List<Long>> newCatSlideSequence = new HashMap<Long, List<Long>>();
184
 
185
	    	for(Long slide: allSlideSequence){
186
	    		newAllSlideSequence.add(slide);
187
    			if(slide.equals(new Long(afterSlideId))){
188
	    			newAllSlideSequence.add(new Long(slideId));
189
	    		}	
190
	    	}
1051 rajveer 191
 
480 rajveer 192
	    	for(Long cat: catSlideSequence.keySet()){
193
	    		List<Long> newSlideSequence = new ArrayList<Long>();
194
	    		List<Long> slides =  catSlideSequence.get(cat);
195
 
196
	    		boolean contains = false;
197
	    		List<CategorySlideDefinition> catdefs = defs.getCategorySlideDefinitions(cat);
198
	    		for(CategorySlideDefinition  catdef: catdefs){
199
	    			if(catdef.getSlideDefintionID()==slideId){
200
	    				contains = true;
201
	    			}
202
	    		}
203
 
204
 
205
 
206
	    		for(Long slide: slides){
207
	    			newSlideSequence.add(slide);
208
	    		}
209
	    		if(contains){
210
	    			newSlideSequence.add(new Long(slideId));	
211
	    		}
212
 
213
	    		newCatSlideSequence.put(cat, newSlideSequence);
214
	    	}
215
 
216
	    	newCatSlideSequence.put(new Long(-1), newAllSlideSequence);
217
 
1051 rajveer 218
	    	//CreationUtils.storeSlideSequence(entityID, newCatSlideSequence);
219
 
220
	    	entity.setSlideSequence(newAllSlideSequence);
221
 
480 rajveer 222
    	}catch(Exception e){
223
    		e.printStackTrace();
224
    	}
225
	    	this.redirectURL = "/slides/" + this.getId() + "/edit";
226
	    	return "redirect";
227
    	}
228
 
1051 rajveer 229
    	*/
480 rajveer 230
 
242 naveen 231
    	try {
250 naveen 232
    		long entityID = Long.parseLong(this.getId());    		
1051 rajveer 233
    		entity = CreationUtils.getEntity(entityID);
480 rajveer 234
	    	Long catId = new Long(entity.getCategoryID());
250 naveen 235
	    	// Slides of entity's category
236
	    	String[] strSlideDefIDs = this.reqparams.get(
237
	    			new Long(entity.getCategoryID()).toString());
238
 
239
	    	log.info("strSlideDefIDs:" + Arrays.toString(strSlideDefIDs));
240
 
1051 rajveer 241
	    	List<Long> sequence= entity.getSlideSequence();
242
	    	log.info("S1"+sequence);
480 rajveer 243
        	if(sequence == null){
244
        		sequence = new ArrayList<Long>();
1051 rajveer 245
        		entity.setSlideSequence(sequence);
480 rajveer 246
        	}
247
 
250 naveen 248
 
1051 rajveer 249
 
250 naveen 250
	    	// Add entity's category slides first
242 naveen 251
    		List<Long> slideDefIDs = new ArrayList<Long>();
252
    		for(String strSlideDefID : strSlideDefIDs) {
253
    			slideDefIDs.add(new Long(Long.parseLong(strSlideDefID)));
480 rajveer 254
    			if(!sequence.contains(new Long(Long.parseLong(strSlideDefID)))){
255
    				sequence.add(new Long(Long.parseLong(strSlideDefID)));
256
    			}
242 naveen 257
    		}
258
 
1051 rajveer 259
        	log.info("S2"+sequence);
499 rajveer 260
			long parentCatID  = (defs.getCategory(entity.getCategoryID())).getParentCategory().getID();
261
 
262
        	List<Category> cats = defs.getChildrenCategories(parentCatID);
263
 
250 naveen 264
        	// Add slides borrowed from other categories
265
        	for(Category cat : cats) {
266
        		Long lCat = new Long(cat.getID());
1051 rajveer 267
        		String[] strCatSlideDefIDs = this.reqparams.get(lCat.toString());
250 naveen 268
        		if(strCatSlideDefIDs != null && strCatSlideDefIDs.length > 0) {
269
            		for(String strCatSlideDefID : strCatSlideDefIDs) {
480 rajveer 270
            			if(!lCat.equals(catId) && !sequence.contains(new Long(Long.parseLong(strCatSlideDefID)))){
271
            				sequence.add(new Long(Long.parseLong(strCatSlideDefID)));
1051 rajveer 272
            				log.info("S3"+sequence);
480 rajveer 273
            			}
250 naveen 274
            		}
275
        		}
276
        	}
480 rajveer 277
 
1051 rajveer 278
 
279
        	//FIXME To remove not required slide ids and slides
499 rajveer 280
        	// to remove obsolete elements
1051 rajveer 281
        	/*
499 rajveer 282
        	List<Long> removeList = new ArrayList<Long>();
480 rajveer 283
 
499 rajveer 284
        	for(Long slideId: sequence){
285
        		boolean isContains = false;
286
        		for(List<Long> catwiseList: this.catSlides.values()){
287
        			if(catwiseList.contains(slideId)){
288
        				isContains = true;
289
        			}
290
        		}
291
        		if(!isContains){
292
        			removeList.add(slideId);
293
        		}
294
        	}
1051 rajveer 295
        	log.info("To remove"+removeList);
499 rajveer 296
        	for(Long slideId: removeList){
297
        		sequence.remove(slideId);
298
        	}
1051 rajveer 299
        	*/
499 rajveer 300
        	// end 
301
 
250 naveen 302
 
249 naveen 303
	    	// Delete slides no longer present in the list
304
	    	List<Slide> slides = entity.getSlides();
250 naveen 305
	    	if(slides != null) {
306
		    	List<Slide> deletedSlides = new ArrayList<Slide>();
307
		    	for(Slide slide : slides) {
308
		    		Long lSlideDefID = new Long(slide.getSlideDefinitionID());
1051 rajveer 309
 
310
		    		log.info(sequence);
311
		    		if(!sequence.contains(lSlideDefID)) {
250 naveen 312
		    			log.info("deleted lSlideDefID:" + lSlideDefID);
313
		    			deletedSlides.add(slide);
314
		    		}
315
		    	}
316
 
317
		    	for(Slide deletedSlide : deletedSlides) {
318
		    		slides.remove(deletedSlide);
319
		    	}
249 naveen 320
	    	}
321
 
1051 rajveer 322
	    	CreationUtils.updateEntity(entity);
323
 
250 naveen 324
	    	if(this.reqparams.containsKey("save")) {
325
		    	this.redirectURL = "/entity";
249 naveen 326
	    	}
250 naveen 327
	    	else {
328
		    	this.redirectURL = "/entity/" + this.getId() + "/edit" +
329
		    		"?slideDefID=" + slideDefIDs.get(0);
330
	    	}
249 naveen 331
 
242 naveen 332
	        return "redirect";
333
		} catch (Exception e) {
334
			log.error(CreationUtils.getStackTrace(e));
335
			this.setErrorString(CreationUtils.getStackTrace(e));
336
			return "fatal";
337
		}
338
    }
339
 
340
    /**
341
     * 
342
     */
343
	@Override
344
	public void setParameters(Map<String, String[]> reqmap) {
345
		log.info("setParameters:" + reqmap);
346
 
347
		this.reqparams = reqmap;
348
	}
349
 
350
	/**
351
	 * @param id the id to set
352
	 */
353
	public void setId(String id) {
354
		this.id = id;
355
	}
356
 
357
	/**
358
	 * @return the id
359
	 */
360
	public String getId() {
361
		return id;
362
	}
363
 
364
	/**
365
	 * 
366
	 * @return
367
	 */
368
	public List<List<String[]>> getAllSlidesData() {
369
		return this.allSlidesData;
370
	}
371
 
372
	/**
373
	 * 
374
	 * @return
375
	 */
376
    public String getUrl() {
377
    	return this.redirectURL;
378
    }
379
 
380
	/**
381
	 * @param errorString the exceptionString to set
382
	 */
383
	public void setErrorString(String errorString) {
384
	}
385
 
386
	/**
387
	 * 
388
	 * @return
389
	 */
390
	public List<String> getMandatorySlideLabels() {
391
		List<String[]> slidesdata = this.allSlidesData.get(0);
392
 
393
		List<String> mandatorySlideLabels = new ArrayList<String>();
394
		for(String[] data : slidesdata) {
395
			if("Mandatory".equals(data[4])) {
396
				mandatorySlideLabels.add(data[3]);
397
			}
398
		}
399
 
400
		return mandatorySlideLabels;
401
	}
402
 
403
	/**
404
	 * 
405
	 * @param catID
406
	 * @param selection
407
	 * @return
408
	 * @throws Exception
409
	 */
410
    private List<String[]> getSlidesData(long catID, List<Long> selection, 
411
    		boolean isEntityCategory) throws Exception {
250 naveen 412
    	log.info("catID:" + catID);
242 naveen 413
		List<Long> slideDefIDs = defs.getCategorySlideSequence(catID);
250 naveen 414
		log.info("slideDefIDs:" + slideDefIDs);
242 naveen 415
 
416
		List<CategorySlideDefinition> catSlideDefs = 
417
			defs.getCategorySlideDefinitions(catID);
250 naveen 418
		log.info("catSlideDefs:" + catSlideDefs);
242 naveen 419
 
420
		// Convert it into Map, this will help put CategorySlideDefinition
421
		// objects in sequence
422
		// FIXME - Quick and dirty
423
		List<Long> excludeList = new ArrayList<Long>();
424
		for(CategorySlideDefinition catSlideDef : catSlideDefs) {
425
			Long slideDefID = new Long(catSlideDef.getSlideDefintionID());
426
 
427
			if(!this.mapAllCatSlideDefs.containsKey(slideDefID)) {
428
				this.mapAllCatSlideDefs.put(slideDefID, catSlideDef);
429
			}
430
			else {
431
				excludeList.add(slideDefID);
432
			}
433
		}
250 naveen 434
		log.info("excludeList:" + excludeList);
242 naveen 435
 
436
		List<String[]> slidesData = new ArrayList<String[]>();
437
 
438
		String categoryLabel = defs.getCategory(catID).getLabel();
439
 
440
		for(Long slideDefID : slideDefIDs) {
441
			// Do not repeat if already covered
442
			if(excludeList.contains(slideDefID)) {
443
				continue;
444
			}
445
 
953 chandransh 446
			// Category slide definition for the slide def id. 
447
			CategorySlideDefinition catSlideDef = this.mapAllCatSlideDefs.get(slideDefID);
448
			log.info("catSlideDef: " + catSlideDef);
242 naveen 449
 
953 chandransh 450
			String slideLabel = defs.getSlideDefinition(catSlideDef.getSlideDefintionID()).getLabel();
242 naveen 451
 
452
			Long lSlideDefID = new Long(catSlideDef.getSlideDefintionID());
453
 
454
			String selected = "0";
455
			if(selection != null) {
456
				selected = selection.contains(lSlideDefID) ? "1" : "0";
457
			}
458
			else if(isEntityCategory) {
459
				String edImp = catSlideDef.getEditorialImportance().toString();
460
				selected = (edImp.equals("Mandatory") || 
461
					edImp.endsWith("Recommended")) ? "1" : "0";
462
			}
463
 
464
			String[] data = new String[] {
465
				new Long(catID).toString(),
466
				categoryLabel,
467
				lSlideDefID.toString(),
468
				slideLabel,
469
				catSlideDef.getEditorialImportance().toString(),
470
				selected
471
			};
472
 
473
			slidesData.add(data);
474
		}
475
 
476
		return slidesData;
477
	}
1051 rajveer 478
 
479
    public List<Long> getSlideSequence(){
480
    	return this.entity.getSlideSequence();
481
    }
242 naveen 482
 
483
}