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.util;
5
 
16 naveen 6
import in.shop2020.metamodel.definitions.BulletDefinition;
45 naveen 7
import in.shop2020.metamodel.definitions.Catalog;
10 shop2020 8
import in.shop2020.metamodel.definitions.Category;
9
import in.shop2020.metamodel.definitions.CategorySlideDefinition;
16 naveen 10
import in.shop2020.metamodel.definitions.CompositeDefinition;
11
import in.shop2020.metamodel.definitions.CompositePartDefinition;
12
import in.shop2020.metamodel.definitions.DatatypeDefinition;
45 naveen 13
import in.shop2020.metamodel.definitions.DefinitionsContainer;
10 shop2020 14
import in.shop2020.metamodel.definitions.EditorialImportance;
16 naveen 15
import in.shop2020.metamodel.definitions.EnumDefinition;
16
import in.shop2020.metamodel.definitions.EnumValue;
17
import in.shop2020.metamodel.definitions.FeatureDefinition;
18
import in.shop2020.metamodel.definitions.SlideDefinition;
19
import in.shop2020.metamodel.definitions.SlideFeatureDefinition;
10 shop2020 20
import in.shop2020.metamodel.definitions.Unit;
16 naveen 21
import in.shop2020.metamodel.jaxb.BulletDefinitionType;
10 shop2020 22
import in.shop2020.metamodel.jaxb.CategorySlideDefinitionType;
23
import in.shop2020.metamodel.jaxb.CategoryType;
16 naveen 24
import in.shop2020.metamodel.jaxb.CompositeDefinitionType;
25
import in.shop2020.metamodel.jaxb.CompositePartDefinitionType;
26
import in.shop2020.metamodel.jaxb.DatatypeDefinitionType;
10 shop2020 27
import in.shop2020.metamodel.jaxb.DefinitionType;
28
import in.shop2020.metamodel.jaxb.EditorialImportanceType;
16 naveen 29
import in.shop2020.metamodel.jaxb.EnumDefinitionType;
30
import in.shop2020.metamodel.jaxb.EnumValueType;
31
import in.shop2020.metamodel.jaxb.FeatureDefinitionType;
32
import in.shop2020.metamodel.jaxb.SlideDefinitionType;
33
import in.shop2020.metamodel.jaxb.SlideFeatureDefinitionType;
10 shop2020 34
import in.shop2020.metamodel.jaxb.UnitType;
18 naveen 35
import in.shop2020.util.Utils;
10 shop2020 36
 
37
import java.io.FileInputStream;
16 naveen 38
import java.util.ArrayList;
10 shop2020 39
import java.util.HashMap;
40
import java.util.Iterator;
41
import java.util.List;
42
import java.util.Map;
24 naveen 43
import java.util.TreeMap;
10 shop2020 44
 
45
import javax.xml.bind.JAXBContext;
46
import javax.xml.bind.JAXBElement;
47
import javax.xml.bind.Unmarshaller;
48
 
49
import org.apache.commons.lang.ArrayUtils;
50
import org.apache.commons.lang.StringUtils;
51
 
52
/**
17 naveen 53
 * MM - Meta-Model Tool
54
 * Imports and exports model definitions. Validates against meta model
10 shop2020 55
 * 
56
 * @author naveen
57
 *
58
 */
