Example usage for org.eclipse.jface.preference PreferenceDialog open

List of usage examples for org.eclipse.jface.preference PreferenceDialog open

Introduction

In this page you can find the example usage for org.eclipse.jface.preference PreferenceDialog open.

Prototype

public int open() 

Source Link

Document

Opens this window, creating it first if it has not yet been created.

Usage

From source file:org.springframework.ide.eclipse.wizard.template.TemplateSelectionPart.java

License:Open Source License

@Override
public Control createArea(Composite parent) {

    initialiseTemplatesFromContentManager();

    Composite container = new Composite(parent, SWT.NONE);
    GridLayoutFactory.fillDefaults().margins(0, 0).spacing(0, 0).applyTo(container);
    container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Label label = new Label(container, SWT.NONE);
    label.setText("Templates:"); //$NON-NLS-1$
    label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    Tree tree = new Tree(container, SWT.FULL_SELECTION | SWT.BORDER);
    tree.setLinesVisible(false);//w ww .jav a  2  s . c  o  m
    tree.setHeaderVisible(false);
    tree.setEnabled(true);

    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.heightHint = 170;
    tree.setLayoutData(data);

    treeViewer = new TreeViewer(tree);

    treeViewer.setLabelProvider(new ILabelProvider() {

        public void removeListener(ILabelProviderListener listener) {
        }

        public boolean isLabelProperty(Object element, String property) {
            return false;
        }

        public void dispose() {
        }

        public void addListener(ILabelProviderListener listener) {
        }

        public String getText(Object element) {
            if (element instanceof ITemplateElement) {
                return ((ITemplateElement) element).getName();
            }
            return null;
        }

        public Image getImage(Object element) {
            if (element instanceof Template) {
                Template template = (Template) element;
                Image templateImage = WizardImages.getImage(WizardImages.TEMPLATE_ICON);

                // Simple Project templates are bundled in the plugin,
                // therefore do not require download icon, since they are
                // not downloaded
                if (template instanceof SimpleProject
                        || ((template.getItem().isLocal() || TemplateUtils.hasBeenDownloaded(template))
                                && !template.getItem().isNewerVersionAvailable())) {
                    return templateImage;
                }

                return WizardImages.getImage(new DecorationOverlayIcon(templateImage,
                        new ImageDescriptor[] { StsUiImages.DOWNLOAD_OVERLAY, null, null, null, null }));
            }

            if (element instanceof TemplateCategory) {
                return WizardImages.getImage(WizardImages.TEMPLATE_CATEGORY_ICON);
            }
            return null;
        }
    });

    treeViewer.setSorter(new ViewerSorter() {
        @Override
        public int compare(Viewer viewer, Object e1, Object e2) {
            if (e1 instanceof TemplateCategory && e2 instanceof Template) {
                return -1;
            }
            if (e1 instanceof Template && e2 instanceof TemplateCategory) {
                return 1;
            }

            if (e1 instanceof ITemplateElement && e2 instanceof ITemplateElement) {
                ITemplateElement t1 = (ITemplateElement) e1;
                ITemplateElement t2 = (ITemplateElement) e2;
                // Special Case, Simple Projects category is placed above
                // others
                if (t1.getName().equals(SIMPLE_PROJECTS_CATEGORY)) {
                    return -1;
                } else if (t2.getName().equals(SIMPLE_PROJECTS_CATEGORY)) {
                    return 1;
                } else {
                    return t1.getName().compareTo(t2.getName());
                }
            }
            return super.compare(viewer, e1, e2);
        }
    });

    treeViewer.setContentProvider(new TemplateContentProvider());

    treeViewer.setInput(templates);

    Composite legendContainer = new Composite(container, SWT.NONE);
    legendContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    GridLayout headerLayout = new GridLayout(3, false);
    headerLayout.marginWidth = 0;
    headerLayout.marginHeight = 0;
    legendContainer.setLayout(headerLayout);

    Composite legendComposite = new Composite(legendContainer, SWT.NONE);
    GridLayout legendLayout = new GridLayout(2, false);
    legendLayout.verticalSpacing = 0;
    legendLayout.marginHeight = 0;
    legendLayout.marginBottom = 0;

    int legendControlVerticalIndent = 5;

    legendComposite.setLayout(legendLayout);
    legendComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    legendImage = new Label(legendComposite, SWT.NONE);

    GridDataFactory.fillDefaults().grab(false, false).indent(0, legendControlVerticalIndent)
            .applyTo(legendImage);

    legendImage.setImage(WizardImages.getImage(StsUiImages.DOWNLOAD_OVERLAY));
    legendImage.setToolTipText("Templates with this icon will be downloaded after clicking the 'Next' button.");

    legendText = new Label(legendComposite, SWT.NONE);
    legendText.setText("requires downloading");

    GridDataFactory.fillDefaults().grab(false, false).indent(0, legendControlVerticalIndent)
            .applyTo(legendText);

    Hyperlink hyperlink = new Hyperlink(legendContainer, SWT.WRAP);
    GridDataFactory.fillDefaults().grab(false, false).indent(0, legendControlVerticalIndent).applyTo(hyperlink);
    hyperlink.setText(NLS.bind("Configure templates...", null));
    Color blue = new Color(null, 0, 0, 255);
    hyperlink.setForeground(blue);
    hyperlink.setUnderlined(true);
    blue.dispose();
    hyperlink.addHyperlinkListener(new HyperlinkAdapter() {
        @Override
        public void linkActivated(HyperlinkEvent event) {
            PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null,
                    TemplatesPreferencePage.EXAMPLE_PREFERENCES_PAGE_ID, null, null);
            refreshButton.setEnabled(false);

            dialog.open();
            downloadDescriptors();

            refreshButton.setEnabled(!isRefreshing());

        }
    });

    refreshButton = new Button(legendContainer, SWT.PUSH);
    refreshButton.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
    refreshButton.setText("Refresh");
    refreshButton.setEnabled(!isRefreshing());

    // refreshButton.setImage(WizardImages.getImage(WizardImages.REFRESH_ICON));

    refreshButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {

            // under most circumstances, we don't want to download templates
            // if there has not been any change. However, when the user
            // presses Refresh, they really do want to see something happen.
            ContentPlugin.getDefault().getManager().setDirty();

            downloadDescriptors();
        }

    });

    refreshButton.setToolTipText(
            "Refresh the list of templates. Note that the current template selection will be cleared.");

    Composite descriptionComposite = new Composite(container, SWT.NONE);
    descriptionComposite.setLayout(new GridLayout());
    descriptionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    descriptionLabel = new Label(descriptionComposite, SWT.NONE);
    descriptionLabel.setText("Description:"); //$NON-NLS-1$
    descriptionLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    descriptionText = new StyledText(descriptionComposite, SWT.WRAP | SWT.READ_ONLY | SWT.V_SCROLL);
    // descriptionText.setAlwaysShowScrollBars(false);
    Display display = Display.getCurrent();
    if (display != null) {
        descriptionText.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
    }

    GridData descriptionData = new GridData(SWT.FILL, SWT.FILL, true, true);
    descriptionData.widthHint = 200;
    descriptionData.heightHint = 80;
    descriptionText.setLayoutData(descriptionData);

    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {

        public void selectionChanged(SelectionChangedEvent event) {
            ISelection selection = treeViewer.getSelection();
            if (selection instanceof TreeSelection) {
                Object element = ((TreeSelection) selection).getFirstElement();
                if (element instanceof Template) {
                    setSeletectedTemplate((Template) element);
                } else if (element instanceof TemplateCategory) {
                    // Note: ONLY clear the selected template if the
                    // selection is a template category.
                    // Do not clear the template if there is an empty
                    // selection in the tree, as there
                    // are times when the viewer
                    // will set an empty selection in the tree due to a
                    // refresh operation, and if
                    // a template was already selected prior to that refresh
                    // request, it should not be
                    // overwritten with null as other operations will
                    // require that the selected template not be changed
                    setSeletectedTemplate(null);
                }
            }
        }

    });

    this.contentManagerListener = new PropertyChangeListener() {

        public void propertyChange(PropertyChangeEvent event) {

            ContentManager manager = event.getSource() instanceof ContentManager
                    ? (ContentManager) event.getSource()
                    : null;
            final boolean hasTemplateContentChanged = manager != null && manager.isDirty();
            if (hasTemplateContentChanged) {

                clearTemplateSelection();

                // Only reinitialise templates if the manager is marked as
                // dirty, as template contents may have changed, therefore
                // new templates
                // need to be created in the tree viewer
                initialiseTemplatesFromContentManager();

            }
            // switch to UI thread to refresh the UI controls
            PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
                public void run() {
                    refreshPage(hasTemplateContentChanged);
                }
            });

        }

    };

    ContentManager manager = ContentPlugin.getDefault().getManager();
    manager.addListener(contentManagerListener);

    // This does not automatically add the templates to the tree viewer
    // input.
    // Rather it downloads templates asynchronously, and the content manager
    // will then notify the tree viewer when the content is available and at
    // that time
    // refresh the tree input
    downloadDescriptors();

    expandCategory(SIMPLE_PROJECTS_CATEGORY);

    return container;

}

