Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
62 naveen 1
/**
2
 * 
3
 */
4
package in.shop2020.util;
5
 
102 naveen 6
import in.shop2020.metamodel.core.Bullet;
63 naveen 7
import in.shop2020.metamodel.core.Entity;
8
import in.shop2020.metamodel.core.Feature;
102 naveen 9
import in.shop2020.metamodel.core.PrimitiveDataObject;
63 naveen 10
import in.shop2020.metamodel.core.Slide;
102 naveen 11
import in.shop2020.metamodel.definitions.BulletDefinition;
63 naveen 12
import in.shop2020.metamodel.definitions.Catalog;
64 naveen 13
import in.shop2020.metamodel.definitions.Category;
83 naveen 14
import in.shop2020.metamodel.definitions.DatatypeDefinition;
63 naveen 15
import in.shop2020.metamodel.definitions.DefinitionsContainer;
16
import in.shop2020.metamodel.definitions.EntityContainer;
82 naveen 17
import in.shop2020.metamodel.definitions.FacetDefinition;
88 naveen 18
import in.shop2020.metamodel.definitions.FacetRuleDefinition;
63 naveen 19
import in.shop2020.metamodel.definitions.FeatureDefinition;
20
import in.shop2020.metamodel.definitions.SlideDefinition;
1050 rajveer 21
import in.shop2020.metamodel.util.CreationUtils;
67 naveen 22
import in.shop2020.metamodel.util.ExpandedBullet;
83 naveen 23
import in.shop2020.metamodel.util.ExpandedBulletDefinition;
63 naveen 24
import in.shop2020.metamodel.util.ExpandedCategoryFacetDefinition;
64 naveen 25
import in.shop2020.metamodel.util.ExpandedEntity;
82 naveen 26
import in.shop2020.metamodel.util.ExpandedFacetDefinition;
81 naveen 27
import in.shop2020.metamodel.util.ExpandedFacetRuleDefinition;
65 naveen 28
import in.shop2020.metamodel.util.ExpandedFeature;
83 naveen 29
import in.shop2020.metamodel.util.ExpandedFeatureDefinition;
65 naveen 30
import in.shop2020.metamodel.util.ExpandedSlide;
451 rajveer 31
import in.shop2020.model.v1.catalog.CatalogService.Client;
32
import in.shop2020.model.v1.catalog.Item;
897 rajveer 33
import in.shop2020.model.v1.catalog.status;
451 rajveer 34
import in.shop2020.thrift.clients.CatalogServiceClient;
63 naveen 35
 
341 rajveer 36
import java.io.File;
37
import java.io.FileOutputStream;
81 naveen 38
import java.util.ArrayList;
1050 rajveer 39
import java.util.Collection;
897 rajveer 40
import java.util.Date;
91 naveen 41
import java.util.HashMap;
897 rajveer 42
import java.util.HashSet;
81 naveen 43
import java.util.List;
82 naveen 44
import java.util.Map;
451 rajveer 45
import java.util.Map.Entry;
897 rajveer 46
import java.util.Set;
81 naveen 47
 
341 rajveer 48
import javax.xml.transform.TransformerConfigurationException;
49
import javax.xml.transform.TransformerFactory;
50
import javax.xml.transform.Transformer;
51
import javax.xml.transform.stream.StreamResult;
52
import javax.xml.transform.stream.StreamSource;
53
 
81 naveen 54
import org.apache.commons.lang.ArrayUtils;
55
import org.apache.commons.lang.StringEscapeUtils;
56
import org.apache.commons.lang.StringUtils;
57
 
341 rajveer 58
 
62 naveen 59
/**
60
 * Command line utility to convert IR Definitions into IR Data and IR Meta-data
61
 * 
81 naveen 62
 * Usage: IR [irmetadata|irdata] {Category ID}
63
 * 
62 naveen 64
 * @author naveen
65
 *
66
 */
