Subversion Repositories SmartDukaan

Rev

Rev 1081 | Rev 2424 | Go to most recent revision | Details | Compare with Previous | 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
1152 rajveer 236
	    	String[] strSlideDefIDs = this.reqparams.get(new Long(entity.getCategoryID()).toString());
250 naveen 237
 
1152 rajveer 238
 
239
 
250 naveen 240
	    	log.info("strSlideDefIDs:" + Arrays.toString(strSlideDefIDs));
241
 
1152 rajveer 242
 
243
 
1051 rajveer 244
	    	List<Long> sequence= entity.getSlideSequence();
245
	    	log.info("S1"+sequence);
480 rajveer 246
        	if(sequence == null){
247
        		sequence = new ArrayList<Long>();
1051 rajveer 248
        		entity.setSlideSequence(sequence);
480 rajveer 249
        	}
250
 
1152 rajveer 251
        	List<Long> newSequence = new ArrayList<Long>();
250 naveen 252
 
253
	    	// Add entity's category slides first
242 naveen 254
    		List<Long> slideDefIDs = new ArrayList<Long>();
255
    		for(String strSlideDefID : strSlideDefIDs) {
1152 rajveer 256
    			newSequence.add(new Long(Long.parseLong(strSlideDefID)));
242 naveen 257
    			slideDefIDs.add(new Long(Long.parseLong(strSlideDefID)));
480 rajveer 258
    			if(!sequence.contains(new Long(Long.parseLong(strSlideDefID)))){
259
    				sequence.add(new Long(Long.parseLong(strSlideDefID)));
260
    			}
242 naveen 261
    		}
262
 
1051 rajveer 263
        	log.info("S2"+sequence);
499 rajveer 264
			long parentCatID  = (defs.getCategory(entity.getCategoryID())).getParentCategory().getID();
265
 
266
        	List<Category> cats = defs.getChildrenCategories(parentCatID);
267
 
250 naveen 268
        	// Add slides borrowed from other categories
269
        	for(Category cat : cats) {
270
        		Long lCat = new Long(cat.getID());
1051 rajveer 271
        		String[] strCatSlideDefIDs = this.reqparams.get(lCat.toString());
250 naveen 272
        		if(strCatSlideDefIDs != null && strCatSlideDefIDs.length > 0) {
273
            		for(String strCatSlideDefID : strCatSlideDefIDs) {
1152 rajveer 274
            			newSequence.add(new Long(Long.parseLong(strCatSlideDefID)));
480 rajveer 275
            			if(!lCat.equals(catId) && !sequence.contains(new Long(Long.parseLong(strCatSlideDefID)))){
276
            				sequence.add(new Long(Long.parseLong(strCatSlideDefID)));
1051 rajveer 277
            				log.info("S3"+sequence);
480 rajveer 278
            			}
250 naveen 279
            		}
280
        		}
281
        	}
480 rajveer 282
 
1051 rajveer 283
 
284
        	//FIXME To remove not required slide ids and slides
499 rajveer 285
        	// to remove obsolete elements
1152 rajveer 286
 
499 rajveer 287
        	List<Long> removeList = new ArrayList<Long>();
288
        	for(Long slideId: sequence){
289
        		boolean isContains = false;
1152 rajveer 290
        		if(newSequence.contains(slideId)){
291
        			isContains = true;
499 rajveer 292
        		}
293
        		if(!isContains){
294
        			removeList.add(slideId);
295
        		}
296
        	}
1051 rajveer 297
        	log.info("To remove"+removeList);
499 rajveer 298
        	for(Long slideId: removeList){
299
        		sequence.remove(slideId);
300
        	}
301
        	// end 
302
 
250 naveen 303
 
249 naveen 304
	    	// Delete slides no longer present in the list
305
	    	List<Slide> slides = entity.getSlides();
250 naveen 306
	    	if(slides != null) {
307
		    	List<Slide> deletedSlides = new ArrayList<Slide>();
308
		    	for(Slide slide : slides) {
309
		    		Long lSlideDefID = new Long(slide.getSlideDefinitionID());
1051 rajveer 310
 
311
		    		log.info(sequence);
312
		    		if(!sequence.contains(lSlideDefID)) {
250 naveen 313
		    			log.info("deleted lSlideDefID:" + lSlideDefID);
314
		    			deletedSlides.add(slide);
315
		    		}
316
		    	}
317
 
318
		    	for(Slide deletedSlide : deletedSlides) {
319
		    		slides.remove(deletedSlide);
320
		    	}
249 naveen 321
	    	}
322
 
1051 rajveer 323
	    	CreationUtils.updateEntity(entity);
324
 
250 naveen 325
	    	if(this.reqparams.containsKey("save")) {
326
		    	this.redirectURL = "/entity";
249 naveen 327
	    	}
250 naveen 328
	    	else {
329
		    	this.redirectURL = "/entity/" + this.getId() + "/edit" +
330
		    		"?slideDefID=" + slideDefIDs.get(0);
331
	    	}
249 naveen 332
 
242 naveen 333
	        return "redirect";