59
public class MM {
49 naveen 60
	/**
61
	 * 
62
	 */
16 naveen 63
	public static final String DEFINITIONS_SRC_PATH = 
64
		"/home/naveen/workspace/eclipse/webapp/src/xml/model/";
34 naveen 65
 
43 naveen 66
	// LOCAL
49 naveen 67
	/**
68
	 * 
69
	 */
16 naveen 70
	public static final String DEFINITIONS_DB_PATH = 
26 naveen 71
		"/home/naveen/workspace/eclipse/db/definitions/";
49 naveen 72
 
73
	/**
74
	 * 
75
	 */
16 naveen 76
	public static final String ENTITIES_DB_PATH = 
26 naveen 77
		"/home/naveen/workspace/eclipse/db/entities/";
10 shop2020 78
 
34 naveen 79
	/** WEB
80
	public static final String DEFINITIONS_DB_PATH = 
81
		"/var/lib/tomcat6/webapps/shop2020/db/definitions/";
82
	public static final String ENTITIES_DB_PATH = 
83
		"/var/lib/tomcat6/webapps/shop2020/db/entities/";
84
	*/
43 naveen 85
 
86
	/** Validation tool
87
	public static final String DEFINITIONS_DB_PATH = 
88
		"./db/definitions/";
89
	public static final String ENTITIES_DB_PATH = 
90
		"./db/entities/";
91
	*/
34 naveen 92
 
49 naveen 93
	/**
94
	 * 
95
	 */
10 shop2020 96
	private String definitionSetName;
49 naveen 97
 
98
	/**
99
	 * 
100
	 */
10 shop2020 101
	private String srcFile;
49 naveen 102
 
103
	/**
104
	 * 
105
	 */
10 shop2020 106
	private String dbFile;
107
 
108
	/**
109
	 * @param args
110
	 */
111
	public static void main(String[] args) throws Exception {
16 naveen 112
		String[] definitionSetNames = new String[] {"units", 
113
				"datatypedefinitions", "featuredefinitions", "slidedefinitions", 
114
				"categories"};
10 shop2020 115
 
45 naveen 116
		String[] commands = new String[] {"show", "import", "showcategory"};
10 shop2020 117
 
16 naveen 118
		String usage = "Usage: MM ["+ StringUtils.join(commands, "|") +"] ["+ 
45 naveen 119
			StringUtils.join(definitionSetNames, "|") + "] {Category ID}";
16 naveen 120
 
10 shop2020 121
		if(args.length < 2) {
122
			System.out.println(usage);
123
			System.exit(-1);
124
		}
42 naveen 125
		Utils.info("MM "+ args[0] + " " + args[1]);
17 naveen 126
 
10 shop2020 127
		String inputCommand = args[0];
128
 
129
		if(!ArrayUtils.contains(commands, inputCommand)) {
130
			System.out.println(usage);
131
			System.exit(-1);
132
		}
133
 
45 naveen 134
		if(inputCommand.equals("show") || inputCommand.endsWith("import")) {
135
			String inputDefinitionSet = args[1];
136
			if(!ArrayUtils.contains(definitionSetNames, inputDefinitionSet)) {
137
				System.out.println(usage);
138
				System.exit(-1);
139
			}
140
 
141
			MM mm = new MM(inputDefinitionSet);
142
			if(inputCommand.equals("import")) {
143
				mm.importDefinitionSet();
144
			}
145
			else if(inputCommand.equals("show")) {
146
				mm.showDefinitionSet();
147
			}
10 shop2020 148
		}
149
 
45 naveen 150
		if(inputCommand.equals("showcategory")) {
151
			String categoryID = args[1];
152
			long catID = 0;
153
			try {
154
				catID = Long.parseLong(categoryID);
155
			} 
156
			catch (NumberFormatException nfe) {
157
				System.out.println("Invalid category ID");
158
				System.exit(-1);
159
			}
160
 
161
			MM mm = new MM();
162
			mm.showCategory(catID);
10 shop2020 163
		}
164
	}
165
 
166
	/**
167
	 * 
45 naveen 168
	 */
169
	public MM() {
170
	}
171
 
172
	/**
173
	 * 
10 shop2020 174
	 * @param definitionSet
175
	 */
176
	public MM(String definitionSetName) {
177
		this.definitionSetName = definitionSetName;
178
		this.srcFile = DEFINITIONS_SRC_PATH + this.definitionSetName + ".xml";
179
		this.dbFile = DEFINITIONS_DB_PATH + this.definitionSetName + ".ser";
180
	}
181
 
182
	/**
183
	 * 
45 naveen 184
	 * @param categoryID
185
	 * @throws Exception 
10 shop2020 186
	 */
45 naveen 187
	public void showCategory(long categoryID) throws Exception {
188
		DefinitionsContainer defs = 
189
			Catalog.getInstance().getDefinitionsContainer();
190
 
191
		ExpandedCategory expCategory = defs.getExpandedCategory(categoryID);
192
 
193
		Utils.info(expCategory);
194
	}
195
 
196
	/**
197
	 * 
198
	 */
10 shop2020 199
	@SuppressWarnings("unchecked")
200
	public void importDefinitionSet() throws Exception {
201
		DefinitionType defType = this.unmarshallSrcFile(this.srcFile);
16 naveen 202
		Object objectToStore = null;
10 shop2020 203
 
204
		// Units
205
		if(this.definitionSetName.equals("units")) {
206
			Map unitsMap = this.convertUnits(defType);
16 naveen 207
			objectToStore = unitsMap;
10 shop2020 208
		}
209
 
210
		// Categories
211
		else if(this.definitionSetName.equals("categories")) {
212
			Map<Long, Category> categoriesMap = new HashMap<Long, Category>();
213
			Category root = this.convertCategories(defType, categoriesMap);
42 naveen 214
			//Utils.info(categoriesMap);
215
			//Utils.info(root);
10 shop2020 216
			//System.exit(0);
217
 
218
			// Tree
16 naveen 219
			String categoryTreeDBFile = DEFINITIONS_DB_PATH + "categorytree" + 
220
				".ser";
221
 
10 shop2020 222
			if(root != null) {
17 naveen 223
				DBUtils.store(root, categoryTreeDBFile);
10 shop2020 224
			}
225
 
226
			// Map
16 naveen 227
			objectToStore = categoriesMap;
10 shop2020 228
		}
16 naveen 229
 
230
		// Datatype Definitions
231
		else if(this.definitionSetName.equals("datatypedefinitions")) {
24 naveen 232
			Map<Long, DatatypeDefinition> datatypeDefsMap = 
233
				this.convertDatatypeDefinition(defType);
16 naveen 234
 
24 naveen 235
			// Store enum value id to value map separately
236
			String enumValueDBFile = DEFINITIONS_DB_PATH + "enumvalues" + 
237
				".ser";
238
 
239
			// RE-VISIT - May not be optimal
240
			Map<Long, EnumValue> enumValuesMap = new TreeMap<Long, EnumValue>();
241
			for(Long datatypeDefID : datatypeDefsMap.keySet()) {
242
				DatatypeDefinition datatypeDef = 
243
					datatypeDefsMap.get(datatypeDefID);
244
 
245
				if(datatypeDef instanceof EnumDefinition) {
246
					List<EnumValue> enumValues = 
247
						((EnumDefinition) datatypeDef).getEnumValues();
248
 
249
					for(EnumValue enumValue : enumValues) {
250
						enumValuesMap.put(new Long(enumValue.getID()), 
251
								enumValue);
252
					}
253
				}
254
			}
42 naveen 255
			Utils.info("enumValuesMap=" + enumValuesMap);
24 naveen 256
			DBUtils.store(enumValuesMap, enumValueDBFile);
257
 
16 naveen 258
			objectToStore = datatypeDefsMap;
259
		}
260
 
261
		// Feature Definitions
262
		else if(this.definitionSetName.equals("featuredefinitions")) {
263
			Map featureDefsMap = this.convertFeatureDefinitions(defType);
264
 
265
			objectToStore = featureDefsMap;
266
		}
267
 
268
		// Slide Definitions
269
		else if(this.definitionSetName.equals("slidedefinitions")) {
270
			Map slideDefsMap = this.convertSlideDefinitions(defType);
271
 
272
			objectToStore = slideDefsMap;
273
		}
274
 
275
		if(objectToStore != null) {
17 naveen 276
			DBUtils.store(objectToStore, this.dbFile);
16 naveen 277
		}
10 shop2020 278
	}
279
 
280
	/**
281
	 * 
282
	 */
283
	public void showDefinitionSet() throws Exception {
17 naveen 284
		Object obj = DBUtils.read(this.dbFile);
42 naveen 285
		Utils.info(obj.toString());
10 shop2020 286
 
287
		if(this.definitionSetName.equals("categories")) {
16 naveen 288
			String categoryTreeDBFile = DEFINITIONS_DB_PATH + "categorytree" + 
289
				".ser";
290
 
17 naveen 291
			Category root = (Category)DBUtils.read(categoryTreeDBFile);
42 naveen 292
			Utils.info(root.toString());
293
			//Utils.info("root.getChildrenCategory().size: " + 
18 naveen 294
			//		root.getChildrenCategory().size());
10 shop2020 295
		}
296
	}
297
 
298
	/**
299
	 * 
300
	 * @return Map
301
	 */
16 naveen 302
	private Map<Long, SlideDefinition> convertSlideDefinitions(
303
			DefinitionType defType) {
304
 
305
		Map<Long, SlideDefinition> defs = 
306
			new HashMap<Long, SlideDefinition>();
307
 
308
		List<SlideDefinitionType> jaxbDefs = defType.getSlideDefinition();
309
		Iterator<SlideDefinitionType> itjaxbDefs = jaxbDefs.iterator();
310
 
311
		// Slide definitions
312
		while(itjaxbDefs.hasNext()) {
313
			SlideDefinitionType jaxbDef = itjaxbDefs.next();
314
 
42 naveen 315
			Utils.info("Slide label=" + jaxbDef.getLabel());
16 naveen 316
			SlideDefinition def = new SlideDefinition(jaxbDef.getID(),
317
					jaxbDef.getLabel());
318
			def.setDescription(jaxbDef.getDescription());
319
 
42 naveen 320
			// Children Slides
321
			Utils.info("jaxbDef.getChildSlideID=" + jaxbDef.getChildSlideID());
322
			def.setChildrenSlideDefinitionIDs(jaxbDef.getChildSlideID());
323
 
16 naveen 324
			// Slide Feature Definition
325
			List<SlideFeatureDefinitionType> jaxbSlideFeatureDefs = 
326
				jaxbDef.getSlideFeatureDefinition();
327
 
328
			if(jaxbSlideFeatureDefs != null) {
329
				def.setSlideFeatureDefinitions((
330
						this.convertSlideFeatureDefinitions(
331
								jaxbSlideFeatureDefs)));
332
			}
42 naveen 333
			Utils.info("def=" + def);
16 naveen 334
 
335
			defs.put(new Long(jaxbDef.getID()), def);
336
		}
337
 
338
		return defs;
339
	}
340
 
341
	/**
342
	 * 
343
	 * @param jaxbDefs
344
	 * @return List<SlideFeatureDefinition>
345
	 */
346
	private List<SlideFeatureDefinition> convertSlideFeatureDefinitions(
347
			List<SlideFeatureDefinitionType> jaxbDefs) {
348
 
349
		List<SlideFeatureDefinition> defs = 
350
			new ArrayList<SlideFeatureDefinition>();
351
 
352
		Iterator<SlideFeatureDefinitionType> itjaxbDefs = jaxbDefs.iterator();
353
 
354
		// Slide-feature definitions
355
		while(itjaxbDefs.hasNext()) {
356
			SlideFeatureDefinitionType jaxbDef = itjaxbDefs.next();
357
			SlideFeatureDefinition def = new SlideFeatureDefinition(
358
					jaxbDef.getFeatureDefinitionID());
359
 
360
			def.setEditorialImportance(this.convertEditorialImportance(
361
					jaxbDef.getEditorialImportance()));
362
 
363
			def.setDescription(jaxbDef.getDescription());
364
 
365
			defs.add(def);
366
		}
367
 
368
		return defs;
369
	}
370
 
371
	/**
372
	 * 
49 naveen 373
	 * @param defType
374
	 * @return
16 naveen 375
	 */
376
	private Map<Long, FeatureDefinition> convertFeatureDefinitions(
377
			DefinitionType defType) {
378
 
379
		Map<Long, FeatureDefinition> defs = 
380
			new HashMap<Long, FeatureDefinition>();
381
 
382
		List<FeatureDefinitionType> jaxbDefs = defType.getFeatureDefinition();
383
		Iterator<FeatureDefinitionType> itjaxbDefs = jaxbDefs.iterator();
384
 
385
		// Feature definitions
386
		while(itjaxbDefs.hasNext()) {
387
			FeatureDefinitionType jaxbDef = itjaxbDefs.next();
388
 
42 naveen 389
			//Utils.info("Feature label=" + jaxbDef.getLabel());
16 naveen 390
			FeatureDefinition def = new FeatureDefinition(jaxbDef.getID(),
391
					jaxbDef.getLabel());
392
			def.setAllowsBlank(jaxbDef.isCanbeBlank());
393
			def.setDescription(jaxbDef.getDescription());
394
 
395
			// Bullet Definition
396
			BulletDefinitionType jaxbBulletDef = jaxbDef.getBulletDefinition();
397
			if(jaxbBulletDef != null) {
398
				def.setBulletDefinition(this.convertBulletDefinition(
399
						jaxbBulletDef));
400
			}
42 naveen 401
			Utils.info("def=" + def);
16 naveen 402
 
403
			defs.put(new Long(jaxbDef.getID()), def);
404
		}
405
 
406
		return defs;
407
	}
408
 
409
	/**
410
	 * 
411
	 * @param jaxbDef BulletDefinitionType
412
	 * @return BulletDefinition
413
	 */
414
	private BulletDefinition convertBulletDefinition(
415
			BulletDefinitionType jaxbDef) {
416
 
417
		BulletDefinition def = new BulletDefinition(
418
				jaxbDef.getDatatypeDefinitionID());
419
 
420
		Long unitID = jaxbDef.getUnitID();
421
		if(unitID != null) {
422
			def.setUnitID(unitID.longValue());
423
		}
47 naveen 424
		Utils.info("jaxbDef.isIsMultivalue=" + jaxbDef.isIsMultivalue());
425
 
16 naveen 426
		def.setMultivalue(jaxbDef.isIsMultivalue());
427
		def.setLearned(jaxbDef.isIsLearned());
428
		def.setDescription(jaxbDef.getDescription());
429
 
430
		return def;
431
	}
49 naveen 432
 
16 naveen 433
	/**
434
	 * 
49 naveen 435
	 * @param defType
436
	 * @return
16 naveen 437
	 */
438
	private Map<Long, DatatypeDefinition> convertDatatypeDefinition(
439
			DefinitionType defType) {
440
 
441
		Map<Long, DatatypeDefinition> defs = 
442
			new HashMap<Long, DatatypeDefinition>();
443
 
444
		List<DatatypeDefinitionType> jaxbDefs = defType.getDatatypeDefinition();
445
		Iterator<DatatypeDefinitionType> it = jaxbDefs.iterator();
446
 
447
		while(it.hasNext()) {
448
			DatatypeDefinitionType jaxbDef = it.next();
449
 
450
			DatatypeDefinition def = null;
451
			CompositeDefinitionType compositeDefType = 
452
				jaxbDef.getCompositeDefinition();
453
 
454
			EnumDefinitionType enumDefType = 
455
				jaxbDef.getEnumDefinition();
456
 
457
			// Composite data type
458
			if(compositeDefType != null) {
459
				CompositeDefinition compDef = new CompositeDefinition(
20 naveen 460
						jaxbDef.getID(), jaxbDef.getName(), 
461
						compositeDefType.getSeparator());
16 naveen 462
 
463
				List<CompositePartDefinitionType> jaxbPartDefs = 
464
					compositeDefType.getCompositePartDefinition();
465
 
466
				Iterator<CompositePartDefinitionType> itPartDefs = 
467
					jaxbPartDefs.iterator();
468
 
469
				// Collect parts
470
				while(itPartDefs.hasNext()) {
471
					CompositePartDefinitionType jaxbPartDef = itPartDefs.next();
472
					CompositePartDefinition partDef = 
473
						this.convertCompositePartDefinition(jaxbPartDef);
474
 
475
					compDef.addCompositePartDefinition(partDef);
476
				}
477
 
478
				def = compDef;
479
			}
480
 
481
			// Enumerated values
482
			else if(enumDefType != null) {
483
				EnumDefinition enumDef = new EnumDefinition(jaxbDef.getID(), 
484
						jaxbDef.getName());
485
 
486
				List<EnumValueType> jaxbEnumValues = 
487
					enumDefType.getEnumValue();
488
 
489
				Iterator<EnumValueType> itEnumValues = 
490
					jaxbEnumValues.iterator();
491
 
492
				// Collect individual value
493
				while(itEnumValues.hasNext()) {
494
					EnumValueType jaxbEnumValue = itEnumValues.next();
495
					EnumValue enumValue = 
496
						this.convertEnumValueDefinition(jaxbEnumValue);
497
 
498
					enumDef.addEnumValue(enumValue);
499
				}
500
 
501
				def = enumDef;
502
			}
503
 
504
			// Primitive
505
			else {
506
				def = new DatatypeDefinition(jaxbDef.getID(), 
507
						jaxbDef.getName());
508
			}
509
 
510
			def.setDescription(jaxbDef.getDescription());
42 naveen 511
			Utils.info("def=" + def);
16 naveen 512
 
513
			defs.put(new Long(jaxbDef.getID()), def);
514
		}
515
 
516
		return defs;
517
	}
518
 
519
	/**
520
	 * 
521
	 * @param jaxbEnumValue
522
	 * @return EnumValue
523
	 */
524
	private EnumValue convertEnumValueDefinition(EnumValueType jaxbEnumValue) {
525
 
526
		EnumValue enumValue = new EnumValue(jaxbEnumValue.getID(), 
527
				jaxbEnumValue.getValue());
528
 
529
		return enumValue;
530
	}
531
	/**
532
	 * 
533
	 * @param jaxbPartDef
534
	 * @return CompositePartDefinition
535
	 */
536
	private CompositePartDefinition convertCompositePartDefinition(
537
			CompositePartDefinitionType jaxbPartDef) {
538
 
539
		CompositePartDefinition partDef = new CompositePartDefinition(
540
				jaxbPartDef.getLabel(), jaxbPartDef.getDatatypeDefinitionID(), 
541
				jaxbPartDef.getUnitID());
542
 
543
		partDef.setDescription(jaxbPartDef.getDescription());
544
 
545
		return partDef;
546
	}
49 naveen 547
 
16 naveen 548
	/**
549
	 * 
49 naveen 550
	 * @param defType
551
	 * @param catMap
552
	 * @return
16 naveen 553
	 */
554
	private Category convertCategories(DefinitionType defType, 
555
			Map<Long, Category> catMap) {
10 shop2020 556
 
557
		List<CategoryType> jaxbCats = defType.getCategory();
558
		Iterator<CategoryType> it = jaxbCats.iterator();
559
 
560
		// Get root category
561
		CategoryType jaxbCat = it.next();
562
		if(jaxbCat == null) {
42 naveen 563
			Utils.info("Invalid file: " + this.srcFile);
10 shop2020 564
			return null;
565
		}
566
 
567
		Category root = this.convertCategoryType(jaxbCat, null, catMap);
42 naveen 568
		Utils.info("catMap.get(10002)=" + catMap.get(new Long(10002)));
32 naveen 569
 
10 shop2020 570
		return root;
571
	}
572
 
573
	/**
574
	 * 
575
	 * @param jaxbCat
49 naveen 576
	 * @param parentCat
577
	 * @param catMap
578
	 * @return
10 shop2020 579
	 */
32 naveen 580
	@SuppressWarnings("unchecked")
16 naveen 581
	private Category convertCategoryType(CategoryType jaxbCat, 
582
			Category parentCat, Map<Long, Category> catMap) {
18 naveen 583
 
10 shop2020 584
		Category cat = new Category(jaxbCat.getID());
585
		cat.setLabel(jaxbCat.getName());
586
		cat.setDescription(jaxbCat.getDescription());
587
		if(parentCat != null) {
588
			cat.setParentCategory(parentCat);
32 naveen 589
 
590
			// Copy parent's category-slide definitions
591
			ArrayList<CategorySlideDefinition> parentCSDef = 
592
				(ArrayList<CategorySlideDefinition>) 
593
				parentCat.getCategorySlideDefintions();
594
 
595
			if(parentCSDef != null) {
596
				cat.setCategorySlideDefintions(
597
					(List<CategorySlideDefinition>) parentCSDef.clone());
598
			}
10 shop2020 599
		}
600
 
601
		// Category Slide Definition
32 naveen 602
		List<CategorySlideDefinitionType> jaxbDefs = 
603
			jaxbCat.getCategorySlideDefinition();
604
 
10 shop2020 605
		Iterator<CategorySlideDefinitionType> it = jaxbDefs.iterator();
606
		while(it.hasNext()) {
607
			CategorySlideDefinitionType jaxbDef = it.next();
32 naveen 608
			CategorySlideDefinition catSlideDef 
609
			= this.convertCategorySlideDefinitionType(jaxbCat.getID(), jaxbDef);
610
 
10 shop2020 611
			cat.addCategorySlideDefintion(catSlideDef);
612
		}
613
 
614
		// Children
615
		List<CategoryType> jaxbChildren = jaxbCat.getChildCategory();
42 naveen 616
		//Utils.info("jaxbChildren.size: " + jaxbChildren.size());
10 shop2020 617
 
618
		Iterator<CategoryType> itChildren = jaxbChildren.iterator();
619
		while(itChildren.hasNext()) {
620
			CategoryType jaxbChildCat = itChildren.next();
32 naveen 621
			Category childCat = this.convertCategoryType(jaxbChildCat, cat, 
622
					catMap);
10 shop2020 623
			cat.addChild(childCat);
624
		}
42 naveen 625
		//Utils.info("Parent cat: " + cat);
32 naveen 626
		// DEBUG ONLY
42 naveen 627
		Utils.info("####### Cat ID: " + cat.getID());
32 naveen 628
		if(cat.getCategorySlideDefintions() != null) {
629
			for(CategorySlideDefinition csd : cat.getCategorySlideDefintions()){
42 naveen 630
				Utils.info("####### SlideDefintionID=" + 
32 naveen 631
						csd.getSlideDefintionID());
632
			}
633
		}
634
 
10 shop2020 635
		catMap.put(new Long(jaxbCat.getID()), cat);
636
		return cat;
637
	}
638
 
639
	/**
640
	 * 
49 naveen 641
	 * @param categoryID
10 shop2020 642
	 * @param jaxbDef
643
	 * @return
644
	 */
16 naveen 645
	private CategorySlideDefinition convertCategorySlideDefinitionType(
646
			long categoryID, CategorySlideDefinitionType jaxbDef) {
647
 
10 shop2020 648
		CategorySlideDefinition catSlideDef = new CategorySlideDefinition(
32 naveen 649
				jaxbDef.getSlideDefinitionID());
10 shop2020 650
 
651
		catSlideDef.setDescription(jaxbDef.getDescription());
652
 
653
		EditorialImportanceType jaxbEdImp = jaxbDef.getEditorialImportance();
654
		EditorialImportance edImp = this.convertEditorialImportance(jaxbEdImp);
655
		catSlideDef.setEditorialImportance(edImp);
656
 
657
		return catSlideDef;
658
	}
659
 
660
	/**
661
	 * 
662
	 * @return Map
663
	 */
664
	private Map<Long, Unit> convertUnits(DefinitionType defType) {
665
 
666
		Map<Long, Unit> allUnits = new HashMap<Long, Unit>();
667
		List<UnitType> jaxbUnits = defType.getUnit();
668
		Iterator<UnitType> it = jaxbUnits.iterator();
669
 
670
		while(it.hasNext()) {
671
			UnitType jaxbUnit = it.next();
672
 
673
			Unit unit = new Unit(jaxbUnit.getID());
674
			unit.setDescription(jaxbUnit.getDescription());
675
			unit.setFullForm(jaxbUnit.getFullform());
676
			unit.setShortForm(jaxbUnit.getShortform());
42 naveen 677
			Utils.info("unit=" + unit);
10 shop2020 678
 
679
			allUnits.put(new Long(jaxbUnit.getID()), unit);
680
		}
681
 
682
		return allUnits;
683
	}
49 naveen 684
 
10 shop2020 685
	/**
686
	 * 
49 naveen 687
	 * @param srcFile
688
	 * @return
689
	 * @throws Exception
10 shop2020 690
	 */
691
	private DefinitionType unmarshallSrcFile(String srcFile) throws Exception {
692
 
16 naveen 693
        JAXBContext jc = JAXBContext.newInstance("in.shop2020.metamodel.jaxb");
10 shop2020 694
 
695
        // create an Unmarshaller
696
        Unmarshaller u = jc.createUnmarshaller();
697
 
16 naveen 698
        JAXBElement<?> element = (JAXBElement<?>)u.unmarshal(
699
        		new FileInputStream(srcFile));
10 shop2020 700
 
701
        return (DefinitionType)element.getValue();
702
	}
703
 
704
	/**
705
	 * 
16 naveen 706
	 * @param jaxbEdImp
707
	 * @return EditorialImportance
708
	 */
709
	private EditorialImportance convertEditorialImportance(
710
			EditorialImportanceType jaxbEdImp) {
711
 
712
		String strEdImp = jaxbEdImp.value();
713
		EditorialImportance edImp = null;
714
 
715
		if(strEdImp.equals("Mandatory"))
716
			edImp = EditorialImportance.MANDATORY;
717
		else if(strEdImp.equals("Optional"))
718
			edImp = EditorialImportance.OPTIONAL;
719
		else 
720
			edImp = EditorialImportance.RECOMMENDED;
721
 
722
		return edImp;
723
	}
10 shop2020 724
}