Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
10 shop2020 1
/**
2
 * 
3
 */
4
package in.shop2020.metamodel.definitions;
5
 
6
import in.shop2020.metamodel.core.Entity;
63 naveen 7
import in.shop2020.metamodel.core.Feature;
8
import in.shop2020.metamodel.core.Slide;
82 naveen 9
import in.shop2020.metamodel.util.ExpandedBullet;
24 naveen 10
import in.shop2020.metamodel.util.ExpandedEntity;
64 naveen 11
import in.shop2020.util.DBUtils;
80 naveen 12
import in.shop2020.util.Utils;
64 naveen 13
 
10 shop2020 14
import java.io.Serializable;
22 naveen 15
import java.util.ArrayList;
81 naveen 16
import java.util.HashMap;
22 naveen 17
import java.util.List;
10 shop2020 18
import java.util.Map;
22 naveen 19
import java.util.TreeMap;
10 shop2020 20
 
21
/**
49 naveen 22
 * Single point access to stored shop2020 core objects
23
 * 
10 shop2020 24
 * @author naveen
25
 *
26
 */
27
public class EntityContainer implements Serializable {
28
 
29
	/**
30
	 * 
31
	 */
32
	private static final long serialVersionUID = 1L;
33
 
49 naveen 34
	/**
35
	 * Hashtable of Entity ID to Entity object
36
	 */
10 shop2020 37
	private Map<Long, Entity> entities;
49 naveen 38
 
39
	/**
40
	 * Hashtable of Category ID to list of Entity objects
41
	 */
22 naveen 42
	private Map<Long, List<Entity>> entitiesbycategory;
10 shop2020 43
 
44
	/**
81 naveen 45
	 * Hashtable of Feature Definition ID to list of learned Bullet objects
46
	 */
82 naveen 47
	private Map<Long, List<ExpandedBullet>> learnedBullets;
81 naveen 48
 
49
	/**
91 naveen 50
	 * Hashtable of Facet Definition ID to list of unique facet values found 
51
	 * across entities
52
	 */
53
	private Map<Long, List<String>> facetDefinitionIDFacetValues;
54
 
55
	/**
49 naveen 56
	 * Instantiates required data structures only when needed
10 shop2020 57
	 */
58
	public EntityContainer() {
21 naveen 59
		// Lazy initialization
10 shop2020 60
	}
61
 
62
	/**
49 naveen 63
	 * Returns all stored Entity objects 
10 shop2020 64
	 * 
65
	 * @return Map
21 naveen 66
	 * @throws Exception 
10 shop2020 67
	 */
21 naveen 68
	@SuppressWarnings("unchecked")
69
	public Map<Long, Entity> getEntities() throws Exception {
70
		// De-serialize
22 naveen 71
		if(this.entities == null) {
80 naveen 72
			String entitiesDBFile = Utils.ENTITIES_DB_PATH + "entities.ser";
73
			String entitiesbycategoryDBFile = Utils.ENTITIES_DB_PATH + 
74
				"entitiesbycategory.ser";
22 naveen 75
 
76
			this.entities = (Map<Long, Entity>) DBUtils.read(entitiesDBFile);
77
			this.entitiesbycategory = (Map<Long, List<Entity>>) 
78
				DBUtils.read(entitiesbycategoryDBFile);
79
		}
21 naveen 80
 
81
		if(this.entities == null) {
22 naveen 82
			// A sorted map to ensure sequence
83
			this.entities = new TreeMap<Long, Entity>();
84
			this.entitiesbycategory = new TreeMap<Long, List<Entity>>();
21 naveen 85
		}
86
 
10 shop2020 87
		return this.entities;
88
	}
89
 
81 naveen 90
	/**
91
	 * Returns hashtable of list bullet objects to feature definition ID
92
	 * 
82 naveen 93
	 * @return Map<Long, List<ExpandedBullet>> 
81 naveen 94
	 * @throws Exception
95
	 */
96
	@SuppressWarnings("unchecked")
82 naveen 97
	public Map<Long, List<ExpandedBullet>> getLearnedBullets() throws Exception{
81 naveen 98
		// De-serialize
99
		if(this.learnedBullets == null) {
100
			String dbFile = Utils.ENTITIES_DB_PATH + "learnedbullets.ser";
101
 
102
			this.learnedBullets = 
82 naveen 103
				(Map<Long, List<ExpandedBullet>>) DBUtils.read(dbFile);
81 naveen 104
		}
105
 
106
		if(this.learnedBullets == null) {
82 naveen 107
			this.learnedBullets = new HashMap<Long, List<ExpandedBullet>>();
81 naveen 108
		}
109
 
110
		return this.learnedBullets;
111
	}
112
 
113
	/**
114
	 * Resolves Feature Definition ID into list of learned Bullet objects
115
	 * 
116
	 * @param featureDefinitionID
82 naveen 117
	 * @return list of ExpandedBullets
81 naveen 118
	 * @throws Exception
119
	 */
82 naveen 120
	public List<ExpandedBullet> getLearnedBullets(long featureDefinitionID) 
81 naveen 121
		throws Exception {
122
		if(this.learnedBullets == null) {
123
			this.getLearnedBullets();
124
		}
125
 
126
		return this.learnedBullets.get(new Long(featureDefinitionID));
127
	}
128
 
41 naveen 129
	/** 
49 naveen 130
	 * Returns hashtable of list entities to category ID
131
	 * 
132
	 * @return the entitiesbycategory Entities by category
22 naveen 133
	 * @throws Exception 
134
	 */
34 naveen 135
	public Map<Long, List<Entity>> getEntitiesbyCategory() throws Exception {
22 naveen 136
		if(this.entities == null) {
137
			this.getEntities();
138
		}
139
 
140
		return this.entitiesbycategory;
141
	}
142
 
143
	/**
49 naveen 144
	 * Resolves Entity ID into Entity object
10 shop2020 145
	 * 
146
	 * @param entityID
147
	 * @return Entity
21 naveen 148
	 * @throws Exception 
10 shop2020 149
	 */
21 naveen 150
	public Entity getEntity(long entityID) throws Exception {
151
		if(this.entities == null) {
152
			this.getEntities();
153
		}
154
 
10 shop2020 155
		return this.entities.get(new Long(entityID));
156
	}
157
 
158
	/**
49 naveen 159
	 * Returns list of entities for a category ID
10 shop2020 160
	 * 
22 naveen 161
	 * @param categoryID
162
	 * @return List<Entity>
21 naveen 163
	 * @throws Exception 
10 shop2020 164
	 */
22 naveen 165
	public List<Entity> getEntities(long categoryID) throws Exception {
21 naveen 166
		if(this.entities == null) {
167
			this.getEntities();
168
		}
74 naveen 169
		//Utils.info("this.entitiesbycategory=" + this.entitiesbycategory);
21 naveen 170
 
22 naveen 171
		return this.entitiesbycategory.get(new Long(categoryID));
10 shop2020 172
	}
173
 
174
	/**
49 naveen 175
	 * Convienience method to add new Entity 
10 shop2020 176
	 * 
22 naveen 177
	 * @param newEntity
21 naveen 178
	 * @throws Exception 
10 shop2020 179
	 */
22 naveen 180
	public void addEntity(Entity newEntity) throws Exception {
21 naveen 181
		if(this.entities == null) {
182
			this.getEntities();
183
		}
184
 
22 naveen 185
		this.entities.put(new Long(newEntity.getID()), newEntity);
186
 
187
		// Keep index by category ID
188
		List<Entity> catentities = 
189
			this.entitiesbycategory.get(newEntity.getCategoryID());
190
 
191
		if(catentities == null) {
192
			catentities = new ArrayList<Entity>();
193
		}
194
 
195
		catentities.add(newEntity);
34 naveen 196
		this.entitiesbycategory.put(new Long(newEntity.getCategoryID()), 
197
				catentities);
10 shop2020 198
	}
24 naveen 199
 
200
	/**
49 naveen 201
	 * Returns expand form of entity object. All references are resolved into 
202
	 * corresponding detail object
24 naveen 203
	 * 
204
	 * @param entityID
205
	 * @return ExpandedEntity 
206
	 * @throws Exception 
207
	 */
208
	public ExpandedEntity getExpandedEntity(long entityID) throws Exception {
209
		Entity entity = this.getEntity(entityID);
210
 
211
		ExpandedEntity expEntity = new ExpandedEntity(entity);
212
 
213
		return expEntity;
214
	}
91 naveen 215
 
63 naveen 216
 
217
	/**
91 naveen 218
	 * Returns hashtable of list facet values to facet definition ID
219
	 * 
220
	 * @return
221
	 * @throws Exception
222
	 */
223
	@SuppressWarnings("unchecked")
224
	public Map<Long, List<String>> getFacetValues() throws Exception {
225
		// De-serialize
226
		if(this.facetDefinitionIDFacetValues == null) {
227
			String dbFile = Utils.ENTITIES_DB_PATH + "facetvalues.ser";
228
 
229
			this.facetDefinitionIDFacetValues = 
230
				(Map<Long, List<String>>) DBUtils.read(dbFile);
231
		}
232
 
233
		if(this.facetDefinitionIDFacetValues == null) {
234
			this.facetDefinitionIDFacetValues = new HashMap<Long, 
235
				List<String>>();
236
		}
237
 
238
		return this.facetDefinitionIDFacetValues;
239
	}
240
 
241
	/**
242
	 * Returns list of facet values for a facet definition ID
243
	 * 
244
	 * @param facetDefinitionID
245
	 * @return List<String> 
246
	 * @throws Exception
247
	 */
248
	public List<String> getFacetValues(long facetDefinitionID) 
249
		throws Exception {
250
		this.getFacetValues();
251
 
252
		return this.facetDefinitionIDFacetValues.get(
253
				new Long(facetDefinitionID));
254
	}
255
 
256
	/**
63 naveen 257
	 * Utility method to find out Feature object in Entity instance
258
	 * 
259
	 * @param entityID
260
	 * @param featureDefinitionID
261
	 * @return Feature
262
	 * @throws Exception 
263
	 */
264
	public Feature getFeature(long entityID, long featureDefinitionID) 
265
		throws Exception {
266
		Entity entity = this.getEntity(entityID);
267
 
268
		Feature feature = null;
269
 
270
		List<Slide> slides = entity.getSlides();
271
		for(Slide slide : slides) {
272
			feature = this.getFeature(slide, featureDefinitionID);
273
 
274
			// Until all slides are searched
275
			if(feature == null) {
276
				continue;
277
			}
64 naveen 278
			else {
279
				break;
280
			}
63 naveen 281
		}
282
 
283
		return feature;
284
	}
285
 
286
	/**
287
	 * 
288
	 * @param slide
289
	 * @param featureDefinitionID
290
	 * @return Feature
291
	 */
292
	public Feature getFeature(Slide slide, long featureDefinitionID) {
293
		List<Feature> features = slide.getFeatures();
294
 
295
		if(features != null) {
296
			for(Feature feature : features) {
297
				if(feature.getFeatureDefinitionID() == featureDefinitionID) {
298
					return feature;
299
				}
300
			}
301
		}
302
 
303
		Feature feature = null;
304
 
305
		List<Slide> childrenSlides = slide.getChildrenSlides();
306
		if(childrenSlides != null) {
307
			for(Slide childSlide : childrenSlides) {
308
 
309
				feature = this.getFeature(childSlide, featureDefinitionID);
310
				if(feature == null) {
311
					continue;
312
				}
64 naveen 313
				else {
314
					break;
315
				}
63 naveen 316
			}
317
		}
318
 
319
		return feature;
320
	}
321
 
322
	/**
323
	 * Utility method to find out Slide object in Entity instance
324
	 * 
325
	 * @param entityID
326
	 * @param slideDefinitionID
327
	 * @return
328
	 * @throws Exception 
329
	 */
330
	public Slide getSlide(long entityID, long slideDefinitionID) 
331
		throws Exception {
332
		Entity entity = this.getEntity(entityID);
333
 
334
		List<Slide> slides = entity.getSlides();
64 naveen 335
 
336
		Slide resultSlide = null;
337
 
338
		if(slides != null) {
339
			for(Slide slide : slides) {
340
 
341
				if(slide.getSlideDefinitionID() == slideDefinitionID) {
342
					return slide;
343
				}
344
 
345
				resultSlide = this.getSlide(slide, slideDefinitionID);
346
 
347
				if(resultSlide == null) {
348
					continue;
349
				}
350
				else {
351
					break;
352
				}
63 naveen 353
			}
354
		}
355
 
64 naveen 356
		return resultSlide;
63 naveen 357
	}
64 naveen 358
 
359
	/**
360
	 * 
361
	 * @param slide
362
	 * @param slideDefinitionID
363
	 * @return
364
	 */
365
	public Slide getSlide(Slide slide, long slideDefinitionID) {
366
 
367
		List<Slide> childrenSlides = slide.getChildrenSlides();
368
 
369
		Slide resultSlide = null;
370
 
371
		if(childrenSlides != null) {
372
			for(Slide childSlide : childrenSlides) {
373
				if(childSlide.getSlideDefinitionID() == slideDefinitionID) {
374
					return childSlide;
375
				}
376
 
377
				resultSlide = this.getSlide(childSlide, slideDefinitionID);
378
				if(resultSlide == null) {
379
					continue;
380
				}
381
				else {
382
					break;
383
				}
384
			}
385
		}
386
 
387
		return resultSlide;
388
	}
88 naveen 389
 
390
	/**
391
	 * Returns list of borrowed slides
392
	 * 
393
	 * @param entity
394
	 * @return list of borrowed slides
395
	 */
396
	public List<Slide> getBorrowedSlides(Entity entity) {
397
		List<Slide> borrowedSlides = new ArrayList<Slide>();
398
 
399
		List<Slide> slides = entity.getSlides();
400
 
401
		for(Slide slide : slides) {
402
			if(slide.isBorrowed()) {
403
				borrowedSlides.add(slide);
404
			}
405
		}
406
 
407
		return borrowedSlides;
408
	}
10 shop2020 409
}