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) {
1165 rajveer 519
					if(CreationUtils.getBorrowedCategoryID(borrowedSlide.getSlideDefinitionID(), entity.getCategoryID()) == -1){
516 rajveer 520
						continue;
521
					}
1165 rajveer 522
//					if(borrowedSlide.getBorrowedCategoryID() == -1){
523
//						continue;
524
//					}
516 rajveer 525
					String facetXMLSnip = this.processBorrowedSlide(expEntity,
897 rajveer 526
							borrowedSlide, processedFacets);
516 rajveer 527
 
528
					if(facetXMLSnip != null && 
529
							!StringUtils.trim(facetXMLSnip).isEmpty()) {
530
						facetXMLSnippets.add(facetXMLSnip);
531
					}
532
 
533
					Utils.info("2 facetXMLSnip=" + facetXMLSnip);
534
				}
535
 
536
				String facetXMLSnippetsStr = 
537
					StringUtils.join(facetXMLSnippets, "\n");
538
 
539
				Utils.info("facetXMLSnippetsStr=" + facetXMLSnippetsStr);
540
 
541
				// Collect PROPERTIES
542
				String propertiesXMLSnippetsStr = 
543
					this.getPropertiesXMLSnippet(expEntity, facetFeatureIDs, 2);
544
 
545
				Utils.info(propertiesXMLSnippetsStr);
546
 
547
				String entityXMLSnip = this.getEntityXMLSnippet(expEntity, 
548
						facetXMLSnippetsStr, propertiesXMLSnippetsStr, 1);
549
 
550
				Utils.info(entityXMLSnip);
551
 
552
				entityXMLSnippets.add(entityXMLSnip);
553
			}
554
		}
555
 
556
 
557
			/*
64 naveen 558
			// For each entity 
63 naveen 559
			for(Entity entity : entities) {
64 naveen 560
				ExpandedEntity expEntity = 
561
					ents.getExpandedEntity(entity.getID());
346 rajveer 562
				//Skip if entity doesnt exist
563
				if(expEntity == null){
564
					continue;
565
				}
64 naveen 566
				List<String> facetXMLSnippets = new ArrayList<String>();
567
 
88 naveen 568
				// Collect features which have become FACETs
67 naveen 569
				List<Long> facetFeatureIDs = new ArrayList<Long>();
570
 
63 naveen 571
				// For each facet execute Rule
81 naveen 572
				for(ExpandedFacetRuleDefinition expFacetRuleDef : 
573
						expFacetRuleDefs) {
64 naveen 574
					String facetXMLSnip = 
81 naveen 575
						this.processFacet(expEntity, expFacetRuleDef);
63 naveen 576
 
88 naveen 577
					if(facetXMLSnip != null && 
578
							!StringUtils.trim(facetXMLSnip).isEmpty()) {
64 naveen 579
						facetXMLSnippets.add(facetXMLSnip);
88 naveen 580
						Utils.info("1 facetXMLSnip=" + facetXMLSnip);
63 naveen 581
					}
67 naveen 582
 
583
					// Collect features already covered as Facet
81 naveen 584
					if(expFacetRuleDef.getFeatureDefinition() != null) {
88 naveen 585
						facetFeatureIDs.add(new Long(
586
								expFacetRuleDef.getFeatureDefinitionID()));
67 naveen 587
					}
63 naveen 588
				}
589
 
88 naveen 590
				// Handle borrowed slides
591
				List<Slide> borrowedSlides = ents.getBorrowedSlides(entity);
592
 
593
				for (Slide borrowedSlide : borrowedSlides) {
594
					String facetXMLSnip = this.processBorrowedSlide(expEntity,
595
							borrowedSlide);
596
 
597
					if(facetXMLSnip != null && 
598
							!StringUtils.trim(facetXMLSnip).isEmpty()) {
599
						facetXMLSnippets.add(facetXMLSnip);
600
					}
601
 
602
					Utils.info("2 facetXMLSnip=" + facetXMLSnip);
603
				}
604
 
64 naveen 605
				String facetXMLSnippetsStr = 
606
					StringUtils.join(facetXMLSnippets, "\n");
607
 
88 naveen 608
				Utils.info("facetXMLSnippetsStr=" + facetXMLSnippetsStr);
64 naveen 609
 
67 naveen 610
				// Collect PROPERTIES
611
				String propertiesXMLSnippetsStr = 
612
					this.getPropertiesXMLSnippet(expEntity, facetFeatureIDs, 2);
64 naveen 613
 
67 naveen 614
				Utils.info(propertiesXMLSnippetsStr);
615
 
616
				String entityXMLSnip = this.getEntityXMLSnippet(expEntity, 
617
						facetXMLSnippetsStr, propertiesXMLSnippetsStr, 1);
618
 
64 naveen 619
				Utils.info(entityXMLSnip);
620
 
621
				entityXMLSnippets.add(entityXMLSnip);
63 naveen 622
			}
623
		}
516 rajveer 624
		*/