From source file:org.springframework.ide.eclipse.wizard.template.TemplateSelectionWizardPage.java

License:Open Source License

public void createControl(Composite parent) {
    initializeTemplates();/*from  ww  w. j  a  va2 s.c o  m*/
    Composite container = new Composite(parent, SWT.NONE);
    container.setLayout(new GridLayout());
    container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Label label = new Label(container, SWT.NONE);
    label.setText("Templates:"); //$NON-NLS-1$
    label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    String[] names = new String[templates.size()];
    for (int i = 0; i < templates.size(); i++) {
        names[i] = templates.get(i).getName();
    }

    Tree tree = new Tree(container, SWT.FULL_SELECTION | SWT.BORDER);
    tree.setLinesVisible(false);
    tree.setHeaderVisible(false);
    tree.setEnabled(true);
    tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    treeViewer = new TreeViewer(tree);

    treeViewer.setLabelProvider(new ILabelProvider() {

        public void removeListener(ILabelProviderListener listener) {
        }

        public boolean isLabelProperty(Object element, String property) {
            return false;
        }

        public void dispose() {
        }

        public void addListener(ILabelProviderListener listener) {
        }

        public String getText(Object element) {
            if (element instanceof ITemplateElement) {
                return ((ITemplateElement) element).getName();
            }
            return null;
        }

        public Image getImage(Object element) {
            if (element instanceof Template) {
                Template template = (Template) element;
                Image templateImage = WizardImages.getImage(WizardImages.TEMPLATE_ICON);
                if (template.getItem().isLocal() && !template.getItem().isNewerVersionAvailable()) {
                    return templateImage;
                }
                return WizardImages.getImage(new DecorationOverlayIcon(templateImage,
                        new ImageDescriptor[] { StsUiImages.DOWNLOAD_OVERLAY, null, null, null, null }));
            }

            if (element instanceof TemplateCategory) {
                return WizardImages.getImage(WizardImages.TEMPLATE_CATEGORY_ICON);
            }
            return null;
        }
    });

    treeViewer.setSorter(new ViewerSorter() {
        @Override
        public int compare(Viewer viewer, Object e1, Object e2) {
            if (e1 instanceof TemplateCategory && e2 instanceof Template) {
                return -1;
            }
            if (e1 instanceof Template && e2 instanceof TemplateCategory) {
                return 1;
            }

            if (e1 instanceof ITemplateElement && e2 instanceof ITemplateElement) {
                ITemplateElement t1 = (ITemplateElement) e1;
                ITemplateElement t2 = (ITemplateElement) e2;
                return t1.getName().compareTo(t2.getName());
            }
            return super.compare(viewer, e1, e2);
        }
    });

    treeViewer.setContentProvider(new TemplateContentProvider());

    treeViewer.setInput(templates);

    Composite legendContainer = new Composite(container, SWT.NONE);
    legendContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    GridLayout headerLayout = new GridLayout(2, false);
    headerLayout.marginWidth = 0;
    headerLayout.marginHeight = 0;
    legendContainer.setLayout(headerLayout);

    Composite legendComposite = new Composite(legendContainer, SWT.NONE);
    GridLayout legendLayout = new GridLayout(2, false);
    legendLayout.verticalSpacing = 0;
    legendLayout.marginHeight = 0;
    legendLayout.marginBottom = 5;

    legendComposite.setLayout(legendLayout);
    legendComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    legendImage = new Label(legendComposite, SWT.NONE);
    legendImage.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
    legendImage.setImage(WizardImages.getImage(StsUiImages.DOWNLOAD_OVERLAY));

    legendText = new Label(legendComposite, SWT.NONE);
    legendText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    legendText.setText("requires downloading");

    Hyperlink hyperlink = new Hyperlink(container, SWT.WRAP | SWT.TRAIL | SWT.TOP);
    GridDataFactory.fillDefaults().grab(false, true).align(SWT.END, SWT.BEGINNING).indent(5, 0)
            .applyTo(hyperlink);
    hyperlink.setText(NLS.bind("Configure templates...", null));
    Color blue = new Color(null, 0, 0, 255);
    hyperlink.setForeground(blue);
    hyperlink.setUnderlined(true);
    blue.dispose();
    hyperlink.addHyperlinkListener(new HyperlinkAdapter() {
        @Override
        public void linkActivated(HyperlinkEvent event) {
            PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null,
                    TemplatesPreferencePage.EXAMPLE_PREFERENCES_PAGE_ID, null, null);
            refreshButton.setEnabled(false);
            setErrorMessage(null);

            dialog.open();
            if (ContentPlugin.getDefault().getManager().isDirty()) {
                downloadDescriptors();
            }

            refreshButton.setEnabled(!isRefreshing());

        }
    });

    refreshButton = new Button(legendContainer, SWT.PUSH);
    refreshButton.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
    refreshButton.setText("Refresh");
    refreshButton.setEnabled(!isRefreshing());

    // refreshButton.setImage(WizardImages.getImage(WizardImages.REFRESH_ICON));

    refreshButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            setErrorMessage(null);
            // under most circumstances, we don't want to download templates
            // if there has not been any change. However, when the user
            // presses Refresh, they really do want to see something happen.
            ContentPlugin.getDefault().getManager().setDirty();

            downloadDescriptors();
        }

    });

    Composite descriptionComposite = new Composite(container, SWT.NONE);
    descriptionComposite.setLayout(new GridLayout());
    descriptionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    descriptionLabel = new Label(descriptionComposite, SWT.NONE);
    descriptionLabel.setText("Description:"); //$NON-NLS-1$
    descriptionLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    descriptionLabel.setVisible(false);

    descriptionText = new Text(descriptionComposite, SWT.WRAP | SWT.READ_ONLY | SWT.V_SCROLL);
    GridData descriptionData = new GridData(SWT.FILL, SWT.FILL, true, true);
    descriptionData.widthHint = 200;
    descriptionData.heightHint = 80;
    descriptionText.setLayoutData(descriptionData);

    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {

        public void selectionChanged(SelectionChangedEvent event) {
            ISelection selection = treeViewer.getSelection();

            if (selection instanceof TreeSelection) {
                Object element = ((TreeSelection) selection).getFirstElement();
                if (element instanceof Template) {
                    if (element != null) {
                        selectedTemplate = ((Template) element);
                    }
                }
            }
            firstPage = null;

            if (selectedTemplate != null) {
                setDescription(selectedTemplate);
                if (TemplateSelectionWizardPage.this.equals(wizard.getContainer().getCurrentPage())) {
                    wizard.getContainer().updateButtons();
                }
            }
        }

    });

    this.contentManagerListener = new PropertyChangeListener() {

        public void propertyChange(PropertyChangeEvent arg0) {
            initializeTemplates();
            // switch to UI thread
            PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
                public void run() {
                    refreshPage();
                }
            });
        }

    };

    ContentManager manager = ContentPlugin.getDefault().getManager();
    manager.addListener(contentManagerListener);

    if (manager.isDirty()) {
        downloadDescriptors();
    }

    setControl(container);

}

