Search in sources :

Example 11 with Logger

use of org.eclipse.e4.core.services.log.Logger in project eclipse.platform.ui by eclipse-platform.

the class E4Application method writeWorkspaceVersion.

/**
 * 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
        }
    }
}
Also used : WorkbenchLogger(org.eclipse.e4.ui.internal.workbench.WorkbenchLogger) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) Logger(org.eclipse.e4.core.services.log.Logger) WorkbenchLogger(org.eclipse.e4.ui.internal.workbench.WorkbenchLogger) File(java.io.File) Location(org.eclipse.osgi.service.datalocation.Location)

Example 12 with Logger

use of org.eclipse.e4.core.services.log.Logger in project eclipse.platform.ui by eclipse-platform.

the class E4Application method determineApplicationModelURI.

/**
 * @param appContext
 * @return
 */
private URI determineApplicationModelURI(IApplicationContext appContext) {
    Optional<String> appModelPath = getArgValue(IWorkbench.XMI_URI_ARG, appContext, false);
    String appModelPathValue = appModelPath.filter(path -> !path.isEmpty()).orElseGet(() -> {
        Bundle brandingBundle = appContext.getBrandingBundle();
        if (brandingBundle != null) {
            return brandingBundle.getSymbolicName() + "/" + E4Application.APPLICATION_MODEL_PATH_DEFAULT;
        } else {
            Logger logger = new WorkbenchLogger(PLUGIN_ID);
            // $NON-NLS-1$
            logger.error(new Exception(), "applicationXMI parameter not set and no branding plugin defined. ");
        }
        return null;
    });
    URI applicationModelURI = null;
    // check if the appModelPath is already a platform-URI and if so use it
    if (URIHelper.isPlatformURI(appModelPathValue)) {
        applicationModelURI = URI.createURI(appModelPathValue, true);
    } else {
        applicationModelURI = URI.createPlatformPluginURI(appModelPathValue, true);
    }
    return applicationModelURI;
}
Also used : ContextInjectionFactory(org.eclipse.e4.core.contexts.ContextInjectionFactory) Notification(org.eclipse.emf.common.notify.Notification) WorkbenchSWTMessages(org.eclipse.e4.ui.workbench.swt.internal.copy.WorkbenchSWTMessages) ResourceHandler(org.eclipse.e4.ui.internal.workbench.ResourceHandler) URIHelper(org.eclipse.e4.ui.internal.workbench.URIHelper) IServiceConstants(org.eclipse.e4.ui.services.IServiceConstants) URL(java.net.URL) RegistryFactory(org.eclipse.core.runtime.RegistryFactory) PreSave(org.eclipse.e4.ui.workbench.lifecycle.PreSave) ActivePartLookupFunction(org.eclipse.e4.ui.internal.workbench.ActivePartLookupFunction) PostWorkbenchClose(org.eclipse.e4.ui.workbench.lifecycle.PostWorkbenchClose) ProcessRemovals(org.eclipse.e4.ui.workbench.lifecycle.ProcessRemovals) ReflectionContributionFactory(org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory) Location(org.eclipse.osgi.service.datalocation.Location) PlaceholderResolver(org.eclipse.e4.ui.internal.workbench.PlaceholderResolver) Locale(java.util.Locale) IExtensionRegistry(org.eclipse.core.runtime.IExtensionRegistry) ESelectionService(org.eclipse.e4.ui.workbench.modeling.ESelectionService) CSSStyleDeclaration(org.w3c.dom.css.CSSStyleDeclaration) MAddon(org.eclipse.e4.ui.model.application.MAddon) Bundle(org.osgi.framework.Bundle) ILoggerProvider(org.eclipse.e4.core.services.log.ILoggerProvider) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) MApplication(org.eclipse.e4.ui.model.application.MApplication) Realm(org.eclipse.core.databinding.observable.Realm) IStylingEngine(org.eclipse.e4.ui.services.IStylingEngine) ExceptionHandler(org.eclipse.e4.ui.internal.workbench.ExceptionHandler) PostContextCreate(org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate) NLS(org.eclipse.osgi.util.NLS) IExceptionHandler(org.eclipse.e4.ui.workbench.IExceptionHandler) IModelResourceHandler(org.eclipse.e4.ui.workbench.IModelResourceHandler) EObject(org.eclipse.emf.ecore.EObject) Display(org.eclipse.swt.widgets.Display) StandardCharsets(java.nio.charset.StandardCharsets) List(java.util.List) Window(org.eclipse.jface.window.Window) DisplayRealm(org.eclipse.jface.databinding.swt.DisplayRealm) EclipseAdapter(org.eclipse.e4.core.internal.services.EclipseAdapter) BasicPackageImpl(org.eclipse.e4.ui.model.application.ui.basic.impl.BasicPackageImpl) IWorkbench(org.eclipse.e4.ui.workbench.IWorkbench) SWT(org.eclipse.swt.SWT) IProduct(org.eclipse.core.runtime.IProduct) EPlaceholderResolver(org.eclipse.e4.ui.workbench.modeling.EPlaceholderResolver) Resource(org.eclipse.emf.ecore.resource.Resource) Optional(java.util.Optional) DisplayUISynchronize(org.eclipse.e4.ui.workbench.swt.DisplayUISynchronize) IApplicationContext(org.eclipse.equinox.app.IApplicationContext) EclipseContextFactory(org.eclipse.e4.core.contexts.EclipseContextFactory) TranslationService(org.eclipse.e4.core.services.translation.TranslationService) URI(org.eclipse.emf.common.util.URI) IContributionFactory(org.eclipse.e4.core.services.contributions.IContributionFactory) UiPackageImpl(org.eclipse.e4.ui.model.application.ui.impl.UiPackageImpl) Logger(org.eclipse.e4.core.services.log.Logger) DefaultLoggerProvider(org.eclipse.e4.ui.internal.workbench.DefaultLoggerProvider) SelectionAggregator(org.eclipse.e4.ui.internal.workbench.SelectionAggregator) ContextFunction(org.eclipse.e4.core.contexts.ContextFunction) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) RunAndTrack(org.eclipse.e4.core.contexts.RunAndTrack) SelectionServiceImpl(org.eclipse.e4.ui.internal.workbench.SelectionServiceImpl) IApplication(org.eclipse.equinox.app.IApplication) MWindow(org.eclipse.e4.ui.model.application.ui.basic.MWindow) OutputStream(java.io.OutputStream) ActiveChildLookupFunction(org.eclipse.e4.ui.internal.workbench.ActiveChildLookupFunction) Properties(java.util.Properties) Shell(org.eclipse.swt.widgets.Shell) E4Workbench(org.eclipse.e4.ui.internal.workbench.E4Workbench) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) WorkbenchLogger(org.eclipse.e4.ui.internal.workbench.WorkbenchLogger) FileInputStream(java.io.FileInputStream) File(java.io.File) UISynchronize(org.eclipse.e4.ui.di.UISynchronize) TranslationProviderFactory(org.eclipse.e4.core.services.translation.TranslationProviderFactory) ProcessAdditions(org.eclipse.e4.ui.workbench.lifecycle.ProcessAdditions) EModelService(org.eclipse.e4.ui.workbench.modeling.EModelService) MessageBox(org.eclipse.swt.widgets.MessageBox) Platform(org.eclipse.core.runtime.Platform) AdapterImpl(org.eclipse.emf.common.notify.impl.AdapterImpl) Adapter(org.eclipse.e4.core.services.adapter.Adapter) ModelServiceImpl(org.eclipse.e4.ui.internal.workbench.ModelServiceImpl) WorkbenchLogger(org.eclipse.e4.ui.internal.workbench.WorkbenchLogger) Bundle(org.osgi.framework.Bundle) Logger(org.eclipse.e4.core.services.log.Logger) WorkbenchLogger(org.eclipse.e4.ui.internal.workbench.WorkbenchLogger) URI(org.eclipse.emf.common.util.URI) IOException(java.io.IOException)

