Subversion Repositories SmartDukaan

Rev

Rev 17 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 17 Rev 18
Line 1... Line 1...
1
/**
1
/**
2
 * 
2
 * 
3
 */
3
 */
4
package in.shop2020.metamodel.util;
4
package in.shop2020.metamodel.util;
5
 
5
 
-
 
6
import java.io.BufferedReader;
-
 
7
import java.io.FileReader;
-
 
8
import java.io.LineNumberReader;
-
 
9
import java.util.ArrayList;
-
 
10
import java.util.HashMap;
-
 
11
import java.util.Iterator;
-
 
12
import java.util.List;
-
 
13
import java.util.Map;
-
 
14
import java.util.logging.Level;
-
 
15
 
6
import in.shop2020.metamodel.definitions.Catalog;
16
import in.shop2020.metamodel.definitions.Catalog;
7
import in.shop2020.metamodel.definitions.Category;
17
import in.shop2020.metamodel.definitions.Category;
-
 
18
import in.shop2020.metamodel.definitions.DatatypeDefinition;
8
import in.shop2020.metamodel.definitions.DefinitionsContainer;
19
import in.shop2020.metamodel.definitions.DefinitionsContainer;
-
 
20
import in.shop2020.metamodel.definitions.EditorialImportance;
-
 
21
import in.shop2020.metamodel.definitions.FeatureDefinition;
-
 
22
import in.shop2020.metamodel.definitions.SlideDefinition;
-
 
23
import in.shop2020.metamodel.definitions.Unit;
-
 
24
import in.shop2020.util.Utils;
9
 
25
 
10
import org.apache.commons.lang.ArrayUtils;
26
import org.apache.commons.lang.ArrayUtils;
11
import org.apache.commons.lang.StringUtils;
27
import org.apache.commons.lang.StringUtils;
12
 
28
 
13
/**
29
/**
Line 24... Line 40...
24
		"/home/naveen/workspace/eclipse/webapp/src/content/html/";
40
		"/home/naveen/workspace/eclipse/webapp/src/content/html/";
25
	public static final String CONTENT_SRC_XML_PATH = 
41
	public static final String CONTENT_SRC_XML_PATH = 
26
		"/home/naveen/workspace/eclipse/webapp/src/content/xml/";
42
		"/home/naveen/workspace/eclipse/webapp/src/content/xml/";
27
	public static final String CONTENT_DB_PATH =  
43
	public static final String CONTENT_DB_PATH =  
28
		"/home/naveen/workspace/eclipse/webapp/db/entities/";
44
		"/home/naveen/workspace/eclipse/webapp/db/entities/";
29
 
45
	
30
	// Known patterns
46
	// Known patterns
31
	public static final String PATTERN_LEVEL_1 = "* ";
47
	public static final String PATTERN_LEVEL_1 = "* ";
32
	public static final String PATTERN_LEVEL_2 = "   * ";
48
	public static final String PATTERN_LEVEL_2 = "   * ";
33
	public static final String PATTERN_LEVEL_3 = "      * ";
49
	public static final String PATTERN_LEVEL_3 = "      * ";
34
	public static final String PATTERN_LEVEL_4 = "         * ";
50
	public static final String PATTERN_LEVEL_4 = "         * ";
Line 49... Line 65...
49
		
65
		
50
		if(args.length < 3) {
66
		if(args.length < 3) {
51
			System.out.println(usage);
67
			System.out.println(usage);
52
			System.exit(-1);
68
			System.exit(-1);
53
		}
69
		}
54
		System.out.println("CN "+ args[0] + " " + args[1]+ " " + args[2]);
70
		Utils.logger.info("CN "+ args[0] + " " + args[1]+ " " + args[2]);
-
 
71
		
55
		String inputCommand = args[0];
72
		String inputCommand = args[0];
56
		String inputCategoryID = args[1];
73
		String inputCategoryID = args[1];
57
		String inputFilename = args[2];
74
		String inputFilename = args[2];
58
 
75
 
59
		if(!ArrayUtils.contains(commands, inputCommand)) {
76
		if(!ArrayUtils.contains(commands, inputCommand)) {
Line 85... Line 102...
85
	
102
	
86
	/**
103
	/**
87
	 * 
104
	 * 
88
	 * @throws Exception
105
	 * @throws Exception
89
	 */
106
	 */