From source file:org.springframework.ide.eclipse.wizard.template.util.ExampleProjectsDashboardPart.java

License:Open Source License

private void createLinkToPreferencesPage() {
    FormToolkit toolkit = getToolkit();/*from w ww.  j  av a 2  s  .  c  o  m*/

    Hyperlink configureLink = toolkit.createHyperlink(composite, "Edit list of example projects", SWT.WRAP);
    configureLink.addHyperlinkListener(new HyperlinkAdapter() {
        @Override
        public void linkActivated(HyperlinkEvent event) {
            PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getControl().getShell(),
                    ExampleProjectsPreferencePage.EXAMPLE_PREFERENCES_PAGE_ID, null, null);
            dialog.open();
        }
    });

}

From source file:org.springsource.ide.eclipse.commons.gettingstarted.dashboard.ExtensionsEditor.java

License:Open Source License

@Override
public void createPartControl(Composite parent) {
    toolkit = new FormToolkit(parent.getDisplay());
    form = toolkit.createScrolledForm(parent);
    Composite body = form.getBody();
    body.setLayout(new GridLayout(5, false));

    discoveryViewer = new DashboardDiscoveryViewer(getSite(), this);
    initialize(discoveryViewer);/*from  w  ww.j  ava 2  s  .  co m*/
    discoveryViewer.setDirectoryUrl(ResourceProvider.getUrl(RESOURCE_DISCOVERY_DIRECTORY).replace("%VERSION%",
            IdeUiUtils.getShortVersion()));
    discoveryViewer.setShowConnectorDescriptorKindFilter(false);
    discoveryViewer.createControl(body);
    adaptRecursively(discoveryViewer.getControl(), toolkit);
    GridDataFactory.fillDefaults().span(5, 1).grab(true, true).applyTo(discoveryViewer.getControl());

    findUpdatesButton = toolkit.createButton(body, "&Find Updates", SWT.NONE);
    findUpdatesButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent event) {
            IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
            try {
                handlerService.executeCommand("org.eclipse.equinox.p2.ui.sdk.update", new Event());
            } catch (Exception e) {
                StatusManager.getManager()
                        .handle(new Status(IStatus.ERROR, IdeUiPlugin.PLUGIN_ID,
                                "Find updates failed with an unexpected error.", e),
                                StatusManager.SHOW | StatusManager.LOG);
            }
        }
    });

    Hyperlink configureLink = toolkit.createHyperlink(body, "Configure Extensions...", SWT.NONE);
    configureLink.addHyperlinkListener(new HyperlinkAdapter() {
        @Override
        public void linkActivated(HyperlinkEvent event) {
            PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getSite().getShell(),
                    ID_PREFERENCE_PAGE, new String[] { ID_PREFERENCE_PAGE }, null);
            dialog.open();
        }
    });

    progressMonitorPart = new ProgressMonitorPart(body, null);
    monitor.attach(progressMonitorPart);
    progressMonitorPart.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            monitor.setCanceled(true);
            monitor.detach(progressMonitorPart);
        }
    });
    adaptRecursively(progressMonitorPart, toolkit);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(progressMonitorPart);

    // Button refreshButton = toolkit.createButton(body, "Refresh",
    // SWT.NONE);
    // refreshButton.addSelectionListener(new SelectionAdapter() {
    // @Override
    // public void widgetSelected(SelectionEvent e) {
    // pane.updateDiscovery();
    // }
    // });

    cancelButton = toolkit.createButton(body, "&Cancel", SWT.NONE);
    cancelButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            cancelButton.setEnabled(false);
            progressMonitorPart.setCanceled(true);
        }
    });

    installButton = toolkit.createButton(body, "&Install", SWT.NONE);
    installButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            // check for conflicts
            List<ConnectorDescriptor> selection = discoveryViewer.getInstallableConnectors();
            IStatus conflictStatus = new MultiStatus(IdeUiPlugin.PLUGIN_ID, -1,
                    new IStatus[] {
                            checkForConflicts(SVN_FEATURES, " Please select only one SVN team provider.",
                                    selection),
                            checkForConflicts(M2E_EXTENSION_IDS,
                                    " Please select only one m2e version to install.", selection) },
                    "Could not perform install due to conflicts.", null);
            if (!conflictStatus.isOK()) {
                StatusManager.getManager().handle(conflictStatus, StatusManager.SHOW | StatusManager.BLOCK);
                return;
            }

            // now, if m2e is going to be installed, ensure that all other
            // versions of m2e are uninstalled first.
            Set<String> featuresToUninstall = chooseUnwantedFeatures(selection);
            if (!featuresToUninstall.isEmpty()) {
                IStatus uninstallResult = uninstallFeatures(featuresToUninstall);
                if (!uninstallResult.isOK()) {
                    if (uninstallResult.getSeverity() != IStatus.CANCEL) {
                        StatusManager.getManager().handle(uninstallResult,
                                StatusManager.SHOW | StatusManager.LOG | StatusManager.BLOCK);
                    }
                    return;
                }
            }

            DiscoveryUi.install(discoveryViewer.getInstallableConnectors(), ExtensionsEditor.this);
        }

        private IStatus uninstallFeatures(final Set<String> featuresToUninstall) {
            String allInstalled = findFeaturesToUninstall(featuresToUninstall,
                    discoveryViewer.getInstalledFeatures());
            if (allInstalled.length() == 0) {
                return Status.OK_STATUS;
            }

            boolean res = MessageDialog.openQuestion(getEditorSite().getShell(), "Perform uninstall?",
                    "In order to switch versions of m2eclipse, the following features will be uninstalled:\n"
                            + allInstalled + "Do you want to continue?");

            if (!res) {
                return Status.CANCEL_STATUS;
            }

            // uninstall previous Maven tooling
            AbstractInstallJob job = DiscoveryUi.createInstallJob();
            try {

                return job.uninstall(new UninstallRequest() {
                    /**
                     * Uninstall all features that are somehow related to
                     * m2eclipse
                     */
                    @Override
                    public boolean select(@SuppressWarnings("rawtypes") InstalledItem item) {
                        String featureId = item.getId();
                        return isRelatedToM2e(featuresToUninstall, featureId);
                    }
                }, new NullProgressMonitor());
            } catch (Exception e) {
                return new Status(IStatus.ERROR, IdeUiPlugin.PLUGIN_ID,
                        NLS.bind("Could not uninstall features:\n{0},\n try uninstalling manually.",
                                featuresToUninstall),
                        e);
            }
        }

        private String findFeaturesToUninstall(Set<String> featuresToUninstall, Set<String> installedFeatures) {
            StringBuilder sb = new StringBuilder();
            for (String featureId : installedFeatures) {
                if (isRelatedToM2e(featuresToUninstall, featureId)) {
                    if (featureId.endsWith(".feature.group")) {
                        featureId = featureId.substring(0, featureId.length() - ".feature.group".length());
                    }
                    sb.append("   " + featureId + "\n");
                }
            }
            return sb.toString();
        }

        private Set<String> chooseUnwantedFeatures(List<ConnectorDescriptor> selection) {
            boolean uninstallOld = false;
            boolean uninstallNew = false;
            for (ConnectorDescriptor feature : selection) {
                // if new m2e to be installed, then must uninstall the old
                // first and vice versa
                if (feature.getId().equals(NEW_M2E_EXTENSION_ID)) {
                    uninstallOld = true;
                } else if (feature.getId().equals(OLD_M2E_EXTENSION_ID)) {
                    uninstallNew = true;
                }
            }

            Set<String> maybeUninstall;
            if (uninstallOld) {
                maybeUninstall = OLD_M2E_FEATURES;
            } else if (uninstallNew) {
                maybeUninstall = NEW_M2E_FEATURES;
            } else {
                maybeUninstall = Collections.emptySet();
            }

            Set<String> installedFeatures = ExtensionsEditor.this.discoveryViewer.getInstalledFeatures();
            Set<String> definitelyUninstall = new HashSet<String>();
            for (String feature : maybeUninstall) {
                if (installedFeatures.contains(feature)) {
                    definitelyUninstall.add(feature);
                }
            }

            if (definitelyUninstall.size() > 0) {
                IdeUiPlugin.log(new Status(IStatus.INFO, IdeUiPlugin.PLUGIN_ID,
                        "To make way for a new version of m2eclipse, we will uninstall these features: "
                                + definitelyUninstall));
            }
            return definitelyUninstall;
        }

        /**
         * This method checks for conflicts with requested installs. If a
         * conflict is found, this method will pop up a dialog explaining
         * the conflict and it will return true.
         *
         * @param featuresToCheck set of features of which only one can be
         * installed at once.
         * @param message message to add if there is an error
         * @param selection
         *
         * @return true iff there is a conflict.
         */
        public IStatus checkForConflicts(Set<String> featuresToCheck, String prependedMessage,
                List<ConnectorDescriptor> selection) {
            StringBuilder message = new StringBuilder();
            List<ConnectorDescriptor> conflicting = new ArrayList<ConnectorDescriptor>();
            for (ConnectorDescriptor descriptor : selection) {
                if (featuresToCheck.contains(descriptor.getId())) {
                    conflicting.add(descriptor);
                    if (message.length() > 0) {
                        message.append(", ");
                    }
                    message.append(descriptor.getName());
                }
            }
            if (conflicting.size() > 1) {
                return new Status(IStatus.WARNING, IdeUiPlugin.PLUGIN_ID,
                        NLS.bind("The following extensions can not be installed at the same time: {0}.",
                                message.toString()));
            } else {
                return Status.OK_STATUS;
            }
        }
    });

    Display.getCurrent().asyncExec(new Runnable() {
        public void run() {
            if (form != null && !form.isDisposed()) {
                discoveryViewer.updateDiscovery();
            }
        }
    });

    discoveryViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            installButton.setEnabled(discoveryViewer.isComplete());
        }
    });
}

