Subversion Repositories SmartDukaan

Rev

Rev 63 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 63 Rev 64
Line 1... Line 1...
1
/**
1
/**
2
 * 
2
 * 
3
 */
3
 */
4
package in.shop2020.util;
4
package in.shop2020.util;
5
 
5
 
-
 
6
import java.util.ArrayList;
6
import java.util.List;
7
import java.util.List;
7
 
8
 
-
 
9
import org.apache.commons.lang.StringUtils;
-
 
10
 
8
import in.shop2020.metamodel.core.Entity;
11
import in.shop2020.metamodel.core.Entity;
9
import in.shop2020.metamodel.core.Feature;
12
import in.shop2020.metamodel.core.Feature;
10
import in.shop2020.metamodel.core.Slide;
13
import in.shop2020.metamodel.core.Slide;
11
import in.shop2020.metamodel.definitions.Catalog;
14
import in.shop2020.metamodel.definitions.Catalog;
-
 
15
import in.shop2020.metamodel.definitions.Category;
12
import in.shop2020.metamodel.definitions.DefinitionsContainer;
16
import in.shop2020.metamodel.definitions.DefinitionsContainer;
13
import in.shop2020.metamodel.definitions.EntityContainer;
17
import in.shop2020.metamodel.definitions.EntityContainer;
14
import in.shop2020.metamodel.definitions.FeatureDefinition;
18
import in.shop2020.metamodel.definitions.FeatureDefinition;
15
import in.shop2020.metamodel.definitions.SlideDefinition;
19
import in.shop2020.metamodel.definitions.SlideDefinition;
16
import in.shop2020.metamodel.util.ExpandedCategoryFacetDefinition;
20
import in.shop2020.metamodel.util.ExpandedCategoryFacetDefinition;
-
 
21
import in.shop2020.metamodel.util.ExpandedEntity;
17
import in.shop2020.metamodel.util.ExpandedFacetDefinition;
22
import in.shop2020.metamodel.util.ExpandedFacetDefinition;
18
 
23
 
19
/**
24
/**
20
 * Command line utility to convert IR Definitions into IR Data and IR Meta-data
25
 * Command line utility to convert IR Definitions into IR Data and IR Meta-data
21
 * 
26
 * 
Line 33... Line 38...
33
	 * IR XML export path
38
	 * IR XML export path
34
	 */
39
	 */
35
	public static String EXPORT_IR_PATH = 
40
	public static String EXPORT_IR_PATH = 
36
		"/home/naveen/workspace/eclipse/export/ir/";
41
		"/home/naveen/workspace/eclipse/export/ir/";
37
	
42
	
-
 
43
	/**
-
 
44
	 * 
-
 
45
	 */
38
	private long categoryID;
46
	private long categoryID;
39
	
47
	
40
	/**
48
	/**
-
 
49
	 * Level - 4, 8, 12, 16
-
 
50
	 */
-
 
51
	private String[] xmlIndentation = {"", "    ", "        ", "            ", 
-
 
52
			"                "};
-
 
53
	
-
 
54
	/**
41
	 * @param args
55
	 * @param args
42
	 * @throws Exception 
56
	 * @throws Exception 
43
	 */
57
	 */
44
	public static void main(String[] args) throws Exception {
58
	public static void main(String[] args) throws Exception {
45
		String usage = "Usage: IR {Category ID}";
59
		String usage = "Usage: IR {Category ID}";
46
		
60
		
47
		if(args.length < 1) {
61
		if(args.length > 1) {
48
			System.out.println(usage);
62
			System.out.println(usage);
49
			System.exit(-1);
63
			System.exit(-1);
50
		}
64
		}
51
		
65
 
52
		long categoryID = 0;
66
		long categoryID = 0L;
-
 
67
		if(args.length > 0) {
53
		try {
68
			try {
54
			categoryID = Long.parseLong(args[0]);
69
				categoryID = Long.parseLong(args[0]);
55
		}
70
			}
56
		catch (NumberFormatException nfe) {
71
			catch (NumberFormatException nfe) {
57
			System.out.println(usage);
72
				System.out.println(usage);
58
			System.exit(-1);
73
				System.exit(-1);
-
 
74
			}
59
		}
75
		}
60
		
76
		
61
		IR ir = new IR(categoryID);
77
		IR ir = new IR(categoryID);
62
		ir.exportIRData();
78
		ir.exportIRData();
63
	}
79
	}
