com.liferay.ide.hook.ui.wizard.NewEventActionClassDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.hook.ui.wizard.NewEventActionClassDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 *******************************************************************************/

package com.liferay.ide.hook.ui.wizard;

import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.hook.core.operation.NewEventActionClassDataModelProvider;
import com.liferay.ide.hook.core.operation.NewEventActionClassOperation;
import com.liferay.ide.hook.ui.HookUI;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaConventions;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.window.Window;
import org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties;
import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
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.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;

/**
 * @author Greg Amerson
 * @author Simon Jiang
 */
@SuppressWarnings("restriction")
public class NewEventActionClassDialog extends Dialog {

    protected Label classLabel;
    protected Text classText;
    protected IDataModel model;
    protected Button packageButton;
    protected Label packageLabel;
    protected Text packageText;
    protected String qualifiedClassname;
    protected String qualifiedSuperclassname;
    protected Combo superCombo;
    protected Label superLabel;
    protected CLabel errorMessageLabel;

    protected NewEventActionClassDialog(Shell parentShell, IDataModel model) {
        super(parentShell);
        this.model = model;
    }

    @Override
    protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
        if (IDialogConstants.OK_ID == id) {
            final Button button = super.createButton(parent, id, Msgs.create, defaultButton);
            button.setEnabled(false);

            return button;
        }

        return super.createButton(parent, id, label, defaultButton);
    }

    protected void createClassnameGroup(Composite parent) {
        // class name
        classLabel = new Label(parent, SWT.LEFT);
        classLabel.setText(Msgs.classname);
        classLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

        classText = new Text(parent, SWT.SINGLE | SWT.BORDER);
        classText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        classText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                updateQualifiedClassname();
            }
        });

        new Label(parent, SWT.LEFT);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite areaParent = (Composite) super.createDialogArea(parent);
        areaParent.setLayout(new GridLayout(3, false));

        createClassnameGroup(areaParent);

        createPackageGroup(areaParent);

        createSuperclassGroup(areaParent);

        createErrorMessageGroup(areaParent);

        return areaParent;
    }

    private void createErrorMessageGroup(Composite parent) {
        errorMessageLabel = new CLabel(parent, SWT.LEFT_TO_RIGHT);
        errorMessageLabel.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 2, 1));
        errorMessageLabel
                .setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
        errorMessageLabel.setVisible(false);
    }

    private void createPackageGroup(Composite parent) {
        // package
        packageLabel = new Label(parent, SWT.LEFT);
        packageLabel.setText(J2EEUIMessages.JAVA_PACKAGE_LABEL);
        packageLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

        packageText = new Text(parent, SWT.SINGLE | SWT.BORDER);
        packageText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        packageText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                updateQualifiedClassname();
            }
        });

        packageButton = new Button(parent, SWT.PUSH);
        packageButton.setText(J2EEUIMessages.BROWSE_BUTTON_LABEL);
        packageButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
        packageButton.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent e) {
            }

            public void widgetSelected(SelectionEvent e) {
                handlePackageButtonPressed();
            }
        });
    }

    protected void createSuperclassGroup(Composite parent) {
        // superclass
        superLabel = new Label(parent, SWT.LEFT);
        superLabel.setText(J2EEUIMessages.SUPERCLASS_LABEL);
        superLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

        superCombo = new Combo(parent, SWT.DROP_DOWN);
        superCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        superCombo.setItems(new String[] { "com.liferay.portal.kernel.events.SimpleAction", //$NON-NLS-1$
                "com.liferay.portal.kernel.events.SessionAction", "com.liferay.portal.kernel.events.Action" }); //$NON-NLS-1$ //$NON-NLS-2$
        superCombo.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                qualifiedSuperclassname = superCombo.getItem(superCombo.getSelectionIndex());
            }
        });

        superCombo.select(0);

        new Label(parent, SWT.NONE);
    }

    public String getQualifiedClassname() {
        return this.qualifiedClassname;
    }

    public String getQualifiedSuperclassname() {
        return this.qualifiedSuperclassname;
    }

    protected void handlePackageButtonPressed() {
        IPackageFragmentRoot packRoot = (IPackageFragmentRoot) model
                .getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT);

        if (packRoot == null) {
            return;
        }

        IJavaElement[] packages = null;

        try {
            packages = packRoot.getChildren();
        } catch (JavaModelException e) {
            // Do nothing
        }

        if (packages == null) {
            packages = new IJavaElement[0];
        }

        ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(),
                new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT));
        dialog.setTitle(J2EEUIMessages.PACKAGE_SELECTION_DIALOG_TITLE);
        dialog.setMessage(J2EEUIMessages.PACKAGE_SELECTION_DIALOG_DESC);
        dialog.setEmptyListMessage(J2EEUIMessages.PACKAGE_SELECTION_DIALOG_MSG_NONE);
        dialog.setElements(packages);

        if (dialog.open() == Window.OK) {
            IPackageFragment fragment = (IPackageFragment) dialog.getFirstResult();

            if (fragment != null) {
                packageText.setText(fragment.getElementName());
            } else {
                packageText.setText(J2EEUIMessages.EMPTY_STRING);
            }
        }
    }

    @Override
    protected void initializeBounds() {
        super.initializeBounds();

        getShell().setSize(475, 250);
    }

    @Override
    protected void okPressed() {
        // Create the class
        IDataModel dataModel = DataModelFactory.createDataModel(
                new NewEventActionClassDataModelProvider(model, getQualifiedClassname(), superCombo.getText()));

        NewEventActionClassOperation operation = new NewEventActionClassOperation(dataModel);

        try {
            operation.execute(null, null);
        } catch (ExecutionException e) {
            HookUI.logError("Error creating class", e);
        }

        super.okPressed();
    }

    protected void updateQualifiedClassname() {
        int packageNameStatus = JavaConventions.validatePackageName(packageText.getText(),
                CompilerOptions.VERSION_1_7, CompilerOptions.VERSION_1_7).getSeverity();

        int classNameStatus = JavaConventions
                .validateJavaTypeName(classText.getText(), CompilerOptions.VERSION_1_7, CompilerOptions.VERSION_1_7)
                .getSeverity();
        ;

        if (!CoreUtil.isNullOrEmpty(packageText.getText())) {
            this.qualifiedClassname = packageText.getText() + "." + classText.getText(); //$NON-NLS-1$
        } else {
            this.qualifiedClassname = classText.getText();
            packageNameStatus = IStatus.WARNING;
        }

        if (classText.getText().indexOf('.') != -1) {
            classNameStatus = IStatus.ERROR;
        }

        boolean isPackageNameAndClassNameValid = ((packageNameStatus != IStatus.ERROR)
                && (classNameStatus != IStatus.ERROR));

        this.getButton(IDialogConstants.OK_ID).setEnabled(isPackageNameAndClassNameValid);

        if (classNameStatus == IStatus.ERROR && packageNameStatus == IStatus.ERROR) {
            this.errorMessageLabel.setText("Invalid package and class name");
        } else if (classNameStatus == IStatus.ERROR) {
            this.errorMessageLabel.setText("Invalid class name");
        } else if (packageNameStatus == IStatus.ERROR) {
            this.errorMessageLabel.setText("Invalid package name");
        }

        this.errorMessageLabel.setVisible(!isPackageNameAndClassNameValid);

    }

    private static class Msgs extends NLS {

        public static String classname;
        public static String create;

        static {
            initializeMessages(NewEventActionClassDialog.class.getName(), Msgs.class);
        }
    }

}