From source file:org.springsource.ide.eclipse.commons.ui.tips.TipInfo.java

License:Open Source License

public void invokeAction(String text, IWorkbenchWindow activeWindow) {
    if (text.startsWith(TipInfo.PREF)) {
        PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(activeWindow.getShell(),
                text.substring(TipInfo.PREF.length()), null, null);
        dialog.open();
    } else if (text.startsWith(TipInfo.COMMAND)) {
        String commandIdString = text.substring(TipInfo.COMMAND.length());
        if (activeWindow != null) {
            ICommandService commandService = (ICommandService) activeWindow.getService(ICommandService.class);
            try {
                Command command = commandService.getCommand(commandIdString);
                command.executeWithChecks(new ExecutionEvent());
            } catch (Exception e) {
                e.printStackTrace();// w ww  . ja va  2  s .  c o  m
            }
        }
    } else {
        UiUtil.openUrl(text);
    }
}

From source file:org.springsource.ide.eclipse.dashboard.internal.ui.discovery.DashboardExtensionsPage.java

License:Open Source License

@Override
protected void createFormContent(final IManagedForm managedForm) {
    Composite body = managedForm.getForm().getBody();
    body.setLayout(new GridLayout(5, false));

    discoveryViewer = new DashboardDiscoveryViewer(getSite(), this);
    initialize(discoveryViewer);/*www.  ja v  a  2s .com*/
    discoveryViewer.setDirectoryUrl(ResourceProvider.getUrl(RESOURCE_DISCOVERY_DIRECTORY).replace("%VERSION%",
            IdeUiUtils.getShortVersion()));
    discoveryViewer.setShowConnectorDescriptorKindFilter(false);
    discoveryViewer.createControl(body);
    FormToolkit toolkit = managedForm.getToolkit();
    adaptRecursively(discoveryViewer.getControl(), toolkit);
    GridDataFactory.fillDefaults().span(5, 1).grab(true, true).applyTo(discoveryViewer.getControl());

    findUpdatesButton = toolkit.createButton(body, "&Find Updates", SWT.NONE);
    findUpdatesButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent event) {
            IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
            try {
                handlerService.executeCommand("org.eclipse.equinox.p2.ui.sdk.update", new Event());
            } catch (Exception e) {
                StatusManager.getManager()
                        .handle(new Status(IStatus.ERROR, IdeUiPlugin.PLUGIN_ID,
                                "Find updates failed with an unexpected error.", e),
                                StatusManager.SHOW | StatusManager.LOG);
            }
        }
    });

    Hyperlink configureLink = toolkit.createHyperlink(body, "Configure Extensions...", SWT.NONE);
    configureLink.addHyperlinkListener(new HyperlinkAdapter() {
        @Override
        public void linkActivated(HyperlinkEvent event) {
            PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getSite().getShell(),
                    ID_PREFERENCE_PAGE, new String[] { ID_PREFERENCE_PAGE }, null);
            dialog.open();
        }
    });

    progressMonitorPart = new ProgressMonitorPart(body, null);
    monitor.attach(progressMonitorPart);
    progressMonitorPart.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent e) {
            monitor.setCanceled(true);
            monitor.detach(progressMonitorPart);
        }
    });
    adaptRecursively(progressMonitorPart, toolkit);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(progressMonitorPart);

    // Button refreshButton = toolkit.createButton(body, "Refresh",
    // SWT.NONE);
    // refreshButton.addSelectionListener(new SelectionAdapter() {
    // @Override
    // public void widgetSelected(SelectionEvent e) {
    // pane.updateDiscovery();
    // }
    // });

    cancelButton = toolkit.createButton(body, "&Cancel", SWT.NONE);
    cancelButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            cancelButton.setEnabled(false);
            progressMonitorPart.setCanceled(true);
        }
    });

    installButton = toolkit.createButton(body, "&Install", SWT.NONE);
    installButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            // check for conflicts
            List<ConnectorDescriptor> selection = discoveryViewer.getInstallableConnectors();
            IStatus conflictStatus = new MultiStatus(IdeUiPlugin.PLUGIN_ID, -1,
                    new IStatus[] {
                            checkForConflicts(SVN_FEATURES, " Please select only one SVN team provider.",
                                    selection),
                            checkForConflicts(M2E_EXTENSION_IDS,
                                    " Please select only one m2e version to install.", selection) },
                    "Could not perform install due to conflicts.", null);
            if (!conflictStatus.isOK()) {
                StatusManager.getManager().handle(conflictStatus, StatusManager.SHOW | StatusManager.BLOCK);
                return;
            }

            // now, if m2e is going to be installed, ensure that all other
            // versions of m2e are uninstalled first.
            Set<String> featuresToUninstall = chooseUnwantedFeatures(selection);
            if (!featuresToUninstall.isEmpty()) {
                IStatus uninstallResult = uninstallFeatures(featuresToUninstall);
                if (!uninstallResult.isOK()) {
                    if (uninstallResult.getSeverity() != IStatus.CANCEL) {
                        StatusManager.getManager().handle(uninstallResult,
                                StatusManager.SHOW | StatusManager.LOG | StatusManager.BLOCK);
                    }
                    return;
                }
            }

            DiscoveryUi.install(discoveryViewer.getInstallableConnectors(), DashboardExtensionsPage.this);
        }

        private IStatus uninstallFeatures(final Set<String> featuresToUninstall) {
            String allInstalled = findFeaturesToUninstall(featuresToUninstall,
                    discoveryViewer.getInstalledFeatures());
            if (allInstalled.length() == 0) {
                return Status.OK_STATUS;
            }

            boolean res = MessageDialog.openQuestion(getPartControl().getShell(), "Perform uninstall?",
                    "In order to switch versions of m2eclipse, the following features will be uninstalled:\n"
                            + allInstalled + "Do you want to continue?");

            if (!res) {
                return Status.CANCEL_STATUS;
            }

            // uninstall previous Maven tooling
            AbstractInstallJob job = DiscoveryUi.createInstallJob();
            try {

                return job.uninstall(new UninstallRequest() {
                    /**
                     * Uninstall all features that are somehow related to
                     * m2eclipse
                     */
                    @Override
                    public boolean select(InstalledItem item) {
                        String featureId = item.getId();
                        return isRelatedToM2e(featuresToUninstall, featureId);
                    }
                }, new NullProgressMonitor());
            } catch (Exception e) {
                return new Status(IStatus.ERROR, IdeUiPlugin.PLUGIN_ID,
                        NLS.bind("Could not uninstall features:\n{0},\n try uninstalling manually.",
                                featuresToUninstall),
                        e);
            }
        }

        private String findFeaturesToUninstall(Set<String> featuresToUninstall, Set<String> installedFeatures) {
            StringBuilder sb = new StringBuilder();
            for (String featureId : installedFeatures) {
                if (isRelatedToM2e(featuresToUninstall, featureId)) {
                    if (featureId.endsWith(".feature.group")) {
                        featureId = featureId.substring(0, featureId.length() - ".feature.group".length());
                    }
                    sb.append("   " + featureId + "\n");
                }
            }
            return sb.toString();
        }

        private Set<String> chooseUnwantedFeatures(List<ConnectorDescriptor> selection) {
            boolean uninstallOld = false;
            boolean uninstallNew = false;
            for (ConnectorDescriptor feature : selection) {
                // if new m2e to be installed, then must uninstall the old
                // first and vice versa
                if (feature.getId().equals(NEW_M2E_EXTENSION_ID)) {
                    uninstallOld = true;
                } else if (feature.getId().equals(OLD_M2E_EXTENSION_ID)) {
                    uninstallNew = true;
                }
            }

            Set<String> maybeUninstall;
            if (uninstallOld) {
                maybeUninstall = OLD_M2E_FEATURES;
            } else if (uninstallNew) {
                maybeUninstall = NEW_M2E_FEATURES;
            } else {
                maybeUninstall = Collections.emptySet();
            }

            Set<String> installedFeatures = DashboardExtensionsPage.this.discoveryViewer.getInstalledFeatures();
            Set<String> definitelyUninstall = new HashSet<String>();
            for (String feature : maybeUninstall) {
                if (installedFeatures.contains(feature)) {
                    definitelyUninstall.add(feature);
                }
            }

            if (definitelyUninstall.size() > 0) {
                IdeUiPlugin.log(new Status(IStatus.INFO, IdeUiPlugin.PLUGIN_ID,
                        "To make way for a new version of m2eclipse, we will uninstall these features: "
                                + definitelyUninstall));
            }
            return definitelyUninstall;
        }

        /**
         * This method checks for conflicts with requested installs. If a
         * conflict is found, this method will pop up a dialog explaining
         * the conflict and it will return true.
         * @param featuresToCheck set of features of which only one can be
         * installed at once.
         * @param message message to add if there is an error
         * @param selection
         * 
         * @return true iff there is a conflict.
         */
        public IStatus checkForConflicts(Set<String> featuresToCheck, String prependedMessage,
                List<ConnectorDescriptor> selection) {
            StringBuilder message = new StringBuilder();
            List<ConnectorDescriptor> conflicting = new ArrayList<ConnectorDescriptor>();
            for (ConnectorDescriptor descriptor : selection) {
                if (featuresToCheck.contains(descriptor.getId())) {
                    conflicting.add(descriptor);
                    if (message.length() > 0) {
                        message.append(", ");
                    }
                    message.append(descriptor.getName());
                }
            }
            if (conflicting.size() > 1) {
                return new Status(IStatus.WARNING, IdeUiPlugin.PLUGIN_ID,
                        NLS.bind("The following extensions can not be installed at the same time: {0}.",
                                message.toString()));
            } else {
                return Status.OK_STATUS;
            }
        }
    });

    Display.getCurrent().asyncExec(new Runnable() {
        public void run() {
            if (!managedForm.getForm().isDisposed()) {
                discoveryViewer.updateDiscovery();
            }
        }
    });

    discoveryViewer.addSelectionChangedListener(new ISelectionChangedListener() {
        public void selectionChanged(SelectionChangedEvent event) {
            installButton.setEnabled(discoveryViewer.isComplete());
        }
    });
}