Example 13 with Logger

use of org.eclipse.e4.core.services.log.Logger in project eclipse.platform.ui by eclipse-platform.

the class KeyBindingDispatcher method executeCommand.

/**
 * Performs the actual execution of the command by looking up the current handler from the
 * command manager. If there is a handler and it is enabled, then it tries the actual execution.
 * Execution failures are logged. When this method completes, the key binding state is reset.
 *
 * @param parameterizedCommand
 *            The command that should be executed; should not be <code>null</code>.
 * @param trigger
 *            The triggering event; may be <code>null</code>.
 * @return <code>true</code> if there was a handler; <code>false</code> otherwise.
 * @throws CommandException
 *             if the handler does not complete execution for some reason. It is up to the
 *             caller of this method to decide whether to log the message, display a dialog, or
 *             ignore this exception entirely.
 */
public final boolean executeCommand(final ParameterizedCommand parameterizedCommand, final Event trigger) throws CommandException {
    // Reset the key binding state (close window, clear status line, etc.)
    resetState(false);
    final EHandlerService handlerService = getHandlerService();
    final Command command = parameterizedCommand.getCommand();
    final IEclipseContext staticContext = createContext(trigger);
    final boolean commandDefined = command.isDefined();
    // boolean commandEnabled;
    boolean commandHandled = false;
    try {
        // commandEnabled = handlerService.canExecute(parameterizedCommand, staticContext);
        Object obj = HandlerServiceImpl.lookUpHandler(context, command.getId());
        if (obj != null) {
            if (obj instanceof IHandler) {
                commandHandled = ((IHandler) obj).isHandled();
            } else {
                commandHandled = true;
            }
        }
        if (isTracingEnabled()) {
            logger.trace(// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
            "Command " + parameterizedCommand + ", defined: " + commandDefined + ", handled: " + commandHandled + " in " + // $NON-NLS-1$
            describe(context));
        }
        handlerService.executeHandler(parameterizedCommand, staticContext);
        final Object commandException = staticContext.get(HandlerServiceImpl.HANDLER_EXCEPTION);
        if (commandException instanceof CommandException) {
            commandHandled = false;
            if (commandException instanceof ExecutionException) {
                if (logger != null) {
                    logger.error((Throwable) commandException, // $NON-NLS-1$//$NON-NLS-2$
                    "Execution exception for: " + parameterizedCommand + " in " + describe(context));
                }
            } else if (isTracingEnabled()) {
                logger.trace((Throwable) commandException, // $NON-NLS-1$ //$NON-NLS-2$
                "Command exception for: " + parameterizedCommand + " in " + describe(context));
                if (handlerService instanceof HandlerServiceImpl) {
                    HandlerServiceImpl serviceImpl = (HandlerServiceImpl) handlerService;
                    IEclipseContext serviceContext = serviceImpl.getContext();
                    if (serviceContext != null) {
                        // $NON-NLS-1$
                        StringBuilder sb = new StringBuilder("\n\tExecution context: ");
                        sb.append(describe(serviceContext));
                        // $NON-NLS-1$
                        sb.append("\n\tHandler: ");
                        sb.append(obj);
                        logger.trace(sb.toString());
                    }
                }
                ContextManager contextManager = context.get(ContextManager.class);
                if (contextManager != null) {
                    Set<?> activeContextIds = contextManager.getActiveContextIds();
                    if (activeContextIds != null && !activeContextIds.isEmpty()) {
                        // $NON-NLS-1$
                        StringBuilder sb = new StringBuilder("\n\tAll active contexts: ");
                        sb.append(activeContextIds);
                        logger.trace(sb.toString());
                    }
                }
            }
        }
        /*
			 * Now that the command has executed (and had the opportunity to use the remembered
			 * state of the dialog), it is safe to delete that information.
			 */
        if (keyAssistDialog != null) {
            keyAssistDialog.clearRememberedState();
        }
    } finally {
        staticContext.dispose();
    }
    return (commandDefined && commandHandled);
}
Also used : EHandlerService(org.eclipse.e4.core.commands.EHandlerService) Set(java.util.Set) CommandException(org.eclipse.core.commands.common.CommandException) HandlerServiceImpl(org.eclipse.e4.core.commands.internal.HandlerServiceImpl) ParameterizedCommand(org.eclipse.core.commands.ParameterizedCommand) Command(org.eclipse.core.commands.Command) ContextManager(org.eclipse.core.commands.contexts.ContextManager) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) IHandler(org.eclipse.core.commands.IHandler) ExecutionException(org.eclipse.core.commands.ExecutionException)

Example 14 with Logger

use of org.eclipse.e4.core.services.log.Logger in project eclipse.platform.ui by eclipse-platform.

the class WorkbenchWindow method setup.

