at.bestsolution.efxclipse.tooling.jdt.ui.internal.buildpath.JavaFXPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for at.bestsolution.efxclipse.tooling.jdt.ui.internal.buildpath.JavaFXPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2011 BestSolution.at and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Tom Schindl<tom.schindl@bestsolution.at> - initial API and implementation
 *******************************************************************************/
package at.bestsolution.efxclipse.tooling.jdt.ui.internal.buildpath;

import java.io.File;

import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.osgi.service.prefs.BackingStoreException;

import at.bestsolution.efxclipse.tooling.jdt.core.internal.JavaFXCorePlugin;
import at.bestsolution.efxclipse.tooling.jdt.core.internal.JavaFXPreferencesConstants;

public class JavaFXPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

    private Text sdkDirectoryLocation;
    private Text customJarLocation;
    private Text customAntJarLocation;
    private Text customJavadocLocation;
    private Button customType;
    private Button builtinType;
    private Button sdkType;
    private Button browseForSDKDirectory;

    @Override
    public void init(IWorkbench workbench) {

    }

    @Override
    protected Control createContents(Composite parent) {
        Composite container = new Composite(parent, SWT.NONE);
        container.setLayout(new GridLayout(3, false));

        IEclipsePreferences pref = InstanceScope.INSTANCE.getNode(JavaFXCorePlugin.PLUGIN_ID);
        String type = pref.get(JavaFXPreferencesConstants.JAVAFX_CONFIGTYPE,
                JavaFXPreferencesConstants.DEFAULT_TYPE);

        if (JavaFXPreferencesConstants.isJDKBuiltin()) {
            builtinType = new Button(container, SWT.RADIO);
            builtinType.setText("JDK Built-in");
            builtinType.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 3, 1));
            builtinType.setSelection(type.equals(JavaFXPreferencesConstants.CONFIG_TYPE_BUILTIN));
            builtinType.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    updateSelection();
                }
            });
        }

        new Label(container, SWT.NONE).setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));

        {
            customType = new Button(container, SWT.RADIO);
            customType.setText("Custom Location");
            customType.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 3, 1));
            boolean selected = type.equals(JavaFXPreferencesConstants.CONFIG_TYPE_CUSTOM);
            customType.setSelection(selected);
            customType.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    updateSelection();
                }
            });

            {
                Label l = new Label(container, SWT.NONE);
                l.setText("Jar");

                customJarLocation = new Text(container, SWT.BORDER);
                customJarLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
                customJarLocation.setEnabled(selected);
            }

            {
                Label l = new Label(container, SWT.NONE);
                l.setText("JavaDoc");

                customJavadocLocation = new Text(container, SWT.BORDER);
                customJavadocLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
                customJavadocLocation.setEnabled(selected);
            }

            {
                Label l = new Label(container, SWT.NONE);
                l.setText("FX-Ant Jar");

                customAntJarLocation = new Text(container, SWT.BORDER);
                customAntJarLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
                customAntJarLocation.setEnabled(selected);
            }
        }

        new Label(container, SWT.NONE).setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));

        {
            sdkType = new Button(container, SWT.RADIO);
            sdkType.setText("SDK-Directory");
            sdkType.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, true, false, 3, 1));
            boolean selected = type.equals(JavaFXPreferencesConstants.CONFIG_TYPE_SDK);
            sdkType.setSelection(selected);
            sdkType.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    updateSelection();
                }
            });

            String dir = pref.get(JavaFXPreferencesConstants.JAVAFX_DIR, "");

            {
                Label l = new Label(container, SWT.NONE);
                l.setText("JavaFX-SDK-Directory");

                sdkDirectoryLocation = new Text(container, SWT.BORDER);
                sdkDirectoryLocation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
                sdkDirectoryLocation.setEnabled(selected);
                if (dir != null) {
                    sdkDirectoryLocation.setText(dir);
                }

                browseForSDKDirectory = new Button(container, SWT.PUSH);
                browseForSDKDirectory.setText("Browse ...");
                browseForSDKDirectory.setEnabled(selected);
                browseForSDKDirectory.addSelectionListener(new SelectionAdapter() {
                    @Override
                    public void widgetSelected(SelectionEvent e) {
                        DirectoryDialog dialog = new DirectoryDialog(sdkDirectoryLocation.getShell(), SWT.OPEN);
                        String dir = dialog.open();
                        if (dir != null) {
                            sdkDirectoryLocation.setText(dir);
                        }
                    }
                });
            }
        }

        return container;
    }

    private void updateSelection() {
        customJarLocation.setEnabled(customType.getSelection());
        customJavadocLocation.setEnabled(customType.getSelection());
        customAntJarLocation.setEnabled(customType.getSelection());

        sdkDirectoryLocation.setEnabled(sdkType.getSelection());
        browseForSDKDirectory.setEnabled(sdkType.getSelection());
    }

    @Override
    public boolean performOk() {
        IEclipsePreferences pref = InstanceScope.INSTANCE.getNode(JavaFXCorePlugin.PLUGIN_ID);

        if (builtinType != null && builtinType.getSelection()) {
            pref.put(JavaFXPreferencesConstants.JAVAFX_CONFIGTYPE, JavaFXPreferencesConstants.CONFIG_TYPE_BUILTIN);
            try {
                pref.flush();
            } catch (BackingStoreException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return super.performOk();
        } else if (customType.getSelection()) {
            pref.put(JavaFXPreferencesConstants.JAVAFX_CONFIGTYPE, JavaFXPreferencesConstants.CONFIG_TYPE_CUSTOM);

            File f = new File(customJarLocation.getText());
            if (!f.exists()) {
                setErrorMessage("The jar location is invalid");
                return false;
            }

            if (!customJavadocLocation.getText().isEmpty()) {
                f = new File(customJarLocation.getText());
                if (!f.exists()) {
                    setErrorMessage("The JavaDoc location is invalid");
                    return false;
                }
            }

            if (!customAntJarLocation.getText().isEmpty()) {
                f = new File(customAntJarLocation.getText());
                if (!f.exists()) {
                    setErrorMessage("The Ant jar location is invalid");
                    return false;
                }
            }

            try {
                pref.flush();
            } catch (BackingStoreException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return super.performOk();
        } else if (sdkType.getSelection()) {
            pref.put(JavaFXPreferencesConstants.JAVAFX_CONFIGTYPE, JavaFXPreferencesConstants.CONFIG_TYPE_SDK);
            String dir = sdkDirectoryLocation.getText();

            if (validateSDKDirectory(dir)) {
                pref.put(JavaFXPreferencesConstants.JAVAFX_DIR, dir);
                try {
                    pref.flush();
                } catch (BackingStoreException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                return super.performOk();
            }
        }

        return false;
    }

    public static boolean validateSDKDirectory(String dir) {
        if (dir.trim().length() > 0) {
            File f = new File(dir);
            if (f.exists()) {
                File jarPath = new File(new File(new File(dir, "rt"), "lib"), "jfxrt.jar");
                File javaDocPath = new File(new File(new File(dir, "docs"), "api"), "package-list");
                return jarPath.exists() && javaDocPath.exists();
            }
        }
        return false;
    }
}