625
 
64 naveen 626
		// </IRData>
627
		entityXMLSnippets.add("</IRData>");
628
 
629
		String irDataXML = StringUtils.join(entityXMLSnippets, "\n");
630
		Utils.info(irDataXML);
631
 
632
		// Write it to file
70 naveen 633
		String irDataFilename = Utils.EXPORT_IR_PATH + "irdata.xml";
64 naveen 634
		DBUtils.store(irDataXML, irDataFilename);
91 naveen 635
 
1104 rajveer 636
		//Utils.info("this.facetIDFacetValues=" + this.facetIDFacetValues);
1050 rajveer 637
		CreationUtils.storeFacetValues(facetIDFacetValues);
91 naveen 638
		// Store facet values
639
 
63 naveen 640
	}
64 naveen 641
 
642
	/**
643
	 * 
88 naveen 644
	 * @param borrowedSlides
645
	 * @return
646
	 */
647
	private String processBorrowedSlide(ExpandedEntity expEntity, 
897 rajveer 648
			Slide borrowedSlide, Set<Long> processedFacets) throws Exception {
88 naveen 649
		// Borrowed category ID
1165 rajveer 650
		long borrowedCategoryID = CreationUtils.getBorrowedCategoryID(borrowedSlide.getSlideDefinitionID(), expEntity.getCategoryID());
88 naveen 651
		Utils.info("borrowedCategoryID=" + borrowedCategoryID);
652
 
653
		// Slide definition ID
654
		long slideDefID = borrowedSlide.getSlideDefinitionID();
655
		Utils.info("borrowed slideDefID=" + slideDefID);
656
 
657
		DefinitionsContainer defs = 
658
			Catalog.getInstance().getDefinitionsContainer();
659
 
660
		// Get IR Data Rule
661
		FacetRuleDefinition facetRuleDef = 
662
			defs.getFacetRuleDefinitionForSlide(borrowedCategoryID, slideDefID);
663
 
664
		Utils.info("borrowed facetRuleDef=" + facetRuleDef);
665
		String facetXMLSnippet = null; 
666
 
667
		// If there is direct IR data rule defined for borrowed slide
668
		if(facetRuleDef != null) {
669
			ExpandedFacetRuleDefinition expFacetRuleDef = 
670
				new ExpandedFacetRuleDefinition(facetRuleDef);
671
 
897 rajveer 672
 
673
			if(!processedFacets.contains(expFacetRuleDef.getFacetDefinitionID())){
674
				// 	Return XML snippet			
675
				facetXMLSnippet = this.processFacet(expEntity, expFacetRuleDef);
676
				processedFacets.add(expFacetRuleDef.getFacetDefinitionID());
677
			}
88 naveen 678
		}
679
		else {
680
			List<String> facetXMLSnippets = new ArrayList<String>();
681
 
682
			// Get FacetRuleDefinition objects for all features in 
683
			// borrowed slide for which IR rule is defined
684
			List<Feature> features = borrowedSlide.getFeatures();
685
			for (Feature feature : features) {
686
				String featureFacetXMLSnippet = 
897 rajveer 687
					this.processBorrowedFeature(borrowedCategoryID, expEntity, feature, processedFacets);
88 naveen 688
 
689
				if(featureFacetXMLSnippet != null && !StringUtils.trim(
690
						featureFacetXMLSnippet).isEmpty()) {
691
					facetXMLSnippets.add(featureFacetXMLSnippet);
692
				}
693
			}
694
 
695
			// Get FacetRuleDefinition objects for all children slides in 
696
			// borrowed slide for which IR rule is defined
697
			if(borrowedSlide.hasChildrenSlides()) {
698
				String childrenSlidesFacetXMLSnippet = 
699
					this.processBorrowedChildrenSlides(borrowedCategoryID, 
897 rajveer 700
							expEntity, borrowedSlide, processedFacets);
88 naveen 701
 
702
				if(childrenSlidesFacetXMLSnippet != null && !StringUtils.trim(
703
						childrenSlidesFacetXMLSnippet).isEmpty()) {
704
					facetXMLSnippets.add(childrenSlidesFacetXMLSnippet);
705
				}
706
			}
707
 
708
			facetXMLSnippet = StringUtils.join(facetXMLSnippets, "\n");
709
		}
710
 
897 rajveer 711
 
712
		if(facetXMLSnippet == null || StringUtils.trim(facetXMLSnippet).isEmpty()) {
88 naveen 713
			return null;
714
		}
715
 
716
		return facetXMLSnippet;
717
	}