From source file:org.springsource.ide.eclipse.dashboard.internal.ui.editors.DashboardMainPage.java

License:Open Source License

private void createFeedsSection(Composite parent, final String title, FeedType feedType, String feedName) {
    final Section section = new Section(parent, ExpandableComposite.TITLE_BAR) {
        @Override//  ww w.  j a v a  2s  .c o  m
        public void redraw() {
            GridData compositeData = (GridData) feedsScrolled.getLayoutData();
            compositeData.widthHint = getSize().x - 35;
            compositeData.heightHint = getSize().y - 40;
            compositeData.grabExcessHorizontalSpace = false;
            compositeData.grabExcessVerticalSpace = false;

            super.redraw();
        }
    };

    form.addControlListener(new ControlAdapter() {

        @Override
        public void controlResized(ControlEvent e) {
            GridData data = (GridData) section.getLayoutData();
            data.heightHint = form.getSize().y - FEEDS_TEXT_WRAP_INDENT;
        }
    });

    toolkit.adapt(section);
    section.setTitleBarForeground(toolkit.getColors().getColor(IFormColors.TB_TOGGLE));
    section.setTitleBarBackground(toolkit.getColors().getColor(IFormColors.TB_BG));
    section.setTitleBarBorderColor(toolkit.getColors().getColor(IFormColors.TB_BORDER));
    section.setFont(FormFonts.getInstance().getBoldFont(getSite().getShell().getDisplay(), section.getFont()));

    section.setText(title);
    section.setLayout(new GridLayout());
    GridDataFactory.fillDefaults().grab(true, true).hint(300, 300).applyTo(section);

    final Composite headerComposite = toolkit.createComposite(section, SWT.NONE);
    RowLayout rowLayout = new RowLayout();
    rowLayout.marginTop = 0;
    rowLayout.marginBottom = 0;
    headerComposite.setLayout(rowLayout);
    headerComposite.setBackground(null);

    ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
    toolBarManager.createControl(headerComposite);

    final PageBook pagebook = new PageBook(section, SWT.NONE);
    toolkit.adapt(pagebook);
    pagebook.setLayoutData(new GridLayout());

    final Composite disclaimer = createDisclaimer(pagebook);

    feedsScrolled = new ScrolledComposite(pagebook, SWT.V_SCROLL);

    feedsScrolled.setExpandVertical(false);
    feedsScrolled.setLayout(new GridLayout());
    feedsScrolled.setAlwaysShowScrollBars(false);
    GridDataFactory.fillDefaults().grab(true, false).applyTo(feedsScrolled);
    toolkit.adapt(feedsScrolled);

    feedsComposite = toolkit.createComposite(feedsScrolled);
    feedsComposite.setLayout(new TableWrapLayout());
    GridDataFactory.fillDefaults().grab(true, false).applyTo(feedsComposite);
    feedsScrolled.setContent(feedsComposite);

    feedsComposite.addPaintListener(new PaintListener() {

        public void paintControl(PaintEvent e) {
            GridData data = (GridData) feedsComposite.getLayoutData();
            data.widthHint = section.getSize().x - FEEDS_TEXT_WRAP_INDENT;
            data.heightHint = form.getSize().y - 50;
        }
    });
    section.addControlListener(new ControlAdapter() {

        @Override
        public void controlResized(ControlEvent e) {
            GridData data = (GridData) feedsScrolled.getLayoutData();
            data.heightHint = form.getSize().y - 50;
            data.grabExcessVerticalSpace = false;
            feedsScrolled.setSize(section.getSize().x - 40, form.getSize().y - 50);

            for (Control feedControl : feedControls) {
                ((TableWrapData) feedControl.getLayoutData()).maxWidth = section.getSize().x
                        - FEEDS_TEXT_WRAP_INDENT;
                // Point size = feedControl.computeSize(data.widthHint,
                // 400);
                // feedControl.setSize(size);
                // feedControl.pack(true);
            }

            feedsComposite.pack();
        };
    });

    feedControls = new HashSet<Control>();

    final Map<String, String> springMap = new HashMap<String, String>();
    String[] urls = ResourceProvider.getUrls(RESOURCE_DASHBOARD_FEEDS_BLOGS);
    for (String url : urls) {
        springMap.put(url, null);
    }

    getEditorSite().getShell().getDisplay().asyncExec(new Runnable() {

        public void run() {
            FeedsReader reader = new FeedsReader();
            CachedFeedsManager manager = new CachedFeedsManager(title, springMap, reader);
            try {
                manager.readCachedFeeds(null);
                Set<SyndEntry> entries = new HashSet<SyndEntry>();
                for (SyndFeed entry : reader.getFeeds()) {
                    entries.addAll(entry.getEntries());
                }

                if (!getManagedForm().getForm().isDisposed()) {
                    displayFeeds(entries, feedsComposite, feedsScrolled, pagebook, disclaimer, section);
                }
            } catch (IllegalArgumentException e) {
                StatusHandler.log(new Status(IStatus.ERROR, IdeUiPlugin.PLUGIN_ID,
                        "An unexpected error occurred while retrieving feed content from cache.", e));
            } catch (FeedException e) {
                StatusHandler.log(new Status(IStatus.ERROR, IdeUiPlugin.PLUGIN_ID,
                        "An unexpected error occurred while retrieving feed content from cache.", e));
            }
        }
    });

    refreshFeedsAction = new Action("Refresh Feeds", CommonImages.REFRESH) {
        @Override
        public void run() {
            Map<String, String> springMap = getFeedsMap();

            displayFeeds(feedsComposite, feedsScrolled, pagebook, disclaimer, springMap, title, section);
        }

    };

    Action configureURLsAction = new Action("Configure URLs", StsUiImages.RSS_CONFIGURE) {
        @Override
        public void run() {
            PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getSite().getShell(),
                    URL_CONFIGURATION_ID, new String[] { URL_CONFIGURATION_ID }, null);
            dialog.open();
        }
    };

    section.setClient(pagebook);
    section.setTextClient(headerComposite);

    toolBarManager.add(configureURLsAction);
    toolBarManager.add(refreshFeedsAction);
    toolBarManager.update(true);

    refreshFeedsAction.run();
}