334
		} catch (Exception e) {
335
			log.error(CreationUtils.getStackTrace(e));
336
			this.setErrorString(CreationUtils.getStackTrace(e));
337
			return "fatal";
338
		}
339
    }
340
 
341
    /**
342
     * 
343
     */
344
	@Override
345
	public void setParameters(Map<String, String[]> reqmap) {
346
		log.info("setParameters:" + reqmap);
347
 
348
		this.reqparams = reqmap;
349
	}
350
 
351
	/**
352
	 * @param id the id to set
353
	 */
354
	public void setId(String id) {
355
		this.id = id;
356
	}
357
 
358
	/**
359
	 * @return the id
360
	 */
361
	public String getId() {
362
		return id;
363
	}
364
 
365
	/**
366
	 * 
367
	 * @return
368
	 */
369
	public List<List<String[]>> getAllSlidesData() {
370
		return this.allSlidesData;
371
	}
372
 
373
	/**
374
	 * 
375
	 * @return
376
	 */
377
    public String getUrl() {
378
    	return this.redirectURL;
379
    }
380
 
381
	/**
382
	 * @param errorString the exceptionString to set
383
	 */
384
	public void setErrorString(String errorString) {
385
	}
386
 
387
	/**
388
	 * 
389
	 * @return
390
	 */
391
	public List<String> getMandatorySlideLabels() {
392
		List<String[]> slidesdata = this.allSlidesData.get(0);
393
 
394
		List<String> mandatorySlideLabels = new ArrayList<String>();
395
		for(String[] data : slidesdata) {
396
			if("Mandatory".equals(data[4])) {
397
				mandatorySlideLabels.add(data[3]);
398
			}
399
		}
400
 
401
		return mandatorySlideLabels;
402
	}
403
 
404
	/**
405
	 * 
406
	 * @param catID
407
	 * @param selection
408
	 * @return
409
	 * @throws Exception
410
	 */
411
    private List<String[]> getSlidesData(long catID, List<Long> selection, 
412
    		boolean isEntityCategory) throws Exception {
250 naveen 413
    	log.info("catID:" + catID);
242 naveen 414
		List<Long> slideDefIDs = defs.getCategorySlideSequence(catID);
250 naveen 415
		log.info("slideDefIDs:" + slideDefIDs);
242 naveen 416
 
417
		List<CategorySlideDefinition> catSlideDefs = 
418
			defs.getCategorySlideDefinitions(catID);
250 naveen 419
		log.info("catSlideDefs:" + catSlideDefs);
242 naveen 420
 
421
		// Convert it into Map, this will help put CategorySlideDefinition
422
		// objects in sequence
423
		// FIXME - Quick and dirty
424
		List<Long> excludeList = new ArrayList<Long>();
425
		for(CategorySlideDefinition catSlideDef : catSlideDefs) {
426
			Long slideDefID = new Long(catSlideDef.getSlideDefintionID());
427
 
428
			if(!this.mapAllCatSlideDefs.containsKey(slideDefID)) {
429
				this.mapAllCatSlideDefs.put(slideDefID, catSlideDef);
430
			}
431
			else {
432
				excludeList.add(slideDefID);
433
			}
434
		}
250 naveen 435
		log.info("excludeList:" + excludeList);
242 naveen 436
 
437
		List<String[]> slidesData = new ArrayList<String[]>();
438
 
439
		String categoryLabel = defs.getCategory(catID).getLabel();
440
 
441
		for(Long slideDefID : slideDefIDs) {
442
			// Do not repeat if already covered
443
			if(excludeList.contains(slideDefID)) {
444
				continue;
445
			}
446
 
953 chandransh 447
			// Category slide definition for the slide def id. 
448
			CategorySlideDefinition catSlideDef = this.mapAllCatSlideDefs.get(slideDefID);
449
			log.info("catSlideDef: " + catSlideDef);
242 naveen 450
 
953 chandransh 451
			String slideLabel = defs.getSlideDefinition(catSlideDef.getSlideDefintionID()).getLabel();
242 naveen 452
 
453
			Long lSlideDefID = new Long(catSlideDef.getSlideDefintionID());
454
 
455
			String selected = "0";
456
			if(selection != null) {
457
				selected = selection.contains(lSlideDefID) ? "1" : "0";
458
			}
459
			else if(isEntityCategory) {
460
				String edImp = catSlideDef.getEditorialImportance().toString();
461
				selected = (edImp.equals("Mandatory") || 
462
					edImp.endsWith("Recommended")) ? "1" : "0";
463
			}
464
 
465
			String[] data = new String[] {
466
				new Long(catID).toString(),
467
				categoryLabel,
468
				lSlideDefID.toString(),
469
				slideLabel,
470
				catSlideDef.getEditorialImportance().toString(),
471
				selected
472
			};
473
 
474
			slidesData.add(data);
475
		}
476
 
477
		return slidesData;
478
	}
1051 rajveer 479
 
480
    public List<Long> getSlideSequence(){
481
    	return this.entity.getSlideSequence();
482
    }
242 naveen 483
 
484
}