@PostConstruct
public void setup() {
    try {
        // if workbench window is opened as a result of command execution,
        // the context in which the new workbench window's commands are
        // initialized has to to match the workbench context
        final IEclipseContext windowContext = model.getContext();
        HandlerServiceImpl.push(windowContext.getParent(), null);
        // update the preference store.
        if (getModel().getPersistedState().containsKey(IPreferenceConstants.COOLBAR_VISIBLE)) {
            this.coolBarVisible = Boolean.parseBoolean(getModel().getPersistedState().get(IPreferenceConstants.COOLBAR_VISIBLE));
        } else {
            this.coolBarVisible = PrefUtil.getInternalPreferenceStore().getBoolean(IPreferenceConstants.COOLBAR_VISIBLE);
            getModel().getPersistedState().put(IPreferenceConstants.COOLBAR_VISIBLE, Boolean.toString(this.coolBarVisible));
        }
        if (getModel().getPersistedState().containsKey(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE)) {
            this.perspectiveBarVisible = Boolean.parseBoolean(getModel().getPersistedState().get(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE));
        } else {
            this.perspectiveBarVisible = PrefUtil.getInternalPreferenceStore().getBoolean(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE);
            getModel().getPersistedState().put(IPreferenceConstants.PERSPECTIVEBAR_VISIBLE, Boolean.toString(this.perspectiveBarVisible));
        }
        IServiceLocatorCreator slc = workbench.getService(IServiceLocatorCreator.class);
        this.serviceLocator = (ServiceLocator) slc.createServiceLocator(workbench, null, () -> {
            final Shell shell = getShell();
            if (shell != null && !shell.isDisposed()) {
                close();
            }
        }, windowContext);
        windowContext.set(IExtensionTracker.class.getName(), new ContextFunction() {

            @Override
            public Object compute(IEclipseContext context, String contextKey) {
                if (tracker == null) {
                    tracker = new UIExtensionTracker(getWorkbench().getDisplay());
                }
                return tracker;
            }
        });
        windowContext.set(IWindowCloseHandler.class.getName(), (IWindowCloseHandler) window -> getWindowAdvisor().preWindowShellClose() && WorkbenchWindow.this.close());
        final ISaveHandler defaultSaveHandler = windowContext.get(ISaveHandler.class);
        final PartServiceSaveHandler localSaveHandler = new WWinPartServiceSaveHandler() {

            @Override
            public Save promptToSave(MPart dirtyPart) {
                Object object = dirtyPart.getObject();
                if (object instanceof CompatibilityPart) {
                    IWorkbenchPart part = ((CompatibilityPart) object).getPart();
                    ISaveablePart saveable = SaveableHelper.getSaveable(part);
                    if (saveable != null) {
                        if (!saveable.isSaveOnCloseNeeded()) {
                            return Save.NO;
                        }
                        return SaveableHelper.savePart(saveable, part, WorkbenchWindow.this, true) ? Save.NO : Save.CANCEL;
                    }
                }
                return defaultSaveHandler.promptToSave(dirtyPart);
            }

            @Override
            public Save[] promptToSave(Collection<MPart> dirtyParts) {
                LabelProvider labelProvider = new LabelProvider() {

                    @Override
                    public String getText(Object element) {
                        return ((MPart) element).getLocalizedLabel();
                    }
                };
                List<MPart> parts = new ArrayList<>(dirtyParts);
                ListSelectionDialog dialog = new ListSelectionDialog(getShell(), parts, ArrayContentProvider.getInstance(), labelProvider, WorkbenchMessages.EditorManager_saveResourcesMessage);
                dialog.setInitialSelections(parts.toArray());
                dialog.setTitle(WorkbenchMessages.EditorManager_saveResourcesTitle);
                if (dialog.open() == IDialogConstants.CANCEL_ID) {
                    return new Save[] { Save.CANCEL };
                }
                Object[] toSave = dialog.getResult();
                Save[] retSaves = new Save[parts.size()];
                Arrays.fill(retSaves, Save.NO);
                for (int i = 0; i < retSaves.length; i++) {
                    MPart part = parts.get(i);
                    for (Object o : toSave) {
                        if (o == part) {
                            retSaves[i] = Save.YES;
                            break;
                        }
                    }
                }
                return retSaves;
            }

            @Override
            public boolean save(MPart dirtyPart, boolean confirm) {
                Object object = dirtyPart.getObject();
                if (object instanceof CompatibilityPart) {
                    IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                    if (SaveableHelper.isSaveable(workbenchPart)) {
                        SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                        Object saveResult = saveablesList.preCloseParts(Collections.singletonList(workbenchPart), true, WorkbenchWindow.this);
                        return saveResult != null;
                    }
                } else if (isSaveOnCloseNotNeededSplitEditorPart(dirtyPart)) {
                    return true;
                }
                return super.save(dirtyPart, confirm);
            }

            private boolean saveParts(ArrayList<MPart> dirtyParts, Save[] decisions) {
                if (decisions == null || decisions.length == 0) {
                    super.saveParts(dirtyParts, true);
                }
                if (dirtyParts.size() != decisions.length) {
                    for (Save decision : decisions) {
                        if (decision == Save.CANCEL) {
                            return false;
                        }
                    }
                }
                List<MPart> dirtyPartsList = Collections.unmodifiableList(new ArrayList<>(dirtyParts));
                for (Save decision : decisions) {
                    if (decision == Save.CANCEL) {
                        return false;
                    }
                }
                for (int i = 0; i < decisions.length; i++) {
                    if (decisions[i] == Save.YES) {
                        if (!save(dirtyPartsList.get(i), false)) {
                            return false;
                        }
                    }
                }
                return true;
            }

            private boolean saveMixedParts(ArrayList<MPart> nonCompParts, ArrayList<IWorkbenchPart> compParts, boolean confirm, boolean addNonPartSources) {
                SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                if (!confirm) {
                    boolean saved = super.saveParts(nonCompParts, confirm);
                    Object saveResult = saveablesList.preCloseParts(compParts, true, WorkbenchWindow.this);
                    return ((saveResult != null) && saved);
                }
                LabelProvider labelProvider = new LabelProvider() {

                    WorkbenchPartLabelProvider workbenchLabelProvider = new WorkbenchPartLabelProvider();

                    @Override
                    public String getText(Object element) {
                        if (element instanceof Saveable) {
                            return workbenchLabelProvider.getText(element);
                        }
                        return ((MPart) element).getLocalizedLabel();
                    }
                };
                ArrayList<Object> listParts = new ArrayList<>();
                Map<IWorkbenchPart, List<Saveable>> saveableMap = saveablesList.getSaveables(compParts);
                listParts.addAll(nonCompParts);
                LinkedHashSet<Saveable> saveablesSet = new LinkedHashSet<>();
                for (IWorkbenchPart workbenchPart : compParts) {
                    List<Saveable> list = saveableMap.get(workbenchPart);
                    if (list != null) {
                        saveablesSet.addAll(list);
                    }
                }
                if (addNonPartSources) {
                    for (ISaveablesSource nonPartSource : saveablesList.getNonPartSources()) {
                        Saveable[] saveables = nonPartSource.getSaveables();
                        for (Saveable saveable : saveables) {
                            if (saveable.isDirty()) {
                                saveablesSet.add(saveable);
                            }
                        }
                    }
                }
                listParts.addAll(saveablesSet);
                ListSelectionDialog dialog = new ListSelectionDialog(getShell(), listParts, ArrayContentProvider.getInstance(), labelProvider, WorkbenchMessages.EditorManager_saveResourcesMessage);
                dialog.setInitialSelections(listParts.toArray());
                dialog.setTitle(WorkbenchMessages.EditorManager_saveResourcesTitle);
                if (dialog.open() == IDialogConstants.CANCEL_ID) {
                    return false;
                }
                Object[] toSave = dialog.getResult();
                Save[] nonCompatSaves = new Save[nonCompParts.size()];
                Save[] compatSaves = new Save[saveablesSet.size()];
                Arrays.fill(nonCompatSaves, Save.NO);
                Arrays.fill(compatSaves, Save.NO);
                for (int i = 0; i < nonCompatSaves.length; i++) {
                    MPart part = nonCompParts.get(i);
                    for (Object o : toSave) {
                        if (o == part) {
                            nonCompatSaves[i] = Save.YES;
                            break;
                        }
                    }
                }
                Map<Saveable, Save> saveOptionMap = new HashMap<>();
                for (Saveable saveable : saveablesSet) {
                    boolean found = false;
                    for (Object o : toSave) {
                        if (o == saveable) {
                            saveOptionMap.put(saveable, Save.YES);
                            found = true;
                            break;
                        }
                    }
                    if (!found) {
                        saveOptionMap.put(saveable, Save.NO);
                    }
                }
                boolean saved = saveParts(nonCompParts, nonCompatSaves);
                if (!saved) {
                    return saved;
                }
                Object saveResult = saveablesList.preCloseParts(compParts, false, true, WorkbenchWindow.this, saveOptionMap);
                return ((saveResult != null) && saved);
            }

            private void removeSaveOnCloseNotNeededParts(List<IWorkbenchPart> parts) {
                for (Iterator<IWorkbenchPart> it = parts.iterator(); it.hasNext(); ) {
                    IWorkbenchPart part = it.next();
                    ISaveablePart saveable = SaveableHelper.getSaveable(part);
                    if (saveable == null || !saveable.isSaveOnCloseNeeded()) {
                        it.remove();
                    }
                }
            }

            private void removeSaveOnCloseNotNeededSplitEditorParts(List<MPart> parts) {
                for (Iterator<MPart> it = parts.iterator(); it.hasNext(); ) {
                    MPart part = it.next();
                    if (isSaveOnCloseNotNeededSplitEditorPart(part)) {
                        it.remove();
                    }
                }
            }

            private boolean isSaveOnCloseNotNeededSplitEditorPart(MPart part) {
                boolean notNeeded = false;
                if (part instanceof MCompositePart && SplitHost.SPLIT_HOST_CONTRIBUTOR_URI.equals(part.getContributionURI())) {
                    MCompositePart compPart = (MCompositePart) part;
                    List<MPart> elements = modelService.findElements(compPart, null, MPart.class);
                    if (elements != null && elements.size() > 1) {
                        elements.remove(0);
                        for (MPart mpart : elements) {
                            Object object = mpart.getObject();
                            if (object instanceof CompatibilityPart) {
                                IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                                if (!SaveableHelper.isSaveable(workbenchPart)) {
                                    notNeeded = true;
                                } else {
                                    ISaveablePart saveable = SaveableHelper.getSaveable(workbenchPart);
                                    if (saveable == null || !saveable.isSaveOnCloseNeeded()) {
                                        notNeeded = true;
                                    } else {
                                        notNeeded = false;
                                        break;
                                    }
                                }
                            } else {
                                notNeeded = false;
                                break;
                            }
                        }
                    }
                }
                return notNeeded;
            }

            @Override
            public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm, boolean closing, boolean addNonPartSources) {
                ArrayList<IWorkbenchPart> saveableParts = new ArrayList<>();
                ArrayList<MPart> nonCompatibilityParts = new ArrayList<>();
                for (MPart part : dirtyParts) {
                    Object object = part.getObject();
                    if (object instanceof CompatibilityPart) {
                        IWorkbenchPart workbenchPart = ((CompatibilityPart) object).getPart();
                        if (SaveableHelper.isSaveable(workbenchPart)) {
                            saveableParts.add(workbenchPart);
                        }
                    } else {
                        nonCompatibilityParts.add(part);
                    }
                }
                if (!saveableParts.isEmpty() && closing) {
                    removeSaveOnCloseNotNeededParts(saveableParts);
                }
                if (!nonCompatibilityParts.isEmpty() && closing) {
                    removeSaveOnCloseNotNeededSplitEditorParts(nonCompatibilityParts);
                }
                if (saveableParts.isEmpty()) {
                    if (nonCompatibilityParts.isEmpty()) {
                        // nothing to save
                        return true;
                    }
                    return super.saveParts(nonCompatibilityParts, confirm);
                } else if (!nonCompatibilityParts.isEmpty()) {
                    return saveMixedParts(nonCompatibilityParts, saveableParts, confirm, addNonPartSources);
                }
                SaveablesList saveablesList = (SaveablesList) PlatformUI.getWorkbench().getService(ISaveablesLifecycleListener.class);
                Object saveResult = saveablesList.preCloseParts(saveableParts, addNonPartSources, true, WorkbenchWindow.this, WorkbenchWindow.this);
                return (saveResult != null);
            }

            @Override
            public boolean saveParts(Collection<MPart> dirtyParts, boolean confirm) {
                return saveParts(dirtyParts, confirm, false, false);
            }
        };
        localSaveHandler.logger = logger;
        windowContext.set(ISaveHandler.class, localSaveHandler);
        windowContext.set(IWorkbenchWindow.class.getName(), this);
        windowContext.set(IPageService.class, this);
        windowContext.set(IPartService.class, partService);
        windowContext.set(ISources.ACTIVE_WORKBENCH_WINDOW_NAME, this);
        windowContext.set(ISources.ACTIVE_WORKBENCH_WINDOW_SHELL_NAME, getShell());
        EContextService cs = windowContext.get(EContextService.class);
        cs.activateContext(IContextService.CONTEXT_ID_WINDOW);
        cs.getActiveContextIds();
        initializeDefaultServices();
        /*
			 * Remove the second QuickAccess control if an older workspace is opened.
			 *
			 * An older workspace will create an ApplicationModel which already contains the
			 * QuickAccess elements, from the old "popuolateTopTrimContribution()" method.
			 * The new implementation of this method doesn't add the QuickAccess elements
			 * anymore but an old workbench.xmi still has these entries in it and so they
			 * need to be removed.
			 */
        cleanLegacyQuickAccessContribution();
        // register with the tracker
        fireWindowOpening();
        configureShell(getShell(), windowContext);
        try {
            page = new WorkbenchPage(this, input);
        } catch (WorkbenchException e) {
            WorkbenchPlugin.log(e);
        }
        menuOverride = new MenuOverrides(page);
        toolbarOverride = new ToolbarOverrides(page);
        ContextInjectionFactory.inject(page, model.getContext());
        windowContext.set(IWorkbenchPage.class, page);
        menuManager.setOverrides(menuOverride);
        ((CoolBarToTrimManager) getCoolBarManager2()).setOverrides(toolbarOverride);
        // Fill the action bars
        fillActionBars(FILL_ALL_ACTION_BARS);
        firePageOpened();
        populateTopTrimContributions();
        populateBottomTrimContributions();
        // Trim gets populated during rendering (?) so make sure we have al/
        // sides. See bug 383269 for details
        modelService.getTrim(model, SideValue.LEFT);
        modelService.getTrim(model, SideValue.RIGHT);
        // move the QuickAccess ToolControl to the correct position (only if
        // it exists)
        positionQuickAccess();
        Shell shell = (Shell) model.getWidget();
        if (model.getMainMenu() == null) {
            mainMenu = modelService.createModelElement(MMenu.class);
            mainMenu.setElementId(IWorkbenchConstants.MAIN_MENU_ID);
            mainMenu.getPersistedState().put(org.eclipse.e4.ui.workbench.IWorkbench.PERSIST_STATE, Boolean.FALSE.toString());
            renderer = (MenuManagerRenderer) rendererFactory.getRenderer(mainMenu, null);
            renderer.linkModelToManager(mainMenu, menuManager);
            renderer.reconcileManagerToModel(menuManager, mainMenu);
            model.setMainMenu(mainMenu);
            final Menu menu = (Menu) engine.createGui(mainMenu, model.getWidget(), model.getContext());
            shell.setMenuBar(menu);
            menuUpdater = () -> {
                try {
                    if (model.getMainMenu() == null || model.getWidget() == null || menu.isDisposed() || mainMenu.getWidget() == null) {
                        return;
                    }
                    MenuManagerRendererFilter.updateElementVisibility(mainMenu, renderer, menuManager, windowContext.getActiveLeaf(), 1, false);
                    menuManager.update(true);
                } finally {
                    canUpdateMenus = true;
                }
            };
            RunAndTrack menuChangeManager = new RunAndTrack() {

                @Override
                public boolean changed(IEclipseContext context) {
                    ExpressionInfo info = new ExpressionInfo();
                    IEclipseContext leafContext = windowContext.getActiveLeaf();
                    MenuManagerRendererFilter.collectInfo(info, mainMenu, renderer, leafContext, true);
                    // if one of these variables change, re-run the RAT
                    for (String name : info.getAccessedVariableNames()) {
                        leafContext.get(name);
                    }
                    if (canUpdateMenus && workbench.getDisplay() != null) {
                        canUpdateMenus = false;
                        workbench.getDisplay().asyncExec(menuUpdater);
                    }
                    return manageChanges;
                }
            };
            windowContext.runAndTrack(menuChangeManager);
        }
        eventBroker.subscribe(UIEvents.UIElement.TOPIC_WIDGET, windowWidgetHandler);
        boolean newWindow = setupPerspectiveStack(windowContext);
        partService.setPage(page);
        page.setPerspective(perspective);
        firePageActivated();
        if (newWindow) {
            page.fireInitialPartVisibilityEvents();
        } else {
            page.updatePerspectiveActionSets();
        }
        updateActionSets();
        IPreferenceStore preferenceStore = PrefUtil.getAPIPreferenceStore();
        boolean enableAnimations = preferenceStore.getBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS);
        preferenceStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, false);
        // Hack!! don't show the intro if there's more than one open
        // perspective
        List<MPerspective> persps = modelService.findElements(model, null, MPerspective.class, null);
        if (persps.size() > 1) {
            PrefUtil.getAPIPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_INTRO, false);
            PrefUtil.saveAPIPrefs();
        }
        if (Boolean.parseBoolean(getModel().getPersistedState().get(PERSISTED_STATE_RESTORED))) {
            SafeRunnable.run(new SafeRunnable() {

                @Override
                public void run() throws Exception {
                    getWindowAdvisor().postWindowRestore();
                }
            });
        } else {
            getModel().getPersistedState().put(PERSISTED_STATE_RESTORED, Boolean.TRUE.toString());
        }
        getWindowAdvisor().postWindowCreate();
        getWindowAdvisor().openIntro();
        preferenceStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS, enableAnimations);
        getShell().setData(this);
        trackShellActivation();
        /**
         * When SWT zoom changes for primary monitor, prompt user to restart Eclipse to
         * apply the changes.
         */
        getShell().addListener(SWT.ZoomChanged, event -> {
            if (getShell().getDisplay().getPrimaryMonitor().equals(getShell().getMonitor())) {
                int dialogResponse = MessageDialog.open(MessageDialog.QUESTION, getShell(), WorkbenchMessages.Workbench_zoomChangedTitle, WorkbenchMessages.Workbench_zoomChangedMessage, SWT.NONE, WorkbenchMessages.Workbench_RestartButton, WorkbenchMessages.Workbench_DontRestartButton);
                if (event.doit && dialogResponse == 0) {
                    getWorkbenchImpl().restart(true);
                }
            }
        });
    } finally {
        HandlerServiceImpl.pop();
    }
}
Also used : Arrays(java.util.Arrays) ModeledPageLayout(org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout) UIListenerLogging(org.eclipse.ui.internal.misc.UIListenerLogging) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) EventHandler(org.osgi.service.event.EventHandler) IDialogConstants(org.eclipse.jface.dialogs.IDialogConstants) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) Point(org.eclipse.swt.graphics.Point) IUpdateService(org.eclipse.e4.ui.internal.workbench.renderers.swt.IUpdateService) PropertyChangeEvent(org.eclipse.jface.util.PropertyChangeEvent) Map(java.util.Map) HandlerServiceImpl(org.eclipse.e4.core.commands.internal.HandlerServiceImpl) IServiceScopes(org.eclipse.ui.services.IServiceScopes) MCompositePart(org.eclipse.e4.ui.model.application.ui.basic.MCompositePart) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) MessageDialog(org.eclipse.jface.dialogs.MessageDialog) MApplication(org.eclipse.e4.ui.model.application.MApplication) ServiceLocator(org.eclipse.ui.internal.services.ServiceLocator) ISaveablePart(org.eclipse.ui.ISaveablePart) EContextService(org.eclipse.e4.ui.services.EContextService) LegacyActionPersistence(org.eclipse.ui.internal.menus.LegacyActionPersistence) IEvaluationService(org.eclipse.ui.services.IEvaluationService) PlatformUI(org.eclipse.ui.PlatformUI) MenuManager(org.eclipse.jface.action.MenuManager) IActionSetDescriptor(org.eclipse.ui.internal.registry.IActionSetDescriptor) Assert(org.eclipse.core.runtime.Assert) Set(java.util.Set) IHandler(org.eclipse.core.commands.IHandler) InvocationTargetException(java.lang.reflect.InvocationTargetException) MTrimElement(org.eclipse.e4.ui.model.application.ui.basic.MTrimElement) GroupMarker(org.eclipse.jface.action.GroupMarker) ExpressionInfo(org.eclipse.core.expressions.ExpressionInfo) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) Saveable(org.eclipse.ui.Saveable) MTrimmedWindow(org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow) TrimBarLayout(org.eclipse.e4.ui.workbench.renderers.swt.TrimBarLayout) SWT(org.eclipse.swt.SWT) SlaveCommandService(org.eclipse.ui.internal.commands.SlaveCommandService) IPageService(org.eclipse.ui.IPageService) MToolControl(org.eclipse.e4.ui.model.application.ui.menu.MToolControl) IActionSetsListener(org.eclipse.ui.internal.menus.IActionSetsListener) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) IWorkbenchPartReference(org.eclipse.ui.IWorkbenchPartReference) UIEventTopic(org.eclipse.e4.ui.di.UIEventTopic) SelectionService(org.eclipse.ui.internal.e4.compatibility.SelectionService) BusyIndicator(org.eclipse.swt.custom.BusyIndicator) EPartService(org.eclipse.e4.ui.workbench.modeling.EPartService) ICoolBarManager2(org.eclipse.jface.internal.provisional.action.ICoolBarManager2) ICommandService(org.eclipse.ui.commands.ICommandService) ListenerList(org.eclipse.core.runtime.ListenerList) Position(org.eclipse.e4.ui.model.internal.Position) MUIElement(org.eclipse.e4.ui.model.application.ui.MUIElement) SplitHost(org.eclipse.e4.ui.workbench.addons.splitteraddon.SplitHost) ArrayList(java.util.ArrayList) SideValue(org.eclipse.e4.ui.model.application.ui.SideValue) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) MPerspectiveStack(org.eclipse.e4.ui.model.application.ui.advanced.MPerspectiveStack) IConfigurationElement(org.eclipse.core.runtime.IConfigurationElement) MWindow(org.eclipse.e4.ui.model.application.ui.basic.MWindow) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) LinkedHashSet(java.util.LinkedHashSet) IActionCommandMappingService(org.eclipse.ui.internal.handlers.IActionCommandMappingService) LegacyHandlerService(org.eclipse.ui.internal.handlers.LegacyHandlerService) Shell(org.eclipse.swt.widgets.Shell) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) MenuManagerRenderer(org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer) ActiveShellExpression(org.eclipse.ui.ActiveShellExpression) EcoreUtil(org.eclipse.emf.ecore.util.EcoreUtil) ISaveablesLifecycleListener(org.eclipse.ui.ISaveablesLifecycleListener) IEvaluationContext(org.eclipse.core.expressions.IEvaluationContext) IPresentationEngine(org.eclipse.e4.ui.workbench.IPresentationEngine) ActionCommandMappingService(org.eclipse.ui.internal.handlers.ActionCommandMappingService) ShellAdapter(org.eclipse.swt.events.ShellAdapter) PrefUtil(org.eclipse.ui.internal.util.PrefUtil) MenuManagerRendererFilter(org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRendererFilter) EModelService(org.eclipse.e4.ui.workbench.modeling.EModelService) CustomizePerspectiveDialog(org.eclipse.ui.internal.dialogs.cpd.CustomizePerspectiveDialog) IMenuManager(org.eclipse.jface.action.IMenuManager) SubContributionItem(org.eclipse.jface.action.SubContributionItem) IContextService(org.eclipse.ui.contexts.IContextService) IRunnableWithProgress(org.eclipse.jface.operation.IRunnableWithProgress) Platform(org.eclipse.core.runtime.Platform) ModalContext(org.eclipse.jface.operation.ModalContext) IEventBroker(org.eclipse.e4.core.services.events.IEventBroker) StartupRunnable(org.eclipse.ui.internal.StartupThreading.StartupRunnable) Event(org.osgi.service.event.Event) IPartService(org.eclipse.ui.IPartService) CoolBarManager2(org.eclipse.jface.internal.provisional.action.CoolBarManager2) IExtensionTracker(org.eclipse.core.runtime.dynamichelpers.IExtensionTracker) ContextInjectionFactory(org.eclipse.e4.core.contexts.ContextInjectionFactory) UIEvents(org.eclipse.e4.ui.workbench.UIEvents) WorkbenchException(org.eclipse.ui.WorkbenchException) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) WorkbenchAdvisor(org.eclipse.ui.application.WorkbenchAdvisor) URIHelper(org.eclipse.e4.ui.internal.workbench.URIHelper) TextProcessor(org.eclipse.osgi.util.TextProcessor) IAction(org.eclipse.jface.action.IAction) IMenuService(org.eclipse.ui.menus.IMenuService) IWorkbenchRegistryConstants(org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants) IToolBarManager(org.eclipse.jface.action.IToolBarManager) ISaveablesSource(org.eclipse.ui.ISaveablesSource) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) SlaveMenuService(org.eclipse.ui.internal.menus.SlaveMenuService) PreDestroy(javax.annotation.PreDestroy) ActionHandler(org.eclipse.jface.commands.ActionHandler) IExtensionRegistry(org.eclipse.core.runtime.IExtensionRegistry) PositionInfo(org.eclipse.e4.ui.model.internal.PositionInfo) IToolBarManager2(org.eclipse.jface.internal.provisional.action.IToolBarManager2) MMenuElement(org.eclipse.e4.ui.model.application.ui.menu.MMenuElement) IContributionManagerOverrides(org.eclipse.jface.action.IContributionManagerOverrides) IActionBarConfigurer2(org.eclipse.ui.internal.provisional.application.IActionBarConfigurer2) ProgressRegion(org.eclipse.ui.internal.progress.ProgressRegion) ToolBarManager2(org.eclipse.jface.internal.provisional.action.ToolBarManager2) IRendererFactory(org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory) MElementContainer(org.eclipse.e4.ui.model.application.ui.MElementContainer) IAdaptable(org.eclipse.core.runtime.IAdaptable) NLS(org.eclipse.osgi.util.NLS) IBindingService(org.eclipse.ui.keys.IBindingService) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) Optional(org.eclipse.e4.core.di.annotations.Optional) Display(org.eclipse.swt.widgets.Display) ContextService(org.eclipse.ui.internal.contexts.ContextService) ArrayContentProvider(org.eclipse.jface.viewers.ArrayContentProvider) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) IHandlerService(org.eclipse.ui.handlers.IHandlerService) List(java.util.List) CoolBarManager(org.eclipse.jface.action.CoolBarManager) IPerspectiveDescriptor(org.eclipse.ui.IPerspectiveDescriptor) IViewDescriptor(org.eclipse.ui.views.IViewDescriptor) Entry(java.util.Map.Entry) PostConstruct(javax.annotation.PostConstruct) IHandlerActivation(org.eclipse.ui.handlers.IHandlerActivation) WorkbenchWindowAdvisor(org.eclipse.ui.application.WorkbenchWindowAdvisor) CompatibilityPart(org.eclipse.ui.internal.e4.compatibility.CompatibilityPart) SafeRunnable(org.eclipse.jface.util.SafeRunnable) PartServiceSaveHandler(org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler) ISelectionService(org.eclipse.ui.ISelectionService) ToolBarManagerRenderer(org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer) IPerspectiveRegistry(org.eclipse.ui.IPerspectiveRegistry) EvaluationReference(org.eclipse.ui.internal.services.EvaluationReference) Rectangle(org.eclipse.swt.graphics.Rectangle) HashMap(java.util.HashMap) Logger(org.eclipse.e4.core.services.log.Logger) IWorkbenchLocationService(org.eclipse.ui.internal.services.IWorkbenchLocationService) HashSet(java.util.HashSet) Inject(javax.inject.Inject) TrimmedPartLayout(org.eclipse.e4.ui.workbench.renderers.swt.TrimmedPartLayout) Expression(org.eclipse.core.expressions.Expression) MPlaceholder(org.eclipse.e4.ui.model.application.ui.advanced.MPlaceholder) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) ContextFunction(org.eclipse.e4.core.contexts.ContextFunction) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) IWorkbenchPreferenceConstants(org.eclipse.ui.IWorkbenchPreferenceConstants) RunAndTrack(org.eclipse.e4.core.contexts.RunAndTrack) WorkbenchLocationService(org.eclipse.ui.internal.services.WorkbenchLocationService) ICoolBarManager(org.eclipse.jface.action.ICoolBarManager) IWorkbenchActionConstants(org.eclipse.ui.IWorkbenchActionConstants) Iterator(java.util.Iterator) Layout(org.eclipse.swt.widgets.Layout) IPageListener(org.eclipse.ui.IPageListener) E4Workbench(org.eclipse.e4.ui.internal.workbench.E4Workbench) ISaveHandler(org.eclipse.e4.ui.workbench.modeling.ISaveHandler) ShellEvent(org.eclipse.swt.events.ShellEvent) StatusLineManager(org.eclipse.jface.action.StatusLineManager) InjectionException(org.eclipse.e4.core.di.InjectionException) MTrimBar(org.eclipse.e4.ui.model.application.ui.basic.MTrimBar) ActionBarAdvisor(org.eclipse.ui.application.ActionBarAdvisor) CommandAction(org.eclipse.ui.internal.actions.CommandAction) NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ListSelectionDialog(org.eclipse.ui.dialogs.ListSelectionDialog) IContributionItem(org.eclipse.jface.action.IContributionItem) IWorkbench(org.eclipse.ui.IWorkbench) Menu(org.eclipse.swt.widgets.Menu) Collections(java.util.Collections) LabelProvider(org.eclipse.jface.viewers.LabelProvider) Control(org.eclipse.swt.widgets.Control) ISources(org.eclipse.ui.ISources) LinkedHashSet(java.util.LinkedHashSet) MPart(org.eclipse.e4.ui.model.application.ui.basic.MPart) ISaveHandler(org.eclipse.e4.ui.workbench.modeling.ISaveHandler) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ISaveablesLifecycleListener(org.eclipse.ui.ISaveablesLifecycleListener) PartServiceSaveHandler(org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler) MPerspective(org.eclipse.e4.ui.model.application.ui.advanced.MPerspective) IWorkbenchPage(org.eclipse.ui.IWorkbenchPage) CompatibilityPart(org.eclipse.ui.internal.e4.compatibility.CompatibilityPart) IWorkbenchPart(org.eclipse.ui.IWorkbenchPart) ListenerList(org.eclipse.core.runtime.ListenerList) ArrayList(java.util.ArrayList) List(java.util.List) IServiceLocatorCreator(org.eclipse.ui.internal.services.IServiceLocatorCreator) Saveable(org.eclipse.ui.Saveable) SafeRunnable(org.eclipse.jface.util.SafeRunnable) EContextService(org.eclipse.e4.ui.services.EContextService) WorkbenchException(org.eclipse.ui.WorkbenchException) ExpressionInfo(org.eclipse.core.expressions.ExpressionInfo) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) ContextFunction(org.eclipse.e4.core.contexts.ContextFunction) ISaveablesSource(org.eclipse.ui.ISaveablesSource) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) MCompositePart(org.eclipse.e4.ui.model.application.ui.basic.MCompositePart) ISaveablePart(org.eclipse.ui.ISaveablePart) Shell(org.eclipse.swt.widgets.Shell) MMenu(org.eclipse.e4.ui.model.application.ui.menu.MMenu) Menu(org.eclipse.swt.widgets.Menu) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) IWindowCloseHandler(org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler) IExtensionTracker(org.eclipse.core.runtime.dynamichelpers.IExtensionTracker) UIExtensionTracker(org.eclipse.ui.internal.registry.UIExtensionTracker) IWorkbenchWindow(org.eclipse.ui.IWorkbenchWindow) Point(org.eclipse.swt.graphics.Point) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) InvocationTargetException(java.lang.reflect.InvocationTargetException) WorkbenchException(org.eclipse.ui.WorkbenchException) InjectionException(org.eclipse.e4.core.di.InjectionException) RunAndTrack(org.eclipse.e4.core.contexts.RunAndTrack) IEclipseContext(org.eclipse.e4.core.contexts.IEclipseContext) IPreferenceStore(org.eclipse.jface.preference.IPreferenceStore) WorkbenchPartLabelProvider(org.eclipse.ui.model.WorkbenchPartLabelProvider) LabelProvider(org.eclipse.jface.viewers.LabelProvider) ListSelectionDialog(org.eclipse.ui.dialogs.ListSelectionDialog) PostConstruct(javax.annotation.PostConstruct)

