/*
* ###
* 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.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
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 javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.PropertyException;
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.Documentation;
import com.photon.phresco.model.Documentation.DocumentationType;
import com.photon.phresco.model.Module;
import com.photon.phresco.model.ModuleGroup;
import com.photon.phresco.service.api.PhrescoServerFactory;
import com.photon.phresco.service.api.RepositoryManager;
import com.photon.phresco.service.client.api.ServiceClientConstant;
import com.photon.phresco.service.client.api.ServiceContext;
import com.photon.phresco.service.client.api.ServiceManager;
import com.photon.phresco.service.client.factory.ServiceClientFactory;
import com.photon.phresco.service.client.impl.RestClient;
import com.photon.phresco.service.model.ArtifactInfo;
import com.photon.phresco.service.model.DocumentType;
import com.photon.phresco.util.TechnologyTypes;
import com.sun.jersey.api.client.ClientResponse;
public class JsLibraryGenerator {
private static final String id1 = "jslib_";
private static final int noOfRowsToSkip = 1;
private static final String JSLIBRARY = "JSLibraries";
private static final String DELIMITER = ",";
static final Map<String, String> INPUT_EXCEL_MAP = new HashMap<String, String>(16);
private static final String JS_LIBRARY_EXCEL_FILE = "PHTN_PHRESCO_JS-Libraries.xls";
private static final String OUTPUT_XML_FILE = "jslibrary.xml";
private RepositoryManager manager;
private HSSFWorkbook workBook;
private File outFile;
private File inputDir;
private File binariesDir;
private ServiceManager serviceManager = null;
private ServiceContext context = null;
static final Map<String, File> contentsHomeMap = new HashMap<String, File>(
16);
public JsLibraryGenerator(File inputFileDir, File outDir, File binariesDir2)
throws PhrescoException {
this.outFile = outDir;
this.inputDir = inputFileDir;
this.binariesDir = binariesDir2;
PhrescoServerFactory.initialize();
this.manager = PhrescoServerFactory.getRepositoryManager();
PhrescoServerFactory.initialize();
initContentsHomeMap();
initInputExcelMap();
context = new ServiceContext();
context.put(ServiceClientConstant.SERVICE_URL, "http://localhost:3030/service/rest");
context.put(ServiceClientConstant.SERVICE_USERNAME, "demouser");
context.put(ServiceClientConstant.SERVICE_PASSWORD, "phresco");
}
private static void initInputExcelMap() {
// INPUT_EXCEL_MAP.put(TechnologyTypes.PHP,"PHTN_PHRESCO_JS-Libraries.xls");
INPUT_EXCEL_MAP.put(TechnologyTypes.ANDROID_HYBRID,"PHTN_PHRESCO_JS-Libraries.xls");
INPUT_EXCEL_MAP.put(TechnologyTypes.IPHONE_HYBRID,"PHTN_PHRESCO_JS-Libraries.xls");
INPUT_EXCEL_MAP.put(TechnologyTypes.IPHONE_NATIVE,"PHTN_PHRESCO_JS-Libraries.xls");
INPUT_EXCEL_MAP.put(TechnologyTypes.HTML5_MOBILE_WIDGET,"PHTN_PHRESCO_Html5_Mobile_Widget_JS-Libraries.xls");
INPUT_EXCEL_MAP.put(TechnologyTypes.HTML5_MULTICHANNEL_JQUERY_WIDGET,"PHTN_PHRESCO_Html5_Mobile_Widget_JS-Libraries.xls");
INPUT_EXCEL_MAP.put(TechnologyTypes.HTML5_WIDGET,"PHTN_PHRESCO_Html5_Mobile_Widget_JS-Libraries.xls");
// INPUT_EXCEL_MAP.put(TechnologyTypes.HTML5_MULTICHANNEL_JQUERY_WIDGET, "PHTN_PHRESCO_Html5_Jquery_Widget_JS-Libraries.xls");
// INPUT_EXCEL_MAP.put(TechnologyTypes.HTML5_WIDGET, "PHTN_PHRESCO_Html5_Yui_Widget_JS-Libraries.xls");
}
private void initContentsHomeMap() {
File projectRootDir = new File(binariesDir, "/technologies/");
contentsHomeMap.put("js-libraries", new File(projectRootDir, "js-libraries"));
}
public void publish() throws PhrescoException {
for (String tech : INPUT_EXCEL_MAP.keySet()) {
generate(tech);
}
}
private void generate(String tech) throws PhrescoException {
ModuleGroup moduleGroup = new ModuleGroup();
List<ModuleGroup> jsLibs = new ArrayList<ModuleGroup>();
workBook = getWorkBook(tech);
HSSFSheet sheet = workBook.getSheet(JSLIBRARY);
Iterator<Row> rowIterator = sheet.rowIterator();
for (int i = 0; i < noOfRowsToSkip; i++) {
rowIterator.next();
}
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
moduleGroup = createJSLibrary(row, tech);
jsLibs.add(moduleGroup);
}
serviceManager = ServiceClientFactory.getServiceManager(context);
RestClient<ModuleGroup> techClient = serviceManager.getRestClient("component/modules");
ClientResponse response = techClient.create(jsLibs);
System.out.println(tech + "Uploaded Successfully................");
System.out.println(response.getStatus());
// writeTo(libraries, tech);
// uploadToRepository(libraries, tech);
}
private HSSFWorkbook getWorkBook(String tech) throws PhrescoException {
FileInputStream fs = null;
try {
fs = new FileInputStream(new File(inputDir, INPUT_EXCEL_MAP.get(tech)));
workBook = new HSSFWorkbook(fs);
} catch (Exception e) {
throw new PhrescoException();
}
return workBook;
}
// private void uploadToRepository(Libraries libraries, String tech)
// throws PhrescoException {
//
// ArtifactInfo info = new ArtifactInfo("jslibraries", tech, "",
// "xml", "0.1");
// manager.addArtifact(info, new File(outFile, tech + ".xml"));
//
// }
// private void writeTo(Libraries libraries, String tech) throws PhrescoException {
// try {
// JAXBContext jaxbContext = JAXBContext
// .newInstance("com.photon.phresco.service.jaxb");
// Marshaller marshaller = jaxbContext.createMarshaller();
// JAXBElement<Libraries> jaxbApptype = new ObjectFactory()
// .createLibraries(libraries);
// marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
// Boolean.TRUE);
// marshaller.marshal(jaxbApptype, new File(outFile, tech + ".xml"));
// } catch (PropertyException e) {
// throw new PhrescoException(e);
// } catch (JAXBException e) {
// throw new PhrescoException(e);
// }
// }
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 ModuleGroup createJSLibrary(Row row, String techId) throws PhrescoException {
ModuleGroup moduleGroup = new ModuleGroup();
Cell serialNo = row.getCell(0);
if (serialNo == null || Cell.CELL_TYPE_BLANK == serialNo.getCellType()) {
return null;
}
String name = row.getCell(1).getStringCellValue();
String[] versions = new String[]{"1.0"};
Cell versionCell = row.getCell(2);
if (versionCell != null && Cell.CELL_TYPE_BLANK != versionCell.getCellType()) {
String version = getValue(versionCell);
versions = StringUtils.split(version,DELIMITER);
}
Boolean req = false;
Cell required = row.getCell(9);
if (required != null && Cell.CELL_TYPE_BLANK != required.getCellType()) {
req = convertBoolean(getValue(required));
}
String identifier = id1
+ row.getCell(1).getStringCellValue().toLowerCase();
String no = String.valueOf(identifier);
List<Documentation> documentations = new ArrayList<Documentation>();
Documentation documents ;
Cell helptext = row.getCell(7);
if (helptext != null && Cell.CELL_TYPE_BLANK != helptext.getCellType()) {
documents = new Documentation();
documents.setContent(helptext.getStringCellValue());
documents.setType(DocumentationType.HELP_TEXT);
documentations.add(documents);
}
Cell description = row.getCell(4);
if (description != null && Cell.CELL_TYPE_BLANK != description.getCellType()) {
documents = new Documentation();
documents.setContent(description.getStringCellValue());
documents.setType(DocumentationType.DESCRIPTION);
documentations.add(documents);
}
String fileExt = "zip";
Cell filenameCell = row.getCell(8);
if (filenameCell != null
&& Cell.CELL_TYPE_BLANK != filenameCell.getCellType()) {
String filePath = filenameCell.getStringCellValue().trim();
if (filePath.endsWith(".tar.gz")) {
fileExt = "tar.gz";
} else if (filePath.endsWith(".tar")) {
fileExt = "tar";
} else if (filePath.endsWith(".zip")) {
fileExt = "zip";
} else if (filePath.endsWith(".jar")) {
fileExt = "jar";
}
System.out.println("Uploading jslibrary : " + filePath);
// publishJSLibrary(library, filePath, fileExt ,filePath);
}
List<Module> moduleVersions = createModules(name, versions, fileExt, no);
moduleGroup.setModuleId(no);
moduleGroup.setName(name);
moduleGroup.setRequired(req);
moduleGroup.setTechId(techId);
moduleGroup.setType("js");
moduleGroup.setDocs(documentations);
return moduleGroup;
}
private List<Module> createModules(String name, String[] versions,
String fileExt, String no) {
Module module = new Module();
for (String version : versions) {
module.setName(name);
module.setContentType(fileExt);
String contentUrl = "/jslibraries/files/" + no +"/"+ version + "/"+ no + "-" + version + "." + fileExt;
module.setContentURL(contentUrl);
}
return null;
}
private Boolean convertBoolean(String value) {
if ("Yes".equalsIgnoreCase(value)) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
// private void publishJSLibrary(Library library, String fileURL, String ext ,String filepath)
// throws PhrescoException {
// File root = contentsHomeMap.get("js-libraries");
// File artifact = new File(root, filepath);
// System.out.println("URL = " + artifact.getPath());
// if (!artifact.exists()) {
// System.out.println("Library not exist : " + library.getName() + " filePath: " + fileURL);
// System.out.println("artifact.toString() " + artifact.toString());
// return;
// }
//
// ArtifactInfo info = new ArtifactInfo("jslibraries." + ".files",
// library.getId(), "", ext, library.getVersion());
// manager.addArtifact(info, artifact);
// System.out.println("library : " + library.getName() + " filePath: "
// + fileURL + " added succesfully");
// }
//
// private Library createJslibrary(String id, String mod, String version, Boolean req) {
// Library library = new Library();
// library.setId(id);
// library.setName(mod);
// library.setVersion(version);
// library.setRequired(req);
// return library;
// }
public static void main(String[] args) throws PhrescoException, IOException {
//File inputFile = new File(
//"D:\\work\\phresco\\source\\service\\trunk\\phresco-service-runner\\delivery\\tools\\files\\");
File inputFile = new File("D:\\work\\phresco\\master\\service\\phresco-service-runner\\delivery\\tools\\files\\");
//File outFile = new File(
//"D:\\work\\phresco\\source\\service\\trunk\\phresco-service-runner\\delivery\\tools\\files\\");
File outFile = new File("D:\\");
File binariesFileDir = new File("D:\\work\\phresco\\Phresco-binaries\\");
JsLibraryGenerator gen = new JsLibraryGenerator(inputFile, outFile, binariesFileDir);
gen.publish();
}
}