de.lmu.ifi.dbs.knowing.debug.ui.wizard.pages.CreateProcessorPage.java Source code

Java tutorial

Introduction

Here is the source code for de.lmu.ifi.dbs.knowing.debug.ui.wizard.pages.CreateProcessorPage.java

Source

/*                                                               *\
 ** ||//| \|| //\\'||  ||||| \|| //|__|  **
 ** | '| '( | '|\  '||  |  | '|| '|/\| '|| '|| '|\  '||  | ,---, **
 ** |__|\__\|__|'|__| \__\/__/'|__,/\'__||__||__|'|__| \__\/__|  **
 **                                                              **
 ** Knowing Framework                                            **
 ** Apache License - http://www.apache.org/licenses/             **
 ** LMU Munich - Database Systems Group                          **
 ** http://www.dbs.ifi.lmu.de/                                   **
\*                                                               */
package de.lmu.ifi.dbs.knowing.debug.ui.wizard.pages;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.SelectionDialog;

import de.lmu.ifi.dbs.knowing.debug.ui.wizard.NewProcessorWizard;

public class CreateProcessorPage extends WizardPage {

    private Text tName;
    private Text tPackage;
    private Text tExtends;
    private final IStructuredSelection selection;
    private IPackageFragment classPackage;

    /**
     * Create the wizard.
     */
    public CreateProcessorPage(IStructuredSelection selection) {
        super("Create Processor");
        this.selection = selection;
        setTitle("Create Processor");
        setDescription("Create processor implementation");
    }

    /**
     * Create contents of the wizard.
     * 
     * @param parent
     */
    public void createControl(Composite parent) {
        Composite container = new Composite(parent, SWT.NULL);

        setControl(container);
        container.setLayout(new GridLayout(3, false));

        Label lName = new Label(container, SWT.NONE);
        lName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        lName.setText("Name");

        tName = new Text(container, SWT.BORDER);
        tName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        tName.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                validate();
            }
        });
        new Label(container, SWT.NONE);

        Label lPackage = new Label(container, SWT.NONE);
        lPackage.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        lPackage.setText("Package");

        tPackage = new Text(container, SWT.BORDER);
        tPackage.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Button bBrowsePackage = new Button(container, SWT.NONE);
        bBrowsePackage.setText("browse");
        bBrowsePackage.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                handlePackageBrowse();
            }
        });

        Label lExtends = new Label(container, SWT.NONE);
        lExtends.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
        lExtends.setText("Extends");

        tExtends = new Text(container, SWT.BORDER);
        tExtends.setText("");
        tExtends.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Button tBrowseExtends = new Button(container, SWT.NONE);
        tBrowseExtends.setText("browse");
        validate();
    }

    private void handlePackageBrowse() {
        Object obj = selection.getFirstElement();

        IResource res = (IResource) Platform.getAdapterManager().getAdapter(obj, IResource.class);
        IProject project = res.getProject();
        try {
            SelectionDialog dialog = JavaUI.createPackageDialog(getShell(), JavaCore.create(project),
                    IJavaElementSearchConstants.CONSIDER_REQUIRED_PROJECTS);
            if (dialog.open() != Window.OK)
                return;

            Object[] result = dialog.getResult();
            for (Object r : result) {
                IJavaElement e = (IJavaElement) r;
                classPackage = (IPackageFragment) e;
                tPackage.setText(e.getElementName());
            }
        } catch (JavaModelException e) {
            e.printStackTrace();
        }
        validate();
    }

    private void validate() {
        String name = tName.getText();
        if (name == null) {
            updateStatus("Classname cannot be empty");
            return;
        }
        if (!name.endsWith(".java") && !name.endsWith(".scala")) {
            updateStatus("Classname needs to end with .java or .scala");
            return;
        }
        if (classPackage != null) {
            IFile ifile = NewProcessorWizard.locatePath(getPath());
            if (ifile.exists()) {
                updateStatus("File already exists");
                return;
            }
        }

        updateStatus(null);

    }

    private void updateStatus(String message) {
        setErrorMessage(message);
        if (message == null)
            setMessage("Create processor implementation", IMessageProvider.INFORMATION);
        setPageComplete(message == null);
    }

    public IPath getPath() {
        return classPackage.getPath().append(getClassName());
    }

    public String getClassName() {
        return tName.getText();
    }

    public IPackageFragment getClassPackage() {
        return classPackage;
    }

    public boolean isJava() {
        return tName.getText().endsWith(".java");
    }

    public boolean isScala() {
        return tName.getText().endsWith(".scala");
    }
}