90
	public void importEntity() throws Exception {
107
	public void importEntity() throws Exception {		
-
 
108
		//this.test();
91
		System.out.println("importEntity()");
109
		Utils.logger.info(this.srcFile);
92
		
110
		
93
		DefinitionsContainer allDefs = 
111
		FileReader fileReader = new FileReader(this.srcFile);
-
 
112
		BufferedReader lineReader = new BufferedReader(fileReader);
94
			Catalog.getInstance().getDefinitionsContainer();
113
		LineNumberReader reader = new LineNumberReader(lineReader);
95
		
114
		
-
 
115
		// 1 Collect all candidate slide names
-
 
116
		Map<Integer, String> candidateSlideNames = new HashMap<Integer, String>();
-
 
117
		while(true) {
-
 
118
			String line = reader.readLine();
-
 
119
			
-
 
120
			if(line == null) {
-
 
121
				break;
-
 
122
			}
-
 
123
			
-
 
124
			if(line.isEmpty()) {
-
 
125
				continue;
-
 
126
			}
-
 
127
 
-
 
128
			int lineNumber = reader.getLineNumber();
-
 
129
			
-
 
130
			//Utils.logger.info(line);
-
 
131
			//Utils.logger.info("lineNumber="+lineNumber);
-
 
132
			
-
 
133
			// RE-VISIT
-
 
134
			// 1.1 Slide names starting with Alpha
-
 
135
			//Utils.logger.info(line.substring(0, 1));
-
 
136
			if(StringUtils.isAlpha((line.substring(0, 1)))) {
-
 
137
				//Utils.logger.info(line);
-
 
138
				//Utils.logger.info("Level 0");
-
 
139
				
96
		Category category = allDefs.getCategory(this.categoryID);
140
				candidateSlideNames.put(new Integer(lineNumber), line);
-
 
141
			}
-
 
142
		}
-
 
143
		Utils.logger.info(candidateSlideNames.toString());
-
 
144
		
-
 
145
		// 2 Filter and validate parent slide names
-
 
146
		Map<Integer, String> slideNames = 
-
 
147
			this.processSlides(candidateSlideNames);
-
 
148
		
-
 
149
		Utils.logger.info(slideNames.toString());
-
 
150
		
-
 
151
		// 3 Children slides
-
 
152
		// TODO
-
 
153
		
-
 
154
		// 4 Features
-
 
155
		// TODO
97
		
156
		
-
 
157
		// 5 Bullets
-
 
158
		// TODO
-
 
159
		
98
		System.out.println(category);
160
		lineReader.close();
99
	}
161
	}
100
	
162
	
101
	/**
163
	/**
102
	 * 
164
	 * 
103
	 * @throws Exception
165
	 * @throws Exception
104
	 */
166
	 */