718
 
719
	/**
720
	 * 
721
	 * @param borrowedCategoryID
64 naveen 722
	 * @param expEntity
88 naveen 723
	 * @param feature
724
	 * @return
725
	 * @throws Exception 
726
	 */
727
	private String processBorrowedFeature(long borrowedCategoryID, 
897 rajveer 728
			ExpandedEntity expEntity, Feature feature, Set<Long> processedFacets) throws Exception {
88 naveen 729
 
730
		long featureDefID = feature.getFeatureDefinitionID();
731
		Utils.info("borrowed featureDefID=" + featureDefID);
732
 
733
		DefinitionsContainer defs = 
734
			Catalog.getInstance().getDefinitionsContainer();
735
 
736
		FacetRuleDefinition facetRuleDefForFeature = 
737
			defs.getFacetRuleDefinitionForFeature(borrowedCategoryID, 
738
				featureDefID);
739
 
740
		List<String> facetXMLSnippets = new ArrayList<String>();
741
 
742
		Utils.info("borrowed facetRuleDefForFeature=" + 
743
				facetRuleDefForFeature);
744
 
745
		if(facetRuleDefForFeature != null) {
746
			ExpandedFacetRuleDefinition expFacetRuleDefForFeature = 
747
				new ExpandedFacetRuleDefinition(facetRuleDefForFeature);
897 rajveer 748
			if(!processedFacets.contains(expFacetRuleDefForFeature.getFacetDefinitionID())){
749
 
750
				String snip = this.processFacet(expEntity, 
751
						expFacetRuleDefForFeature);
752
 
753
				if(snip != null) {
754
					facetXMLSnippets.add(snip);
755
					processedFacets.add(expFacetRuleDefForFeature.getFacetDefinitionID());
756
				}
88 naveen 757
			}
758
		}
759
 
760
 
761
		String xmlSnip =  StringUtils.join(facetXMLSnippets, "\n");
762
 
763
		if(StringUtils.trim(xmlSnip).isEmpty()) {
764
			return null;
765
		}
766
 
767
		return xmlSnip;
768
	}
769
 