67
public class IR {
63 naveen 68
 
62 naveen 69
	/**
64 naveen 70
	 * 
71
	 */
63 naveen 72
	private long categoryID;
73
 
74
	/**
64 naveen 75
	 * Level - 4, 8, 12, 16
76
	 */
77
	private String[] xmlIndentation = {"", "    ", "        ", "            ", 
78
			"                "};
83 naveen 79
 
80
	private String[] xmlTabIndentation = {"", "\t", "\t\t", "\t\t\t", 
81
			"\t\t\t\t", "\t\t\t\t\t", "\t\t\t\t\t\t"};
91 naveen 82
 
83
	private Map<Long, List<String>> facetIDFacetValues = 
84
		new HashMap<Long, List<String>>();
733 rajveer 85
 
86
	CatalogServiceClient catalogServiceClient = null;
87
	in.shop2020.model.v1.catalog.InventoryService.Client client = null;
64 naveen 88
 
89
	/**
62 naveen 90
	 * @param args
63 naveen 91
	 * @throws Exception 
62 naveen 92
	 */
63 naveen 93
	public static void main(String[] args) throws Exception {
81 naveen 94
		String[] commands = new String[] {"irmetadata", "irdata"};
62 naveen 95
 
81 naveen 96
		String usage = "Usage: IR ["+ StringUtils.join(commands, "|") +
97
			"] {Category ID}\n";
98
 
99
		if(args.length < 1) {
63 naveen 100
			System.out.println(usage);
101
			System.exit(-1);
102
		}
81 naveen 103
 
104
		String inputCommand = args[0];
105
 
106
		if(!ArrayUtils.contains(commands, inputCommand)) {
107
			System.out.println(usage);
108
			System.exit(-1);
109
		}
64 naveen 110
 
111
		long categoryID = 0L;
81 naveen 112
		if(args.length > 1) {
64 naveen 113
			try {
81 naveen 114
				categoryID = Long.parseLong(args[1]);
64 naveen 115
			}
116
			catch (NumberFormatException nfe) {
117
				System.out.println(usage);
118
				System.exit(-1);
119
			}
63 naveen 120
		}
121
 
122
		IR ir = new IR(categoryID);
81 naveen 123
 
124
		if (inputCommand.equals("irdata")) {
125
			ir.exportIRData();
341 rajveer 126
			ir.transformIrDataXMLtoSolrXML();
81 naveen 127
			return;
128
		}
129
 
130
		if (inputCommand.equals("irmetadata")) {
131
			ir.exportIRMetaData();
341 rajveer 132
			ir.transformIrMetaDataXMLSolrSchemaXML();
81 naveen 133
			return;
134
		}
135
 
62 naveen 136
	}
63 naveen 137
 
138
	/**
139
	 * 
140
	 * @param categoryID
733 rajveer 141
	 * @throws Exception 
63 naveen 142
	 */
733 rajveer 143
	public IR(long categoryID) throws Exception {
63 naveen 144
		this.categoryID = categoryID;
733 rajveer 145
		catalogServiceClient = new CatalogServiceClient();
146
		client = catalogServiceClient.getClient();
63 naveen 147
	}
148
 
341 rajveer 149
 
63 naveen 150
	/**
81 naveen 151
	 * 
341 rajveer 152
	 * @param inXMLFilename
153
	 * @param xslFilename
154
	 * @param outXMLFilename
155
	 * @throws Exception 
156
	 */
157
 
158
	public void xsltTransformation(String inXMLFilename, String xslFilename, String outXMLFilename) throws Exception{
159
		// Use the static TransformerFactory.newInstance() method to instantiate 
160
		  // a TransformerFactory. The javax.xml.transform.TransformerFactory 
161
		  // system property setting determines the actual class to instantiate --
162
		  // org.apache.xalan.transformer.TransformerImpl.
163
		TransformerFactory tFactory = TransformerFactory.newInstance();
164
 
165
			// Use the TransformerFactory to instantiate a Transformer that will work with  
166
			// the stylesheet you specify. This method call also processes the stylesheet
167
		  // into a compiled Templates object.
168
		Transformer transformer = tFactory.newTransformer(new StreamSource(xslFilename));
169
 
170
			// Use the Transformer to apply the associated Templates object to an XML document
171
			// (foo.xml) and write the output to a file (foo.out).
172
		transformer.transform(new StreamSource(inXMLFilename), new StreamResult(new FileOutputStream(outXMLFilename)));
173
 
174
	}
175
 
176
	/**
177
	 * 
81 naveen 178
	 * @throws Exception
179
	 */
341 rajveer 180
	public void transformIrDataXMLtoSolrXML() throws Exception {
181
		String irDataFilename = Utils.EXPORT_IR_PATH + "irdata.xml";
182
		String irSolrDataFilename = Utils.EXPORT_SOLR_PATH + "irdata_solr.xml";
183
		String irXslFilename = "src/xsl/irdata_solrdata.xsl";
184
		System.out.println(irSolrDataFilename);
185
		File solrFile = new File(irSolrDataFilename);
186
		if(!solrFile.exists()){
187
			solrFile.createNewFile();
188
		}
189
		xsltTransformation(irDataFilename, irXslFilename, irSolrDataFilename);
190
	}
191
 
192
 
193
	/**
194
	 * 
195
	 * @throws Exception
196
	 */
197
	public void transformIrMetaDataXMLSolrSchemaXML() throws Exception {
198
		String irDataFilename = Utils.EXPORT_IR_PATH + "irmetadata.xml";
199
		String irSolrDataFilename = Utils.EXPORT_SOLR_PATH + "irmetadata_solrschema.xml";
200
		String irXslFilename = "src/xsl/irmetadata_solrschema.xsl";
201
		System.out.println(irSolrDataFilename);
202
		File solrFile = new File(irSolrDataFilename);
203
		if(!solrFile.exists()){
204
			solrFile.createNewFile();
205
		}
206
		xsltTransformation(irDataFilename, irXslFilename, irSolrDataFilename);
207
	}
208
 
209
 
210
 
211
	/**
212
	 * 
213
	 * @throws Exception
214
	 */
81 naveen 215
	public void exportIRMetaData() throws Exception {
216
		DefinitionsContainer defs = 
217
			Catalog.getInstance().getDefinitionsContainer();
82 naveen 218
 
81 naveen 219
		// <IRMetaData>
82 naveen 220
		List<String> xmlSnippets = new ArrayList<String>();
221
		xmlSnippets.add("<IRMetaData>");
83 naveen 222
		xmlSnippets.add("\t<Facets>");
81 naveen 223
 
82 naveen 224
		IRMetaDataJythonWrapper jy = new IRMetaDataJythonWrapper();
81 naveen 225
 
83 naveen 226
		List<Long> facetFeatures = new ArrayList<Long>();
227
 
81 naveen 228
		// Iterate over all facet definitions
82 naveen 229
		Map<Long, FacetDefinition> facetDefs = defs.getFacetDefinitions();
230
		for(FacetDefinition facetDef : facetDefs.values()) {
231
 
232
			jy.reset();
233
			jy.initialize();
234
 
235
			ExpandedFacetDefinition expFacetDef = 
236
				new ExpandedFacetDefinition(facetDef);
237
 
238
			jy.setExpandedFacetDefinition(expFacetDef);
239
 
240
			jy.executeRule();
241
 
242
			String facetXMLSnip = jy.getXMLSnippet();
243
			Utils.info("facetXMLSnip=" + facetXMLSnip);
244
 
245
			xmlSnippets.add(facetXMLSnip);
83 naveen 246
 
247
			facetFeatures.add(new Long(expFacetDef.getFeatureDefinitionID()));
82 naveen 248
		}
83 naveen 249
		xmlSnippets.add("\t</Facets>");
81 naveen 250
 
83 naveen 251
		Utils.info("facetFeatures=" + facetFeatures);
252
 
253
		xmlSnippets.add("\n\t<Properties>");
254
 
81 naveen 255
		// Iterate over all feature definitions
83 naveen 256
		Map<Long, FeatureDefinition> featureDefs = defs.getFeatureDefinitions();
257
		for(FeatureDefinition featureDef : featureDefs.values()) {
258
			if(facetFeatures.contains(new Long(featureDef.getID()))) {
259
				// Ignore, is already covered as facet
260
				continue;
261
			}
262
			String propertyXMLSnip = this.getPropertyXMLSnippet(featureDef);
263
			Utils.info("propertyXMLSnip=" + propertyXMLSnip);
264
 
265
			xmlSnippets.add(propertyXMLSnip);
266
		}
81 naveen 267
 
83 naveen 268
		xmlSnippets.add("\t</Properties>");
269
 
270
		xmlSnippets.add("\n\t<Categories>");
271
 
272
		// Iterate over all categories
580 rajveer 273
		/*
1050 rajveer 274
		Category rootCategory = defs.getCategory(Catalog.getInstance().getRootCategory().getID());
83 naveen 275
		List<Category> children = rootCategory.getChildrenCategory();
276
		for (Category child : children) {
516 rajveer 277
 
83 naveen 278
			String categoryXMLSnip = this.getCategoryXMLSnippet(child, 2);
279
			Utils.info("categoryXMLSnip=" + categoryXMLSnip);
280
 
281
			xmlSnippets.add(categoryXMLSnip);
282
		}
580 rajveer 283
		*/
284
 
1050 rajveer 285
		Category rootCategory = defs.getCategory(Catalog.getInstance().getRootCategory().getID());
580 rajveer 286
		String categoryXMLSnip = this.getCategoryXMLSnippet(rootCategory, 2);
287
		Utils.info("categoryXMLSnip=" + categoryXMLSnip);
288
 
289
		xmlSnippets.add(categoryXMLSnip);
290
 
291
 
83 naveen 292
		xmlSnippets.add("\t</Categories>");
293
 
81 naveen 294
		// </IRMetaData>
82 naveen 295
		xmlSnippets.add("</IRMetaData>");
81 naveen 296
 
82 naveen 297
		String irMetaDataXML = StringUtils.join(xmlSnippets, "\n");
81 naveen 298
		Utils.info(irMetaDataXML);
299
 
300
		// Write it to file
301
		String irMetaDataFilename = Utils.EXPORT_IR_PATH + "irmetadata.xml";
302
		DBUtils.store(irMetaDataXML, irMetaDataFilename);
303
	}
304
 
305
	/**
83 naveen 306
	 * 
307
	 * @param category
308
	 * @return
63 naveen 309
	 * @throws Exception 
83 naveen 310
	 */
311
	private String getCategoryXMLSnippet(Category category, int indent) 
312
		throws Exception {
313
 
314
		DefinitionsContainer defs = 
315
			Catalog.getInstance().getDefinitionsContainer();
316
 
317
		String xmlSnip = this.xmlTabIndentation[indent] + "<Category";
318
 
319
		xmlSnip += " ID=\"" + category.getID() + "\"";
320
		xmlSnip += " label=\"" + category.getLabel() + "\"";
321
		xmlSnip += ">\n";
322
 
323
		List<Category> children = category.getChildrenCategory();
324
 
325
		if(children != null) {
326
			for(Category child : children) {
327
				xmlSnip += this.getCategoryXMLSnippet(child, indent+1);
328
			}
329
		}
330
		else {
331
			// Only leaf category will have entities
332
			// Facet IDs
333
			xmlSnip += this.xmlTabIndentation[indent+1] + "<Facets>\n";
334
 
335
			List<Long> facetDefIDs = 
336
				defs.getFacetDefinitionIDs(category.getID());
337
			Utils.info("facetDefIDs=" + facetDefIDs);
338
 
516 rajveer 339
 
340
 
341
			if( facetDefIDs != null && !facetDefIDs.isEmpty() ){
342
					for(Long facetDefID : facetDefIDs) {
343
					xmlSnip += this.xmlTabIndentation[indent+2] + 
344
						"<FacetID>" + facetDefID + "</FacetID>\n";
345
				}
83 naveen 346
			}
347
 
516 rajveer 348
 
83 naveen 349
			xmlSnip += this.xmlTabIndentation[indent+1] + "</Facets>\n\n";
350
 
351
			// Feature IDs
352
			xmlSnip += this.xmlTabIndentation[indent+1] + "<Properties>\n";
353
 
354
			List<Long> featureDefIDs = 
355
				defs.getFeatureDefinitionIDs(category.getID());
356
			Utils.info("featureDefIDs=" + featureDefIDs);
357
 
358
			for(Long featureDefID : featureDefIDs) {
359
				xmlSnip += this.xmlTabIndentation[indent+2] + 
360
					"<FeatureID>" + featureDefID + "</FeatureID>\n";
361
			}
362
 
363
			xmlSnip += this.xmlTabIndentation[indent+1] + "</Properties>\n";
364
		}
365
 
366
		xmlSnip += this.xmlTabIndentation[indent] + "</Category>\n";
367
 
368
		return xmlSnip;
369
	}
370
 
371
	/**
63 naveen 372
	 * 
83 naveen 373
	 * @param featureDef
374
	 * @return
375
	 * @throws Exception 
63 naveen 376
	 */
83 naveen 377
	private String getPropertyXMLSnippet(FeatureDefinition featureDef) 
378
		throws Exception {
379
		String xmlSnip = "\t\t<Property";
380
 
381
		xmlSnip += " ID=\"" + featureDef.getID() + "\"";
382
		xmlSnip += " label=\"" + featureDef.getLabel() + "\"";
383
 
384
		ExpandedFeatureDefinition expFeatureDef = 
385
			new ExpandedFeatureDefinition(featureDef);
386
 
387
		ExpandedBulletDefinition expBulletDef = 
388
			expFeatureDef.getExpandedBulletDefinition();
389
 
390
		String datatype = "string";
391
		if(expBulletDef.isComposite() || expBulletDef.isEnumerated()) {
392
			datatype = "string";
393
		}
394
		else {
395
			DatatypeDefinition datatypeDef = 
396
				expBulletDef.getDatatypeDefinition();
397
 
398
			datatype = datatypeDef.getName();
399
 
400
			// REVISIT
401
			if(datatype.equals("hours_mins") || datatype.equals("days_hours") ||
402
					datatype.equals("hours_mins") || 
403
					datatype.equals("days_hours")) {
404
				datatype = "string";
405
			}
406
		}
407
		xmlSnip += " datatype=\"" + datatype + "\"";
408
 
409
		String multivalue = "false";
410
		if (expBulletDef.isMultivalue()) {
411
			multivalue = "true";
412
		}
413
		xmlSnip += " isMultivalue=\"" + multivalue + "\"";
414
 
415
		xmlSnip += "/>";
416
		return xmlSnip;
417
	}
418
 
419
	/**
420
	 * @throws Exception 
421
	 * 
422
	 */
63 naveen 423
	public void exportIRData() throws Exception {
424
		DefinitionsContainer defs = 
425
			Catalog.getInstance().getDefinitionsContainer();
426
 
427
		EntityContainer ents = 
428
			Catalog.getInstance().getEntityContainer();
429
 
733 rajveer 430
 
431
 
64 naveen 432
		// <IRData>
433
		List<String> entityXMLSnippets = new ArrayList<String>();
434
		entityXMLSnippets.add("<IRData>");
63 naveen 435
 
64 naveen 436
		List<Category> categories = null;
437
		if(this.categoryID != 0L) {
438
			categories = new ArrayList<Category>();
439
			categories.add(defs.getCategory(this.categoryID));
440
		}
441
		else {
442
			// Get all categories
443
			categories = defs.getChildrenCategories(10001);
444
		}
63 naveen 445
 
580 rajveer 446
		int i=0;
64 naveen 447
		for(Category cat : categories) {
448
			long catID = cat.getID();
580 rajveer 449
			if(i>0){
450
				continue;
451
			}
452
			i++;
64 naveen 453
			// Get all facets for the category
454
			ExpandedCategoryFacetDefinition expCategoryFacetDef = 
455
				defs.getExpandedCategoryFacetDefinition(catID);
897 rajveer 456
			System.out.println(expCategoryFacetDef);
81 naveen 457
			List<ExpandedFacetRuleDefinition> expFacetRuleDefs = 
458
				expCategoryFacetDef.getExpandedFacetRuleDefinitions();
897 rajveer 459
			System.out.println(expFacetRuleDefs);
64 naveen 460
			// Get all entities for the category
1050 rajveer 461
			//FIXME
462
			Collection<Entity> entities = CreationUtils.getEntities(catID);
64 naveen 463
 
464
			if(entities == null) {
465
				continue;
466
			}
467
 
516 rajveer 468
 
469
			//Modified by Rajveer, Now it will search according to each catalog item.
470
			// For each entity in catalog
471
 
733 rajveer 472
 
897 rajveer 473
			List<Item> items = client.getAllItemsByStatus(status.ACTIVE);
474
			Set<Long> processedCatalogItems = new HashSet<Long>();
475
			Date todate = new Date();
516 rajveer 476
			for(Item item : items){
477
				long entityID = item.getCatalogItemId();
897 rajveer 478
				if(todate.getTime() < item.getStartDate() ){
479
					continue;
480
				}
481
				if(processedCatalogItems.contains(entityID)){
482
					continue;
483
				}
484
				processedCatalogItems.add(entityID);
485
 
516 rajveer 486
				ExpandedEntity expEntity = 
487
					ents.getExpandedEntity(entityID);
488
				//Skip if entity doesnt exist
489
				if(expEntity == null){
490
					continue;
491
				}
492
				List<String> facetXMLSnippets = new ArrayList<String>();
493
 
494
				// Collect features which have become FACETs
495
				List<Long> facetFeatureIDs = new ArrayList<Long>();
496
 
897 rajveer 497
				Set<Long> processedFacets = new HashSet<Long>();
516 rajveer 498
				// For each facet execute Rule
499
				for(ExpandedFacetRuleDefinition expFacetRuleDef : 
500
						expFacetRuleDefs) {
897 rajveer 501
					System.out.println(expFacetRuleDef.getFacetDefinitionID());
516 rajveer 502
					String facetXMLSnip = 
503
						this.processFacet(expEntity, expFacetRuleDef);
504
 
505
					if(facetXMLSnip != null && 
506
							!StringUtils.trim(facetXMLSnip).isEmpty()) {
507
						facetXMLSnippets.add(facetXMLSnip);
508
						Utils.info("1 facetXMLSnip=" + facetXMLSnip);
897 rajveer 509
						processedFacets.add(expFacetRuleDef.getFacetDefinitionID());
516 rajveer 510
					}
511
 
512
					// Collect features already covered as Facet
513
					if(expFacetRuleDef.getFeatureDefinition() != null) {
514
						facetFeatureIDs.add(new Long(
515
								expFacetRuleDef.getFeatureDefinitionID()));
516
					}
517
				}
1050 rajveer 518
				Entity entity = CreationUtils.getEntity(entityID);
516 rajveer 519
				// Handle borrowed slides
520
				List<Slide> borrowedSlides = ents.getBorrowedSlides(entity);
521
 
522
				for (Slide borrowedSlide : borrowedSlides) {
523
					if(borrowedSlide.getBorrowedCategoryID() == -1){
524
						continue;
525
					}
526
					String facetXMLSnip = this.processBorrowedSlide(expEntity,
897 rajveer 527
							borrowedSlide, processedFacets);
516 rajveer 528
 
529
					if(facetXMLSnip != null && 
530
							!StringUtils.trim(facetXMLSnip).isEmpty()) {
531
						facetXMLSnippets.add(facetXMLSnip);
532
					}
533
 
534
					Utils.info("2 facetXMLSnip=" + facetXMLSnip);
535
				}
536
 
537
				String facetXMLSnippetsStr = 
538
					StringUtils.join(facetXMLSnippets, "\n");
539
 
540
				Utils.info("facetXMLSnippetsStr=" + facetXMLSnippetsStr);
541
 
542
				// Collect PROPERTIES
543
				String propertiesXMLSnippetsStr = 
544
					this.getPropertiesXMLSnippet(expEntity, facetFeatureIDs, 2);
545
 
546
				Utils.info(propertiesXMLSnippetsStr);
547
 
548
				String entityXMLSnip = this.getEntityXMLSnippet(expEntity, 
549
						facetXMLSnippetsStr, propertiesXMLSnippetsStr, 1);
550
 
551
				Utils.info(entityXMLSnip);
552
 
553
				entityXMLSnippets.add(entityXMLSnip);
554
			}
555
		}
556
 
557
 
558
			/*
64 naveen 559
			// For each entity 
63 naveen 560
			for(Entity entity : entities) {
64 naveen 561
				ExpandedEntity expEntity = 
562
					ents.getExpandedEntity(entity.getID());
346 rajveer 563
				//Skip if entity doesnt exist
564
				if(expEntity == null){
565
					continue;
566
				}
64 naveen 567
				List<String> facetXMLSnippets = new ArrayList<String>();
568
 
88 naveen 569
				// Collect features which have become FACETs
67 naveen 570
				List<Long> facetFeatureIDs = new ArrayList<Long>();
571
 
63 naveen 572
				// For each facet execute Rule
81 naveen 573
				for(ExpandedFacetRuleDefinition expFacetRuleDef : 
574
						expFacetRuleDefs) {
64 naveen 575
					String facetXMLSnip = 
81 naveen 576
						this.processFacet(expEntity, expFacetRuleDef);
63 naveen 577
 
88 naveen 578
					if(facetXMLSnip != null && 
579
							!StringUtils.trim(facetXMLSnip).isEmpty()) {
64 naveen 580
						facetXMLSnippets.add(facetXMLSnip);
88 naveen 581
						Utils.info("1 facetXMLSnip=" + facetXMLSnip);
63 naveen 582
					}
67 naveen 583
 
584
					// Collect features already covered as Facet
81 naveen 585
					if(expFacetRuleDef.getFeatureDefinition() != null) {
88 naveen 586
						facetFeatureIDs.add(new Long(
587
								expFacetRuleDef.getFeatureDefinitionID()));
67 naveen 588
					}
63 naveen 589
				}
590
 
88 naveen 591
				// Handle borrowed slides
592
				List<Slide> borrowedSlides = ents.getBorrowedSlides(entity);
593
 
594
				for (Slide borrowedSlide : borrowedSlides) {
595
					String facetXMLSnip = this.processBorrowedSlide(expEntity,
596
							borrowedSlide);
597
 
598
					if(facetXMLSnip != null && 
599
							!StringUtils.trim(facetXMLSnip).isEmpty()) {
600
						facetXMLSnippets.add(facetXMLSnip);
601
					}
602
 
603
					Utils.info("2 facetXMLSnip=" + facetXMLSnip);
604
				}
605
 
64 naveen 606
				String facetXMLSnippetsStr = 
607
					StringUtils.join(facetXMLSnippets, "\n");
608
 
88 naveen 609
				Utils.info("facetXMLSnippetsStr=" + facetXMLSnippetsStr);
64 naveen 610
 
67 naveen 611
				// Collect PROPERTIES
612
				String propertiesXMLSnippetsStr = 
613
					this.getPropertiesXMLSnippet(expEntity, facetFeatureIDs, 2);
64 naveen 614
 
67 naveen 615
				Utils.info(propertiesXMLSnippetsStr);
616
 
617
				String entityXMLSnip = this.getEntityXMLSnippet(expEntity, 
618
						facetXMLSnippetsStr, propertiesXMLSnippetsStr, 1);
619
 
64 naveen 620
				Utils.info(entityXMLSnip);
621
 
622
				entityXMLSnippets.add(entityXMLSnip);
63 naveen 623
			}
624
		}
516 rajveer 625
		*/
626
 
64 naveen 627
		// </IRData>
628
		entityXMLSnippets.add("</IRData>");
629
 
630
		String irDataXML = StringUtils.join(entityXMLSnippets, "\n");
631
		Utils.info(irDataXML);
632
 
633
		// Write it to file
70 naveen 634
		String irDataFilename = Utils.EXPORT_IR_PATH + "irdata.xml";
64 naveen 635
		DBUtils.store(irDataXML, irDataFilename);
91 naveen 636
 
1050 rajveer 637
		Utils.info("this.facetIDFacetValues=" + this.facetIDFacetValues);
638
		CreationUtils.storeFacetValues(facetIDFacetValues);
91 naveen 639
		// Store facet values
640
 
63 naveen 641
	}
64 naveen 642
 
643
	/**
644
	 * 
88 naveen 645
	 * @param borrowedSlides
646
	 * @return
647
	 */
648
	private String processBorrowedSlide(ExpandedEntity expEntity, 
897 rajveer 649
			Slide borrowedSlide, Set<Long> processedFacets) throws Exception {
88 naveen 650
		// Borrowed category ID
651
		long borrowedCategoryID = borrowedSlide.getBorrowedCategoryID();
652
		Utils.info("borrowedCategoryID=" + borrowedCategoryID);
653
 
654
		// Slide definition ID
655
		long slideDefID = borrowedSlide.getSlideDefinitionID();
656
		Utils.info("borrowed slideDefID=" + slideDefID);
657
 
658
		DefinitionsContainer defs = 
659
			Catalog.getInstance().getDefinitionsContainer();
660
 
661
		// Get IR Data Rule
662
		FacetRuleDefinition facetRuleDef = 
663
			defs.getFacetRuleDefinitionForSlide(borrowedCategoryID, slideDefID);
664
 
665
		Utils.info("borrowed facetRuleDef=" + facetRuleDef);
666
		String facetXMLSnippet = null; 
667
 
668
		// If there is direct IR data rule defined for borrowed slide
669
		if(facetRuleDef != null) {
670
			ExpandedFacetRuleDefinition expFacetRuleDef = 
671
				new ExpandedFacetRuleDefinition(facetRuleDef);
672
 
897 rajveer 673
 
674
			if(!processedFacets.contains(expFacetRuleDef.getFacetDefinitionID())){
675
				// 	Return XML snippet			
676
				facetXMLSnippet = this.processFacet(expEntity, expFacetRuleDef);
677
				processedFacets.add(expFacetRuleDef.getFacetDefinitionID());
678
			}
88 naveen 679
		}
680
		else {
681
			List<String> facetXMLSnippets = new ArrayList<String>();
682
 
683
			// Get FacetRuleDefinition objects for all features in 
684
			// borrowed slide for which IR rule is defined
685
			List<Feature> features = borrowedSlide.getFeatures();
686
			for (Feature feature : features) {
687
				String featureFacetXMLSnippet = 
897 rajveer 688
					this.processBorrowedFeature(borrowedCategoryID, expEntity, feature, processedFacets);
88 naveen 689
 
690
				if(featureFacetXMLSnippet != null && !StringUtils.trim(
691
						featureFacetXMLSnippet).isEmpty()) {
692
					facetXMLSnippets.add(featureFacetXMLSnippet);
693
				}
694
			}
695
 
696
			// Get FacetRuleDefinition objects for all children slides in 
697
			// borrowed slide for which IR rule is defined
698
			if(borrowedSlide.hasChildrenSlides()) {
699
				String childrenSlidesFacetXMLSnippet = 
700
					this.processBorrowedChildrenSlides(borrowedCategoryID, 
897 rajveer 701
							expEntity, borrowedSlide, processedFacets);
88 naveen 702
 
703
				if(childrenSlidesFacetXMLSnippet != null && !StringUtils.trim(
704
						childrenSlidesFacetXMLSnippet).isEmpty()) {
705
					facetXMLSnippets.add(childrenSlidesFacetXMLSnippet);
706
				}
707
			}
708
 
709
			facetXMLSnippet = StringUtils.join(facetXMLSnippets, "\n");
710
		}
711
 
897 rajveer 712
 
713
		if(facetXMLSnippet == null || StringUtils.trim(facetXMLSnippet).isEmpty()) {
88 naveen 714
			return null;
715
		}
716
 
717
		return facetXMLSnippet;
718
	}
719
 
720
	/**
721
	 * 
722
	 * @param borrowedCategoryID
64 naveen 723
	 * @param expEntity
88 naveen 724
	 * @param feature
725
	 * @return
726
	 * @throws Exception 
727
	 */
728
	private String processBorrowedFeature(long borrowedCategoryID, 
897 rajveer 729
			ExpandedEntity expEntity, Feature feature, Set<Long> processedFacets) throws Exception {
88 naveen 730
 
731
		long featureDefID = feature.getFeatureDefinitionID();
732
		Utils.info("borrowed featureDefID=" + featureDefID);
733
 
734
		DefinitionsContainer defs = 
735
			Catalog.getInstance().getDefinitionsContainer();
736
 
737
		FacetRuleDefinition facetRuleDefForFeature = 
738
			defs.getFacetRuleDefinitionForFeature(borrowedCategoryID, 
739
				featureDefID);
740
 
741
		List<String> facetXMLSnippets = new ArrayList<String>();
742
 
743
		Utils.info("borrowed facetRuleDefForFeature=" + 
744
				facetRuleDefForFeature);
745
 
746
		if(facetRuleDefForFeature != null) {
747
			ExpandedFacetRuleDefinition expFacetRuleDefForFeature = 
748
				new ExpandedFacetRuleDefinition(facetRuleDefForFeature);
897 rajveer 749
			if(!processedFacets.contains(expFacetRuleDefForFeature.getFacetDefinitionID())){
750
 
751
				String snip = this.processFacet(expEntity, 
752
						expFacetRuleDefForFeature);
753
 
754
				if(snip != null) {
755
					facetXMLSnippets.add(snip);
756
					processedFacets.add(expFacetRuleDefForFeature.getFacetDefinitionID());
757
				}
88 naveen 758
			}
759
		}
760
 
761
 
762
		String xmlSnip =  StringUtils.join(facetXMLSnippets, "\n");
763
 
764
		if(StringUtils.trim(xmlSnip).isEmpty()) {
765
			return null;
766
		}
767
 
768
		return xmlSnip;
769
	}
770
 
771
	/**
772
	 * 
773
	 * @param expEntity
774
	 * @param borrowedSlide
775
	 * @return
776
	 * @throws Exception 
777
	 */
778
	private String processBorrowedChildrenSlides(long borrowedCategoryID, 
897 rajveer 779
			ExpandedEntity expEntity, Slide borrowedSlide, Set<Long> processedFacets) throws Exception {
88 naveen 780
		DefinitionsContainer defs = 
781
			Catalog.getInstance().getDefinitionsContainer();
782
 
783
		List<Slide> childrenSlides = borrowedSlide.getChildrenSlides();
784
		List<String> facetXMLSnippets = new ArrayList<String>();
785
 
786
		for (Slide childSlide : childrenSlides) {
787
			long childSlideDefID = childSlide.getSlideDefinitionID();
788
			Utils.info("borrowed childSlideDefID=" + childSlideDefID);
789
 
790
			FacetRuleDefinition facetRuleDefForSlide = 
791
				defs.getFacetRuleDefinitionForSlide(borrowedCategoryID, 
792
						childSlideDefID);
793
 
794
			Utils.info("borrowed facetRuleDefForSlide=" + 
795
					facetRuleDefForSlide);
796
 
797
			if(facetRuleDefForSlide != null) {
798
				ExpandedFacetRuleDefinition expFacetRuleDefForSlide = 
799
					new ExpandedFacetRuleDefinition(
800
							facetRuleDefForSlide);
897 rajveer 801
				if(!processedFacets.contains(expFacetRuleDefForSlide.getFacetDefinitionID())){
802
					String snip = this.processFacet(expEntity, 
803
							expFacetRuleDefForSlide);
804
 
805
					if(snip != null && !StringUtils.trim(snip).isEmpty()) {
806
						facetXMLSnippets.add(snip);
807
						processedFacets.add(expFacetRuleDefForSlide.getFacetDefinitionID());
808
					}
88 naveen 809
				}
810
			}
811
 
812
			// Features?
813
			if(childSlide.hasFeatures()) {
814
				List<Feature> features = childSlide.getFeatures();
815
				for(Feature feature : features) {
816
					String childrenSlideFeatureFacetXMLSnippet = 
817
						this.processBorrowedFeature(borrowedCategoryID, expEntity, 
897 rajveer 818
							feature, processedFacets);
88 naveen 819
 
820
					if(childrenSlideFeatureFacetXMLSnippet != null &&
821
						!StringUtils.trim(childrenSlideFeatureFacetXMLSnippet).
822
							isEmpty()) {
823
 
824
						facetXMLSnippets.add(
825
								childrenSlideFeatureFacetXMLSnippet);
826
 
827
					}
828
				}
829
			}
830
 
831
			// Children slides
832
			if(childSlide.hasChildrenSlides()) {
833
				String childrenSlidesFacetXMLSnippet = 
834
					this.processBorrowedChildrenSlides(borrowedCategoryID, 
897 rajveer 835
							expEntity, childSlide, processedFacets);
88 naveen 836
 
837
				if(childrenSlidesFacetXMLSnippet != null &&
838
					!StringUtils.trim(childrenSlidesFacetXMLSnippet).
839
						isEmpty()) {
840
 
841
					facetXMLSnippets.add(childrenSlidesFacetXMLSnippet);
842
				}
843
			}
844
		}
845
 
846
		String xmlSnip =  StringUtils.join(facetXMLSnippets, "\n");
847
 
848
		if(StringUtils.trim(xmlSnip).isEmpty()) {
849
			return null;
850
		}
851
 
852
		return xmlSnip;
853
	}
854
 
855
 
856
	/**
857
	 * 
858
	 * @param expEntity
64 naveen 859
	 * @param expFacetDef
860
	 * @return
861
	 * @throws Exception 
862
	 */
863
	@SuppressWarnings("unchecked")
864
	private String processFacet(ExpandedEntity expEntity, 
81 naveen 865
			ExpandedFacetRuleDefinition expFacetRuleDef) throws Exception {
64 naveen 866
 
81 naveen 867
		Utils.info("expFacetRuleDef=" + expFacetRuleDef);
516 rajveer 868
 
869
		Utils.info("expEntity.getID()=" + expEntity.getID());
81 naveen 870
 
451 rajveer 871
		// to get the price from services and pass it on to fill in solr
872
 
733 rajveer 873
//		CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
874
//		in.shop2020.model.v1.catalog.InventoryService.Client client = catalogServiceClient.getClient();
451 rajveer 875
 
516 rajveer 876
		double itemPrice = 0;
638 rajveer 877
		List<Item> items = client.getItemsByCatalogId(expEntity.getID());
897 rajveer 878
		Date todate = new Date();
638 rajveer 879
		for(Item item: items){
897 rajveer 880
			if(item.getItemStatus() != status.ACTIVE || todate.getTime() < item.getStartDate()){
881
				continue;
882
			}
638 rajveer 883
			if(itemPrice == 0){
884
				itemPrice = item.getSellingPrice();
885
			}else if(itemPrice>item.getSellingPrice()){
886
				itemPrice = item.getSellingPrice();
887
			}
516 rajveer 888
 
451 rajveer 889
		}
890
 
64 naveen 891
		EntityContainer ents = 
892
			Catalog.getInstance().getEntityContainer();
893
 
102 naveen 894
		DefinitionsContainer defs = 
895
			Catalog.getInstance().getDefinitionsContainer();
896
 
81 naveen 897
		IRDataJythonWrapper jw = new IRDataJythonWrapper();
64 naveen 898
 
899
		jw.setExpandedEntity(expEntity);
82 naveen 900
		jw.setExpandedFacetRuleDefinition(expFacetRuleDef);
451 rajveer 901
		jw.setEntityPrice(itemPrice);
64 naveen 902
 
903
		// Set FeatureDefinition
904
		FeatureDefinition featureDef = 
81 naveen 905
			expFacetRuleDef.getFeatureDefinition();
906
 
64 naveen 907
		if(featureDef != null) {
908
			jw.setFeatureDefinition(featureDef);
909
 
910
			// Set Feature
911
			Utils.info("featureDef.getID()=" + featureDef.getID());
912
 
913
			Feature feature = 
914
				ents.getFeature(expEntity.getID(), featureDef.getID());
915
 
90 naveen 916
			// Special case for Brand
580 rajveer 917
			if(expFacetRuleDef.getFacetDefinitionID() == 50001 ||
918
			   expFacetRuleDef.getFacetDefinitionID() == 50010 ||
919
				expFacetRuleDef.getFacetDefinitionID() == 50011) {
90 naveen 920
 
921
				// Execute Python script
922
				jw.executeRule();
923
 
924
			}
925
 
926
			// Can happen when to slide's feature which is dropped in favor 
927
			// of a borrowed slide
928
			else if(feature != null) {
102 naveen 929
 
930
				// Normalize
931
				if(defs.needsNormalization(feature.getFeatureDefinitionID())) {
932
					Utils.info("needsNormalization feature=" + feature);
933
 
934
					feature = this.normalize(feature);
935
				}
936
 
81 naveen 937
				ExpandedFeature expFeature = new ExpandedFeature(feature);
938
 
939
				jw.setExpandedFeature(expFeature);
88 naveen 940
 
941
				// Execute Python script
942
				jw.executeRule();
81 naveen 943
			}
64 naveen 944
		}
945
 
346 rajveer 946
 
947
 
948
 
64 naveen 949
		// Set SlideDefinition
81 naveen 950
		SlideDefinition slideDef = expFacetRuleDef.getSlideDefinition();
64 naveen 951
		if(slideDef != null) {
952
			jw.setSlideDefinition(slideDef);
953
 
954
			// Set Slide
955
			Utils.info("slideDef.getID()=" + slideDef.getID());
956
 
957
			Slide slide = ents.getSlide(expEntity.getID(), slideDef.getID());
88 naveen 958
 
959
			// Slide may not have been included infavor of a borrowed slide
960
			if(slide == null) {
961
				return null;
962
			}
963
 
65 naveen 964
			ExpandedSlide expSlide = new ExpandedSlide(slide);
64 naveen 965
 
65 naveen 966
			jw.setExpandedSlide(expSlide);
88 naveen 967
 
968
			// Execute Python script
969
			jw.executeRule();
64 naveen 970
		}
971
 
346 rajveer 972
		//
64 naveen 973
 
346 rajveer 974
		if(slideDef == null && featureDef == null){
975
			if(expFacetRuleDef.getIRDataRuleDefinition().getScript() != null){
976
				jw.executeRule();
977
			}
978
		}
979
 
980
 
64 naveen 981
		List<Object> values = (List<Object>)jw.getValues();
982
		Utils.info("values=" + values);
983
 
91 naveen 984
		// Append to facet values
985
		long facetDefID = expFacetRuleDef.getFacetDefinitionID();
986
		Utils.info("facetDefID=" + facetDefID);
987
 
988
		List<String> facetValues = this.facetIDFacetValues.get(
989
				new Long(facetDefID));
990
 
991
		if(facetValues == null) {
992
			facetValues = new ArrayList<String>();
993
			this.facetIDFacetValues.put(new Long(facetDefID), facetValues);
994
		}
995
 
996
		if(values != null) {
997
			for(Object value : values) {
998
				String strValue = value.toString();
999
 
1000
				if(!facetValues.contains(strValue)) {
1001
					facetValues.add(strValue);
1002
				}
1003
			}
1004
		}
1005
 
1006
		// Parse returned Python list
88 naveen 1007
		String facetXMLSnip = null;
64 naveen 1008
		if(values != null) {
1009
 
1010
			// Get IR Data XML snippet for this entity and facet
81 naveen 1011
			facetXMLSnip = this.getFacetXMLSnippet(expFacetRuleDef, values, 2);
64 naveen 1012
		}
1013
 
88 naveen 1014
		Utils.info("0 facetXMLSnip=" + facetXMLSnip);
64 naveen 1015
		return facetXMLSnip;
1016
	}
102 naveen 1017
 
1018
	/**
1019
	 * 
1020
	 * @param feature
1021
	 * @return Feature
1022
	 * @throws Exception 
1023
	 */
1024
	private Feature normalize(Feature feature) throws Exception {
1025
		ExpandedFeature expFeature = new ExpandedFeature(feature);
67 naveen 1026
 
102 naveen 1027
		BulletDefinition bulletDef = 
1028
			expFeature.getFeatureDefinition().getBulletDefinition();
1029
 
1030
		ExpandedBulletDefinition expBulletDef = new ExpandedBulletDefinition(
1031
				bulletDef);
1032
 
1033
		if(expBulletDef.isPrimitive()) {
1034
			PrimitiveNormalizationJythonWrapper jy = 
1035
				new PrimitiveNormalizationJythonWrapper();
1036
 
1037
			jy.setExpandedFeature(expFeature);
1038
 
1039
			jy.excuteRule();
1040
 
1041
			String newValue = jy.getNewValue();
1042
			long newUnitID = jy.getNewUnitID();
1043
 
1044
			List<Bullet> newBullets = new ArrayList<Bullet>();
1045
			Bullet newBullet = new Bullet(new PrimitiveDataObject(newValue));
1046
			newBullet.setUnitID(newUnitID);
1047
 
1048
			newBullets.add(newBullet);
1049
 
1050
			feature.setBullets(newBullets);
1051
		}
1052
		else {
1053
			Utils.severe("Normalization not defined for non-primitives");
1054
		}
1055
 
1056
		return feature;
1057
	}
1058
 
67 naveen 1059
	/**
1060
	 * 
1061
	 * @param expEntity
1062
	 * @param facetFeatureIDs
1063
	 * @param indent
1064
	 * @return
1065
	 */
1066
	private String getPropertiesXMLSnippet(ExpandedEntity expEntity, 
1067
			List<Long> facetFeatureIDs, int indent) {
1068
 
1069
		List<String> xmlSnippet = new ArrayList<String>();
1070
 
1071
		// Collect all free-form content here
1072
		List<String> ffc = new ArrayList<String>();
1073
 
1074
		// Features
1075
		List<ExpandedSlide> expSlides = expEntity.getExpandedSlides();
1076
 
1077
		for(ExpandedSlide expSlide : expSlides) {
1078
			List<ExpandedFeature> expFeatures = expSlide.getExpandedFeatures();
1079
 
1080
			if(expSlide.getFreeformContent() != null) {
199 naveen 1081
				ffc.add(expSlide.getFreeformContent().getFreeformText());
67 naveen 1082
			}
1083
 
1084
			if(expFeatures == null) {
1085
				continue;
1086
			}
1087
 
1088
			for(ExpandedFeature expFeature : expFeatures) {
1089
				Long featureDefID = 
1090
					new Long(expFeature.getFeatureDefinitionID());
1091
 
1092
				// FFC at feature level
1093
				if(expFeature.getFreeformContent() != null) {
199 naveen 1094
					ffc.add(expFeature.getFreeformContent().getFreeformText());
67 naveen 1095
				}
1096
 
1097
				// Exclude those who are already covered as facets
1098
				if(facetFeatureIDs.contains(featureDefID)) {
1099
					continue;
1100
				}
1101
 
1102
				List<ExpandedBullet> expBullets = 
1103
					expFeature.getExpandedBullets();
1104
 
1105
				if(expBullets == null) {
1106
					continue;
1107
				}
1108
 
1109
				//<Property Label="">
1110
				xmlSnippet.add(this.xmlIndentation[indent] + 
83 naveen 1111
						"<Property ID=\"" + expFeature.getFeatureDefinitionID() 
1112
						+ "\" Label=\"" + StringEscapeUtils.escapeXml(
67 naveen 1113
								expFeature.getFeatureDefinition().getLabel()) + 
1114
						"\">");
1115
 
1116
				//<Value></Value>
1117
				for(ExpandedBullet bullet : expBullets) {
1118
 
1119
					// FFC at bullet level
1120
					if(bullet.getFreeformContent() != null) {
199 naveen 1121
						ffc.add(bullet.getFreeformContent().getFreeformText());
67 naveen 1122
					}
1123
 
1124
					xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Value>" + 
1125
							StringEscapeUtils.escapeXml(bullet.getValue()) + 
1126
							"</Value>");
1127
				}
1128
 
1129
				//</Property>
1130
				xmlSnippet.add(this.xmlIndentation[indent] + "</Property>");
1131
			}
1132
		}
1133
 
1134
		// FFC as Label="Free-form Content"
1135
		if(!ffc.isEmpty()) {
1136
			xmlSnippet.add(this.xmlIndentation[indent] + 
108 naveen 1137
					"<Property ID=\"000000\" Label=\"Free-form Content\">");
67 naveen 1138
 
1139
			for(String f : ffc) {
1140
				if(f != null) {
1141
					f = StringEscapeUtils.escapeXml(f);
1142
 
1143
					xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Value>" + 
1144
						f + "</Value>");
1145
				}
1146
			}
1147
 
1148
			xmlSnippet.add(this.xmlIndentation[indent] + "</Property>");
1149
		}