105
	public void showEntity() throws Exception {
167
	public void showEntity() throws Exception {
-
 
168
	}
-
 
169
 
-
 
170
	/**
-
 
171
	 * Filter and validate parent slide names
-
 
172
	 * 
-
 
173
	 * @param candidateSlideNames
-
 
174
	 * @return List<LineInfo>
-
 
175
	 * @throws Exception 
-
 
176
	 */
-
 
177
	private Map<Integer, String> processSlides(
-
 
178
			Map<Integer, String> candidateSlideLines) throws Exception {
-
 
179
		
-
 
180
		Map<Integer, String> processedSlideLines = 
-
 
181
			new HashMap<Integer, String>();
-
 
182
		
-
 
183
		// 1 Retrieve meta-data
-
 
184
		// 1.1 Retrieve all valid slide names in the content model
-
 
185
		DefinitionsContainer defs = 
-
 
186
			Catalog.getInstance().getDefinitionsContainer();
-
 
187
		
-
 
188
		Map<Long, SlideDefinition> slideDefs = defs.getSlideDefinitions();
-
 
189
		Iterator<SlideDefinition> itSlideDefs = slideDefs.values().iterator();
-
 
190
		
-
 
191
		List<String> validSlideNames = new ArrayList<String>();
-
 
192
		while(itSlideDefs.hasNext()) {
-
 
193
			SlideDefinition slideDef = itSlideDefs.next();
-
 
194
			
-
 
195
			// To avoid Introduction slide
-
 
196
			if(!slideDef.getLabel().isEmpty()) {
-
 
197
				validSlideNames.add(slideDef.getLabel());
-
 
198
			}
-
 
199
		}
-
 
200
		Utils.logger.info("validSlideNames=" + validSlideNames.toString());
-
 
201
		
-
 
202
		// 2 Rules
-
 
203
		// 2.1 Discard if slide is not one of the valids
-
 
204
		// REVISIT
-
 
205
		for(Integer lineNumber : candidateSlideLines.keySet()) {
-
 
206
			if(validSlideNames.contains(candidateSlideLines.get(lineNumber))) {
-
 
207
				processedSlideLines.put(lineNumber, 
-
 
208
						candidateSlideLines.get(lineNumber));
-
 
209
			}
-
 
210
		}
-
 
211
		
-
 
212
		Utils.logger.info("processedSlideLines=" + 
-
 
213
				processedSlideLines.toString());
-
 
214
 
-
 
215
		// 3 Retrieve "Mandatory" slide names for the category
-
 
216
		List<SlideDefinition> mandatorySlideDefs = 
-
 
217
			defs.getSlides(this.categoryID, EditorialImportance.MANDATORY);
-
 
218
		
-
 
219
		Utils.logger.info("mandatorySlideDefs=" + 
-
 
220
				mandatorySlideDefs.toString());
-
 
221
 
-
 
222
		// 3.1 All mandatory slides exist - Severe
-
 
223
		for(SlideDefinition mandatorySlideDef : mandatorySlideDefs) {
-
 
224
			
-
 
225
			// Avoid introduction slide
-
 
226
			if(mandatorySlideDef.getLabel().isEmpty()) {
-
 
227
				continue;
-
 
228
			}
-
 
229
			
-
 
230
			if(!processedSlideLines.values().contains(
-
 
231
					mandatorySlideDef.getLabel())) {
-
 
232
				Utils.logger.severe("Mandatory slide \"" + 
-
 
233
						mandatorySlideDef.getLabel() + "\" is missing");
-
 
234
			}
-
 
235
		}
-
 
236
 
-
 
237
		// 4 Retrieve "Recommended" slide names for the category
-
 
238
		List<SlideDefinition> recommendedSlideDefs = 
-
 
239
			defs.getSlides(this.categoryID, EditorialImportance.RECOMMENDED);
-
 
240
 
-
 
241
		Utils.logger.info("recommendedSlideDefs=" + 
-
 
242
				recommendedSlideDefs.toString());
-
 
243
		
-
 
244
		// 4.1 All recommended slides exist - Warn	
-
 
245
		for(SlideDefinition recommendedSlideDef : recommendedSlideDefs) {
-
 
246
			if(!processedSlideLines.values().contains(
-
 
247
					recommendedSlideDef.getLabel())) {
-
 
248
				Utils.logger.warning("Recommended slide \"" + 
-
 
249
						recommendedSlideDef.getLabel() + "\" is missing");
-
 
250
			}
-
 
251
		}
-
 
252
		
-
 
253
		return processedSlideLines;
-
 
254
	}
-
 
255
	
-
 
256
	/**
-
 
257
	 * @throws Exception 
-
 
258
	 * 
-
 
259
	 */
-
 
260
	@SuppressWarnings("unused")
-
 
261
	private void test() throws Exception {
-
 
262
		// test category
-
 
263
		DefinitionsContainer allDefs = 
-
 
264
			Catalog.getInstance().getDefinitionsContainer();
-
 
265
		
-
 
266
		Category category = allDefs.getCategory(this.categoryID);
-
 
267
		Utils.logger.info(category.toString());
-
 
268
		
-
 
269
		// test data type defs
-
 
270
		DatatypeDefinition datatypeDef = allDefs.getDatatypeDefinition(70004L);
-
 
271
		Utils.logger.info(datatypeDef.toString());
-
 
272
		
-
 
273
		// test units
-
 
274
		Unit unit = allDefs.getUnit(50004L);
106
		System.out.println("showEntity()");
275
		Utils.logger.info(unit.toString());
-
 
276
		
-
 
277
		// test slide defs
-
 
278
		SlideDefinition slideDef = allDefs.getSlideDefinition(130002L);
-
 
279
		Utils.logger.info(slideDef.toString());
-
 
280
		
-
 
281
		// test feature defs
-
 
282
		FeatureDefinition featureDef = allDefs.getFeatureDefinition(120002L);
-
 
283
		Utils.logger.info(featureDef.toString());
107
	}
284
	}
108
}
285
}