770
	/**
771
	 * 
772
	 * @param expEntity
773
	 * @param borrowedSlide
774
	 * @return
775
	 * @throws Exception 
776
	 */
777
	private String processBorrowedChildrenSlides(long borrowedCategoryID, 
897 rajveer 778
			ExpandedEntity expEntity, Slide borrowedSlide, Set<Long> processedFacets) throws Exception {
88 naveen 779
		DefinitionsContainer defs = 
780
			Catalog.getInstance().getDefinitionsContainer();
781
 
782
		List<Slide> childrenSlides = borrowedSlide.getChildrenSlides();
783
		List<String> facetXMLSnippets = new ArrayList<String>();
784
 
785
		for (Slide childSlide : childrenSlides) {
786
			long childSlideDefID = childSlide.getSlideDefinitionID();
787
			Utils.info("borrowed childSlideDefID=" + childSlideDefID);
788
 
789
			FacetRuleDefinition facetRuleDefForSlide = 
790
				defs.getFacetRuleDefinitionForSlide(borrowedCategoryID, 
791
						childSlideDefID);
792
 
793
			Utils.info("borrowed facetRuleDefForSlide=" + 
794
					facetRuleDefForSlide);
795
 
796
			if(facetRuleDefForSlide != null) {
797
				ExpandedFacetRuleDefinition expFacetRuleDefForSlide = 
798
					new ExpandedFacetRuleDefinition(
799
							facetRuleDefForSlide);
897 rajveer 800
				if(!processedFacets.contains(expFacetRuleDefForSlide.getFacetDefinitionID())){
801
					String snip = this.processFacet(expEntity, 
802
							expFacetRuleDefForSlide);
803
 
804
					if(snip != null && !StringUtils.trim(snip).isEmpty()) {
805
						facetXMLSnippets.add(snip);
806
						processedFacets.add(expFacetRuleDefForSlide.getFacetDefinitionID());
807
					}
88 naveen 808
				}
809
			}
810
 
811
			// Features?
812
			if(childSlide.hasFeatures()) {
813
				List<Feature> features = childSlide.getFeatures();
814
				for(Feature feature : features) {
815
					String childrenSlideFeatureFacetXMLSnippet = 
816
						this.processBorrowedFeature(borrowedCategoryID, expEntity, 
897 rajveer 817
							feature, processedFacets);
88 naveen 818
 
819
					if(childrenSlideFeatureFacetXMLSnippet != null &&
820
						!StringUtils.trim(childrenSlideFeatureFacetXMLSnippet).
821
							isEmpty()) {
822
 
823
						facetXMLSnippets.add(
824
								childrenSlideFeatureFacetXMLSnippet);
825
 
826
					}
827
				}
828
			}
829
 
830
			// Children slides
831
			if(childSlide.hasChildrenSlides()) {
832
				String childrenSlidesFacetXMLSnippet = 
833
					this.processBorrowedChildrenSlides(borrowedCategoryID, 
897 rajveer 834
							expEntity, childSlide, processedFacets);
88 naveen 835
 
836
				if(childrenSlidesFacetXMLSnippet != null &&
837
					!StringUtils.trim(childrenSlidesFacetXMLSnippet).
838
						isEmpty()) {
839
 
840
					facetXMLSnippets.add(childrenSlidesFacetXMLSnippet);
841
				}
842
			}
843
		}
844
 
845
		String xmlSnip =  StringUtils.join(facetXMLSnippets, "\n");
846
 
847
		if(StringUtils.trim(xmlSnip).isEmpty()) {
848
			return null;
849
		}
850
 
851
		return xmlSnip;
852
	}
853
 
854
 
855
	/**
856
	 * 
857
	 * @param expEntity
64 naveen 858
	 * @param expFacetDef
859
	 * @return
860
	 * @throws Exception 
861
	 */
862
	@SuppressWarnings("unchecked")
