Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
10 shop2020 1
/**
2
 * 
3
 */
4
package in.shop2020.metamodel.definitions;
5
 
17 naveen 6
import in.shop2020.metamodel.util.DBUtils;
45 naveen 7
import in.shop2020.metamodel.util.ExpandedCategory;
17 naveen 8
import in.shop2020.metamodel.util.MM;
9
 
10 shop2020 10
import java.io.Serializable;
18 naveen 11
import java.util.ArrayList;
12
import java.util.Iterator;
13
import java.util.List;
10 shop2020 14
import java.util.Map;
15
 
16
/**
49 naveen 17
 * Single point of access to all definition objects
18
 * 
10 shop2020 19
 * @author naveen
20
 *
21
 */
22
public class DefinitionsContainer implements Serializable {
23
 
41 naveen 24
	/** 
10 shop2020 25
	 * 
26
	 */
27
	private static final long serialVersionUID = 1L;
49 naveen 28
 
29
	/**
30
	 * Hashtable of Category ID to Category object
31
	 */
10 shop2020 32
	private Map<Long, Category> categories;
49 naveen 33
 
34
	/**
35
	 * Hashtable of Slide ID to SlideDefinition object
36
	 */
10 shop2020 37
	private Map<Long, SlideDefinition> slideDefinitions;
49 naveen 38
 
39
	/**
40
	 * Hashtable of Feature Definition ID to FeatureDefinition object
41
	 */
10 shop2020 42
	private Map<Long, FeatureDefinition> featureDefinitions;
49 naveen 43
 
44
	/**
45
	 * Hashtable of Datatype Definition ID to DatatypeDefinition object
46
	 */
10 shop2020 47
	private Map<Long, DatatypeDefinition> datatypeDefinitions;
49 naveen 48
 
49
	/**
50
	 * Hashtable of Enum value ID to EnumValue object
51
	 */
24 naveen 52
	private Map<Long, EnumValue> enumValues;
49 naveen 53
 
54
	/**
55
	 * Hashtable of Unit ID to Unit object
56
	 */
10 shop2020 57
	private Map<Long, Unit> units;
58
 
59
	/**
49 naveen 60
	 * Empty constructor. Data structures are initialised as needed
10 shop2020 61
	 */
62
	public DefinitionsContainer() {
17 naveen 63
		// Lazy initialization
10 shop2020 64
	}
65
 
66
	/**
49 naveen 67
	 * Returns all Unit objects in the database
10 shop2020 68
	 * 
49 naveen 69
	 * @return Map Null if units are not imported into definitions db 
70
	 * (serialized java objects)
71
	 * 
18 naveen 72
	 * @throws Exception 
10 shop2020 73
	 */
18 naveen 74
	@SuppressWarnings("unchecked")
75
	public Map<Long, Unit> getUnits() throws Exception {		
17 naveen 76
		// De-serialize
77
		if(this.units == null) {
18 naveen 78
			String dbFile = MM.DEFINITIONS_DB_PATH + "units" + ".ser";
79
 
80
			this.units = (Map<Long, Unit>) DBUtils.read(dbFile);
17 naveen 81
		}
18 naveen 82
 
10 shop2020 83
		return this.units;
84
	}
85
 
86
	/**
49 naveen 87
	 * Resolves Unit ID into Unit object
10 shop2020 88
	 * 
49 naveen 89
	 * @param unitID Unit ID
10 shop2020 90
	 * @return Unit
18 naveen 91
	 * @throws Exception 
10 shop2020 92
	 */
18 naveen 93
	public Unit getUnit(long unitID) throws Exception {		
94
		// Initialize 
95
		if(this.units == null) {
96
			this.getUnits();
97
		}
17 naveen 98
 
10 shop2020 99
		return this.units.get(new Long(unitID));
100
	}
101
 
102
	/**
49 naveen 103
	 * Returns all DatatypeDefintion object in database
104
	 * 
105
	 * @return the datatypeDefinitions List of DatatypeDefinition objects
18 naveen 106
	 * @throws Exception 
10 shop2020 107
	 */
18 naveen 108
	@SuppressWarnings("unchecked")
109
	public Map<Long, DatatypeDefinition> getDatatypeDefinitions() 
110
		throws Exception {
111
 
112
		// De-serialize
113
		if(this.datatypeDefinitions == null) {
19 naveen 114
			String dbFile = MM.DEFINITIONS_DB_PATH + "datatypedefinitions" + 
115
				".ser";
18 naveen 116
 
117
			this.datatypeDefinitions = 
118
				(Map<Long, DatatypeDefinition>) DBUtils.read(dbFile);
119
		}
120
		return this.datatypeDefinitions;
10 shop2020 121
	}
18 naveen 122
 
123
	/**
49 naveen 124
	 * Resolves Datatype Definition ID into DatetypeDefinition object
18 naveen 125
	 * 
49 naveen 126
	 * @param unitID Unit ID
18 naveen 127
	 * @return Unit
128
	 * @throws Exception 
129
	 */
130
	public DatatypeDefinition getDatatypeDefinition(long id) throws Exception {
131
 
132
		// Initialize 
133
		if(this.datatypeDefinitions == null) {
134
			this.getDatatypeDefinitions();
135
		}
136
 
137
		return this.datatypeDefinitions.get(new Long(id));
138
	}
19 naveen 139
 
140
	/**
49 naveen 141
	 * Returns EnumValue ID for datatype definition ID and enum value string 
142
	 * to match. Match is case insensitive
19 naveen 143
	 * 
49 naveen 144
	 * @param datatypeDefID DatatypeDefinition ID
145
	 * @param value query enum value string
19 naveen 146
	 * @return long enumValueID - "-1" if not found
147
	 * @throws Exception 
148
	 */
149
	public long getEnumValueID(long datatypeDefID, String value) 
150
		throws Exception {
151
		long enumValueID = -1L;
152
 
153
		// Let the callers catch ClassCastException
154
		EnumDefinition enumDef = 
155
			(EnumDefinition)this.getDatatypeDefinition(datatypeDefID);
156
 
24 naveen 157
		List<EnumValue> enumValues = enumDef.getEnumValues();
19 naveen 158
		for(EnumValue enumValue : enumValues) {
159
			if(value.equalsIgnoreCase(enumValue.getValue())) {
160
				enumValueID = enumValue.getID();
161
				break;
162
			}
163
		}
164
 
165
		return enumValueID;
166
	}
17 naveen 167
 
10 shop2020 168
	/**
49 naveen 169
	 * Returns all category objects in the database
170
	 * 
10 shop2020 171
	 * @return the categories
17 naveen 172
	 * @throws Exception 
10 shop2020 173
	 */
17 naveen 174
	@SuppressWarnings("unchecked")
175
	public Map<Long, Category> getCategories() throws Exception {
176
 
177
		// De-serialize
178
		if(this.categories == null) {
179
			String dbFile = MM.DEFINITIONS_DB_PATH + "categories" + ".ser";
180
 
181
			this.categories = (Map<Long, Category>) DBUtils.read(dbFile);
182
		}
183
		return this.categories;
10 shop2020 184
	}
17 naveen 185
 
10 shop2020 186
	/**
49 naveen 187
	 * Resolves Category ID into Category object
17 naveen 188
	 * 
49 naveen 189
	 * @param categoryID Category ID
17 naveen 190
	 * @return Category
191
	 * @throws Exception 
10 shop2020 192
	 */
17 naveen 193
	public Category getCategory(long categoryID) throws Exception {
194
 
18 naveen 195
		// Initialize 
17 naveen 196
		if(this.categories == null) {
197
			this.getCategories();
198
		}
199
 
200
		return this.categories.get(new Long(categoryID));
10 shop2020 201
	}
17 naveen 202
 
10 shop2020 203
	/**
49 naveen 204
	 * Returns expanded Category object. All numeric identifiers are resolved 
205
	 * into detailed objects
18 naveen 206
	 * 
207
	 * @param categoryID
45 naveen 208
	 * @return ExpandedCategory
209
	 * @throws Exception
210
	 */
211
	public ExpandedCategory getExpandedCategory(long categoryID) 
212
		throws Exception {
213
		Category category = this.getCategory(categoryID);
214
 
215
		ExpandedCategory expCategory = new ExpandedCategory(category);
216
 
217
		return expCategory;
218
	}
219
 
220
	/**
49 naveen 221
	 * Returns all children categories for a Category ID
45 naveen 222
	 * 
223
	 * @param categoryID
49 naveen 224
	 * @return List<Category> Children Categories
34 naveen 225
	 * @throws Exception
226
	 */
227
	public List<Category> getChildrenCategories(long categoryID) 
228
		throws Exception {
229
 
230
		// Initialize 
231
		if(this.categories == null) {
232
			this.getCategories();
233
		}
234
 
235
		return this.categories.get(new Long(categoryID)).getChildrenCategory();
236
	}
49 naveen 237
 
34 naveen 238
	/**
49 naveen 239
	 * Returns all CategorySlideDefinition objects for a Category ID
34 naveen 240
	 * 
49 naveen 241
	 * @param categoryID Category ID
18 naveen 242
	 * @return List<CategorySlideDefinition> 
243
	 * @throws Exception 
244
	 */
245
	public List<CategorySlideDefinition> getCategorySlideDefinitions(
246
			long categoryID) throws Exception {
247
		Category category = this.getCategory(categoryID);
248
 
249
		return category.getCategorySlideDefintions();
250
	}
251
 
252
	/**
49 naveen 253
	 * Returns All SlideDefinition objects in database
254
	 * 
10 shop2020 255
	 * @return the slideDefinitions
18 naveen 256
	 * @throws Exception 
10 shop2020 257
	 */
18 naveen 258
	@SuppressWarnings("unchecked")
259
	public Map<Long, SlideDefinition> getSlideDefinitions() throws Exception {
260
 
261
		// De-serialize
262
		if(this.slideDefinitions == null) {
263
			String dbFile = MM.DEFINITIONS_DB_PATH + "slidedefinitions" + 
264
				".ser";
265
 
266
			this.slideDefinitions = 
267
				(Map<Long, SlideDefinition>) DBUtils.read(dbFile);
268
		}
269
		return this.slideDefinitions;
10 shop2020 270
	}
18 naveen 271
 
272
	/**
49 naveen 273
	 * Resolves SlideDefinition ID into SlideDefinition object
18 naveen 274
	 * 
275
	 * @param id
276
	 * @return SlideDefinition
277
	 * @throws Exception
278
	 */
279
	public SlideDefinition getSlideDefinition(long id) throws Exception {
280
 
281
		// Initialize 
282
		if(this.slideDefinitions == null) {
283
			this.getSlideDefinitions();
284
		}
285
 
286
		return this.slideDefinitions.get(new Long(id));
287
	}
288
 
289
	/**
49 naveen 290
	 * Returns SlideDefinition objects for a category and matching slide label
18 naveen 291
	 * 
19 naveen 292
	 * @param label
293
	 * @return List<SlideDefinition>
294
	 * @throws Exception
295
	 */
32 naveen 296
	public List<SlideDefinition> getSlideDefinitions(long categoryID, 
297
			String label) throws Exception {
298
 
299
		// RE-VISIT
300
		// May be we need a new data structure, category id to slide definitions
301
		// for now
302
		List<SlideDefinition> matchingSlides = new ArrayList<SlideDefinition>();
19 naveen 303
 
32 naveen 304
		List<CategorySlideDefinition> csDefs = this.getCategorySlideDefinitions(
305
				categoryID);
306
 
307
		for(CategorySlideDefinition csDef : csDefs) {
308
			SlideDefinition sDef = this.getSlideDefinition(
309
					csDef.getSlideDefintionID());
310
 
311
			if(sDef.getLabel().equalsIgnoreCase(label)) {
312
				matchingSlides.add(sDef);
313
			}
19 naveen 314
		}
315
 
32 naveen 316
		return matchingSlides;
317
	}
318
 
319
	/**
49 naveen 320
	 * Resolves Category ID into Category object
32 naveen 321
	 * 
322
	 * @param categoryID
49 naveen 323
	 * @return List<SlideDefinition> 
32 naveen 324
	 * @throws Exception
325
	 */
326
	public List<SlideDefinition> getSlideDefinitions(long categoryID) 
327
		throws Exception {
328
 
329
		// RE-VISIT
330
		// May be we need a new data structure, category id to slide definitions
331
		// for now
19 naveen 332
		List<SlideDefinition> matchingSlides = new ArrayList<SlideDefinition>();
32 naveen 333
 
334
		List<CategorySlideDefinition> csDefs = this.getCategorySlideDefinitions(
335
				categoryID);
336
 
337
		for(CategorySlideDefinition csDef : csDefs) {
338
			SlideDefinition sDef = this.getSlideDefinition(
339
					csDef.getSlideDefintionID());
19 naveen 340
 
32 naveen 341
			matchingSlides.add(sDef);
19 naveen 342
		}
343
 
344
		return matchingSlides;
345
	}
49 naveen 346
 
19 naveen 347
	/**
49 naveen 348
	 * Returns list of SlideDefinition objects for a category and editorial 
349
	 * importance value
19 naveen 350
	 * 
18 naveen 351
	 * @param categoryID
352
	 * @param EditorialImportance imp
353
	 * @return List<SlideDefinition>
354
	 * @throws Exception 
355
	 */
356
	public List<SlideDefinition> getSlides(long categoryID, 
357
			EditorialImportance imp) 
358
		throws Exception {
359
 
360
		List<CategorySlideDefinition> catSlideDefs = 
361
			this.getCategorySlideDefinitions(categoryID);
362
 
363
		Iterator<CategorySlideDefinition> itCatSlideDefs = 
364
			catSlideDefs.iterator();
365
 
366
		List<SlideDefinition> slideDefs = new ArrayList<SlideDefinition>();
367
		while(itCatSlideDefs.hasNext()) {
368
			CategorySlideDefinition catSlideDef = itCatSlideDefs.next();
369
			if(catSlideDef.getEditorialImportance() == imp) {
370
				long slideDefID = catSlideDef.getSlideDefintionID();
371
				slideDefs.add(this.getSlideDefinition(slideDefID));
372
			}
373
		}
374
		return slideDefs;
375
	}
376
 
377
	/**
49 naveen 378
	 * Returns all FeatureDefinition object in database
18 naveen 379
	 * 
380
	 * @return Map<Long, FeatureDefinition>
381
	 * @throws Exception
382
	 */
383
	@SuppressWarnings("unchecked")
384
	public Map<Long, FeatureDefinition> getFeatureDefinitions() 
385
		throws Exception {
386
 
387
		// De-serialize
388
		if(this.featureDefinitions == null) {
389
			String dbFile = MM.DEFINITIONS_DB_PATH + "featuredefinitions" + 
390
				".ser";
391
 
392
			this.featureDefinitions = 
393
				(Map<Long, FeatureDefinition>) DBUtils.read(dbFile);
394
		}
395
		return this.featureDefinitions;
396
	}
19 naveen 397
 
10 shop2020 398
	/**
49 naveen 399
	 * Returns all FeatureDefinition objects for a slide
18 naveen 400
	 * 
19 naveen 401
	 * @param slideID
402
	 * @return List<FeatureDefinition> 
403
	 * @throws Exception
404
	 */
405
	public List<FeatureDefinition> getFeatureDefinitions(long slideID) 
406
		throws Exception {
407
		List<FeatureDefinition> featureDefs = 
408
			new ArrayList<FeatureDefinition>();
409
 
410
		SlideDefinition slideDef = this.getSlideDefinition(slideID);
411
		List<SlideFeatureDefinition> slideFeatureDefs = 
412
			slideDef.getSlideFeatureDefinitions();
413
 
414
		for(int i=0; i<slideFeatureDefs.size(); i++) {
415
			featureDefs.add(this.getFeatureDefinition(
416
					slideFeatureDefs.get(i).getFeatureDefintionID()));
417
		}
418
 
419
		return featureDefs;
420
	}
421
 
422
	/**
49 naveen 423
	 * Returns list of FeatureDefinition objects for a slide given editorial 
424
	 * importance
19 naveen 425
	 * 
426
	 * @param slideID
49 naveen 427
	 * @param imp Editorial Importance enum object
19 naveen 428
	 * @return List<FeatureDefinition>
429
	 * @throws Exception
430
	 */
431
	public List<FeatureDefinition> getFeatureDefinitions(long slideID, 
432
			EditorialImportance imp)  throws Exception {
433
		List<FeatureDefinition> featureDefs = 
434
			new ArrayList<FeatureDefinition>();
435
 
436
		SlideDefinition slideDef = this.getSlideDefinition(slideID);
437
		List<SlideFeatureDefinition> slideFeatureDefs = 
438
			slideDef.getSlideFeatureDefinitions();
439
 
440
		for(SlideFeatureDefinition slideFeatureDef : slideFeatureDefs) {
441
			if(slideFeatureDef.getEditorialImportance() == imp) {
442
				featureDefs.add(this.getFeatureDefinition(
443
						slideFeatureDef.getFeatureDefintionID()));
444
			}
445
		}
446
 
447
		return featureDefs;
448
	}
449
 
450
	/**
49 naveen 451
	 * Resolves Feature Definition ID into FeatureDefinition object
19 naveen 452
	 * 
49 naveen 453
	 * @param id Feature Definition ID 
19 naveen 454
	 * @return FeatureDefinition
18 naveen 455
	 * @throws Exception
10 shop2020 456
	 */
18 naveen 457
	public FeatureDefinition getFeatureDefinition(long id) throws Exception {
458
 
459
		// Initialize 
460
		if(this.featureDefinitions == null) {
461
			this.getFeatureDefinitions();
462
		}
463
 
464
		return this.featureDefinitions.get(new Long(id));
465
	}	
19 naveen 466
 
467
	/**
49 naveen 468
	 * Returns matching FeatureDefinition object for slide ID and feature label.
469
	 * Label matching is case insensitive.
19 naveen 470
	 * 
49 naveen 471
	 * @param slideID Slide ID
472
	 * @param featureLabel label to match, case is ignored
19 naveen 473
	 * @return FeatureDefinition 
474
	 * @throws Exception
475
	 */
476
	public FeatureDefinition getFeatureDefinition(long slideID, 
477
			String featureLabel) throws Exception {
478
		FeatureDefinition featureDef = null;
479
 
480
		SlideDefinition slideDef = this.getSlideDefinition(slideID);
481
		for(SlideFeatureDefinition slideFeatureDef : 
482
			slideDef.getSlideFeatureDefinitions()) {
483
 
484
			long featureDefID = slideFeatureDef.getFeatureDefintionID();
485
 
486
			FeatureDefinition thisFeatureDef = this.getFeatureDefinition(
487
					featureDefID);
488
 
28 naveen 489
			if(featureLabel.equalsIgnoreCase(thisFeatureDef.getLabel())) {
19 naveen 490
				featureDef = thisFeatureDef;
491
			}
492
		}
493
 
494
		return featureDef;
495
	}
24 naveen 496
 
497
	/**
49 naveen 498
	 * Returns all EnumValue objects in the database
499
	 * 
24 naveen 500
	 * @return the enumValues
501
	 * @throws Exception 
502
	 */
503
	@SuppressWarnings("unchecked")
504
	public Map<Long, EnumValue> getEnumValues() throws Exception {
505
		// De-serialise
506
		if(this.enumValues == null) {
507
			String dbFile = MM.DEFINITIONS_DB_PATH + "enumvalues" + 
508
				".ser";
509
 
510
			this.enumValues = 
511
				(Map<Long, EnumValue>) DBUtils.read(dbFile);
512
		}
513
 
514
		return this.enumValues;
515
	}
19 naveen 516
 
24 naveen 517
	/**
49 naveen 518
	 * Resolves Enum value ID into EnumValue object
24 naveen 519
	 * 
520
	 * @param enumValueID
521
	 * @return EnumValue
522
	 * @throws Exception
523
	 */
524
	public EnumValue getEnumValue(long enumValueID) throws Exception {
525
		// Initialise
526
		if(this.enumValues == null) {
527
			this.getEnumValues();
528
		}
529
 
530
		return this.enumValues.get(new Long(enumValueID));
531
	}
10 shop2020 532
}