1150
 
1151
		// Children slides
1152
		// TODO
1153
 
1154
		return StringUtils.join(xmlSnippet, "\n");
1155
	}
64 naveen 1156
 
1157
	/**
1158
	 * 
1159
	 * @param expEntity
1160
	 * @param facetXMLSnippets
1161
	 * @param indent
1162
	 * @return
1163
	 */
1164
	private String getEntityXMLSnippet(ExpandedEntity expEntity, 
67 naveen 1165
			String facetXMLSnippets, String propertiesXMLSnippets, int indent) {
64 naveen 1166
 
1167
		//<Entity ID="40001">
1168
		List<String> xmlSnippet = new ArrayList<String>();
1169
 
1170
		String entityID = new Long(expEntity.getID()).toString();
1171
		xmlSnippet.add(this.xmlIndentation[indent] + "<Entity ID=\""+ entityID + 
1172
				"\">");
1173
 
1174
		//<Category>Business Phones</Category>
580 rajveer 1175
		String parentCategory = expEntity.getCategory().getLabel();
64 naveen 1176
		xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Category>" + 
580 rajveer 1177
				StringEscapeUtils.escapeXml(parentCategory) + "</Category>");
64 naveen 1178
 
580 rajveer 1179
		/*
1180
		//<Category>Business Phones</Category>
1181
		String category = expEntity.getCategory().getLabel();
1182
		xmlSnippet.add(this.xmlIndentation[indent + 1] + "<SubCategory>" + 
1183
				StringEscapeUtils.escapeXml(category) + "</SubCategory>");
1184
		 */
