/* * @(#)Data2ODMXml.java * * Copyright (C) 2008 www.interpss.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * @Author Mike Zhou * @Version 1.0 * @Date 02/15/2008 * * Revision History * ================ * */ package org.ieee.odm.util; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; import org.ieee.odm.adapter.IODMAdapter; import org.ieee.odm.adapter.ieeecdf.IeeeCDFAdapter; import org.ieee.odm.adapter.ucte.UCTE_DEFAdapter; /** * ODM cmd tool implementation * * @author mzhou * */ public class Data2ODMXml { private final static String InOptStr = "-in"; private final static String FmtOptStr = "-format"; private final static String OutOptStr = "-out"; private final static String LogOptStr = "-log"; private final static String Token_IEEECDF = "ieeecdf"; private final static String Token_UCTE = "ucte"; private final static String Token_BPA = "bpa"; private final static String Token_LogInfo = "info"; private final static String Token_LogWarn = "waining"; private final static String Token_LogDebug = "debug"; private final static String Parm_LoggerName = "IEEE ODM Logger"; /** * Main entry point to run the adapter * * @param args */ public static void main(String[] args) { // parse cmd line parameters if (!parseCmdLineParameters(args)) { System.out.println(getHelpInfo()); System.exit(0); } // create logger object Logger logger = getLogger(appParameters.getParamLowerCase(LogOptStr)); // get input and output file names String inputFile = appParameters.getParam(InOptStr); String outFile = appParameters.getParam(OutOptStr); // print starting info printInfo(logger, "Starting"); try { // load the input file into the reader buffer String xmlStr = ""; IODMAdapter adapter = null; if (Token_IEEECDF.equals(appParameters.getParamLowerCase(FmtOptStr))) { logger.info("Input file is of format IEEE Common Data Format"); adapter = new IeeeCDFAdapter(); } else if (Token_UCTE.equals(appParameters.getParamLowerCase(FmtOptStr))) { logger.info("Input file is of format UCTE Data Format"); adapter = new UCTE_DEFAdapter(); } // else if (Token_BPA.equals(appParameters.getParamLowerCase(FmtOptStr))) { // logger.info("Input file is of format BPA Format"); // adapter = new BPAAdapter(logger); // } else { logger.severe("Error: Unsupported input file data, " + appParameters.getParam(FmtOptStr)); System.err.println("Error: Unsupported input file data, " + appParameters.getParam(FmtOptStr)); System.exit(0); } Date date = new Date(); if (!adapter.parseInputFile(inputFile)) { logger.severe("Error: model parsing error, " + adapter.errMessage()); System.err.println("Error: model parsing error, " + adapter.errMessage()); } logger.info("File parsing time(ms): " + (new Date().getTime() - date.getTime())); // convert the model to a XML document string xmlStr = (adapter.getModel()).toXmlDoc(); // output the XML document to the output file OutputStream out = new BufferedOutputStream(new FileOutputStream(outFile)); out.write(xmlStr.getBytes()); out.flush(); out.close(); logger.info("ODM Xml document saved to file: " + outFile); } catch (Exception e) { System.err.println(e.toString()); e.printStackTrace(); } // print shutdown info printInfo(logger, "Shutdown"); System.exit(0); } private static AppParameters appParameters; private static boolean parseCmdLineParameters(String[] args) { appParameters = new AppParameters(); for (int i = 0; i < args.length; i = i + 2) { // simple precaution in case arguments aren't well formed if (args[i].indexOf("-") < 0) { i = i - 1; continue; } appParameters.setParam(args[i], args[i + 1]); } if (appParameters.getParam(LogOptStr) == null) appParameters.setParam(LogOptStr, Token_LogInfo); if (appParameters.getParam(InOptStr) == null || appParameters.getParam(FmtOptStr) == null || appParameters.getParam(OutOptStr) == null) { return false; } return true; } private static Logger getLogger(String level) { final LogManager logMgr = LogManager.getLogManager(); Logger logger = Logger.getLogger(Parm_LoggerName); logger.setLevel(level.equals(Token_LogDebug)? Level.FINE : (level.equals(Token_LogWarn)? Level.WARNING : Level.INFO)); logMgr.addLogger(logger); return logger; } private static String getHelpInfo() { return "java org.ieee.pes.odm.pss.ODMAdapter -in <input file> -format IEEECDF -out <output file> [-log info|warning|debug]\n" + " " + FmtOptStr + " IEEECDF for IEEE Common Data Format for exchanging Loadflow data\n"; } private static void printInfo(Logger logger, String str) { logger.info( "\n============================================\n" + "* InterPSS "+ str +" *\n" + "============================================"); } } /** * app parameter class for parsing app cmd parameters * * @author mzhou * */ class AppParameters { /** * This is where we store every sort of session parameters */ private Map<String, String> appParameters; /** * default constructor */ public AppParameters() { appParameters = new HashMap<String, String>(); } /** * set a kay-value pair * * @param key * @param value */ public void setParam(String key, String value) { appParameters.put(key, value); } /** * get value by key * * @param key * @return */ public String getParam(String key) { Object object = appParameters.get(key); if (object != null) { return (String) object; } return null; } /** * get value by key and turn the value string to lower case * * @param key * @return */ public String getParamLowerCase(String key) { if (getParam(key) != null) return getParam(key).toLowerCase(); else return null; } }