Update of /cvsroot/jcommander/plugins/org.jcommander.ui.app/src/org/jcommander/ui/app In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv20595/src/org/jcommander/ui/app Modified Files: JCmdWorkbenchAdvisor.java PlatformRunnable.java JcmdManager.java Added Files: StartupParameters.java Log Message: Skeleton implementation of feature [1473431] Command Line Interface. Implemented parameter parsing and passing inside JCommander (first or already running instance). Implemented singleton instance parameters and the newTab parameter. Index: PlatformRunnable.java =================================================================== RCS file: /cvsroot/jcommander/plugins/org.jcommander.ui.app/src/org/jcommander/ui/app/PlatformRunnable.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** PlatformRunnable.java 5 May 2006 11:00:35 -0000 1.9 --- PlatformRunnable.java 11 Jul 2006 14:45:14 -0000 1.10 *************** *** 32,40 **** strArgs = (String[])args; } JCMDApplicationEntryPoint entryPoint = new JCMDApplicationEntryPoint(); ! boolean first = new SingletonAppLauncher(entryPoint, 63500, 64500).startingFirstInstance(strArgs); ! if(!first){ ! LoggerPlugin.rootLogger.info("Exitting from duplicate instance"); ! return IPlatformRunnable.EXIT_OK; } int returnCode = entryPoint.getReturnCode(); --- 32,55 ---- strArgs = (String[])args; } + StartupParameters parameters = new StartupParameters(); + if(null != strArgs){ + parameters.load(strArgs); + } JCMDApplicationEntryPoint entryPoint = new JCMDApplicationEntryPoint(); ! if(parameters.SINGLETON_INSTANCE.configured()){ ! entryPoint.startup(strArgs); ! } ! else{ ! int startPort = 63500; ! int endPort = 64500; ! if(parameters.SINGLETON_PORT.configured()){ ! startPort = parameters.SINGLETON_PORT.getStartPort(); ! endPort = parameters.SINGLETON_PORT.getEndPort(); ! } ! boolean first = new SingletonAppLauncher(entryPoint, startPort, endPort).startingFirstInstance(strArgs); ! if(!first){ ! LoggerPlugin.rootLogger.info("Exitting from duplicate instance"); ! return IPlatformRunnable.EXIT_OK; ! } } int returnCode = entryPoint.getReturnCode(); *************** *** 60,65 **** --- 75,85 ---- public void startup(String[] params){ + StartupParameters parameters = new StartupParameters(); + if(null != params){ + parameters.load(params); + } if(started){ LoggerPlugin.rootLogger.info("Already started up. Place for secondary startups"); + JcmdManager.getInstance().applyStartupParameters(parameters); return; } *************** *** 70,74 **** } ! WorkbenchAdvisor workbenchAdvisor = null; if(params != null) { --- 90,94 ---- } ! JCmdWorkbenchAdvisor workbenchAdvisor = null; if(params != null) { *************** *** 80,83 **** --- 100,104 ---- workbenchAdvisor = new JCmdWorkbenchAdvisor("*DEVEL* "); + } } *************** *** 87,90 **** --- 108,112 ---- workbenchAdvisor = new JCmdWorkbenchAdvisor(); } + workbenchAdvisor.setStartupParameters(parameters); Display display = PlatformUI.createDisplay(); returnCode = PlatformUI.createAndRunWorkbench(display, workbenchAdvisor); Index: JcmdManager.java =================================================================== RCS file: /cvsroot/jcommander/plugins/org.jcommander.ui.app/src/org/jcommander/ui/app/JcmdManager.java,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** JcmdManager.java 8 Jul 2006 22:42:48 -0000 1.32 --- JcmdManager.java 11 Jul 2006 14:45:14 -0000 1.33 *************** *** 304,307 **** --- 304,326 ---- return true; } + + public void applyStartupParameters(final StartupParameters parameters){ + if(null == parameters){ + return; + } + Display.getDefault().asyncExec(new Runnable(){ + public void run(){ + applyStartupParamsUI(parameters); + } + }); + } + + private void applyStartupParamsUI(StartupParameters parameters){ + LoggerPlugin.getLogger(JcmdManager.class).debug("Applying startup parameters..."); + if(parameters.NEW_TAB.configured()){ + createTab(PlatformUI.getWorkbench().getActiveWorkbenchWindow(), parameters.NEW_TAB.getLeftRoot(), + parameters.NEW_TAB.getRightRoot()); + } + } } \ No newline at end of file --- NEW FILE: StartupParameters.java --- package org.jcommander.ui.app; import java.io.File; import java.util.ArrayList; import org.apache.commons.cli.*; import org.apache.commons.vfs.FileObject; import org.apache.commons.vfs.FileSystemException; import org.jcommander.vfsextensions.VfsManagerExtension; /** * <p></p> * @author Mike Grigorov * @version 1.0 * Created on 03.07.2006 */ public class StartupParameters { public final CompareFileSettings COMPARE = new CompareFileSettings(); public final CopyDefaultTargetSettings COPY_TARGET = new CopyDefaultTargetSettings(); public final CopyFileSettings COPY = new CopyFileSettings(); public final NewTabSettings NEW_TAB = new NewTabSettings(); public final NewWindowSettings NEW_WINDOW = new NewWindowSettings(); public final SingletonInstanceSettings SINGLETON_INSTANCE = new SingletonInstanceSettings(); public final SingletonPortSettings SINGLETON_PORT = new SingletonPortSettings(); private final AbstractSettings[] ALL_SETTINGS = {COMPARE, COPY_TARGET, COPY, NEW_TAB, NEW_WINDOW, SINGLETON_INSTANCE, SINGLETON_PORT}; public StartupParameters(){} public boolean load(String[] parameters){ Options opts = new Options(); for(int i = 0; i < ALL_SETTINGS.length; i++){ opts.addOption(ALL_SETTINGS[i].getOption()); } try{ CommandLineParser parser = new BasicParser(); CommandLine cmd = parser.parse(opts, parameters, false); for(int i = 0; i < ALL_SETTINGS.length; i++){ ALL_SETTINGS[i].fillFrom(cmd); } return true; } catch(Exception ex){ System.err.println("Incorrect usage:" + ex.getMessage() + "\n"); new HelpFormatter().printHelp("jcmd", opts); return false; } } public static abstract class AbstractSettings{ private boolean configured = false; protected abstract Option getOption(); protected abstract void fillFrom(CommandLine commandLine); protected void raiseConfigured(){ configured = true; } /** * Check whether this setting instance is configured properly(i.e. whether * correct parameters were passed in order to use this setting). * * @return Whether the setting was correctly configured */ public boolean configured(){ return configured; } protected FileObject getFileObject(String str, boolean mustExist, boolean checkDir) throws FileSystemException{ File file = new File(str); if(mustExist){ if(!file.exists()){ log("file does not exist:" + str); return null; } if(checkDir && (!file.isDirectory())){ log("file is not a directory:" + str); return null; } } return VfsManagerExtension.getInstance().getManager().toFileObject(file); } protected FileObject[] getFiles(String[] names, boolean mustExist, boolean checkDir){ java.util.List files = new ArrayList(); for(int i = 0; i < names.length; i++){ try{ FileObject file = getFileObject(names[i], mustExist, checkDir); if(null != file){ files.add(file); } } catch(FileSystemException ex){ log("Error getting file:" + names[i] + ":" + ex); } } return (FileObject[])files.toArray(new FileObject[files.size()]); } protected void log(String message){ System.out.println(message); } } public static class NewTabSettings extends AbstractSettings{ private FileObject leftRoot; private FileObject rightRoot; public FileObject getLeftRoot() { return leftRoot; } public FileObject getRightRoot() { return rightRoot; } protected Option getOption(){ return OptionBuilder.withArgName("leftPanelRoot [rightPanelRoot]") .hasArg() .withValueSeparator(' ') .hasOptionalArgs(2) .withDescription("Open new tab given the roots") .create("newTab"); } protected void fillFrom(CommandLine commandLine){ String[] str = commandLine.getOptionValues("newTab"); if((str == null) || (str.length == 0)){ return; } try{ leftRoot = getFileObject(str[0], true, true); if(leftRoot == null){ return; } if(str.length > 1){ rightRoot = getFileObject(str[1], true, true); } raiseConfigured(); } catch(FileSystemException ex){ log("Error resolving files:" + ex); } } } public static class NewWindowSettings extends AbstractSettings{ private FileObject leftRoot; private FileObject rightRoot; public FileObject getLeftRoot() { return leftRoot; } public FileObject getRightRoot() { return rightRoot; } protected Option getOption(){ return OptionBuilder.withArgName("leftPanelRoot [rightPanelRoot]") .hasArg() .withValueSeparator(' ') .hasOptionalArgs(2) .withDescription("Open new JCommander window given the roots") .create("newWindow"); } protected void fillFrom(CommandLine commandLine){ String[] str = commandLine.getOptionValues("newWindow"); if((str == null) || (str.length == 0)){ return; } try{ leftRoot = getFileObject(str[0], true, true); if(leftRoot == null){ return; } if(str.length > 1){ rightRoot = getFileObject(str[1], true, true); } raiseConfigured(); } catch(FileSystemException ex){ log("Error resolving files:" + ex); } } } public static class CopyFileSettings extends AbstractSettings{ private FileObject[] roots; public FileObject[] getRoots() { return roots; } protected Option getOption(){ return OptionBuilder.withArgName("file(,file)*") .hasArg() .withValueSeparator(',') .hasOptionalArgs() .withDescription("Default copy target for copy operation") .create("copyFiles"); } protected void fillFrom(CommandLine commandLine){ String[] str = commandLine.getOptionValues("copyFiles"); if((str == null) || (str.length == 0)){ return; } FileObject[] files = getFiles(str, true, false); if(files.length > 0){ roots = files; raiseConfigured(); } } } public static class CopyDefaultTargetSettings extends AbstractSettings{ private FileObject file; public FileObject getFile() { return file; } protected Option getOption(){ return OptionBuilder.withArgName("file") .hasArg() .hasOptionalArgs(1) .withDescription("Default copy target for copy operation") .create("copyDefaultTarget"); } protected void fillFrom(CommandLine commandLine){ String[] str = commandLine.getOptionValues("copyDefaultTarget"); if((str == null) || (str.length == 0)){ return; } try{ file = getFileObject(str[0], true, true); if(file == null){ return; } raiseConfigured(); } catch(FileSystemException ex){ log("Error resolving files:" + ex); } } } public static class CompareFileSettings extends AbstractSettings{ private FileObject left; private FileObject right; private FileObject ancestor; public FileObject getAncestor() { return ancestor; } public FileObject getLeft() { return left; } public FileObject getRight() { return right; } protected Option getOption(){ return OptionBuilder.withArgName("file,file[,file]*") .hasArg() .withValueSeparator(',') .hasOptionalArgs() .withDescription("Compare files") .create("compareFiles"); } protected void fillFrom(CommandLine commandLine){ String[] str = commandLine.getOptionValues("compareFiles"); if((str == null) || (str.length < 2)){ return; } FileObject[] files = getFiles(str, true, false); if(files.length >= 2){ left = files[0]; right = files[1]; if(files.length > 2){ ancestor = files[2]; } raiseConfigured(); } } } public static class SingletonPortSettings extends AbstractSettings{ private int startPort; private int endPort; public int getEndPort() { return endPort; } public int getStartPort() { return startPort; } protected Option getOption(){ return OptionBuilder.withArgName("min-max") .hasArg() .withValueSeparator('-') .hasOptionalArgs(2) .withDescription("Singleton server port range") .create("singletonPort"); } protected void fillFrom(CommandLine commandLine){ String[] str = commandLine.getOptionValues("singletonPort"); if((str == null) || (str.length < 2)){ return; } int p1 = parse(str[0]); int p2 = parse(str[1]); if((p1 <= 0) || (p1 <= 0) || (p1 >= p2)){ log("Invalid range"); return; } startPort = p1; endPort = p2; raiseConfigured(); } private int parse(String s){ try{ return Integer.parseInt(s); } catch(Exception ex){ log("Cannot parse:" + s); return 0; } } } public static class SingletonInstanceSettings extends AbstractSettings{ private boolean noSingleton = false; public boolean isNoSingleton() { return noSingleton; } protected Option getOption(){ return new Option("noSingleton", false, "Do not activate/check singleton instance"); } protected void fillFrom(CommandLine commandLine){ noSingleton = commandLine.hasOption("noSingleton"); if(noSingleton){ raiseConfigured(); } } } } Index: JCmdWorkbenchAdvisor.java =================================================================== RCS file: /cvsroot/jcommander/plugins/org.jcommander.ui.app/src/org/jcommander/ui/app/JCmdWorkbenchAdvisor.java,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** JCmdWorkbenchAdvisor.java 27 Jun 2006 18:46:50 -0000 1.37 --- JCmdWorkbenchAdvisor.java 11 Jul 2006 14:45:14 -0000 1.38 *************** *** 36,39 **** --- 36,40 ---- protected String actualCaption; private String captionPrefix; + private StartupParameters startupParameters; public JCmdWorkbenchAdvisor(String captionPrefix) { *************** *** 80,83 **** --- 81,89 ---- } + public void setStartupParameters(StartupParameters startupParameters){ + this.startupParameters = startupParameters; + } + + /** * @param configurer *************** *** 146,149 **** --- 152,158 ---- } } + if(null != startupParameters){ + JcmdManager.getInstance().applyStartupParameters(startupParameters); + } } |