Example 15 with Logger

use of org.eclipse.e4.core.services.log.Logger in project aero.minova.rcp by minova-afis.

the class LifeCycle method postContextCreate.

@PostContextCreate
void postContextCreate(IEclipseContext workbenchContext) throws IllegalStateException {
    URI workspaceLocation = null;
    // Bei -clearPersistedState müssen unsere Einstellungen auch gelöscht werden
    boolean deletePrefs = false;
    for (String string : Platform.getApplicationArgs()) {
        if (string.equals("-clearPersistedState")) {
            deletePrefs = true;
        }
    }
    // settings.properties einlesen wenn vorhanden und im Context ablegen
    final Path settingsPath = Paths.get(System.getProperty("user.home")).resolve(LifeCycle.DEFAULT_CONFIG_FOLDER).resolve(Constants.SETTINGS_FILE_NAME);
    Properties settings = new Properties();
    if (settingsPath.toFile().exists()) {
        try (BufferedInputStream targetStream = new BufferedInputStream(new FileInputStream(settingsPath.toFile()))) {
            settings.load(targetStream);
        } catch (IOException e) {
        }
    }
    workbenchContext.set(Constants.SETTINGS_PROPERTIES, settings);
    defaultConnectionString = settings.getProperty(Constants.SETTINGS_DEFAULT_CONNECTION_STRING);
    // Versuchen über Commandline-Argumente einzuloggen, für UI-Tests genutzt
    boolean loginCommandLine = loginViaCommandLine(workbenchContext);
    ImageDescriptor imageDefault = ImageUtil.getImageDescriptor("WFC.Application", 16);
    ImageDescriptor imageDefault2 = ImageUtil.getImageDescriptor("WFC.Application", 32);
    ImageDescriptor imageDefault3 = ImageUtil.getImageDescriptor("WFC.Application", 64);
    ImageDescriptor imageDefault4 = ImageUtil.getImageDescriptor("WFC.Application", 256);
    WorkspaceDialog.setDefaultImages(new Image[] { imageDefault.createImage(), imageDefault2.createImage(), imageDefault3.createImage(), imageDefault4.createImage() });
    // Ansonsten Default Profil oder manuelles Eingeben der Daten
    if (!loginCommandLine) {
        WorkspaceDialog workspaceDialog = new WorkspaceDialog(null, logger);
        workspaceDialog.setDefaultConnectionString(defaultConnectionString);
        if (!WorkspaceAccessPreferences.getSavedPrimaryWorkspaceAccessData(logger).isEmpty()) {
            // Wenn Default-Workspace gesetzt ist diesen nutzen
            workspaceLocation = loginDefaultWorkspace(workspaceLocation, workspaceDialog);
        } else {
            // Ansonsten sofort Login-Dialog öffnen
            workspaceLocation = loadWorkspaceConfigManually(workspaceDialog, workspaceLocation);
        }
        // Das darf für UI-Tests nicht ausgeführt werden!
        checkModelVersion(workspaceLocation, workbenchContext);
        if (deletePrefs) {
            deleteCustomPrefs(workspaceLocation);
        }
    }
    Manager manager = new Manager();
    manager.postContextCreate(workbenchContext);
}
Also used : Path(java.nio.file.Path) WorkspaceDialog(aero.minova.rcp.workspace.dialogs.WorkspaceDialog) BufferedInputStream(java.io.BufferedInputStream) ImageDescriptor(org.eclipse.jface.resource.ImageDescriptor) IOException(java.io.IOException) Properties(java.util.Properties) Manager(aero.minova.rcp.translate.lifecycle.Manager) URI(java.net.URI) FileInputStream(java.io.FileInputStream) PostContextCreate(org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate)