863
	private String processFacet(ExpandedEntity expEntity, 
81 naveen 864
			ExpandedFacetRuleDefinition expFacetRuleDef) throws Exception {
64 naveen 865
 
81 naveen 866
		Utils.info("expFacetRuleDef=" + expFacetRuleDef);
516 rajveer 867
 
868
		Utils.info("expEntity.getID()=" + expEntity.getID());
81 naveen 869
 
451 rajveer 870
		// to get the price from services and pass it on to fill in solr
871
 
733 rajveer 872
//		CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
873
//		in.shop2020.model.v1.catalog.InventoryService.Client client = catalogServiceClient.getClient();
451 rajveer 874
 
516 rajveer 875
		double itemPrice = 0;
638 rajveer 876
		List<Item> items = client.getItemsByCatalogId(expEntity.getID());
897 rajveer 877
		Date todate = new Date();
638 rajveer 878
		for(Item item: items){
897 rajveer 879
			if(item.getItemStatus() != status.ACTIVE || todate.getTime() < item.getStartDate()){
880
				continue;
881
			}
638 rajveer 882
			if(itemPrice == 0){
883
				itemPrice = item.getSellingPrice();
884
			}else if(itemPrice>item.getSellingPrice()){
885
				itemPrice = item.getSellingPrice();
886
			}
516 rajveer 887
 
451 rajveer 888
		}
889
 
102 naveen 890
		DefinitionsContainer defs = 
891
			Catalog.getInstance().getDefinitionsContainer();
892
 
81 naveen 893
		IRDataJythonWrapper jw = new IRDataJythonWrapper();
64 naveen 894
 
895
		jw.setExpandedEntity(expEntity);
82 naveen 896
		jw.setExpandedFacetRuleDefinition(expFacetRuleDef);
451 rajveer 897
		jw.setEntityPrice(itemPrice);
64 naveen 898
 
899
		// Set FeatureDefinition
900
		FeatureDefinition featureDef = 
81 naveen 901
			expFacetRuleDef.getFeatureDefinition();
902
 
64 naveen 903
		if(featureDef != null) {
904
			jw.setFeatureDefinition(featureDef);
905
 
906
			// Set Feature
907
			Utils.info("featureDef.getID()=" + featureDef.getID());
908
 
909
			Feature feature = 
1153 rajveer 910
				CreationUtils.getFeature(expEntity.getID(), featureDef.getID());
64 naveen 911
 
90 naveen 912
			// Special case for Brand
580 rajveer 913
			if(expFacetRuleDef.getFacetDefinitionID() == 50001 ||
914
			   expFacetRuleDef.getFacetDefinitionID() == 50010 ||
915
				expFacetRuleDef.getFacetDefinitionID() == 50011) {
90 naveen 916
 
917
				// Execute Python script
918
				jw.executeRule();
919
 
920
			}
921
 
922
			// Can happen when to slide's feature which is dropped in favor 
923
			// of a borrowed slide
924
			else if(feature != null) {
102 naveen 925
 
926
				// Normalize
927
				if(defs.needsNormalization(feature.getFeatureDefinitionID())) {
928
					Utils.info("needsNormalization feature=" + feature);
929
 
930
					feature = this.normalize(feature);
931
				}
932
 
81 naveen 933
				ExpandedFeature expFeature = new ExpandedFeature(feature);
934
 
935
				jw.setExpandedFeature(expFeature);
88 naveen 936
 
937
				// Execute Python script
938
				jw.executeRule();
81 naveen 939
			}
64 naveen 940
		}
941
 
346 rajveer 942
 
943
 
944
 
64 naveen 945
		// Set SlideDefinition
81 naveen 946
		SlideDefinition slideDef = expFacetRuleDef.getSlideDefinition();
64 naveen 947
		if(slideDef != null) {
948
			jw.setSlideDefinition(slideDef);
949
 
950
			// Set Slide
951
			Utils.info("slideDef.getID()=" + slideDef.getID());
952
 
1153 rajveer 953
			Slide slide = CreationUtils.getSlide(expEntity.getID(), slideDef.getID());
88 naveen 954
 
955
			// Slide may not have been included infavor of a borrowed slide
956
			if(slide == null) {
957
				return null;
958
			}
959
 
65 naveen 960
			ExpandedSlide expSlide = new ExpandedSlide(slide);
64 naveen 961
 
65 naveen 962
			jw.setExpandedSlide(expSlide);
88 naveen 963
 
964
			// Execute Python script
965
			jw.executeRule();
64 naveen 966
		}
967
 
346 rajveer 968
		//
64 naveen 969
 
346 rajveer 970
		if(slideDef == null && featureDef == null){
971
			if(expFacetRuleDef.getIRDataRuleDefinition().getScript() != null){
972
				jw.executeRule();
973
			}
974
		}
975
 
976
 
64 naveen 977
		List<Object> values = (List<Object>)jw.getValues();
978
		Utils.info("values=" + values);
979
 
91 naveen 980
		// Append to facet values
981
		long facetDefID = expFacetRuleDef.getFacetDefinitionID();
982
		Utils.info("facetDefID=" + facetDefID);
983
 
984
		List<String> facetValues = this.facetIDFacetValues.get(
985
				new Long(facetDefID));
986
 
987
		if(facetValues == null) {
988
			facetValues = new ArrayList<String>();
989
			this.facetIDFacetValues.put(new Long(facetDefID), facetValues);
990
		}
991
 
992
		if(values != null) {
993
			for(Object value : values) {
994
				String strValue = value.toString();
995
 
996
				if(!facetValues.contains(strValue)) {
997
					facetValues.add(strValue);
998
				}
999
			}
1000
		}
1001
 
1002
		// Parse returned Python list
88 naveen 1003
		String facetXMLSnip = null;
64 naveen 1004
		if(values != null) {
1005
 
1006
			// Get IR Data XML snippet for this entity and facet
81 naveen 1007
			facetXMLSnip = this.getFacetXMLSnippet(expFacetRuleDef, values, 2);
64 naveen 1008
		}
1009
 
88 naveen 1010
		Utils.info("0 facetXMLSnip=" + facetXMLSnip);
64 naveen 1011
		return facetXMLSnip;
1012
	}
