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