Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
479 rajveer 1
package in.shop2020.metamodel.util;
2
 
3
import in.shop2020.metamodel.core.Entity;
1050 rajveer 4
import in.shop2020.metamodel.core.EntityState;
1153 rajveer 5
import in.shop2020.metamodel.core.Feature;
6
import in.shop2020.metamodel.core.Slide;
1165 rajveer 7
import in.shop2020.metamodel.definitions.Catalog;
8
import in.shop2020.metamodel.definitions.Category;
9
import in.shop2020.metamodel.definitions.CategorySlideDefinition;
479 rajveer 10
import in.shop2020.metamodel.util.CN;
1050 rajveer 11
import in.shop2020.storage.bdb.StorageManager;
479 rajveer 12
 
13
import java.io.PrintWriter;
14
import java.io.StringWriter;
15
import java.io.Writer;
1153 rajveer 16
import java.util.ArrayList;
1050 rajveer 17
import java.util.Collection;
479 rajveer 18
import java.util.List;
19
import java.util.Map;
20
 
21
/**
1154 rajveer 22
 * All storage and retrival utility methods
1050 rajveer 23
 * @author rajveer
479 rajveer 24
 *
25
 */
26
public class CreationUtils {
1050 rajveer 27
 
28
	private static final String LEARNED_BULLETS = "LEARNED_BULLETS";
29
	private static final String DEFAULT_ENTITY_SCORES = "DEFAULT_ENTITY_SCORES";
30
	private static final String FACET_VALUES = "FACET_VALUES";
31
	private static final String SLIDE_SCORES = "SLIDE_SCORES";
1443 rajveer 32
	private static final String CONTENT_GENERATION_TIME = "CONTENT_GENERATION_TIME";
1050 rajveer 33
 
479 rajveer 34
 
35
	/**
36
	 * 
1050 rajveer 37
	 * @param aThrowable
479 rajveer 38
	 * @return
39
	 */
1050 rajveer 40
	public static String getStackTrace(Throwable aThrowable) {
41
	    final Writer result = new StringWriter();
42
	    final PrintWriter printWriter = new PrintWriter(result);
43
	    aThrowable.printStackTrace(printWriter);
44
	    return result.toString();
479 rajveer 45
	}
46
 
47
	/**
48
	 * 
1050 rajveer 49
	 * @param entity
479 rajveer 50
	 * @throws Exception
51
	 */
1050 rajveer 52
	public static void storeLearnedBullets(Map<Long, List<ExpandedBullet>> learnedBullets) throws Exception {
53
		StorageManager.getStorageManager().storeDataObject(CreationUtils.LEARNED_BULLETS, learnedBullets);		
479 rajveer 54
	}
55
 
1154 rajveer 56
	/**
57
	 * 
58
	 * @return
59
	 * @throws Exception
60
	 */
479 rajveer 61
	@SuppressWarnings("unchecked")
1050 rajveer 62
	public static Map<Long, List<ExpandedBullet>> getLearnedBullets() throws Exception {
63
		return (Map<Long, List<ExpandedBullet>>) StorageManager.getStorageManager().getDataObject(CreationUtils.LEARNED_BULLETS);		
479 rajveer 64
	}
65
 
1154 rajveer 66
	/**
67
	 * 
68
	 * @param featureDefinitionID
69
	 * @return
70
	 * @throws Exception
71
	 */
1050 rajveer 72
	@SuppressWarnings("unchecked")
73
	public static List<ExpandedBullet> getLearnedBullets(long featureDefinitionID) throws Exception {
74
		Map<Long, List<ExpandedBullet>> learnedBullets = (Map<Long, List<ExpandedBullet>>) StorageManager.getStorageManager().getDataObject(CreationUtils.LEARNED_BULLETS);
75
		if(learnedBullets==null){
76
			return null;
479 rajveer 77
		}
1050 rajveer 78
		return learnedBullets.get(featureDefinitionID);
479 rajveer 79
	}
1050 rajveer 80
 
1154 rajveer 81
	/**
82
	 * 
83
	 * @param facetIDFacetValues
84
	 * @throws Exception
85
	 */
1050 rajveer 86
	public static void storeFacetValues(Map<Long, List<String>> facetIDFacetValues) throws Exception {
87
		StorageManager.getStorageManager().storeDataObject(CreationUtils.FACET_VALUES, facetIDFacetValues);
479 rajveer 88
	}
1050 rajveer 89
 
1154 rajveer 90
	/**
91
	 * 
92
	 * @return
93
	 * @throws Exception
94
	 */
1050 rajveer 95
	@SuppressWarnings("unchecked")
96
	public static Map<Long, List<String>>  getFacetValues() throws Exception {
97
		return (Map<Long, List<String>>) StorageManager.getStorageManager().getDataObject(CreationUtils.FACET_VALUES);
479 rajveer 98
	}
99
 
1154 rajveer 100
	/**
101
	 * 
102
	 * @param facetDefinitionID
103
	 * @return
104
	 * @throws Exception
105
	 */
1050 rajveer 106
	@SuppressWarnings("unchecked")
107
	public static List<String>  getFacetValues(long facetDefinitionID) throws Exception {
108
		Map<Long, List<String>> facetValues = (Map<Long, List<String>>) StorageManager.getStorageManager().getDataObject(CreationUtils.FACET_VALUES);
109
		return facetValues.get(facetDefinitionID);
479 rajveer 110
	}
1050 rajveer 111
 
1154 rajveer 112
	/**
113
	 * 
114
	 * @param slideScoresByEntity
115
	 * @throws Exception
116
	 */
1050 rajveer 117
	public static void storeSlideScores( Map<Long, Map<Long, Integer>> slideScoresByEntity) throws Exception {
118
		StorageManager.getStorageManager().storeDataObject(CreationUtils.SLIDE_SCORES, slideScoresByEntity);
119
	}
120
 
1154 rajveer 121
	/**
122
	 * 
123
	 * @return
124
	 * @throws Exception
125
	 */
479 rajveer 126
	@SuppressWarnings("unchecked")
1050 rajveer 127
	public static Map<Long, Map<Long, Integer>> getSlideScores() throws Exception {
128
		return (Map<Long, Map<Long, Integer>>) StorageManager.getStorageManager().getDataObject(CreationUtils.SLIDE_SCORES);
479 rajveer 129
	}
130
 
1154 rajveer 131
	/**
132
	 * 
133
	 * @param entityID
134
	 * @return
135
	 * @throws Exception
136
	 */
1050 rajveer 137
	@SuppressWarnings("unchecked")
138
	public static Map<Long, Integer> getSlideComparisonScores(long entityID) throws Exception{
139
		Map<Long, Map<Long, Integer>> slideScores = (Map<Long, Map<Long, Integer>>) StorageManager.getStorageManager().getDataObject(CreationUtils.SLIDE_SCORES);
140
		return slideScores.get(entityID);
479 rajveer 141
	}
142
 
1050 rajveer 143
 
1154 rajveer 144
	/**
145
	 * 
146
	 * @param finalScoreByEntityID
147
	 * @throws Exception
148
	 */
1050 rajveer 149
	public static void storeDefaultEntityScores(Map<Long, Integer> finalScoreByEntityID) throws Exception {
150
		StorageManager.getStorageManager().storeDataObject(CreationUtils.DEFAULT_ENTITY_SCORES, finalScoreByEntityID);
479 rajveer 151
	}
152
 
1154 rajveer 153
	/**
154
	 * 
155
	 * @return
156
	 * @throws Exception
157
	 */
1050 rajveer 158
	@SuppressWarnings("unchecked")
159
	public static Map<Long, Integer> getDefaultEntityScores() throws Exception {
160
		return (Map<Long, Integer>) StorageManager.getStorageManager().getDataObject(CreationUtils.DEFAULT_ENTITY_SCORES);
479 rajveer 161
	}
162
 
1154 rajveer 163
	/**
164
	 * 
165
	 * @param entityID
166
	 * @return
167
	 * @throws Exception
168
	 */
1050 rajveer 169
	@SuppressWarnings("unchecked")
170
	public static Integer getEntityComparisonScores(long entityID) throws Exception {
171
		Map<Long, Integer> scoresMap =  (Map<Long, Integer>) StorageManager.getStorageManager().getDataObject(CreationUtils.DEFAULT_ENTITY_SCORES);
172
		Integer objScore = scoresMap.get(entityID);
173
		if(objScore==null){
174
			return -1;
479 rajveer 175
		}
1050 rajveer 176
		return objScore;
479 rajveer 177
	}
178
 
179
 
1443 rajveer 180
	/**
181
	 * 
182
	 * @return
183
	 * @throws Exception
184
	 */
185
	public static Long getLastContentGenerationTime() throws Exception {
186
		return (Long) StorageManager.getStorageManager().getDataObject(CreationUtils.CONTENT_GENERATION_TIME);
187
	}
479 rajveer 188
 
189
	/**
1443 rajveer 190
	 * 
191
	 * @param storageTime
192
	 * @throws Exception
193
	 */
194
	public static void storeLastContentGenerationTime(Long storageTime) throws Exception {
195
		StorageManager.getStorageManager().storeDataObject(CreationUtils.CONTENT_GENERATION_TIME, storageTime);
196
	}
197
	/**
1050 rajveer 198
	 * Resolves Entity ID into Entity object
479 rajveer 199
	 * 
200
	 * @param entityID
1050 rajveer 201
	 * @return Entity
202
	 * @throws Exception 
479 rajveer 203
	 */
1050 rajveer 204
	public static Entity getEntity(long entityID) throws Exception{
205
		return StorageManager.getStorageManager().getEntity(entityID);
479 rajveer 206
	}
207
 
1154 rajveer 208
	/**
209
	 * 
210
	 * @param entity
211
	 * @throws Exception
212
	 */
1050 rajveer 213
	public static void updateEntity(Entity entity) throws Exception {
1379 rajveer 214
		entity.reorderSlides(entity.getSlideSequence());
1050 rajveer 215
		StorageManager.getStorageManager().updateEntity(entity);
1226 rajveer 216
 
217
		//This should not happen here. Reordering should be done manually.
1379 rajveer 218
 
1365 rajveer 219
		CreationUtils.learn(entity);
479 rajveer 220
	}
221
 
1154 rajveer 222
	/**
223
	 * 
224
	 * @param entity
225
	 * @param entityMetadata
226
	 * @throws Exception
227
	 */
1050 rajveer 228
	public static void createEntity(Entity entity, EntityState entityMetadata) throws Exception {
229
		StorageManager.getStorageManager().createEntity(entity, entityMetadata);
479 rajveer 230
	}
1050 rajveer 231
 
1154 rajveer 232
	/**
233
	 * 
234
	 * @param entityId
235
	 * @throws Exception
236
	 */
1050 rajveer 237
	public static void deleteEntity(long entityId) throws Exception  {
238
		StorageManager.getStorageManager().deleteEntity(entityId);
479 rajveer 239
	}
240
 
1050 rajveer 241
 
1154 rajveer 242
	/**
243
	 * 
244
	 * @return
245
	 * @throws Exception
246
	 */
1050 rajveer 247
	public static Map<Long, EntityState> getEntitiesState() throws Exception {
248
		return StorageManager.getStorageManager().getEntitiesMetadata();
479 rajveer 249
	}
250
 
1154 rajveer 251
	/**
252
	 * 
253
	 * @param entityId
254
	 * @return
255
	 * @throws Exception
256
	 */
1050 rajveer 257
	public static EntityState getEntityState(long entityId) throws Exception {
258
		return StorageManager.getStorageManager().getEntityMetadata(entityId);
259
	}
479 rajveer 260
 
1154 rajveer 261
	/**
262
	 * 
263
	 * @param entityMetadata
264
	 * @throws Exception
265
	 */
1050 rajveer 266
	public static void updateEntityState(EntityState entityMetadata) throws Exception {
267
		StorageManager.getStorageManager().updateEntityMetadata(entityMetadata);
479 rajveer 268
	}
1050 rajveer 269
 
1154 rajveer 270
	/**
271
	 * 
272
	 * @param entity
273
	 * @throws Exception
274
	 */
1050 rajveer 275
	private static void learn(Entity entity) throws Exception{
276
		CN cn = new CN();
277
		cn.learn(entity);	
278
	}
279
 
1154 rajveer 280
	/**
281
	 * 
282
	 * @return
283
	 * @throws Exception
284
	 */
1050 rajveer 285
	public static Map<Long, Entity> getEntities() throws Exception {
286
		return StorageManager.getStorageManager().getEntities();
287
	}
288
 
1154 rajveer 289
	/**
290
	 * 
291
	 * @param categoryId
292
	 * @return
293
	 * @throws Exception
294
	 */
1050 rajveer 295
	public static Collection<Entity> getEntities(long categoryId) throws Exception {
296
		return StorageManager.getStorageManager().getEntitisByCategory(categoryId);
297
	}
1153 rajveer 298
 
299
	/**
300
	 * 
301
	 * @param slide
302
	 * @param featureDefinitionID
303
	 * @return Feature
304
	 */
305
	public static Feature getFeature(Slide slide, long featureDefinitionID) {
306
		List<Feature> features = slide.getFeatures();
307
 
308
		if(features != null) {
309
			for(Feature feature : features) {
310
				if(feature.getFeatureDefinitionID() == featureDefinitionID) {
311
					return feature;
312
				}
313
			}
314
		}
315
 
316
		Feature feature = null;
317
 
318
		List<Slide> childrenSlides = slide.getChildrenSlides();
319
		if(childrenSlides != null) {
320
			for(Slide childSlide : childrenSlides) {
321
 
322
				feature = CreationUtils.getFeature(childSlide, featureDefinitionID);
323
				if(feature == null) {
324
					continue;
325
				}
326
				else {
327
					break;
328
				}
329
			}
330
		}
331
 
332
		return feature;
333
	}
479 rajveer 334
 
1153 rajveer 335
 
336
	/**
337
	 * Utility method to find out Slide object in Entity instance
338
	 * 
339
	 * @param entityID
340
	 * @param slideDefinitionID
341
	 * @return
342
	 * @throws Exception 
343
	 */
344
	public static Slide getSlide(long entityID, long slideDefinitionID) 
345
		throws Exception {
346
		Entity entity = CreationUtils.getEntity(entityID);
347
 
348
		List<Slide> slides = entity.getSlides();
349
 
350
		Slide resultSlide = null;
351
 
352
		if(slides != null) {
353
			for(Slide slide : slides) {
354
 
355
				if(slide.getSlideDefinitionID() == slideDefinitionID) {
356
					return slide;
357
				}
358
 
359
				resultSlide = CreationUtils.getSlide(slide, slideDefinitionID);
360
 
361
				if(resultSlide == null) {
362
					continue;
363
				}
364
				else {
365
					break;
366
				}
367
			}
368
		}
369
 
370
		return resultSlide;
371
	}
372
 
373
 
374
	/**
375
	 * 
376
	 * @param slide
377
	 * @param slideDefinitionID
378
	 * @return
379
	 */
380
	public static Slide getSlide(Slide slide, long slideDefinitionID) {
381
 
382
		List<Slide> childrenSlides = slide.getChildrenSlides();
383
 
384
		Slide resultSlide = null;
385
 
386
		if(childrenSlides != null) {
387
			for(Slide childSlide : childrenSlides) {
388
				if(childSlide.getSlideDefinitionID() == slideDefinitionID) {
389
					return childSlide;
390
				}
391
 
392
				resultSlide = CreationUtils.getSlide(childSlide, slideDefinitionID);
393
				if(resultSlide == null) {
394
					continue;
395
				}
396
				else {
397
					break;
398
				}
399
			}
400
		}
401
 
402
		return resultSlide;
403
	}
404
 
405
	/**
406
	 * Utility method to find out Feature object in Entity instance
407
	 * 
408
	 * @param entityID
409
	 * @param featureDefinitionID
410
	 * @return Feature
411
	 * @throws Exception 
412
	 */
413
	public static Feature getFeature(long entityID, long featureDefinitionID) 
414
		throws Exception {
415
		Entity entity = CreationUtils.getEntity(entityID);
416
 
417
		Feature feature = null;
418
 
419
		List<Slide> slides = entity.getSlides();
420
		for(Slide slide : slides) {
421
			feature = CreationUtils.getFeature(slide, featureDefinitionID);
422
 
423
			// Until all slides are searched
424
			if(feature == null) {
425
				continue;
426
			}
427
			else {
428
				break;
429
			}
430
		}
431
 
432
		return feature;
433
	}
434
 
435
 
436
	/**
437
	 * Returns expand form of entity object. All references are resolved into 
438
	 * corresponding detail object
439
	 * 
440
	 * @param entityID
441
	 * @return ExpandedEntity 
442
	 * @throws Exception 
443
	 */
444
	public static ExpandedEntity getExpandedEntity(long entityID) throws Exception {
445
		Entity entity = CreationUtils.getEntity(entityID);
446
		if(entity==null){
447
			System.out.println("Entity is null");
448
			return null;
449
		}
450
		System.out.println( entity.getCategoryID());
451
		ExpandedEntity expEntity = new ExpandedEntity(entity);
452
		return expEntity;
453
	}
454
 
455
 
456
	/**
457
	 * Returns list of borrowed slides
458
	 * 
459
	 * @param entity
460
	 * @return list of borrowed slides
461
	 */
462
	public static List<Slide> getBorrowedSlides(Entity entity) {
463
		List<Slide> borrowedSlides = new ArrayList<Slide>();
464
 
465
		List<Slide> slides = entity.getSlides();
466
 
467
		for(Slide slide : slides) {
1165 rajveer 468
			if(CreationUtils.isBorrowedSlide(slide.getSlideDefinitionID(), entity.getCategoryID())) {
1153 rajveer 469
				borrowedSlides.add(slide);
470
			}
471
		}
472
 
473
		return borrowedSlides;
474
	}
475
 
476
	/**
477
	 * Returns first parent slide with matching label
478
	 * 
479
	 * @param expEntity2
480
	 * @param slideLabel
481
	 * @return Null if not found
482
	 */
483
	public static ExpandedSlide getParentExpandedSlide(ExpandedEntity expEntity2, String slideLabel) {
484
 
485
		ExpandedSlide matchingSlide = null;
486
		List<ExpandedSlide> expSlides = expEntity2.getExpandedSlides();
487
 
488
		for(ExpandedSlide expSlide : expSlides) {
489
			if(expSlide.getSlideDefinition().getLabel().equals(slideLabel)) {
490
				matchingSlide = expSlide;
491
				break;
492
			}
493
		}
494
 
495
		return matchingSlide;
496
	}
1165 rajveer 497
 
498
	/**
499
	 * 
500
	 * @param slideDefinitionID
501
	 * @param categoryID
502
	 * @return
503
	 */
504
	public static boolean isBorrowedSlide(long slideDefinitionID,long categoryID) {
1226 rajveer 505
		List<CategorySlideDefinition> slideDefinitions;
1165 rajveer 506
		try {
1226 rajveer 507
			slideDefinitions = Catalog.getInstance().getDefinitionsContainer().getCategorySlideDefinitions(categoryID);
508
			for(CategorySlideDefinition slideDef: slideDefinitions){
509
				if(slideDefinitionID == slideDef.getSlideDefintionID()){
510
					return false;
511
				}
1165 rajveer 512
			}
513
		} catch (Exception e) {
514
			// TODO Auto-generated catch block
515
			e.printStackTrace();
516
		}
1226 rajveer 517
		return true;
1165 rajveer 518
	}
519
 
520
	/**
521
	 * 
522
	 * @param slideDefinitionID
523
	 * @param categoryID
524
	 * @return
525
	 */
526
	public static long getBorrowedCategoryID(long slideDefinitionID, long categoryID) {
527
		try {
1226 rajveer 528
			List<CategorySlideDefinition> slideDefinitions = Catalog.getInstance().getDefinitionsContainer().getCategorySlideDefinitions(categoryID);
529
			for(CategorySlideDefinition slideDef: slideDefinitions){
530
				if(slideDefinitionID == slideDef.getSlideDefintionID()){
531
					return categoryID;
532
				}
533
			}
534
 
535
 
536
			List<Category> cats =  Catalog.getInstance().getDefinitionsContainer().getCategory(categoryID).getParentCategory().getChildrenCategory();
537
			for(Category cat: cats){
538
				if(cat.getID() == categoryID){
539
					continue;
540
				}else{
541
					List<CategorySlideDefinition> slideDefs = Catalog.getInstance().getDefinitionsContainer().getCategorySlideDefinitions(cat.getID());
542
					for(CategorySlideDefinition slideDef: slideDefs){
543
						if(slideDefinitionID == slideDef.getSlideDefintionID()){
1165 rajveer 544
							return cat.getID();
545
						}
546
					}
1226 rajveer 547
 
1165 rajveer 548
				}
549
			}
1226 rajveer 550
 
1165 rajveer 551
		} catch (Exception e) {
552
			// TODO Auto-generated catch block
553
			e.printStackTrace();
554
		}
1226 rajveer 555
		return categoryID;
1165 rajveer 556
	}
557
 
479 rajveer 558
}