102 naveen 1013
 
1014
	/**
1015
	 * 
1016
	 * @param feature
1017
	 * @return Feature
1018
	 * @throws Exception 
1019
	 */
1020
	private Feature normalize(Feature feature) throws Exception {
1021
		ExpandedFeature expFeature = new ExpandedFeature(feature);
67 naveen 1022
 
102 naveen 1023
		BulletDefinition bulletDef = 
1024
			expFeature.getFeatureDefinition().getBulletDefinition();
1025
 
1026
		ExpandedBulletDefinition expBulletDef = new ExpandedBulletDefinition(
1027
				bulletDef);
1028
 
1029
		if(expBulletDef.isPrimitive()) {
1030
			PrimitiveNormalizationJythonWrapper jy = 
1031
				new PrimitiveNormalizationJythonWrapper();
1032
 
1033
			jy.setExpandedFeature(expFeature);
1034
 
1035
			jy.excuteRule();
1036
 
1037
			String newValue = jy.getNewValue();
1038
			long newUnitID = jy.getNewUnitID();
1039
 
1040
			List<Bullet> newBullets = new ArrayList<Bullet>();
1041
			Bullet newBullet = new Bullet(new PrimitiveDataObject(newValue));
1042
			newBullet.setUnitID(newUnitID);
1043
 
1044
			newBullets.add(newBullet);
1045
 
1046
			feature.setBullets(newBullets);
1047
		}
1048
		else {
1049
			Utils.severe("Normalization not defined for non-primitives");
1050
		}
1051
 
1052
		return feature;
1053
	}
1054
 
