package app.navigps; import app.config.GUIConfiguration; import app.config.MainConfiguration; import app.navigps.gui.NaviRootWindow; import app.ArgumentsStartUp.FileValueParameter; import app.ArgumentsStartUp.NoValueParameter; import app.ArgumentsStartUp.SizeValueParameter; import app.ArgumentsStartUp.core.AbstractParameter; import app.ArgumentsStartUp.core.ParametersContainer; import app.navigps.utils.BridgeForVerboseMode; import app.navigps.utils.NaviLogger; import java.awt.Dimension; import java.io.File; import java.util.ArrayList; import java.util.Vector; import java.util.logging.Level; import javax.swing.SwingUtilities; /** * * @author Grzegorz (vara) Warywoda */ public class NaviGPSCore { private ArrayList<String> parameters; public NaviGPSCore(ArrayList<String> arg){ this.parameters = arg; //Intercept all output streams System.setOut(BridgeForVerboseMode.getInstance().getOutputStream()); System.setErr(BridgeForVerboseMode.getInstance().getErrOutputStream()); if(ParametersContainer.isEmpty()){ ParametersContainer.putParameter(createParametrs()); } NaviLogger.logger.log(Level.FINE,"Start main application"); } /** * * @param args */ public static void main(String[] args){ //args = new String[]{"-Vg","-sp","-V","-fuy","./resources/maps/MapWorld.svg","-ws","800,600"}; //System.setProperty("sun.java2d.noddraw", "true"); //System.setProperty("swing.aatext", "true"); ArrayList<String> arguments = new ArrayList<String>(); for (int i=0; i<args.length; i++){ arguments.add(args[i]); } NaviGPSCore app = new NaviGPSCore(arguments); try { app.executeParameters(); } catch (Exception ex) { return; } initGui(app); } public void executeParameters() throws Exception{ try { parseParameters(parameters); } catch (Exception ex) { NaviLogger.logger.log(Level.WARNING,"Parsering argument start up",ex); throw ex; } } private void parseParameters(ArrayList<String> args) throws Exception{ int iArgs = args.size(); for (int i = 0; i < iArgs; i++) { String string = args.get(i); //System.err.println("** '"+string+"'"); AbstractParameter optionHandler = ParametersContainer.getParameter(string); if (optionHandler == null){ throw new Exception("Not recognizied parameter "+string+".\nTry run application with option '-h'"); } else { int nOptionArgs = optionHandler.getOptionValuesLength(); if (i + nOptionArgs >= iArgs){ throw new Exception("Error not enough option values for : "+ optionHandler.getOption()); } String[] optionValues = new String[nOptionArgs]; for (int j=0; j<nOptionArgs; j++){ optionValues[j] = (String)args.get(1+i+j); } i += nOptionArgs; try { optionHandler.handleOption(optionValues); } catch(IllegalArgumentException e){ e.printStackTrace(); throw new Exception("Error: illegal argument for option "+optionHandler.getOption() +" : "+ optionValuesToString(optionValues)+".\nTry run application with option '-h'"); } if(optionHandler.isExit()){ System.exit(0); } } } } /** * * @param m */ protected static void initGui(final NaviGPSCore m){ SwingUtilities.invokeLater(new Runnable() { @Override public void run() { NaviRootWindow nw = new NaviRootWindow(m); nw.setSize(GUIConfiguration.getWindowSize()); nw.initComponents(); if (MainConfiguration.getPathToChartFile() != null) { nw.openSVGDocument(MainConfiguration.getPathToChartFile()); } nw.setTitle(Version.getVersion()); nw.setDisplayMode(); } }); } /** * */ public void reload(){ initGui(this); } protected static String optionValuesToString(String[] v){ StringBuffer sb = new StringBuffer(); int n = v != null ? v.length:0; for (int i=0; i<n; i++){ sb.append(v[i] ); sb.append( ' ' ); } return sb.toString(); } public static Vector<AbstractParameter>getAllparameters(){ Vector<AbstractParameter> retVec = null; if(ParametersContainer.isEmpty()){ ParametersContainer.putParameter(createParametrs()); } retVec = ParametersContainer.getAllParameters(); return retVec; } private static Vector<AbstractParameter>createParametrs(){ Vector<AbstractParameter> params = new Vector<AbstractParameter>(); System.out.println("<TEST> Create defined parameters. This text should be shown only once."); params.add(new NoValueParameter("-v") { @Override public boolean isExit() { return true; } @Override public void handleOption() { System.out.println("Version: "+Version.getVersion()); } @Override public String getOptionDescription() { return "-v\n(version) print application version"; } }); params.add(new NoValueParameter("-V") { @Override public void handleOption() { MainConfiguration.setModeVerboseConsole(true); BridgeForVerboseMode.getInstance(). addComponentsWithOutputStream(BridgeForVerboseMode.console); //System.out.println("parameter -V"); } @Override public String getOptionDescription() { return "-V\n(verbose mode) result returned by functions shown only on console"; } }); params.add(new NoValueParameter("-Vg") { @Override public void handleOption() { MainConfiguration.setModeVerboseGui(true); //System.out.println("parameter -Vg"); } @Override public String getOptionDescription() { return "-Vg\n(verbose mode) like -v + create window in gui with console results"; } }); params.add(new NoValueParameter("-sp") { @Override public void handleOption() { MainConfiguration.setShowDocumentProperties(true); //System.out.println("parameter -sp"); } @Override public String getOptionDescription() { return "-sp\n(Show properties) create window in app with properties of chart file"; } }); /* params.add(new FileValueParameter("-cf") { @Override public void handleOption(File optionValue) { System.out.println("parameter -cf"); } @Override public String getOptionDescription() { return "\t-c \t(path to configuration file) not suported yet !!!"; } }); */ params.add(new FileValueParameter("-f") { @Override public void handleOption(File optionValue) { MainConfiguration.setPathChartToFile(optionValue.getAbsolutePath()); //System.out.println("parameter -f"); } @Override public String getOptionDescription() { return "-f\n(path to chart file) file format must be svg only!"; } }); params.add(new SizeValueParameter("-ws") { @Override public void handleOption(Dimension dimensionValue) { GUIConfiguration.setWindowSize(dimensionValue); //System.out.println("parameter -ws "+dimensionValue); } @Override public String getOptionDescription() { return "-ws\n(window size eq. -ws 800,600 ) " + "\nIt takes two arguments to define the size of main window." + "\nIf specified arguments exceed screen resolution they will be brought down to current resolution"; } }); params.add(new NoValueParameter("-fs") { @Override public void handleOption() { GUIConfiguration.setModeScreen(GUIConfiguration.FULL_SCREEN); } @Override public String getOptionDescription() { return "-fs\n(Display root window in full screen mode)"; } }); params.add(new NoValueParameter("-h") { @Override public void handleOption() { Vector<AbstractParameter> vec = ParametersContainer.getAllParameters(); System.out.println("NaviGPS options are:"); for (AbstractParameter ap : vec) { System.out.println(ap.getOptionDescription()); } } @Override public String getOptionDescription() { return "-h\n(help -- Show help text)"; } @Override public boolean isExit() { return true; } }); return params; } }