Rev 17 | Rev 19 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/****/package in.shop2020.metamodel.util;import java.io.BufferedReader;import java.io.FileReader;import java.io.LineNumberReader;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.logging.Level;import in.shop2020.metamodel.definitions.Catalog;import in.shop2020.metamodel.definitions.Category;import in.shop2020.metamodel.definitions.DatatypeDefinition;import in.shop2020.metamodel.definitions.DefinitionsContainer;import in.shop2020.metamodel.definitions.EditorialImportance;import in.shop2020.metamodel.definitions.FeatureDefinition;import in.shop2020.metamodel.definitions.SlideDefinition;import in.shop2020.metamodel.definitions.Unit;import in.shop2020.util.Utils;import org.apache.commons.lang.ArrayUtils;import org.apache.commons.lang.StringUtils;/*** CN - Content Tool* Imports and exports content. Validates against content model** @author naveen**/public class CN {public static final String CONTENT_SRC_TXT_PATH ="/home/naveen/workspace/eclipse/webapp/src/content/txt/";public static final String CONTENT_SRC_HTML_PATH ="/home/naveen/workspace/eclipse/webapp/src/content/html/";public static final String CONTENT_SRC_XML_PATH ="/home/naveen/workspace/eclipse/webapp/src/content/xml/";public static final String CONTENT_DB_PATH ="/home/naveen/workspace/eclipse/webapp/db/entities/";// Known patternspublic static final String PATTERN_LEVEL_1 = "* ";public static final String PATTERN_LEVEL_2 = " * ";public static final String PATTERN_LEVEL_3 = " * ";public static final String PATTERN_LEVEL_4 = " * ";private long categoryID;private String srcFile;private String dbFile;/*** @param args*/public static void main(String[] args) throws Exception {String[] commands = new String[] {"show", "import"};String usage = "Usage: CN ["+ StringUtils.join(commands, "|") +"] {Category ID} {Content file name}\n" +"Note:Only text files for now";if(args.length < 3) {System.out.println(usage);System.exit(-1);}Utils.logger.info("CN "+ args[0] + " " + args[1]+ " " + args[2]);String inputCommand = args[0];String inputCategoryID = args[1];String inputFilename = args[2];if(!ArrayUtils.contains(commands, inputCommand)) {System.out.println(usage);System.exit(-1);}long categoryID = new Long(inputCategoryID).longValue();CN cn = new CN(categoryID, inputFilename);if(inputCommand.equals("import")) {cn.importEntity();}else if(inputCommand.equals("show")) {cn.showEntity();}}/**** @param categoryID* @param fileName*/public CN(long categoryID, String fileName) {this.categoryID = categoryID;this.srcFile = CONTENT_SRC_TXT_PATH + fileName + ".txt";this.dbFile = CONTENT_DB_PATH + "entities" + ".ser";}/**** @throws Exception*/public void importEntity() throws Exception {//this.test();Utils.logger.info(this.srcFile);FileReader fileReader = new FileReader(this.srcFile);BufferedReader lineReader = new BufferedReader(fileReader);LineNumberReader reader = new LineNumberReader(lineReader);// 1 Collect all candidate slide namesMap<Integer, String> candidateSlideNames = new HashMap<Integer, String>();while(true) {String line = reader.readLine();if(line == null) {break;}if(line.isEmpty()) {continue;}int lineNumber = reader.getLineNumber();//Utils.logger.info(line);//Utils.logger.info("lineNumber="+lineNumber);// RE-VISIT// 1.1 Slide names starting with Alpha//Utils.logger.info(line.substring(0, 1));if(StringUtils.isAlpha((line.substring(0, 1)))) {//Utils.logger.info(line);//Utils.logger.info("Level 0");candidateSlideNames.put(new Integer(lineNumber), line);}}Utils.logger.info(candidateSlideNames.toString());// 2 Filter and validate parent slide namesMap<Integer, String> slideNames =this.processSlides(candidateSlideNames);Utils.logger.info(slideNames.toString());// 3 Children slides// TODO// 4 Features// TODO// 5 Bullets// TODOlineReader.close();}/**** @throws Exception*/public void showEntity() throws Exception {}/*** Filter and validate parent slide names** @param candidateSlideNames* @return List<LineInfo>* @throws Exception*/private Map<Integer, String> processSlides(Map<Integer, String> candidateSlideLines) throws Exception {Map<Integer, String> processedSlideLines =new HashMap<Integer, String>();// 1 Retrieve meta-data// 1.1 Retrieve all valid slide names in the content modelDefinitionsContainer defs =Catalog.getInstance().getDefinitionsContainer();Map<Long, SlideDefinition> slideDefs = defs.getSlideDefinitions();Iterator<SlideDefinition> itSlideDefs = slideDefs.values().iterator();List<String> validSlideNames = new ArrayList<String>();while(itSlideDefs.hasNext()) {SlideDefinition slideDef = itSlideDefs.next();// To avoid Introduction slideif(!slideDef.getLabel().isEmpty()) {validSlideNames.add(slideDef.getLabel());}}Utils.logger.info("validSlideNames=" + validSlideNames.toString());// 2 Rules// 2.1 Discard if slide is not one of the valids// REVISITfor(Integer lineNumber : candidateSlideLines.keySet()) {if(validSlideNames.contains(candidateSlideLines.get(lineNumber))) {processedSlideLines.put(lineNumber,candidateSlideLines.get(lineNumber));}}Utils.logger.info("processedSlideLines=" +processedSlideLines.toString());// 3 Retrieve "Mandatory" slide names for the categoryList<SlideDefinition> mandatorySlideDefs =defs.getSlides(this.categoryID, EditorialImportance.MANDATORY);Utils.logger.info("mandatorySlideDefs=" +mandatorySlideDefs.toString());// 3.1 All mandatory slides exist - Severefor(SlideDefinition mandatorySlideDef : mandatorySlideDefs) {// Avoid introduction slideif(mandatorySlideDef.getLabel().isEmpty()) {continue;}if(!processedSlideLines.values().contains(mandatorySlideDef.getLabel())) {Utils.logger.severe("Mandatory slide \"" +mandatorySlideDef.getLabel() + "\" is missing");}}// 4 Retrieve "Recommended" slide names for the categoryList<SlideDefinition> recommendedSlideDefs =defs.getSlides(this.categoryID, EditorialImportance.RECOMMENDED);Utils.logger.info("recommendedSlideDefs=" +recommendedSlideDefs.toString());// 4.1 All recommended slides exist - Warnfor(SlideDefinition recommendedSlideDef : recommendedSlideDefs) {if(!processedSlideLines.values().contains(recommendedSlideDef.getLabel())) {Utils.logger.warning("Recommended slide \"" +recommendedSlideDef.getLabel() + "\" is missing");}}return processedSlideLines;}/*** @throws Exception**/@SuppressWarnings("unused")private void test() throws Exception {// test categoryDefinitionsContainer allDefs =Catalog.getInstance().getDefinitionsContainer();Category category = allDefs.getCategory(this.categoryID);Utils.logger.info(category.toString());// test data type defsDatatypeDefinition datatypeDef = allDefs.getDatatypeDefinition(70004L);Utils.logger.info(datatypeDef.toString());// test unitsUnit unit = allDefs.getUnit(50004L);Utils.logger.info(unit.toString());// test slide defsSlideDefinition slideDef = allDefs.getSlideDefinition(130002L);Utils.logger.info(slideDef.toString());// test feature defsFeatureDefinition featureDef = allDefs.getFeatureDefinition(120002L);Utils.logger.info(featureDef.toString());}}