Aggregations

IEclipseContext (org.eclipse.e4.core.contexts.IEclipseContext)12 IOException (java.io.IOException)9 Logger (org.eclipse.e4.core.services.log.Logger)7 EObject (org.eclipse.emf.ecore.EObject)7 ArrayList (java.util.ArrayList)6 InjectionException (org.eclipse.e4.core.di.InjectionException)5 MApplication (org.eclipse.e4.ui.model.application.MApplication)5 MWindow (org.eclipse.e4.ui.model.application.ui.basic.MWindow)5 List (java.util.List)4 IPresentationEngine (org.eclipse.e4.ui.workbench.IPresentationEngine)4 Display (org.eclipse.swt.widgets.Display)4 Shell (org.eclipse.swt.widgets.Shell)4 File (java.io.File)3 Set (java.util.Set)3 IExtensionRegistry (org.eclipse.core.runtime.IExtensionRegistry)3 Platform (org.eclipse.core.runtime.Platform)3 ContextInjectionFactory (org.eclipse.e4.core.contexts.ContextInjectionFactory)3 IContributionFactory (org.eclipse.e4.core.services.contributions.IContributionFactory)3 E4Workbench (org.eclipse.e4.ui.internal.workbench.E4Workbench)3 MContribution (org.eclipse.e4.ui.model.application.MContribution)3