Subversion Repositories SmartDukaan

Rev

Rev 1072 | Rev 1153 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
82 naveen 1
/**
2
 * 
3
 */
4
package in.shop2020.util;
5
 
6
import in.shop2020.metamodel.definitions.Catalog;
7
import in.shop2020.metamodel.definitions.EntityContainer;
8
import in.shop2020.metamodel.definitions.EnumDefinition;
9
import in.shop2020.metamodel.definitions.EnumValue;
10
import in.shop2020.metamodel.definitions.FeatureDefinition;
1072 rajveer 11
import in.shop2020.metamodel.definitions.OldEntityContainer;
82 naveen 12
import in.shop2020.metamodel.definitions.RuleDefinition;
13
import in.shop2020.metamodel.definitions.SlideDefinition;
1050 rajveer 14
import in.shop2020.metamodel.util.CreationUtils;
82 naveen 15
import in.shop2020.metamodel.util.ExpandedBulletDefinition;
16
import in.shop2020.metamodel.util.ExpandedFacetDefinition;
17
import in.shop2020.metamodel.util.ExpandedFeatureDefinition;
18
import in.shop2020.metamodel.util.ExpandedSlideDefinition;
19
import in.shop2020.metamodel.util.ExpandedSlideFeatureDefinition;
20
 
21
import java.util.ArrayList;
22
import java.util.List;
23
 
24
import org.python.core.PyObject;
25
import org.python.core.PyString;
26
 
27
/**
28
 * Wrapper around Jython for Meta-data related to Information Retrieval data
29
 * 
30
 * @author naveen
31
 *
32
 */
33
public class IRMetaDataJythonWrapper extends JythonWrapper {
34
 
35
	/**
36
	 * Local instance of Facet Definition - Used to pick script to execute
37
	 */
38
	private ExpandedFacetDefinition expandedFacetDefinition = null;
39
 
40
	/**
41
	 * Resets current PythonInterpreter instance
42
	 */
43
	public void reset() {
44
		super.reset();
45
		this.expandedFacetDefinition = null;
46
	}
47
 
48
	/**
49
	 * 
50
	 * @param expandedFacetDefinition
51
	 */
52
	public void setExpandedFacetDefinition(
53
			ExpandedFacetDefinition expandedFacetDefinition) {
54
		this.initialize();
55
 
56
		this.expandedFacetDefinition = expandedFacetDefinition;
57
		this.py.set("expFacetDef", expandedFacetDefinition);
58
	}
59
 
60
	/**
61
	 * Executes IR Data rule from ExpandedFacetDefinition instance
62
	 * @throws Exception 
63
	 */
64
	public void executeRule() throws Exception {
65
		if(this.py == null || this.expandedFacetDefinition == null) {
66
			throw new IllegalStateException(
67
					"Not initialized properly");
68
		}
69
 
70
		FeatureDefinition featureDef = 
71
			this.expandedFacetDefinition.getFeatureDefinition();
72
 
73
		SlideDefinition slideDef = 
74
			this.expandedFacetDefinition.getSlideDefinition();
75
 
76
		List<String> possibleValues = new ArrayList<String>();
77
 
78
		// expFeatureDef
79
		if(featureDef != null) {
80
			ExpandedFeatureDefinition expFeatureDef = 
81
				new ExpandedFeatureDefinition(featureDef);
82
 
83
			this.py.set("expFeatureDef", expFeatureDef);
84
 
85
			ExpandedBulletDefinition expBulletDef = 
86
				expFeatureDef.getExpandedBulletDefinition();
87
 
88
			// Fixed
91 naveen 89
			if (expBulletDef.isEnumerated()) {
82 naveen 90
				EnumDefinition enumDef = 
91
					(EnumDefinition) expBulletDef.getDatatypeDefinition();
92
 
93
				List<EnumValue> enumValues = enumDef.getEnumValues();
94
 
95
				for(EnumValue enumValue : enumValues) {
96
					possibleValues.add(enumValue.getValue());
97
				}
90 naveen 98
 
1104 rajveer 99
				//Utils.info("possibleValues=" + possibleValues);
82 naveen 100
				this.py.set("possibleValues", possibleValues);
91 naveen 101
			} 
102
 
103
			// Get values collected across entities
104
			else {
105
				EntityContainer ents = 
106
					Catalog.getInstance().getEntityContainer();
107
 
108
				long facetDefinitionID = this.expandedFacetDefinition.getID();
109
 
110
 
1104 rajveer 111
				possibleValues = CreationUtils.getFacetValues(facetDefinitionID);
1072 rajveer 112
 
1104 rajveer 113
				//Utils.info("possibleValues=" + possibleValues);
91 naveen 114
				this.py.set("possibleValues", possibleValues);
82 naveen 115
			}
91 naveen 116
		}
82 naveen 117
 
118
		// expSlideDef
119
		else if(slideDef != null) {
120
			ExpandedSlideDefinition expSlideDef = 
121
				new ExpandedSlideDefinition(slideDef);
122
 
123
			this.py.set("expSlideDef", expSlideDef);
124
 
125
			List<ExpandedSlideFeatureDefinition> expSlideFeatureDefs = 
126
				expSlideDef.getExpandedSlideFeatureDefinitions();
127
 
128
			for(ExpandedSlideFeatureDefinition expSlideFeatureDef : 
129
					expSlideFeatureDefs) {
130
 
131
				ExpandedFeatureDefinition expFeatureDef = 
132
					expSlideFeatureDef.getExpandedFeatureDefinition();
133
 
134
				possibleValues.add(expFeatureDef.getLabel());
135
			}
136
 
137
			// Feature Labels
1104 rajveer 138
			//Utils.info("possibleValues=" + possibleValues);
82 naveen 139
			this.py.set("possibleValues", possibleValues);
140
		}
141
 
142
		RuleDefinition ruleDef = 
143
			this.expandedFacetDefinition.getIrMetadataRuleDefinition();
144
 
145
		String pyScript = ruleDef.getScript();
146
		String scriptFullPath = Utils.JYTHON_SRC_PATH + "irmetadatarules/" + 
147
			pyScript;
148
 
149
		Utils.info("ruleDef.getID()=" + ruleDef.getID());
150
		Utils.info("scriptFullPath=" + scriptFullPath);
151
 
152
		this.exec(scriptFullPath);
153
	}
154
 
155
	/**
156
	 * 
157
	 * @return
158
	 */
159
	public String getXMLSnippet() {
160
		if(this.py == null) {
161
			throw new IllegalStateException("Exec is not called yet");
162
		}
163
 
164
		PyObject xmlsnippet = this.py.get("xmlsnippet");
165
 
166
		return ((PyString)xmlsnippet).toString();
167
	}
168
}