67 naveen 1055
	/**
1056
	 * 
1057
	 * @param expEntity
1058
	 * @param facetFeatureIDs
1059
	 * @param indent
1060
	 * @return
1061
	 */
1062
	private String getPropertiesXMLSnippet(ExpandedEntity expEntity, 
1063
			List<Long> facetFeatureIDs, int indent) {
1064
 
1065
		List<String> xmlSnippet = new ArrayList<String>();
1066
 
1067
		// Collect all free-form content here
1068
		List<String> ffc = new ArrayList<String>();
1069
 
1070
		// Features
1071
		List<ExpandedSlide> expSlides = expEntity.getExpandedSlides();
1072
 
1073
		for(ExpandedSlide expSlide : expSlides) {
1074
			List<ExpandedFeature> expFeatures = expSlide.getExpandedFeatures();
1075
 
1076
			if(expSlide.getFreeformContent() != null) {
199 naveen 1077
				ffc.add(expSlide.getFreeformContent().getFreeformText());
67 naveen 1078
			}
1079
 
1080
			if(expFeatures == null) {
1081
				continue;
1082
			}
1083
 
1084
			for(ExpandedFeature expFeature : expFeatures) {
1085
				Long featureDefID = 
1086
					new Long(expFeature.getFeatureDefinitionID());
1087
 
1088
				// FFC at feature level
1089
				if(expFeature.getFreeformContent() != null) {
199 naveen 1090
					ffc.add(expFeature.getFreeformContent().getFreeformText());
67 naveen 1091
				}
1092
 
1093
				// Exclude those who are already covered as facets
1094
				if(facetFeatureIDs.contains(featureDefID)) {
1095
					continue;
1096
				}
1097
 
1098
				List<ExpandedBullet> expBullets = 
1099
					expFeature.getExpandedBullets();
1100
 
1101
				if(expBullets == null) {
1102
					continue;
1103
				}
1104
 
1105
				//<Property Label="">
1106
				xmlSnippet.add(this.xmlIndentation[indent] + 
83 naveen 1107
						"<Property ID=\"" + expFeature.getFeatureDefinitionID() 
1108
						+ "\" Label=\"" + StringEscapeUtils.escapeXml(
67 naveen 1109
								expFeature.getFeatureDefinition().getLabel()) + 
1110
						"\">");
1111
 
1112
				//<Value></Value>
1113
				for(ExpandedBullet bullet : expBullets) {
1114
 
1115
					// FFC at bullet level
1116
					if(bullet.getFreeformContent() != null) {
199 naveen 1117
						ffc.add(bullet.getFreeformContent().getFreeformText());
67 naveen 1118
					}
1119
 
1120
					xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Value>" + 
1121
							StringEscapeUtils.escapeXml(bullet.getValue()) + 
1122
							"</Value>");
1123
				}
1124
 
1125
				//</Property>
1126
				xmlSnippet.add(this.xmlIndentation[indent] + "</Property>");
1127
			}
1128
		}
1129
 
1130
		// FFC as Label="Free-form Content"
1131
		if(!ffc.isEmpty()) {
1132
			xmlSnippet.add(this.xmlIndentation[indent] + 
108 naveen 1133
					"<Property ID=\"000000\" Label=\"Free-form Content\">");
67 naveen 1134
 
1135
			for(String f : ffc) {
1136
				if(f != null) {
1137
					f = StringEscapeUtils.escapeXml(f);
1138
 
1139
					xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Value>" + 
1140
						f + "</Value>");
1141
				}
1142
			}
1143
 
1144
			xmlSnippet.add(this.xmlIndentation[indent] + "</Property>");
1145
		}
1146
 
1147
		// Children slides
1148
		// TODO
1149
 
1150
		return StringUtils.join(xmlSnippet, "\n");
1151
	}
64 naveen 1152
 
