/* * ### * Phresco Service Tools * * Copyright (C) 1999 - 2012 Photon Infotech Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ### */ package com.photon.phresco.service.tools; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.codehaus.plexus.util.StringUtils; import com.google.gson.Gson; import com.photon.phresco.exception.PhrescoException; import com.photon.phresco.model.Module; import com.photon.phresco.model.ModuleGroup; import com.photon.phresco.model.ProjectInfo; import com.photon.phresco.model.Technology; import com.photon.phresco.service.api.PhrescoServerFactory; import com.photon.phresco.service.api.RepositoryManager; import com.photon.phresco.service.data.api.PhrescoDataManager; import com.photon.phresco.service.model.PilotTechModuleVersions; import com.photon.phresco.service.model.PilotTechModules; import com.photon.phresco.service.model.PilotTechnology; import com.photon.phresco.util.TechnologyTypes; public class PilotProjectGenerator { private static final String SHEET_NAME_MODULE = "Modules"; private static final String SHEET_NAME_PILOTS = "Pilots"; private String SHEET_NAME_JSLIBRARY = "JSLibraries"; private static final int NO_OF_ROWS_TO_SKIP = 1; private static final String DELIMITER = ","; private static final String ID = "mod_"; private static final String ID1 = "js_"; static final Map<String, String> INPUT_EXCEL_MAP = new HashMap<String, String>( 16); static final Map<String, String[]> NAME_AND_DEP_MAP = new HashMap<String, String[]>( 16); static final Map<Double, String> SNO_AND_NAME_MAP = new HashMap<Double, String>( 16); static final Map<Double, String> SNO_AND_NAME = new HashMap<Double, String>( 16); static final Map<Double, String> SNO_AND_VERSION = new HashMap<Double, String>( 16); static final Map<Double, String> JSSNO_AND_NAME_MAP = new HashMap<Double, String>( 16); static final Map<Double, String> JSSNO_AND_NAME = new HashMap<Double, String>( 16); static final Map<Double, String> JSSNO_AND_VERSION = new HashMap<Double, String>( 16); private static final String STR_UNDER_SCORE = "_"; RepositoryManager repManager = null; private File inputRootDir; private File outputRootDir; private PhrescoDataManager dataManager = null; private int pilotInfoTracker =1; private int pilotTechlogyTracker = 1; private int pilotTechModulesTracker = 1; private int pilotTechModuleVersionTracker = 1; //private int techlogyTracker = 1; //private int techlogyTracker = 1; //private int techlogyTracker = 1; static { initInputExcelMap(); } private PilotProjectGenerator(File inputRootDir, File outputRootDir) throws PhrescoException { this.inputRootDir = inputRootDir; this.outputRootDir = outputRootDir; PhrescoServerFactory.initialize(); dataManager = PhrescoServerFactory.getPhrescoDataManager(); } private static void initInputExcelMap() { // inputExcelMap.put(TechnologyTypes.PHP,"PHTN_PHRESCO_PHP.xls"); // inputExcelMap.put(TechnologyTypes.JAVA_WEBSERVICE,"PHTN_PHRESCO_Java-WebService.xls"); // inputExcelMap.put(TechnologyTypes.PHP_DRUPAL7,"PHTN_PHRESCO_Drupal7.xls"); // inputExcelMap.put(TechnologyTypes.SHAREPOINT,"PHTN_PHRESCO_Sharepoint.xls"); // inputExcelMap.put(TechnologyTypes.ANDROID_NATIVE,"PHTN_PHRESCO_Andriod-Native.xls"); // inputExcelMap.put(TechnologyTypes.IPHONE_NATIVE,"PHTN_PHRESCO_iPhone-Native.xls"); INPUT_EXCEL_MAP.put(TechnologyTypes.NODE_JS_WEBSERVICE,"PHTN_PHRESCO_NodeJS-WebService.xls"); // inputExcelMap.put(TechnologyTypes.ANDROID_HYBRID,"PHTN_PHRESCO_Andriod-Hybrid.xls"); // inputExcelMap.put(TechnologyTypes.IPHONE_NATIVE,"PHTN_PHRESCO_iPhone-Web.xls"); // inputExcelMap.put(TechnologyTypes.HTML5_MOBILE_WIDGET,"PHTN_PHRESCO_HTML5-Widget.xls"); // inputExcelMap.put(TechnologyTypes.HTML5_WIDGET,"PHTN_PHRESCO_HTML5-Widget.xls"); } private File getExcelFile(String techType) throws PhrescoException { String fileName = INPUT_EXCEL_MAP.get(techType); if (fileName == null) { throw new PhrescoException("No file defined for " + techType); } return new File(inputRootDir, fileName); } private void generatepilot(HSSFWorkbook workBook, String tech) throws PhrescoException { System.out.println("Generating modules for " + tech); createPilots(tech, workBook); } private void createPilots(String tech, HSSFWorkbook workBook) throws PhrescoException { HSSFSheet sheet = workBook.getSheet(SHEET_NAME_PILOTS); Iterator<Row> rowsIter = sheet.rowIterator(); // Skipping first row for (int i = 0; i < NO_OF_ROWS_TO_SKIP; i++) { rowsIter.next(); } while (rowsIter.hasNext()) { Row row = rowsIter.next(); createPilots(tech, row); } } private String getValue(Cell cell) { if (Cell.CELL_TYPE_STRING == cell.getCellType()) { return cell.getStringCellValue(); } if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) { return String.valueOf(cell.getNumericCellValue()); } return null; } private void createPilots(String tech, Row row) throws PhrescoException { //dataManager = PhrescoServerFactory.getPhrescoDataManager(); ProjectInfo info = new ProjectInfo(); List <ProjectInfo> projectInfos = new ArrayList <ProjectInfo> (); Cell namevalue = row.getCell(1); String name = null; if (namevalue != null && Cell.CELL_TYPE_BLANK != namevalue.getCellType()) { name = getValue(namevalue); } Cell desc = row.getCell(2); String description = null; if (desc != null && Cell.CELL_TYPE_BLANK != desc.getCellType()) { description = getValue(desc); } info.setName(name); info.setDescription(description); info.setCode("PHTN_PILOT_" + name); Technology technology = new Technology(); technology.setId(tech); technology.setName(name); List<ModuleGroup> modules = new ArrayList<ModuleGroup>(); String[] depModuleIds = null; Cell depModule = row.getCell(3); if (depModule != null && Cell.CELL_TYPE_BLANK != depModule.getCellType()) { String depModules = getValue(depModule); depModuleIds = StringUtils.split(depModules, DELIMITER); //Add data persistence - dependent modules field in Module object created in TechnologyGenerator.java for (String s2:depModuleIds) { //System.out.println ("dependent modules-->"+s2); } //ENDS } if(depModuleIds!= null){ for (String depid : depModuleIds) { Double depModId = Double.parseDouble(depid); ModuleGroup moduleGroup = createModuleGroup( SNO_AND_NAME_MAP.get(depModId), SNO_AND_NAME.get(depModId), SNO_AND_VERSION.get(depModId)); //System.out.println ("--MG id--"+moduleGroup.getId()+"--MG Artifact id--"+moduleGroup.getArtifactId()+"--MG GroupId--"+moduleGroup.getGroupId()+"--MG Name--"+moduleGroup.getName()+"--MG Type--"+moduleGroup.getType()+"--MG Vendor--"+moduleGroup.getVendor()+"--MG docs--"+moduleGroup.getDocs()+"--MG Versions--"+moduleGroup.getVersions()); modules.add(moduleGroup); //System.out.println ("module Group-->"+moduleGroup.getId()); } } //System.out.println ("module Group size-->"+modules.size()); //Data Persistence - ModuleGroup //dataManager.addModuleGroup(modules); //ENDS technology.setModules(modules); String[] pilotUrlIds = null; Cell url = row.getCell(4); if (url == null) { info.setTechnology(technology); writeToPilots(info, tech); int i=0; //System.out.println ("projectInfo objects name-->"+"--"+info.getId()+"--"+info.getName()+"--"+info.getPilotProjectUrls()+""+info.getCode()); System.out.println ("No JS LIB-->"); } else if (url != null && Cell.CELL_TYPE_BLANK != url.getCellType()) { String pilotUrl = getValue(url); pilotUrlIds = StringUtils.split(pilotUrl, DELIMITER); List<ModuleGroup> jslibrary = new ArrayList<ModuleGroup>(); for (String jsLibId : pilotUrlIds) { Double jsdepModId = Double.parseDouble(jsLibId); ModuleGroup moduleGroup = createModuleGroup( JSSNO_AND_NAME_MAP.get(jsdepModId), JSSNO_AND_NAME.get(jsdepModId), JSSNO_AND_VERSION.get(jsdepModId)); //System.out.println ("JS LIB-->"+moduleGroup.getId()); jslibrary.add(moduleGroup); } technology.setJsLibraries(jslibrary); info.setTechnology(technology); System.out.println ("-size of js library-"+jslibrary.size()); for (ModuleGroup mg:jslibrary){ System.out.println ("--MG id--"+mg.getId()+"--MG Artifact id--"+mg.getArtifactId()+"--MG GroupId--"+mg.getGroupId()+"--MG Name--"+mg.getName()+"--MG Type--"+mg.getType()+"--MG Vendor--"+mg.getVendor()+"--MG docs--"+mg.getDocs()+"--MG Versions--"+mg.getVersions()); } //Add data persistence - JSLibraries (ModuleGroup) //dataManager.addModuleGroup(jslibrary); //ENDS writeToPilots(info, tech); //int i=0; //System.out.println ("projectInfo objects-->"+i++); } //System.out.println ("projectInfo objects name-->"+"--"+info.getId()+"--"+info.getName()+"--"+info.getPilotProjectUrls()+""+info.getCode()); projectInfos.add(info); info.setId(info.getName()); //add persistence to data PilotTechnology, Technology techTemp = info.getTechnology(); List<PilotTechnology> pilotTechnologyList = new ArrayList<PilotTechnology> (); //System.out.println ("--Pilot Tech app id--"+techTemp.getAppTypeId()+"--Pilot Tech app id--"+techTemp.getId()+"--Pilot Tech Name--"+techTemp.getName()); PilotTechnology pilotTech = createPilotTechnology (techTemp,pilotTechlogyTracker,pilotInfoTracker); //System.out.println ("--Pilot Tech app id--"+pilotTech.getId()+"--Pilot Tech Name--"+pilotTech.getName()+pilotTech.getProjectInfoid()+"--Pilot Tech id--"+pilotTech.getTechid()); pilotTechnologyList.add(pilotTech); // dataManager.addPilotTechnology (pilotTechnologyList); pilotTechlogyTracker++; pilotInfoTracker++; List <ModuleGroup> jsLibList = techTemp.getJsLibraries(); List <ModuleGroup> moduleList = techTemp.getModules(); List <PilotTechModules> pilotTechModuleList = new ArrayList <PilotTechModules> (); for (ModuleGroup mgtemp:moduleList){ PilotTechModules pilotTechModules = new PilotTechModules (); pilotTechModules = populatePilotTechModules (mgtemp,pilotTechModulesTracker,pilotTechlogyTracker); //System.out.println ("--Techmodules---"+mgtemp); List <Module> techModuleVersionList = mgtemp.getVersions(); //System.out.println ("size of techModuleVersionList --"+pilotTechModulesTracker+"--"+techModuleVersionList.size()); storeTechModuleVersions (techModuleVersionList,pilotTechModulesTracker); //System.out.println ("--PilotTechMod---"+pilotTechModules.getId()+"--moduleGroupId---"+pilotTechModules.getMgid()+"--mgName---"+pilotTechModules.getName()+"--Mgtechid---"+pilotTechModules.getPilotTechid()); pilotTechModuleList.add(pilotTechModules); pilotTechModulesTracker++; } // dataManager.addPilotTechModules (pilotTechModuleList); pilotTechlogyTracker++; //ENDS storeProjectInfo (info,pilotInfoTracker); if (jsLibList!=null){ //Since jsLib size is zero persistense login not added System.out.println ("--JS lib list size--"+jsLibList.size()); } else { System.out.println ("--JS Lib size is zero--"); } //dataManager.addProjectInfo(info); //Add data persistence - ProjectInfo -PilotProject (ModuleGroup) //dataManager.addModuleGroup(jslibrary); //ENDS } private void storeProjectInfo(ProjectInfo info, int pilotInfoTracker2) throws PhrescoException { // TODO Auto-generated method stub List <ProjectInfo> pilotProjectInfo = new ArrayList <ProjectInfo> (); info.setPilotid(pilotInfoTracker2); System.out.println ("--Proj app--"+info.getApplication()+"--Proj code--"+info.getCode()+"--Proj contentURL--"+info.getContentURLId()+"--Proj Desc--"+info.getDescription()+"--Proj id--"+info.getId()+"--Proj Name--"+info.getName()+"--Proj Pilotid--"+info.getPilotid()+"--Proj techid--"+info.getTechID()+"--Proj versio--"+info.getVersion()+"--Proj urls--"+info.getPilotProjectUrls()+"--Proj tech--"+info.getTechnology()); pilotProjectInfo.add(info); // dataManager.addProjectInfo(pilotProjectInfo); } private PilotTechnology createPilotTechnology(Technology techTemp,int pilotTechlogyTracker2, int pilotInfoTracker2) { // TODO Auto-generated method stub PilotTechnology pilotTechnology = new PilotTechnology (); pilotTechnology.setId(pilotTechlogyTracker2); pilotTechnology.setName(techTemp.getName()); pilotTechnology.setTechid(techTemp.getId()); pilotTechnology.setProjectInfoid(pilotInfoTracker2); return pilotTechnology; } private void storeTechModuleVersions(List<Module> techModuleVersionList,int pilotTechModulesTracker2) throws PhrescoException { // TODO Auto-generated method stub PilotTechModuleVersions pilotTechModuleVersions = new PilotTechModuleVersions (); List <PilotTechModuleVersions> pilotTechModuleVersionsList = new ArrayList <PilotTechModuleVersions> (); for (Module techModule:techModuleVersionList){ pilotTechModuleVersions.setPilotTechModulesid(pilotTechModulesTracker2); pilotTechModuleVersions.setVersion(techModule.getVersion()); pilotTechModuleVersions.setId(pilotTechModuleVersionTracker); pilotTechModuleVersionsList.add(pilotTechModuleVersions); pilotTechModuleVersionTracker++; //System.out.println ("--Pilot Tech Module Versions id --"+pilotTechModuleVersions.getId()+"--Pilot Tech Module Versions TECH MODULE ID --"+pilotTechModuleVersions.getPilotTechModulesid()+"--Pilot Tech Module Versions VERSION STR --"+pilotTechModuleVersions.getVersion()); } // dataManager.addPilotTechModuleVersionsList (pilotTechModuleVersionsList); } private PilotTechModules populatePilotTechModules(ModuleGroup mgtemp,int pilotTechModulesTracker2, int pilotTechlogyTracker2) { // TODO Auto-generated method stub PilotTechModules pilotTechModules = new PilotTechModules (); pilotTechModules.setId(pilotTechModulesTracker2); pilotTechModules.setMgid(mgtemp.getId()); pilotTechModules.setName(mgtemp.getName()); pilotTechModules.setPilotTechid(pilotTechlogyTracker2); return pilotTechModules; } private ModuleGroup createModuleGroup(String id, String name, String version) { ModuleGroup group = new ModuleGroup(); group.setId(id); group.setName(name); Module module = new Module(); module.setVersion(version); group.getVersions().add(module); return group; } private void writeToPilots(ProjectInfo info,String tech) throws PhrescoException { File file = new File(outputRootDir, tech+"pilots.json"); System.out.println("File path = " + file.getPath()); try { Gson gson = new Gson(); String json = gson.toJson(info); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(json); writer.close(); } catch (Exception e) { throw new PhrescoException(e); } } public final void generateAll() throws PhrescoException { for (String tech : INPUT_EXCEL_MAP.keySet()) { generateJSLibrary(tech); generate(tech); } } public void generate(String tech) throws PhrescoException { FileInputStream fs = null; try { fs = new FileInputStream(getExcelFile(tech)); System.out.println("Processing excel file for " + getExcelFile(tech)); HSSFWorkbook workBook = new HSSFWorkbook(fs); generateModule(workBook, tech); generatepilot(workBook, tech); } catch (IOException e) { throw new PhrescoException(e); } finally { if (fs != null) { try { fs.close(); } catch (IOException e) { e.printStackTrace(); } } } } public void generateJSLibrary(String tech) throws PhrescoException { FileInputStream fs = null; try { fs = new FileInputStream(new File(inputRootDir.getPath(), "PHTN_PHRESCO_JS-Libraries.xls")); System.out.println("Processing excel file for " + getExcelFile(tech)); HSSFWorkbook workBook = new HSSFWorkbook(fs); generateJSLibrary(workBook, tech); } catch (IOException e) { throw new PhrescoException(e); } finally { if (fs != null) { try { fs.close(); } catch (IOException e) { e.printStackTrace(); } } } } private void generateJSLibrary(HSSFWorkbook workBook, String tech) { HSSFSheet sheet = workBook.getSheet(SHEET_NAME_JSLIBRARY); Iterator<Row> rowsIter = sheet.rowIterator(); for (int i = 0; i < NO_OF_ROWS_TO_SKIP; i++) { rowsIter.next(); } while (rowsIter.hasNext()) { Row row = rowsIter.next(); createJSLibrary(tech, row); } } private void createJSLibrary(String tech, Row row) { Cell srno = row.getCell(0); Double no = null; if(srno != null && Cell.CELL_TYPE_BLANK != srno.getCellType()){ no = srno.getNumericCellValue(); } Cell names = row.getCell(1); String name = null; if(names != null && Cell.CELL_TYPE_BLANK != names.getCellType()){ name = getValue(names); } Cell versions = row.getCell(2); String version = getValue(versions); String identifier = ID1 + name + STR_UNDER_SCORE + version; JSSNO_AND_NAME_MAP.put(no, identifier); JSSNO_AND_NAME.put(no, name); JSSNO_AND_VERSION.put(no, version); } private void generateModule(HSSFWorkbook workBook, String tech) throws PhrescoException { HSSFSheet sheet = workBook.getSheet(SHEET_NAME_MODULE); Iterator<Row> rowsIter = sheet.rowIterator(); for (int i = 0; i < NO_OF_ROWS_TO_SKIP; i++) { rowsIter.next(); } while (rowsIter.hasNext()) { Row row = rowsIter.next(); createModule(tech, row); } } private void createModule(String tech, Row row) { Cell srno = row.getCell(0); Double no = null; if (srno != null && Cell.CELL_TYPE_BLANK != srno.getCellType()) { no = srno.getNumericCellValue(); } Cell names = row.getCell(1); String name = null; if (names != null && Cell.CELL_TYPE_BLANK != names.getCellType()) { name = getValue(names); } Cell versions = row.getCell(2); String version = null; if (versions != null && Cell.CELL_TYPE_BLANK != versions.getCellType()) { version = getValue(versions); } String identifier = ID + name + STR_UNDER_SCORE + version; SNO_AND_NAME_MAP.put(no, identifier); SNO_AND_NAME.put(no, name); SNO_AND_VERSION.put(no, version); } public static void main(String[] args) throws PhrescoException { //"D:\\work\\projects\\phresco\\service\\trunk\\phresco-service-runner\\delivery\\tools\\"); File toolsHome = new File( "D:\\work\\projects\\phresco\\source\\trunk\\service\\trunk\\phresco-service-runner\\delivery\\tools"); //D:\\work\\projects\\phresco\\source\\trunk\\service\\trunk\\phresco-service-runner\\delivery\\tools\\files" File inputRootDir = new File(toolsHome, "files"); File outputRootDir = new File(toolsHome, "repo"); PilotProjectGenerator generator = new PilotProjectGenerator( inputRootDir, outputRootDir); generator.generateAll(); } }