From source file:org.springsource.ide.eclipse.dashboard.internal.ui.editors.DashboardMainPage.java

License:Open Source License

private Composite createDisclaimer(Composite parent) {
    FormText disclaimer = toolkit.createFormText(parent, true);
    disclaimer.setForeground(feedColor);
    disclaimer.setText(/*w  w  w  . j  ava  2  s .c  om*/
            "<form><p>No entries found. Ensure <a href=\"proxy\">firewall and proxy settings</a> are appropriately configured.</p></form>",
            true, false);
    disclaimer.addHyperlinkListener(new HyperlinkAdapter() {
        @Override
        public void linkActivated(HyperlinkEvent e) {
            if ("proxy".equals(e.data)) {
                PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null, PROXY_PREF_PAGE_ID,
                        null, null);
                dialog.open();
            }
        }

    });
    return disclaimer;
}

From source file:org.springsource.ide.eclipse.gradle.ui.JavaHomeSection.java

License:Open Source License

public void createContents(Composite page) {
    GridDataFactory grabHorizontal = GridDataFactory.fillDefaults().grab(true, false);
    Label label = new Label(page, SWT.NONE);
    label.setText("Java Home (requires Gradle 1.0.RC1 or later)");

    //Alternative 1

    Composite composite = new Composite(page, SWT.NONE);
    GridLayout layout = new GridLayout(3, false);
    composite.setLayout(layout);//w w w  .j a  v  a 2s  .  co m
    grabHorizontal.applyTo(composite);

    defaultButton = new Button(composite, SWT.RADIO);
    defaultButton.setText("Use Gradle wrapper's default");
    GridDataFactory span = GridDataFactory.fillDefaults().span(3, 1);
    span.applyTo(defaultButton);

    //Alternative 2: choose a workspace JRE

    customHomeButton = new Button(composite, SWT.RADIO);
    customHomeButton.setText("Workspace JRE: ");
    customHomeButton.setToolTipText("Use a specific Java installation configured in this workspace");

    customJRECombo = new Combo(composite, SWT.DROP_DOWN + SWT.READ_ONLY);
    refreshJREs();

    browseHomeButton = new Button(composite, SWT.PUSH);
    browseHomeButton.setText("Configure JREs");

    customHomeButton.addSelectionListener(new SelectionListener() {
        public void widgetSelected(SelectionEvent e) {
            enableDisableWidgets();
        }

        public void widgetDefaultSelected(SelectionEvent e) {
        }
    });

    browseHomeButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            @SuppressWarnings("restriction")
            IPreferencePage page = new org.eclipse.jdt.internal.debug.ui.jres.JREsPreferencePage();
            PreferenceManager mgr = new PreferenceManager();
            IPreferenceNode node = new PreferenceNode("1", page);
            mgr.addToRoot(node);
            PreferenceDialog dialog = new PreferenceDialog(owner.getShell(), mgr);
            dialog.create();
            dialog.setMessage(page.getTitle());
            dialog.open();

            refreshJREs();

            //            System.out.println("kdvolder");

            //            PreferenceDialog w = PreferencesUtil.createPreferenceDialogOn(owner.getShell(), JRE_PREF_PAGE_ID, new String[] {JRE_PREF_PAGE_ID, GradlePreferencesPage.ID}, null);
            //            w.setBlockOnOpen(true);
            //            w.open();
            //            //Eclipse only allows one preferences dialog to be open at the same time
            //            //We only get here after user closed dialog, so we must reopen it on the Gradle preferences page.
            //            PreferencesUtil.createPreferenceDialogOn(null, GradlePreferencesPage.ID, new String[] {JRE_PREF_PAGE_ID, GradlePreferencesPage.ID}, null).open();
        }

    });

    customJRECombo.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            validator.refresh();
        }
    });

    grabHorizontal.applyTo(customJRECombo);

    setJavaHomeInPage(getJavaHome());
    enableDisableWidgets();
}