1153
	/**
1154
	 * 
1155
	 * @param expEntity
1156
	 * @param facetXMLSnippets
1157
	 * @param indent
1158
	 * @return
1159
	 */
1160
	private String getEntityXMLSnippet(ExpandedEntity expEntity, 
67 naveen 1161
			String facetXMLSnippets, String propertiesXMLSnippets, int indent) {
64 naveen 1162
 
1163
		//<Entity ID="40001">
1164
		List<String> xmlSnippet = new ArrayList<String>();
1165
 
1166
		String entityID = new Long(expEntity.getID()).toString();
1167
		xmlSnippet.add(this.xmlIndentation[indent] + "<Entity ID=\""+ entityID + 
1168
				"\">");
1169
 
1170
		//<Category>Business Phones</Category>
580 rajveer 1171
		String parentCategory = expEntity.getCategory().getLabel();
64 naveen 1172
		xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Category>" + 
580 rajveer 1173
				StringEscapeUtils.escapeXml(parentCategory) + "</Category>");
64 naveen 1174
 
580 rajveer 1175
		/*
1176
		//<Category>Business Phones</Category>
1177
		String category = expEntity.getCategory().getLabel();
1178
		xmlSnippet.add(this.xmlIndentation[indent + 1] + "<SubCategory>" + 
1179
				StringEscapeUtils.escapeXml(category) + "</SubCategory>");
1180
		 */
1181
 
64 naveen 1182
		//<Title>Nokia E71</Title>
67 naveen 1183
		String title = StringEscapeUtils.escapeXml(expEntity.getBrand()) + " " +
1184
		StringEscapeUtils.escapeXml(expEntity.getModelName()) + 
64 naveen 1185
			((expEntity.getModelNumber() != null) ? 
67 naveen 1186
					(" " + 
1187
						StringEscapeUtils.escapeXml(expEntity.getModelNumber()))
64 naveen 1188
					: "");
1189
 
1190
		xmlSnippet.add(this.xmlIndentation[indent + 1] + 
67 naveen 1191
				"<Title>" + StringEscapeUtils.escapeXml(title) + "</Title>");
64 naveen 1192
 
1193
		xmlSnippet.add(facetXMLSnippets);
67 naveen 1194
 
1195
		xmlSnippet.add(propertiesXMLSnippets);
64 naveen 1196
 
1197
		//</Entity>
1198
		xmlSnippet.add(this.xmlIndentation[indent] + "</Entity>");
1199
 
1200
		return StringUtils.join(xmlSnippet, "\n");
1201
	}
1202
 
1203
	/**
1204
	 * 
1205
	 * @param expFacetDef
1206
	 * @param values
1207
	 * @param indent
1208
	 * @return String XML Snippet
1209
	 */
81 naveen 1210
	private String getFacetXMLSnippet(
1211
			ExpandedFacetRuleDefinition expFacetRuleDef, 
64 naveen 1212
			List<Object> values, int indent) {
81 naveen 1213
 
64 naveen 1214
		// <Facet Label="Form Factor">
1215
		List<String> xmlSnippet = new ArrayList<String>();
81 naveen 1216
		String target = expFacetRuleDef.getFacetDefinition().getTarget();
1217
 
83 naveen 1218
		xmlSnippet.add(this.xmlIndentation[indent] + "<Facet ID=\"" + 
1219
				expFacetRuleDef.getFacetDefinitionID() + "\" Label=\"" + 
64 naveen 1220
				target + "\">");
1221
 
1222
		//<Value>Candybar</Value>
1223
		for(Object value : values) {
1224
			xmlSnippet.add(this.xmlIndentation[indent + 1] + "<Value>" + 
1225
					value.toString() + "</Value>");
1226
		}
1227
 
1228
		//</Facet>
1229
		xmlSnippet.add(this.xmlIndentation[indent] + "</Facet>");
1230
 
1231
		return StringUtils.join(xmlSnippet, "\n");
1232
	}
62 naveen 1233
}