/** * Write the version of the metadata into a known file overwriting any existing file contents. * Writing the version file isn't really crucial, so the function is silent about failure */ private static void writeWorkspaceVersion() { Location instanceLoc = Platform.getInstanceLocation(); if (instanceLoc == null || instanceLoc.isReadOnly()) { return; } File versionFile = getVersionFile(instanceLoc.getURL(), true); if (versionFile == null) { return; } OutputStream output = null; try { String versionLine = WORKSPACE_VERSION_KEY + '=' + WORKSPACE_VERSION_VALUE; output = new FileOutputStream(versionFile); output.write(versionLine.getBytes(StandardCharsets.UTF_8)); } catch (IOException e) { Logger logger = new WorkbenchLogger(PLUGIN_ID); logger.error(e); } finally { try { if (output != null) { output.close(); } } catch (IOException e) { // do nothing } } }
public static File getInstallRoot() throws Exception { Location installLocation = Platform.getInstallLocation(); if (installLocation == null) return null; log.trace("get install location {}", installLocation.getURL()); File installDir = new File(installLocation.getURL().getFile()); return installDir; }
/** * Simplified copy of IDEAplication processing that does not offer to choose a workspace location. */ private boolean checkInstanceLocation( Location instanceLocation, Shell shell, IEclipseContext context) { // Eclipse has been run with -data @none or -data @noDefault options so // we don't need to validate the location if (instanceLocation == null && Boolean.FALSE.equals(context.get(IWorkbench.PERSIST_STATE))) { return true; } if (instanceLocation == null) { MessageDialog.openError( shell, WorkbenchSWTMessages.IDEApplication_workspaceMandatoryTitle, WorkbenchSWTMessages.IDEApplication_workspaceMandatoryMessage); return false; } // -data "/valid/path", workspace already set if (instanceLocation.isSet()) { // make sure the meta data version is compatible (or the user // has // chosen to overwrite it). if (!checkValidWorkspace(shell, instanceLocation.getURL())) { return false; } // at this point its valid, so try to lock it and update the // metadata version information if successful try { if (instanceLocation.lock()) { writeWorkspaceVersion(); return true; } // we failed to create the directory. // Two possibilities: // 1. directory is already in use // 2. directory could not be created File workspaceDirectory = new File(instanceLocation.getURL().getFile()); if (workspaceDirectory.exists()) { MessageDialog.openError( shell, WorkbenchSWTMessages.IDEApplication_workspaceCannotLockTitle, WorkbenchSWTMessages.IDEApplication_workspaceCannotLockMessage); } else { MessageDialog.openError( shell, WorkbenchSWTMessages.IDEApplication_workspaceCannotBeSetTitle, WorkbenchSWTMessages.IDEApplication_workspaceCannotBeSetMessage); } } catch (IOException e) { Logger logger = new WorkbenchLogger(PLUGIN_ID); logger.error(e); MessageDialog.openError(shell, WorkbenchSWTMessages.InternalError, e.getMessage()); } return false; } return false; }
/* * Helper method to return the install location. Return null if it is unavailable. */ public static File getInstallLocation() { Location installLocation = ServiceHelper.getService( TestActivator.getContext(), Location.class, Location.INSTALL_FILTER); if (installLocation == null || !installLocation.isSet()) return null; URL url = installLocation.getURL(); if (url == null) return null; return URLUtil.toFile(url); }
/* * Do a look-up and return the OSGi install area if it is set. */ public static URL getOSGiInstallArea() { Location location = (Location) ServiceHelper.getService( Activator.getContext(), Location.class.getName(), Location.INSTALL_FILTER); if (location == null) return null; if (!location.isSet()) return null; return location.getURL(); }
/* * Helper method to return the eclipse.home location. Return * null if it is unavailable. */ public static File getEclipseHome() { Location eclipseHome = (Location) ServiceHelper.getService( Activator.getContext(), Location.class.getName(), Location.ECLIPSE_HOME_FILTER); if (eclipseHome == null || !eclipseHome.isSet()) return null; URL url = eclipseHome.getURL(); if (url == null) return null; return URLUtil.toFile(url); }
/** * Answer the configuration location for this plug-in. * * @param none * @return URI The GEM plugin's configuration directory (not <code>null</code>) */ public URI getConfigDir() { final Location location = Platform.getConfigurationLocation(); if (location != null) { final URL configURL = location.getURL(); if (configURL != null && configURL.getProtocol().startsWith("file")) { // $NON-NLS-1$ try { return configURL.toURI(); } catch (final URISyntaxException e) { GemUtilities.logExceptionDetail(e); } } } return null; }
private void doSetup() throws Exception { // root of workspace directory Location platformLocation = Platform.getInstanceLocation(); ProjectUnzipUtility unzipUtil = new ProjectUnzipUtility(); File zipFile = FileUtil.makeFileFor( ProjectUnzipUtility.PROJECT_ZIPS_FOLDER, fZipFileName, ProjectUnzipUtility.PROJECT_ZIPS_FOLDER); unzipUtil.unzipAndImport(zipFile, platformLocation.getURL().getFile()); unzipUtil.initJavaProject(fProjectName); }
public URL getConfigURL() { Filter filter = null; if (configTracker == null) { try { filter = bundleContext.createFilter(Location.CONFIGURATION_FILTER); } catch (InvalidSyntaxException e) { // should never happen } configTracker = new ServiceTracker(bundleContext, filter, null); configTracker.open(); } Location location = (Location) configTracker.getService(); if (location == null) return null; return location.getURL(); }
/** * Write the version of the metadata into a known file overwriting any existing file contents. * Writing the version file isn't really crucial, so the function is silent about failure */ private static void writeWorkspaceVersion() { if (WORKSPACE_CHECK_REFERENCE_BUNDLE_VERSION == null) { // no reference bundle installed, no check possible return; } Location instanceLoc = Platform.getInstanceLocation(); if (instanceLoc == null || instanceLoc.isReadOnly()) { return; } File versionFile = getVersionFile(instanceLoc.getURL(), true); if (versionFile == null) { return; } OutputStream output = null; try { output = new FileOutputStream(versionFile); Properties props = new Properties(); // write new property props.setProperty( WORKSPACE_CHECK_REFERENCE_BUNDLE_NAME, WORKSPACE_CHECK_REFERENCE_BUNDLE_VERSION.toString()); // write legacy property with an incremented version, // so that pre-4.4 IDEs will also warn about the workspace props.setProperty( WORKSPACE_CHECK_REFERENCE_BUNDLE_NAME_LEGACY, WORKSPACE_CHECK_LEGACY_VERSION_INCREMENTED); props.store(output, null); } catch (IOException e) { IDEWorkbenchPlugin.log( "Could not write version file", //$NON-NLS-1$ StatusUtil.newStatus(IStatus.ERROR, e.getMessage(), e)); } finally { try { if (output != null) { output.close(); } } catch (IOException e) { // do nothing } } }
private MApplication loadApplicationModel( IApplicationContext appContext, IEclipseContext eclipseContext) { MApplication theApp = null; Location instanceLocation = WorkbenchSWTActivator.getDefault().getInstanceLocation(); URI applicationModelURI = determineApplicationModelURI(appContext); eclipseContext.set(E4Workbench.INITIAL_WORKBENCH_MODEL_URI, applicationModelURI); // Save and restore Boolean saveAndRestore = getArgValue(IWorkbench.PERSIST_STATE, appContext, false) .map(value -> Boolean.parseBoolean(value)) .orElse(Boolean.TRUE); eclipseContext.set(IWorkbench.PERSIST_STATE, saveAndRestore); // when -data @none or -data @noDefault options if (instanceLocation != null && instanceLocation.getURL() != null) { eclipseContext.set(E4Workbench.INSTANCE_LOCATION, instanceLocation); } else { eclipseContext.set(IWorkbench.PERSIST_STATE, false); } // Persisted state Boolean clearPersistedState = getArgValue(IWorkbench.CLEAR_PERSISTED_STATE, appContext, true) .map(value -> Boolean.parseBoolean(value)) .orElse(Boolean.FALSE); eclipseContext.set(IWorkbench.CLEAR_PERSISTED_STATE, clearPersistedState); String resourceHandler = getArgValue(IWorkbench.MODEL_RESOURCE_HANDLER, appContext, false) .orElse("bundleclass://org.eclipse.e4.ui.workbench/" + ResourceHandler.class.getName()); IContributionFactory factory = eclipseContext.get(IContributionFactory.class); handler = (IModelResourceHandler) factory.create(resourceHandler, eclipseContext); eclipseContext.set(IModelResourceHandler.class, handler); Resource resource = handler.loadMostRecentModel(); theApp = (MApplication) resource.getContents().get(0); return theApp; }
private void importSamples(IProject project) throws InvocationTargetException, InterruptedException, CoreException { Location installLocation = Platform.getInstallLocation(); if (installLocation == null) { return; } String installFileStr = installLocation.getURL().getFile(); File installFile = new File(installFileStr, "sample_data"); if (installFile.isDirectory()) { IFolder sampleData = project.getFolder("sample_data"); sampleData.create(true, true, new NullProgressMonitor()); ImportOperation importOperation = new ImportOperation( sampleData.getFullPath(), installFile, FileSystemStructureProvider.INSTANCE, overwriteQuery); importOperation.setCreateContainerStructure(false); importOperation.run(new NullProgressMonitor()); } }
@Override public Object start(IApplicationContext applicationContext) throws Exception { // set the display name before the Display is // created to ensure the app name is used in any // platform menus, etc. See // https://bugs.eclipse.org/bugs/show_bug.cgi?id=329456#c14 IProduct product = Platform.getProduct(); if (product != null && product.getName() != null) { Display.setAppName(product.getName()); } Display display = getApplicationDisplay(); Location instanceLocation = null; try { E4Workbench workbench = createE4Workbench(applicationContext, display); instanceLocation = (Location) workbench.getContext().get(E4Workbench.INSTANCE_LOCATION); Shell shell = display.getActiveShell(); if (shell == null) { shell = new Shell(); // place it off so it's not visible shell.setLocation(0, 10000); } if (!checkInstanceLocation(instanceLocation, shell, workbench.getContext())) return EXIT_OK; // Create and run the UI (if any) workbench.createAndRunUI(workbench.getApplication()); saveModel(); workbench.close(); if (workbench.isRestart()) { return EXIT_RESTART; } return EXIT_OK; } finally { if (display != null) display.dispose(); if (instanceLocation != null) instanceLocation.release(); } }
public BundleInfo[] loadConfiguration(BundleContext context, String infoPath) throws IOException { URI installArea = EquinoxUtils.getInstallLocationURI(context); URL configURL = null; InputStream stream = null; if (infoPath == null) { SimpleConfiguratorImpl simpleImpl = new SimpleConfiguratorImpl(context, null); configURL = simpleImpl.getConfigurationURL(); } else { // == (not .equals) use the default source info, currently SOURCE_INFO_PATH boolean defaultSource = (infoPath == SOURCE_INFO); if (defaultSource) infoPath = SOURCE_INFO_PATH; Location configLocation = EquinoxUtils.getConfigLocation(context); configURL = configLocation.getDataArea(infoPath); try { stream = configURL.openStream(); } catch (FileNotFoundException e) { if (defaultSource && configLocation.getParentLocation() != null) { configURL = configLocation.getParentLocation().getDataArea(infoPath); } else { return new BundleInfo[0]; } } } if (configURL == null) return new BundleInfo[0]; else if (stream == null) { try { stream = configURL.openStream(); } catch (FileNotFoundException e) { return new BundleInfo[0]; } } // stream will be closed return loadConfiguration(stream, installArea); }
// @Override public Object startX(IApplicationContext context) throws Exception { final Display display = PlatformUI.createDisplay(); final TakariWorkbenchAdvisor advisor = new TakariWorkbenchAdvisor(); display.addListener(SWT.OpenDocument, advisor.getOpenDocumentHandler()); // FIXME: Check unhandled arguments for a pom.xml file and treat like an // OpenDocument for (String arg : (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS)) { File f = new File(arg); if (f.exists()) { if ("pom.xml".equals(f.getName())) { Event e = new Event(); e.text = arg; advisor.getOpenDocumentHandler().handleEvent(e); } else if (f.isDirectory() && (f = new File(f, "pom.xml")).exists()) { Event e = new Event(); e.text = f.getPath(); advisor.getOpenDocumentHandler().handleEvent(e); } } } try { int returnCode = PlatformUI.createAndRunWorkbench(display, advisor); if (returnCode == PlatformUI.RETURN_RESTART) { return IApplication.EXIT_RESTART; } return IApplication.EXIT_OK; } finally { Location loc = Platform.getInstanceLocation(); if (loc != null) { loc.release(); } display.dispose(); } }
private void addIcon(String os, String value) { if (value == null) return; File iconFile = new File(value); if (!iconFile.isFile()) { // workspace Location instanceLocation = (Location) ServiceHelper.getService( Activator.getContext(), Location.class.getName(), Location.INSTANCE_FILTER); if (instanceLocation != null && instanceLocation.getURL() != null) { File workspace = URLUtil.toFile(instanceLocation.getURL()); if (workspace != null) iconFile = new File(workspace, value); } } if (!iconFile.isFile()) iconFile = new File(location.getParentFile(), value); Collection<String> list = icons.get(os); if (list == null) { list = new ArrayList<String>(6); icons.put(os, list); } list.add(iconFile.getAbsolutePath()); }
public EquinoxLogServices(EquinoxConfiguration environmentInfo, Location configuration) { String logFilePath = environmentInfo.getConfiguration(EclipseStarter.PROP_LOGFILE); if (logFilePath == null) { logFilePath = Long.toString(System.currentTimeMillis()) + EquinoxLogServices.LOG_EXT; } File logFile = new File(logFilePath); if (!logFile.isAbsolute()) { File configAreaDirectory = null; if (configuration != null) // TODO assumes the URL is a file: url configAreaDirectory = new File(configuration.getURL().getFile()); if (configAreaDirectory != null) { logFile = new File(configAreaDirectory, logFilePath); } else { logFile = null; } } boolean enabled = "true" .equals( environmentInfo.getConfiguration( PROP_LOG_ENABLED, "true")); // $NON-NLS-1$ //$NON-NLS-2$ if (logFile != null) { environmentInfo.setConfiguration(EclipseStarter.PROP_LOGFILE, logFile.getAbsolutePath()); logWriter = new EquinoxLogWriter(logFile, EQUINOX_LOGGER_NAME, enabled, environmentInfo); File perfLogFile = new File(logFile.getParentFile(), "performance.log"); // $NON-NLS-1$ perfWriter = new EquinoxLogWriter(perfLogFile, PERF_LOGGER_NAME, true, environmentInfo); } else { logWriter = new EquinoxLogWriter((Writer) null, EQUINOX_LOGGER_NAME, enabled, environmentInfo); perfWriter = new EquinoxLogWriter((Writer) null, PERF_LOGGER_NAME, true, environmentInfo); } if ("true" .equals(environmentInfo.getConfiguration(EclipseStarter.PROP_CONSOLE_LOG))) // $NON-NLS-1$ logWriter.setConsoleLog(true); logServiceManager = new LogServiceManager(logWriter, perfWriter); eclipseLogFactory = new EquinoxLogFactory(logWriter, logServiceManager); rootFrameworkLog = eclipseLogFactory.createFrameworkLog(null, logWriter); }
private static URL computeSharedConfigurationLocation() { String property = FrameworkProperties.getProperty(PROP_SHARED_CONFIG_AREA); if (property == null) return null; try { URL sharedConfigurationURL = LocationHelper.buildURL(property, true); if (sharedConfigurationURL == null) return null; if (sharedConfigurationURL.getPath().startsWith("/")) // $NON-NLS-1$ // absolute return sharedConfigurationURL; URL installURL = installLocation.getURL(); if (!sharedConfigurationURL.getProtocol().equals(installURL.getProtocol())) // different protocol return sharedConfigurationURL; sharedConfigurationURL = new URL(installURL, sharedConfigurationURL.getPath()); FrameworkProperties.setProperty( PROP_SHARED_CONFIG_AREA, sharedConfigurationURL.toExternalForm()); } catch (MalformedURLException e) { // do nothing here since it is basically impossible to get a bogus url } return null; }
/** Initializes the Location objects for the LocationManager. */ public static void initializeLocations() { // do install location initialization first since others may depend on it // assumes that the property is already set installLocation = buildLocation(PROP_INSTALL_AREA, null, "", true, false, null); // $NON-NLS-1$ // TODO not sure what the data area prefix should be here for the user area Location temp = buildLocation(PROP_USER_AREA_DEFAULT, null, "", false, false, null); // $NON-NLS-1$ URL defaultLocation = temp == null ? null : temp.getURL(); if (defaultLocation == null) defaultLocation = buildURL( new File(FrameworkProperties.getProperty(PROP_USER_HOME), "user").getAbsolutePath(), true); //$NON-NLS-1$ userLocation = buildLocation(PROP_USER_AREA, defaultLocation, "", false, false, null); // $NON-NLS-1$ temp = buildLocation( PROP_INSTANCE_AREA_DEFAULT, null, "", false, false, INSTANCE_DATA_AREA_PREFIX); //$NON-NLS-1$ defaultLocation = temp == null ? null : temp.getURL(); if (defaultLocation == null) defaultLocation = buildURL( new File(FrameworkProperties.getProperty(PROP_USER_DIR), "workspace") .getAbsolutePath(), true); //$NON-NLS-1$ instanceLocation = buildLocation( PROP_INSTANCE_AREA, defaultLocation, "", false, false, INSTANCE_DATA_AREA_PREFIX); //$NON-NLS-1$ mungeConfigurationLocation(); // compute a default but it is very unlikely to be used since main will have computed everything temp = buildLocation(PROP_CONFIG_AREA_DEFAULT, null, "", false, false, null); // $NON-NLS-1$ defaultLocation = temp == null ? null : temp.getURL(); if (defaultLocation == null && FrameworkProperties.getProperty(PROP_CONFIG_AREA) == null) // only compute the default if the configuration area property is not set defaultLocation = buildURL(computeDefaultConfigurationLocation(), true); configurationLocation = buildLocation(PROP_CONFIG_AREA, defaultLocation, "", false, false, null); // $NON-NLS-1$ // get the parent location based on the system property. This will have been set on the // way in either by the caller/user or by main. There will be no parent location if we are not // cascaded. URL parentLocation = computeSharedConfigurationLocation(); if (parentLocation != null && !parentLocation.equals(configurationLocation.getURL())) { Location parent = new BasicLocation(null, parentLocation, true, null); ((BasicLocation) configurationLocation).setParent(parent); } initializeDerivedConfigurationLocations(); if (FrameworkProperties.getProperty(PROP_HOME_LOCATION_AREA) == null) { String eclipseLauncher = FrameworkProperties.getProperty(PROP_LAUNCHER); String eclipseHomeLocationPath = getEclipseHomeLocation(eclipseLauncher); if (eclipseHomeLocationPath != null) FrameworkProperties.setProperty(PROP_HOME_LOCATION_AREA, eclipseHomeLocationPath); } // if eclipse.home.location is not set then default to osgi.install.area if (FrameworkProperties.getProperty(PROP_HOME_LOCATION_AREA) == null && FrameworkProperties.getProperty(PROP_INSTALL_AREA) != null) FrameworkProperties.setProperty( PROP_HOME_LOCATION_AREA, FrameworkProperties.getProperty(PROP_INSTALL_AREA)); eclipseHomeLocation = buildLocation(PROP_HOME_LOCATION_AREA, null, "", true, true, null); // $NON-NLS-1$ }
/** 修改产品 ini 文件中的语言 */ private void changeLocale(String locale) { Location configArea = Platform.getInstallLocation(); if (configArea == null) { return; } URL location = null; try { location = new URL( configArea.getURL().toExternalForm() + "configuration" + File.separator + "config.ini"); } catch (MalformedURLException e) { // This should never happen } // System.out.println("LanguageSwitchHandler.loadConfigurationInfo(): " // + location); try { String fileName = location.getFile(); File file = new File(fileName); fileName += ".bak"; file.renameTo(new File(fileName)); BufferedReader in = new BufferedReader(new FileReader(fileName)); BufferedWriter out = new BufferedWriter(new FileWriter(location.getFile())); try { String line = in.readLine(); while (line != null) { if (line.startsWith("osgi.nl=")) { out.write("osgi.nl=" + locale); } else { out.write(line); } out.newLine(); line = in.readLine(); } out.flush(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } File tmpFile = new File(location.getFile() + ".bak"); if (tmpFile.exists()) { tmpFile.delete(); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
private static String getConfiguration() throws IOException { Location configLocation = Platform.getConfigurationLocation(); URL configURL = configLocation.getURL(); String configuration = FileLocator.resolve(configURL).getPath(); return configuration; }
/** @return the AUTAgent installation directory */ public static File getInstallDir() { Location installLoc = Platform.getInstallLocation(); String installDir = installLoc.getURL().getFile(); return new File(installDir); }
/** * Returns the File object under the configuration location used for the OSGi configuration * * @return the OSGi configuration directory */ public static File getOSGiConfigurationDir() { // TODO assumes the URL is a file: url return new File( configurationLocation.getURL().getFile(), FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME); }
/* * (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext context) */ public Object start(IApplicationContext context) throws Exception { System.out.println("S2MaterializerApplication.start"); Display display = PlatformUI.createDisplay(); try { // look and see if there's a splash shell we can parent off of Shell shell = WorkbenchPlugin.getSplashShell(display); if (shell != null) { // should should set the icon and message for this shell to be the // same as the chooser dialog - this will be the guy that lives in // the task bar and without these calls you'd have the default icon // with no message. shell.setText(ChooseWorkspaceDialog.getWindowTitle()); shell.setImages(Dialog.getDefaultImages()); } // // if ( !checkInstanceLocation( shell ) ) // { // WorkbenchPlugin.unsetSplashShell( display ); // Platform.endSplash(); // return EXIT_OK; // } String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); String s2ProjectURL = null; String nexusBaseURL = null; for (int i = 0; i < args.length - 1; i++) { if (ARG_DESCRIPTOR_URL.equals(args[i])) { s2ProjectURL = args[i + 1]; } if (ARG_NEXUS_BASE_URL.equals(args[i])) { nexusBaseURL = args[i + 1]; } } if (s2ProjectURL == null || nexusBaseURL == null) { System.err.println( "Syntax: " + ARG_DESCRIPTOR_URL + " <descriptor url> " + ARG_NEXUS_BASE_URL + " <nexus server url>"); return EXIT_OK; } NexusFacade.setMainNexusServerData( nexusBaseURL, null /* username */, null /* password */, new NullProgressMonitor()); // Dump some useful debug info :) System.out.println(PROP_LAUNCHER + "=" + System.getProperty(PROP_LAUNCHER)); System.out.println(PROP_VM + "=" + System.getProperty(PROP_VM)); System.out.println(PROP_VMARGS + "=" + System.getProperty(PROP_VMARGS)); System.out.println(PROP_COMMANDS + "=" + System.getProperty(PROP_COMMANDS)); // Save the current workspace location in the eclipse preferences Location instanceLoc = Platform.getInstanceLocation(); File workspaceFile = new File(instanceLoc.getURL().getFile()); Preferences node = new ConfigurationScope().getNode(IDEWorkbenchPlugin.IDE_WORKBENCH); node.put(IDE.Preferences.RECENT_WORKSPACES, workspaceFile.getCanonicalPath()); node.putInt( IDE.Preferences.RECENT_WORKSPACES_PROTOCOL, PERS_ENCODING_VERSION_CONFIG_PREFS_NO_COMMAS); node.flush(); // create the workbench with this advisor and run it until it exits // N.B. createWorkbench remembers the advisor, and also registers // the workbench globally so that all UI plug-ins can find it using // PlatformUI.getWorkbench() or AbstractUIPlugin.getWorkbench() int returnCode = PlatformUI.createAndRunWorkbench( display, new S2MaterializerWorkbenchAdvisor(s2ProjectURL)); // the workbench doesn't support relaunch yet (bug 61809) so // for now restart is used, and exit data properties are checked // here to substitute in the relaunch return code if needed if (returnCode != PlatformUI.RETURN_RESTART) { return EXIT_OK; } // if the exit code property has been set to the relaunch code, then // return that code now, otherwise this is a normal restart String command_line = buildCommandLine(); System.out.println("New command line=" + command_line); System.setProperty(PROP_EXIT_DATA, command_line); System.out.println(PROP_EXIT_DATA + "=" + System.getProperty(PROP_EXIT_DATA)); System.setProperty(PROP_EXIT_CODE, "" + Integer.toString(EXIT_RELAUNCH)); System.out.println(PROP_EXIT_CODE + "=" + System.getProperty(PROP_EXIT_CODE)); return EXIT_RELAUNCH; } finally { if (display != null) { display.dispose(); } Location instanceLoc = Platform.getInstanceLocation(); if (instanceLoc != null) instanceLoc.release(); } }
/* * (non-Javadoc) * * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext context) */ @Override public Object start(IApplicationContext appContext) throws Exception { // Display display = createDisplay(); // processor must be created before we start event loop // DelayedEventsProcessor processor = new DelayedEventsProcessor(display); final Display display = PlatformUI.createDisplay(); final TakariWorkbenchAdvisor advisor = new TakariWorkbenchAdvisor(); display.addListener(SWT.OpenDocument, advisor.getOpenDocumentHandler()); // FIXME: Check unhandled arguments for a pom.xml file and treat like an // OpenDocument for (String arg : (String[]) appContext.getArguments().get(IApplicationContext.APPLICATION_ARGS)) { File f = new File(arg); if (f.exists()) { if ("pom.xml".equals(f.getName())) { Event e = new Event(); e.text = arg; advisor.getOpenDocumentHandler().handleEvent(e); } else if (f.isDirectory() && (f = new File(f, "pom.xml")).exists()) { Event e = new Event(); e.text = f.getPath(); advisor.getOpenDocumentHandler().handleEvent(e); } } } try { // look and see if there's a splash shell we can parent off of Shell shell = WorkbenchPlugin.getSplashShell(display); if (shell != null) { // should should set the icon and message for this shell to be the // same as the chooser dialog - this will be the guy that lives in // the task bar and without these calls you'd have the default icon // with no message. shell.setText(ChooseWorkspaceDialog.getWindowTitle()); shell.setImages(Window.getDefaultImages()); } Object instanceLocationCheck = checkInstanceLocation(shell, appContext.getArguments()); if (instanceLocationCheck != null) { WorkbenchPlugin.unsetSplashShell(display); appContext.applicationRunning(); return instanceLocationCheck; } // create the workbench with this advisor and run it until it exits // N.B. createWorkbench remembers the advisor, and also registers // the workbench globally so that all UI plug-ins can find it using // PlatformUI.getWorkbench() or AbstractUIPlugin.getWorkbench() // int returnCode = PlatformUI.createAndRunWorkbench(display, new // TakariWorkbenchAdvisor(processor)); int returnCode = PlatformUI.createAndRunWorkbench(display, advisor); // the workbench doesn't support relaunch yet (bug 61809) so // for now restart is used, and exit data properties are checked // here to substitute in the relaunch return code if needed if (returnCode != PlatformUI.RETURN_RESTART) { return EXIT_OK; } // if the exit code property has been set to the relaunch code, then // return that code now, otherwise this is a normal restart return EXIT_RELAUNCH.equals(Integer.getInteger(PROP_EXIT_CODE)) ? EXIT_RELAUNCH : EXIT_RESTART; } finally { if (display != null) { display.dispose(); } Location instanceLoc = Platform.getInstanceLocation(); if (instanceLoc != null) { instanceLoc.release(); } } }
/** * Return <code>null</code> if a valid workspace path has been set and an exit code otherwise. * Prompt for and set the path if possible and required. * * @param applicationArguments the command line arguments * @return <code>null</code> if a valid instance location has been set and an exit code otherwise */ private Object checkInstanceLocation(Shell shell, Map applicationArguments) { // -data @none was specified but an ide requires workspace Location instanceLoc = Platform.getInstanceLocation(); if (instanceLoc == null) { MessageDialog.openError( shell, IDEWorkbenchMessages.IDEApplication_workspaceMandatoryTitle, IDEWorkbenchMessages.IDEApplication_workspaceMandatoryMessage); return EXIT_OK; } // -data "/valid/path", workspace already set if (instanceLoc.isSet()) { // make sure the meta data version is compatible (or the user has // chosen to overwrite it). if (!checkValidWorkspace(shell, instanceLoc.getURL())) { return EXIT_OK; } // at this point its valid, so try to lock it and update the // metadata version information if successful try { if (instanceLoc.lock()) { writeWorkspaceVersion(); return null; } // we failed to create the directory. // Two possibilities: // 1. directory is already in use // 2. directory could not be created File workspaceDirectory = new File(instanceLoc.getURL().getFile()); if (workspaceDirectory.exists()) { if (isDevLaunchMode(applicationArguments)) { return EXIT_WORKSPACE_LOCKED; } MessageDialog.openError( shell, IDEWorkbenchMessages.IDEApplication_workspaceCannotLockTitle, NLS.bind( IDEWorkbenchMessages.IDEApplication_workspaceCannotLockMessage, workspaceDirectory.getAbsolutePath())); } else { MessageDialog.openError( shell, IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetTitle, IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetMessage); } } catch (IOException e) { IDEWorkbenchPlugin.log( "Could not obtain lock for workspace location", //$NON-NLS-1$ e); MessageDialog.openError(shell, IDEWorkbenchMessages.InternalError, e.getMessage()); } return EXIT_OK; } // -data @noDefault or -data not specified, prompt and set ChooseWorkspaceData launchData = new ChooseWorkspaceData(instanceLoc.getDefault()); boolean force = false; while (true) { URL workspaceUrl = promptForWorkspace(shell, launchData, force); if (workspaceUrl == null) { return EXIT_OK; } // if there is an error with the first selection, then force the // dialog to open to give the user a chance to correct force = true; try { // the operation will fail if the url is not a valid // instance data area, so other checking is unneeded if (instanceLoc.set(workspaceUrl, true)) { launchData.writePersistedData(); writeWorkspaceVersion(); return null; } } catch (IllegalStateException e) { MessageDialog.openError( shell, IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetTitle, IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetMessage); return EXIT_OK; } catch (IOException e) { MessageDialog.openError( shell, IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetTitle, IDEWorkbenchMessages.IDEApplication_workspaceCannotBeSetMessage); } // by this point it has been determined that the workspace is // already in use -- force the user to choose again MessageDialog.openError( shell, IDEWorkbenchMessages.IDEApplication_workspaceInUseTitle, NLS.bind( IDEWorkbenchMessages.IDEApplication_workspaceInUseMessage, workspaceUrl.getFile())); } }