Subversion Repositories SmartDukaan

Rev

Rev 1061 | Rev 1104 | 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
 
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
 
1072 rajveer 110
				//FIXME need to fix it according to new infra
111
				//possibleValues = CreationUtils.getFacetValues(facetDefinitionID);
91 naveen 112
 
1072 rajveer 113
				OldEntityContainer oldEnts = new OldEntityContainer();
114
				possibleValues = oldEnts.getFacetValues(facetDefinitionID);
115
 
91 naveen 116
				Utils.info("possibleValues=" + possibleValues);
117
				this.py.set("possibleValues", possibleValues);
82 naveen 118
			}
91 naveen 119
		}
82 naveen 120
 
121
		// expSlideDef
122
		else if(slideDef != null) {
123
			ExpandedSlideDefinition expSlideDef = 
124
				new ExpandedSlideDefinition(slideDef);
125
 
126
			this.py.set("expSlideDef", expSlideDef);
127
 
128
			List<ExpandedSlideFeatureDefinition> expSlideFeatureDefs = 
129
				expSlideDef.getExpandedSlideFeatureDefinitions();
130
 
131
			for(ExpandedSlideFeatureDefinition expSlideFeatureDef : 
132
					expSlideFeatureDefs) {
133
 
134
				ExpandedFeatureDefinition expFeatureDef = 
135
					expSlideFeatureDef.getExpandedFeatureDefinition();
136
 
137
				possibleValues.add(expFeatureDef.getLabel());
138
			}
139
 
140
			// Feature Labels
90 naveen 141
			Utils.info("possibleValues=" + possibleValues);
82 naveen 142
			this.py.set("possibleValues", possibleValues);
143
		}
144
 
145
		RuleDefinition ruleDef = 
146
			this.expandedFacetDefinition.getIrMetadataRuleDefinition();
147
 
148
		String pyScript = ruleDef.getScript();
149
		String scriptFullPath = Utils.JYTHON_SRC_PATH + "irmetadatarules/" + 
150
			pyScript;
151
 
152
		Utils.info("ruleDef.getID()=" + ruleDef.getID());
153
		Utils.info("scriptFullPath=" + scriptFullPath);
154
 
155
		this.exec(scriptFullPath);
156
	}
157
 
158
	/**
159
	 * 
160
	 * @return
161
	 */
162
	public String getXMLSnippet() {
163
		if(this.py == null) {
164
			throw new IllegalStateException("Exec is not called yet");
165
		}
166
 
167
		PyObject xmlsnippet = this.py.get("xmlsnippet");
168
 
169
		return ((PyString)xmlsnippet).toString();
170
	}
171
}