From source file:org.springsource.ide.eclipse.gradle.ui.JavaHomeSectionImpl.java

License:Open Source License

/**
 * This does more or less what a PageSection implementation of createContents should do (i.e. 
 * create the widgets on the page).//from   ww w . j  a va2  s  .  com
 * <p>
 * However, it does not fill the widget contents with the contents of the preferences because
 * this implementation may not yet be connected to a preferences store yet when the widgets
 * are being created. It is up to the caller/client to make sure a to call copyFrom method
 * to (re)initialise the widget contents at an appropriate time. 
 * 
 * @param page
 */
public void createWidgets(Composite page) {
    GridDataFactory grabHor = GridDataFactory.fillDefaults().grab(true, false);
    Group group = null;
    if (!border) {
        Label label = new Label(page, SWT.NONE);
        label.setText(TITLE);
    } else {
        group = new Group(page, SWT.BORDER);
        group.setText(TITLE);
    }

    //Alternative 1

    Composite composite = border ? group : new Composite(page, SWT.NONE);
    GridLayout layout = new GridLayout(3, false);
    composite.setLayout(layout);
    grabHor.applyTo(composite);

    defaultButton = new Button(composite, SWT.RADIO);
    defaultButton.setText("Use Gradle wrapper's default");
    GridDataFactory span = GridDataFactory.fillDefaults().span(3, 1);
    span.applyTo(defaultButton);

    //Alternative 2: choose a workspace JRE

    customHomeButton = new Button(composite, SWT.RADIO);
    customHomeButton.setText("Workspace JRE: ");
    customHomeButton.setToolTipText("Use a specific Java installation configured in this workspace");
    customJRECombo = new Combo(composite, SWT.DROP_DOWN + SWT.READ_ONLY);
    configureJREsButton = new Button(composite, SWT.PUSH);
    configureJREsButton.setText("Configure JREs");

    grabHor.applyTo(configureJREsButton);
    grabHor.applyTo(customJRECombo);

    //Alternative 3: choose an execution environment
    customExecutionEnvButton = new Button(composite, SWT.RADIO);
    customExecutionEnvButton.setText("Execution Environment");
    customExecutionEnvButton.setToolTipText("Specify a JRE indirectly via an execution environment");
    customExecutionEnvCombo = new Combo(composite, SWT.DROP_DOWN + SWT.READ_ONLY);
    configureExecEnvsButton = new Button(composite, SWT.PUSH);
    configureExecEnvsButton.setText("Configure EEs");

    grabHor.applyTo(configureExecEnvsButton);
    grabHor.applyTo(customExecutionEnvCombo);

    refreshJREs();

    customHomeButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            enableDisableWidgets(customHomeButton, customJRECombo, configureJREsButton);
            doRefresh();
        }
    });
    customExecutionEnvButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            enableDisableWidgets(customExecutionEnvButton, customExecutionEnvCombo, configureExecEnvsButton);
            doRefresh();
        }
    });

    configureJREsButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            @SuppressWarnings("restriction")
            IPreferencePage page = new org.eclipse.jdt.internal.debug.ui.jres.JREsPreferencePage();
            PreferenceManager mgr = new PreferenceManager();
            IPreferenceNode node = new PreferenceNode("1", page);
            mgr.addToRoot(node);
            PreferenceDialog dialog = new PreferenceDialog(owner.getShell(), mgr);
            dialog.create();
            dialog.setMessage(page.getTitle());
            dialog.open();

            refreshJREs();
        }
    });

    configureExecEnvsButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            @SuppressWarnings("restriction")
            IPreferencePage page = new org.eclipse.jdt.internal.debug.ui.jres.ExecutionEnvironmentsPreferencePage();
            PreferenceManager mgr = new PreferenceManager();
            IPreferenceNode node = new PreferenceNode("1", page);
            mgr.addToRoot(node);
            PreferenceDialog dialog = new PreferenceDialog(owner.getShell(), mgr);
            dialog.create();
            dialog.setMessage(page.getTitle());
            dialog.open();

            refreshJREs();
        }

    });

    customJRECombo.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            doRefresh();
        }
    });

    customExecutionEnvCombo.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            doRefresh();
        }
    });

    grabHor.applyTo(customJRECombo);
}