Line 72... Line 88...
72
	
88
	
73
	/**
89
	/**
74
	 * @throws Exception 
90
	 * @throws Exception 
75
	 * 
91
	 * 
76
	 */
92
	 */
77
	@SuppressWarnings("unchecked")
-
 
78
	public void exportIRData() throws Exception {
93
	public void exportIRData() throws Exception {
79
		DefinitionsContainer defs = 
94
		DefinitionsContainer defs = 
80
			Catalog.getInstance().getDefinitionsContainer();
95
			Catalog.getInstance().getDefinitionsContainer();
81
		
96
		
82
		EntityContainer ents = 
97
		EntityContainer ents = 
83
			Catalog.getInstance().getEntityContainer();
98
			Catalog.getInstance().getEntityContainer();
84
		
99
		
85
		// Get all facets for the category
100
		// <IRData>
86
		ExpandedCategoryFacetDefinition expCategoryFacetDef = 
101
		List<String> entityXMLSnippets = new ArrayList<String>();
87
			defs.getExpandedCategoryFacetDefinition(this.categoryID);
102
		entityXMLSnippets.add("<IRData>");
88
		
103
		
89
		List<ExpandedFacetDefinition> expFacetDefs = 
104
		List<Category> categories = null;
-
 
105
		if(this.categoryID != 0L) {
-
 
106
			categories = new ArrayList<Category>();
90
			expCategoryFacetDef.getExpandedFacetDefinitions();
107
			categories.add(defs.getCategory(this.categoryID));
-
 
108
		}
-
 
109
		else {
91
		
110
			
92
		// Get all entities for the category
111
			// Get all categories
93
		List<Entity> entities = ents.getEntities(this.categoryID);
112
			categories = defs.getChildrenCategories(10001);
94
		
113
		}
95
		JythonWrapper jw = new JythonWrapper();
-
 
96
		
114
		
-
 
115
		for(Category cat : categories) {
-
 
116
			long catID = cat.getID();
-
 
117
			
-
 
118
			// Get all facets for the category
-
 
119
			ExpandedCategoryFacetDefinition expCategoryFacetDef = 
-
 
120
				defs.getExpandedCategoryFacetDefinition(catID);
-
 
121
			
-
 
122
			List<ExpandedFacetDefinition> expFacetDefs = 
-
 
123
				expCategoryFacetDef.getExpandedFacetDefinitions();
-
 
124
			
97
		// For each entity 
125
			// Get all entities for the category
-
 
126
			List<Entity> entities = ents.getEntities(catID);
-
 
127
			
98
		if(entities != null) {
128
			if(entities == null) {
-
 
129
				continue;
-
 
130
			}
-
 
131
 
-
 
132
			// For each entity 
99
			for(Entity entity : entities) {
133
			for(Entity entity : entities) {
-
 
134
				ExpandedEntity expEntity = 
-
 
135
					ents.getExpandedEntity(entity.getID());
-
 
136
				
-
 
137
				List<String> facetXMLSnippets = new ArrayList<String>();
100
				
138
				
101
				// For each facet execute Rule
139
				// For each facet execute Rule
102
				for(ExpandedFacetDefinition expFacetDef : expFacetDefs) {
140
				for(ExpandedFacetDefinition expFacetDef : expFacetDefs) {
103
					jw.initialize();
-
 
104
					
-
 
105
					jw.setEntity(entity);
141
					String facetXMLSnip = 
106
					jw.setExpandedFacetDefinition(expFacetDef);
142
						this.processFacet(expEntity, expFacetDef);
107
					
-
 
108
					// To reduce scripts work
-
 
109
					
143
					
110
					// Set FeatureDefinition
-
 
111
					FeatureDefinition featureDef = 
-
 
112
						expFacetDef.getFeatureDefinition();
-
 
113
					if(featureDef != null) {
144
					if(!facetXMLSnip.isEmpty()) {
114
						jw.setFeatureDefinition(featureDef);
145
						facetXMLSnippets.add(facetXMLSnip);
115
						
-
 
116
						// Set Feature
-
 
117
						Feature feature = 
-
 
118
							ents.getFeature(entity.getID(), featureDef.getID());
146
						Utils.info("facetXMLSnip=" + facetXMLSnip);
119
						jw.setFeature(feature);
-
 
120
					}
147
					}
121
					
-
 
122
					// Set SlideDefinition
-
 
123
					SlideDefinition slideDef = expFacetDef.getSlideDefinition();
-
 
124
					if(slideDef != null) {
-
 
125
						jw.setSlideDefinition(slideDef);
-
 
126
						
-
 
127
						// Set Slide
-
 
128
						Slide slide = ents.getSlide(entity.getID(), 
-
 
129
								slideDef.getID());
-
 
130
						jw.setSlide(slide);
-
 
131
					}
-
 
132
					
-
 
133
					jw.execIRDataRule();
-
 
134
					
-
 
135
					List<Object> values = (List<Object>)jw.getValues();
-
 
136
					Utils.info("values=" + values);
-
 
137
				}
148
				}
138
				
149
				
-
 
150
				String facetXMLSnippetsStr = 
-
 
151
					StringUtils.join(facetXMLSnippets, "\n");
-
 
152
					
-
 
153
				Utils.info("facetXMLSnippets=" + facetXMLSnippetsStr);
-
 
154
				
-
 
155
				String entityXMLSnip = 
-
 
156
					this.getEntityXMLSnippet(expEntity, facetXMLSnippetsStr, 1);
-
 
157
				
-
 
158
				Utils.info(entityXMLSnip);
-
 
159
				
-
 
160
				entityXMLSnippets.add(entityXMLSnip);
139
			}
161
			}
140
		}
162
		}
-
 
163
		
-
 
164
		// </IRData>
-
 
165
		entityXMLSnippets.add("</IRData>");
-
 
166
		
-
 
167
		String irDataXML = StringUtils.join(entityXMLSnippets, "\n");
-
 
168
		Utils.info(irDataXML);
-
 
169
		
-
 
170
		// Write it to file
-
 
171
		String irDataFilename = IR.EXPORT_IR_PATH + "irdata.xml";
-
 
172
		DBUtils.store(irDataXML, irDataFilename);
-
 
173
	}
-
 
174
	
-
 
175
	/**
-
 
176
	 * 
-
 
177
	 * @param expEntity
-
 
178
	 * @param expFacetDef
-
 
179
	 * @return
-
 
180
	 * @throws Exception 
-
 
181
	 */
-
 
182
	@SuppressWarnings("unchecked")
-
 
183
	private String processFacet(ExpandedEntity expEntity, 
-
 
184
			ExpandedFacetDefinition expFacetDef) throws Exception {
-
 
185
		
-
 
186
		EntityContainer ents = 
-
 
187
			Catalog.getInstance().getEntityContainer();
-
 
188
		
-
 
189
		JythonWrapper jw = new JythonWrapper();
-
 
190
		
-
 
191
		jw.setExpandedEntity(expEntity);
-
 
192
		jw.setExpandedFacetDefinition(expFacetDef);
-
 
193
		
-
 
194
		// Set FeatureDefinition
-
 
195
		FeatureDefinition featureDef = 
-
 
196
			expFacetDef.getFeatureDefinition();
-
 
197
		if(featureDef != null) {
-
 
198
			jw.setFeatureDefinition(featureDef);
-
 
199
			
-
 
200
			// Set Feature
-
 
201
			Utils.info("featureDef.getID()=" + featureDef.getID());
-
 
202
			
-
 
203
			Feature feature = 
-
 
204
				ents.getFeature(expEntity.getID(), featureDef.getID());
-
 
205
			
-
 
206
			jw.setFeature(feature);
-
 
207
		}
-
 
208
		
-
 
209
		// Set SlideDefinition
-
 
210
		SlideDefinition slideDef = expFacetDef.getSlideDefinition();
-
 
211
		if(slideDef != null) {
-
 
212
			jw.setSlideDefinition(slideDef);
-
 
213
			
-
 
214
			// Set Slide
-
 
215
			Utils.info("slideDef.getID()=" + slideDef.getID());
-
 
216
			
-
 
217
			Slide slide = ents.getSlide(expEntity.getID(), slideDef.getID());
-
 
218
			
-
 
219
			jw.setSlide(slide);
-
 
220
		}
-
 
221
		
-
 
222
		jw.execIRDataRule();
-
 
223
		
-
 
224
		List<Object> values = (List<Object>)jw.getValues();
-
 
225
		Utils.info("values=" + values);
-
 
226
		
-
 
227
		String facetXMLSnip = "";
-
 
228
		if(values != null) {
-
 
229
			
-
 
230
			// Get IR Data XML snippet for this entity and facet
-
 
231
			facetXMLSnip = this.getFacetXMLSnippet(expFacetDef, values, 2);
-
 
232
		}
-
 
233
		Utils.info(facetXMLSnip);
-
 
234
		
-
 
235
		return facetXMLSnip;
-
 
236
	}
-
 
237
	
-
 
238
	/**
-
 
239
	 * 
-
 
240
	 * @param expEntity
-
 
241
	 * @param facetXMLSnippets
-
 
242
	 * @param indent
-
 
243
	 * @return
-
 
244
	 */
-
 
245
	private String getEntityXMLSnippet(ExpandedEntity expEntity, 
-
 
246
			String facetXMLSnippets, int indent) {
-
 
247
 
-
 
248
		//<Entity ID="40001">
-
 
249
		List<String> xmlSnippet = new ArrayList<String>();
-
 
250
		
-
 
251
		String entityID = new Long(expEntity.getID()).toString();
-
 
252
		xmlSnippet.add(this.xmlIndentation[indent] + "<Entity ID=\""+ entityID + 
-
 
253
				"\">");
-
 
254
 
-
 
255
		//<Category>Business Phones</Category>
-
 
256
		String category = expEntity.getCategory().getLabel();
-
 
257
		xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Category>" + 
-
 
258
				category + "</Category>");
-
 
259
 
-
 
260
		//<Title>Nokia E71</Title>
-
 
261
		String title = expEntity.getBrand() + " " + expEntity.getModelName() + 
-
 
262
			((expEntity.getModelNumber() != null) ? 
-
 
263
					(" " + expEntity.getModelNumber())
-
 
264
					: "");
-
 
265
 
-
 
266
		xmlSnippet.add(this.xmlIndentation[indent + 1] + 
-
 
267
				"<Title>" + title + "</Title>");
-
 
268
		
-
 
269
		xmlSnippet.add(facetXMLSnippets);
-
 
270
		
-
 
271
		//</Entity>
-
 
272
		xmlSnippet.add(this.xmlIndentation[indent] + "</Entity>");
-
 
273
		
-
 
274
		return StringUtils.join(xmlSnippet, "\n");
-
 
275
	}
-
 
276
	
-
 
277
	/**
-
 
278
	 * 
-
 
279
	 * @param expFacetDef
-
 
280
	 * @param values
-
 
281
	 * @param indent
-
 
282
	 * @return String XML Snippet
-
 
283
	 */
-
 
284
	private String getFacetXMLSnippet(ExpandedFacetDefinition expFacetDef, 
-
 
285
			List<Object> values, int indent) {
-
 
286
		// <Facet Label="Form Factor">
-
 
287
		List<String> xmlSnippet = new ArrayList<String>();
-
 
288
		String target = expFacetDef.getTarget();
-
 
289
		xmlSnippet.add(this.xmlIndentation[indent] + "<Facet Label=\"" + 
-
 
290
				target + "\">");
-
 
291
		
-
 
292
		//<Value>Candybar</Value>
-
 
293
		for(Object value : values) {
-
 
294
			xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Value>" + 
-
 
295
					value.toString() + "</Value>");
-
 
296
		}
-
 
297
		
-
 
298
		//</Facet>
-
 
299
		xmlSnippet.add(this.xmlIndentation[indent] + "</Facet>");
-
 
300
		
-
 
301
		return StringUtils.join(xmlSnippet, "\n");
141
	}
302
	}
142
}
303
}