1185
 
64 naveen 1186
		//<Title>Nokia E71</Title>
67 naveen 1187
		String title = StringEscapeUtils.escapeXml(expEntity.getBrand()) + " " +
1188
		StringEscapeUtils.escapeXml(expEntity.getModelName()) + 
64 naveen 1189
			((expEntity.getModelNumber() != null) ? 
67 naveen 1190
					(" " + 
1191
						StringEscapeUtils.escapeXml(expEntity.getModelNumber()))
64 naveen 1192
					: "");
1193
 
1194
		xmlSnippet.add(this.xmlIndentation[indent + 1] + 
67 naveen 1195
				"<Title>" + StringEscapeUtils.escapeXml(title) + "</Title>");
64 naveen 1196
 
1197
		xmlSnippet.add(facetXMLSnippets);
67 naveen 1198
 
1199
		xmlSnippet.add(propertiesXMLSnippets);
64 naveen 1200
 
1201
		//</Entity>
1202
		xmlSnippet.add(this.xmlIndentation[indent] + "</Entity>");
1203
 
1204
		return StringUtils.join(xmlSnippet, "\n");
1205
	}
1206
 
1207
	/**
1208
	 * 
1209
	 * @param expFacetDef
1210
	 * @param values
1211
	 * @param indent
1212
	 * @return String XML Snippet
1213
	 */
81 naveen 1214
	private String getFacetXMLSnippet(
1215
			ExpandedFacetRuleDefinition expFacetRuleDef, 
64 naveen 1216
			List<Object> values, int indent) {
81 naveen 1217
 
64 naveen 1218
		// <Facet Label="Form Factor">
1219
		List<String> xmlSnippet = new ArrayList<String>();
81 naveen 1220
		String target = expFacetRuleDef.getFacetDefinition().getTarget();
1221
 
83 naveen 1222
		xmlSnippet.add(this.xmlIndentation[indent] + "<Facet ID=\"" + 
1223
				expFacetRuleDef.getFacetDefinitionID() + "\" Label=\"" + 
64 naveen 1224
				target + "\">");
1225
 
1226
		//<Value>Candybar</Value>
1227
		for(Object value : values) {
1228
			xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Value>" + 
1229
					value.toString() + "</Value>");
1230
		}
1231
 
1232
		//</Facet>
1233
		xmlSnippet.add(this.xmlIndentation[indent] + "</Facet>");
1234
 
1235
		return StringUtils.join(xmlSnippet, "\n");
1236
	}
62 naveen 1237
}