com.liferay.ide.portlet.ui.wizard.NewPortletClassWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.portlet.ui.wizard.NewPortletClassWizardPage.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.portlet.ui.wizard;

import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.core.util.StringPool;
import com.liferay.ide.portlet.core.operation.INewPortletClassDataModelProperties;
import com.liferay.ide.portlet.ui.PortletUIPlugin;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.ui.dialog.FilteredTypesSelectionDialogEx;
import com.liferay.ide.ui.util.SWTUtil;

import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.internal.core.search.BasicSearchEngine;
import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
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.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.jst.j2ee.internal.wizard.NewJavaClassWizardPage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Image;
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.Text;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.wst.common.componentcore.internal.operation.IArtifactEditOperationDataModelProperties;
import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;

/**
 * @author Greg Amerson
 * @author Cindy Li
 */
@SuppressWarnings({ "restriction", "deprecation" })
public class NewPortletClassWizardPage extends NewJavaClassWizardPage
        implements INewPortletClassDataModelProperties {
    protected Button createNewClassRadio;
    protected Button customButton;
    protected Button folderButton;
    protected Text folderText;
    protected boolean fragment;
    protected boolean initialProject;
    protected Button portletClassButton;
    protected Label portletClassLabel;
    protected Text portletClassText;
    protected String projectName;
    protected Combo projectNameCombo;
    protected Label projectNameLabel;
    protected Combo superCombo;
    protected Button useDefaultPortletRadio;

    public NewPortletClassWizardPage(IDataModel model, String pageName, String pageDesc, String pageTitle,
            boolean fragment) {
        super(model, pageName, pageDesc, pageTitle, IModuleConstants.JST_WEB_MODULE);

        this.projectName = null;
        this.fragment = fragment;
    }

    public NewPortletClassWizardPage(IDataModel model, String pageName, String pageDesc, String pageTitle,
            boolean fragment, boolean initialProject) {
        this(model, pageName, pageDesc, pageTitle, fragment);

        this.initialProject = initialProject;
    }

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

        classText = new Text(parent, SWT.SINGLE | SWT.BORDER);
        classText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        synchHelper.synchText(classText, INewJavaClassDataModelProperties.CLASS_NAME, null);

        new Label(parent, SWT.LEFT);
    }

    /**
     * Add folder group to composite
     */
    protected void createFolderGroup(Composite composite) {
        // folder
        Label folderLabel = new Label(composite, SWT.LEFT);
        folderLabel.setText(J2EEUIMessages.FOLDER_LABEL);
        folderLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

        folderText = new Text(composite, SWT.SINGLE | SWT.BORDER);
        folderText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        synchHelper.synchText(folderText, INewJavaClassDataModelProperties.SOURCE_FOLDER, null);

        IPackageFragmentRoot root = getSelectedPackageFragmentRoot();

        String projectName = model.getStringProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME);

        if (projectName != null && projectName.length() > 0) {
            IProject targetProject = ProjectUtilities.getProject(projectName);

            if (root == null || !root.getJavaProject().getProject().equals(targetProject)) {
                IFolder folder = getDefaultJavaSourceFolder(targetProject);

                if (folder != null) {
                    folderText.setText(folder.getFullPath().toPortableString());
                }
            } else {
                folderText.setText(root.getPath().toString());
            }
        }

        folderButton = new Button(composite, SWT.PUSH);
        folderButton.setText(J2EEUIMessages.BROWSE_BUTTON_LABEL);
        folderButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
        folderButton.addSelectionListener(new SelectionListener() {

            public void widgetDefaultSelected(SelectionEvent e) {
                // Do nothing
            }

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

        });
    }

    protected void createNewPortletClassGroup(Composite parent) {
        new Label(parent, SWT.LEFT);

        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        composite.setLayout(new GridLayout(2, false));

        createNewClassRadio = new Button(composite, SWT.RADIO);
        createNewClassRadio.setText(Msgs.createNewPortlet);

        useDefaultPortletRadio = new Button(composite, SWT.RADIO);
        useDefaultPortletRadio.setText(Msgs.useDefaultPortlet);

        new Label(parent, SWT.NONE);

        synchHelper.synchRadio(createNewClassRadio, CREATE_NEW_PORTLET_CLASS, null);
        synchHelper.synchRadio(useDefaultPortletRadio, USE_DEFAULT_PORTLET_CLASS, null);

        createNewClassRadio.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                classText.setEnabled(createNewClassRadio.getSelection());
                packageText.setEnabled(createNewClassRadio.getSelection());
                superCombo.setEnabled(createNewClassRadio.getSelection());
            }
        });
    }

    protected 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));
        synchHelper.synchText(packageText, INewJavaClassDataModelProperties.JAVA_PACKAGE, null);

        IPackageFragment packageFragment = getSelectedPackageFragment();

        String targetProject = model.getStringProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME);

        if (packageFragment != null && packageFragment.exists()
                && packageFragment.getJavaProject().getElementName().equals(targetProject)) {

            IPackageFragmentRoot root = getPackageFragmentRoot(packageFragment);

            if (root != null) {
                folderText.setText(root.getPath().toString());
            }

            model.setProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE, packageFragment.getElementName());
        }

        if (this.fragment) {
            SWTUtil.createLabel(parent, StringPool.EMPTY, 1);
        } else {
            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) {
                    // Do nothing
                }

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

    protected void createPortletClassGroup(Composite parent) {
        if (!this.fragment && getDataModel().getBooleanProperty(SHOW_NEW_CLASS_OPTION)) {
            createNewPortletClassGroup(parent);
        }

        createClassnameGroup(parent);
        createPackageGroup(parent);
        createSuperclassGroup(parent);
    }

    /**
     * Add project group
     */
    protected void createProjectNameGroup(Composite parent) {
        // set up project name label
        projectNameLabel = new Label(parent, SWT.NONE);
        projectNameLabel.setText("Portlet plugin project:"); //$NON-NLS-1$

        projectNameLabel.setLayoutData(new GridData());

        // set up project name entry field
        projectNameCombo = new Combo(parent, SWT.BORDER | SWT.READ_ONLY);

        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        data.widthHint = 300;
        data.horizontalSpan = 1;

        projectNameCombo.setLayoutData(data);
        projectNameCombo.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                super.widgetSelected(e);
                IProject project = CoreUtil.getProject(projectNameCombo.getText());
                validateProjectRequirements(project);

                getDataModel().notifyPropertyChange(SUPERCLASS, IDataModel.VALID_VALUES_CHG);
                getDataModel().notifyPropertyChange(ENTRY_CATEGORY, IDataModel.VALID_VALUES_CHG);
            }
        });
        synchHelper.synchCombo(projectNameCombo, IArtifactEditOperationDataModelProperties.PROJECT_NAME, null);

        initializeProjectList();

        new Label(parent, SWT.NONE);
    }

    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));

        // superText = new Text(parent, SWT.SINGLE | SWT.BORDER);
        // superText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        // synchHelper.synchText(superText,
        // INewJavaClassDataModelProperties.SUPERCLASS, null);

        superCombo = new Combo(parent, SWT.DROP_DOWN);
        superCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        synchHelper.synchCombo(superCombo, INewJavaClassDataModelProperties.SUPERCLASS, null);

        if (this.fragment) {
            SWTUtil.createLabel(parent, StringPool.EMPTY, 1);
        } else {
            superButton = new Button(parent, SWT.PUSH);
            superButton.setText(J2EEUIMessages.BROWSE_BUTTON_LABEL);
            superButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
            superButton.addSelectionListener(new SelectionListener() {

                public void widgetDefaultSelected(SelectionEvent e) {
                    // Do nothing
                }

                public void widgetSelected(SelectionEvent e) {
                    // handleSuperButtonPressed();
                    handleClassButtonSelected(superCombo, "javax.portlet.Portlet", //$NON-NLS-1$
                            J2EEUIMessages.SUPERCLASS_SELECTION_DIALOG_TITLE, J2EEUIMessages.SUPERCLASS_SELECTION_DIALOG_DESC);
                }
            });
        }
    }

    @Override
    protected Composite createTopLevelComposite(Composite parent) {
        Composite composite = SWTUtil.createTopComposite(parent, 3);

        if (!this.fragment) {
            createProjectNameGroup(composite);
            createFolderGroup(composite);
            addSeperator(composite, 3);
        }

        createPortletClassGroup(composite);

        setFocusOnClassText();

        setShellImage();

        return composite;
    }

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

        validatePage();
    }

    protected ViewerFilter getContainerDialogViewerFilter() {
        return new ViewerFilter() {

            public boolean select(Viewer viewer, Object parent, Object element) {
                if (element instanceof IProject) {

                    IProject project = (IProject) element;

                    return project.getName()
                            .equals(model.getProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME));
                } else if (element instanceof IFolder) {
                    IFolder folder = (IFolder) element;

                    // only show source folders
                    IProject project = ProjectUtilities.getProject(
                            model.getStringProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME));

                    IPackageFragmentRoot[] sourceFolders = J2EEProjectUtilities.getSourceContainers(project);

                    for (int i = 0; i < sourceFolders.length; i++) {
                        if (sourceFolders[i].getResource() != null
                                && sourceFolders[i].getResource().equals(folder)) {
                            return true;
                        } else if (ProjectUtil.isParent(folder, sourceFolders[i].getResource())) {
                            return true;
                        }
                    }
                }

                return false;
            }
        };
    }

    protected IFolder getDefaultJavaSourceFolder(IProject project) {
        if (project == null) {
            return null;
        }

        IPackageFragmentRoot[] sources = J2EEProjectUtilities.getSourceContainers(project);

        // Try and return the first source folder
        if (sources.length > 0) {
            try {
                return (IFolder) sources[0].getCorrespondingResource();
            } catch (Exception e) {
                return null;
            }
        }

        return null;
    }

    /**
     * @return
     */
    protected IPackageFragment getSelectedPackageFragment() {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();

        if (window == null) {
            return null;
        }

        ISelection selection = window.getSelectionService().getSelection();

        if (selection == null) {
            return null;
        }

        IJavaElement element = getInitialJavaElement(selection);

        if (element != null) {
            if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
                return (IPackageFragment) element;
            } else if (element.getElementType() == IJavaElement.COMPILATION_UNIT) {
                IJavaElement parent = ((ICompilationUnit) element).getParent();

                if (parent.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
                    return (IPackageFragment) parent;
                }
            } else if (element.getElementType() == IJavaElement.TYPE) {
                return ((IType) element).getPackageFragment();
            }
        }

        return null;
    }

    protected IPackageFragmentRoot getSelectedPackageFragmentRoot() {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();

        if (window == null) {
            return null;
        }

        ISelection selection = window.getSelectionService().getSelection();

        if (selection == null) {
            return null;
        }

        // StructuredSelection stucturedSelection = (StructuredSelection)
        // selection;

        IJavaElement element = getInitialJavaElement(selection);

        if (element != null) {
            if (element.getElementType() == IJavaElement.PACKAGE_FRAGMENT_ROOT) {
                return (IPackageFragmentRoot) element;
            }
        }

        return null;
    }

    protected IProject getSelectedProject() {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();

        if (window == null) {
            return null;
        }

        ISelection selection = window.getSelectionService().getSelection();

        if (selection == null) {
            return null;
        }

        if (!(selection instanceof IStructuredSelection)) {
            return null;
        }

        IJavaElement element = getInitialJavaElement(selection);

        if (element != null && element.getJavaProject() != null) {
            return element.getJavaProject().getProject();
        }

        IStructuredSelection stucturedSelection = (IStructuredSelection) selection;

        if (stucturedSelection.getFirstElement() instanceof EObject) {
            return ProjectUtilities.getProject(stucturedSelection.getFirstElement());
        }

        return getExtendedSelectedProject(stucturedSelection.getFirstElement());
    }

    protected String[] getValidationPropertyNames() {
        List<String> validationPropertyNames = new ArrayList<String>();

        if (this.fragment) {
            return new String[] { IArtifactEditOperationDataModelProperties.COMPONENT_NAME,
                    INewJavaClassDataModelProperties.JAVA_PACKAGE, INewJavaClassDataModelProperties.CLASS_NAME,
                    INewJavaClassDataModelProperties.SUPERCLASS };
        } else {
            validationPropertyNames.add(CREATE_NEW_PORTLET_CLASS);
            validationPropertyNames.add(USE_DEFAULT_PORTLET_CLASS);
            Collections.addAll(validationPropertyNames, super.getValidationPropertyNames());
        }

        return validationPropertyNames.toArray(new String[0]);
    }

    protected void handleClassButtonSelected(Control control, String baseClass, String title, String message) {
        getControl().setCursor(new Cursor(getShell().getDisplay(), SWT.CURSOR_WAIT));

        IPackageFragmentRoot packRoot = (IPackageFragmentRoot) model
                .getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT);

        if (packRoot == null) {
            return;
        }

        // this eliminates the non-exported classpath entries
        // final IJavaSearchScope scope =
        // TypeSearchEngine.createJavaSearchScopeForAProject(packRoot.getJavaProject(),
        // true, true);

        IJavaSearchScope scope = null;

        try {
            IType type = packRoot.getJavaProject().findType(baseClass);

            if (type == null) {
                return;
            }

            scope = BasicSearchEngine.createHierarchyScope(type);
        } catch (JavaModelException e) {
            PortletUIPlugin.logError(e);
            return;
        }

        // This includes all entries on the classpath. This behavior is
        // identical
        // to the Super Class Browse Button on the Create new Java Class Wizard
        // final IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new
        // IJavaElement[] {root.getJavaProject()} );
        FilteredTypesSelectionDialog dialog = new FilteredTypesSelectionDialogEx(getShell(), false,
                getWizard().getContainer(), scope, IJavaSearchConstants.CLASS);
        dialog.setTitle(title);
        dialog.setMessage(message);

        if (dialog.open() == Window.OK) {
            IType type = (IType) dialog.getFirstResult();

            String classFullPath = J2EEUIMessages.EMPTY_STRING;

            if (type != null) {
                classFullPath = type.getFullyQualifiedName();
            }

            if (control instanceof Text) {
                ((Text) control).setText(classFullPath);
            } else if (control instanceof Combo) {
                ((Combo) control).setText(classFullPath);
            }

            getControl().setCursor(null);

            return;
        }

        getControl().setCursor(null);
    }

    protected void handleCustomButtonSelected() {
        // boolean enable = customButton.getSelection();
        // portletClassLabel.setEnabled(!enable);
        // portletClassText.setEnabled(!enable);
        // packageText.setEnabled(enable);
        // packageButton.setEnabled(enable);
        // packageLabel.setEnabled(enable);
        // classText.setEnabled(enable);
        // classLabel.setEnabled(enable);
        // superText.setEnabled(enable);
        // superCombo.setEnabled(enable);
        // superButton.setEnabled(enable);
        // superLabel.setEnabled(enable);
    }

    /**
     * Browse for a new Destination Folder
     */
    protected void handleFolderButtonPressed() {
        ISelectionStatusValidator validator = getContainerDialogSelectionValidator();

        ViewerFilter filter = getContainerDialogViewerFilter();

        ITreeContentProvider contentProvider = new WorkbenchContentProvider();

        ILabelProvider labelProvider = new DecoratingLabelProvider(new WorkbenchLabelProvider(),
                PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator());

        ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), labelProvider,
                contentProvider);
        dialog.setValidator(validator);
        dialog.setTitle(J2EEUIMessages.CONTAINER_SELECTION_DIALOG_TITLE);
        dialog.setMessage(J2EEUIMessages.CONTAINER_SELECTION_DIALOG_DESC);
        dialog.addFilter(filter);

        String projectName = model.getStringProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME);

        if (projectName == null || projectName.length() == 0) {
            return;
        }

        IProject project = ProjectUtilities.getProject(projectName);

        dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());

        if (project != null) {
            dialog.setInitialSelection(project);
        }

        if (dialog.open() == Window.OK) {
            Object element = dialog.getFirstResult();

            try {
                if (element instanceof IContainer) {
                    IContainer container = (IContainer) element;

                    folderText.setText(container.getFullPath().toString());
                    // dealWithSelectedContainerResource(container);
                }
            } catch (Exception ex) {
                // Do nothing
            }

        }
    }

    protected void initializeProjectList() {
        IProject[] workspaceProjects = CoreUtil.getAllProjects();

        List<String> items = new ArrayList<String>();

        for (int i = 0; i < workspaceProjects.length; i++) {
            IProject project = workspaceProjects[i];

            if (isProjectValid(project)) {
                items.add(project.getName());
            }
        }

        if (items.isEmpty()) {
            return;
        }

        String[] names = new String[items.size()];

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

        projectNameCombo.setItems(names);

        IProject selectedProject = null;

        try {
            if (model != null) {
                String projectNameFromModel = model
                        .getStringProperty(IArtifactEditOperationDataModelProperties.COMPONENT_NAME);

                if (projectNameFromModel != null && projectNameFromModel.length() > 0) {
                    selectedProject = CoreUtil.getProject(projectNameFromModel);
                }
            }
        } catch (Exception e) {
        }
        ;

        try {
            if (selectedProject == null) {
                selectedProject = getSelectedProject();
            }

            if (selectedProject != null && selectedProject.isAccessible()
                    && selectedProject.hasNature(IModuleConstants.MODULE_NATURE_ID)) {

                projectNameCombo.setText(selectedProject.getName());

                validateProjectRequirements(selectedProject);

                model.setProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME,
                        selectedProject.getName());
            }
        } catch (CoreException ce) {
            // Ignore
        }

        if (projectName == null && names.length > 0) {
            projectName = names[0];
        }

        if ((projectNameCombo.getText() == null || projectNameCombo.getText().length() == 0)
                && projectName != null) {
            projectNameCombo.setText(projectName);

            validateProjectRequirements(CoreUtil.getProject(projectName));

            model.setProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME, projectName);
        }

        projectNameLabel.setEnabled(!initialProject);
        projectNameCombo.setEnabled(!initialProject);
    }

    protected boolean isProjectValid(IProject project) {
        return super.isProjectValid(project) && ProjectUtil.isPortletProject(project);
    }

    protected void setFocusOnClassText() {
        if (classText != null) {
            classText.setFocus();
        }
    }

    protected void setShellImage() {
        URL url = PortletUIPlugin.getDefault().getBundle().getEntry("/icons/e16/portlet.png"); //$NON-NLS-1$

        Image shellImage = ImageDescriptor.createFromURL(url).createImage();

        getShell().setImage(shellImage);
    }

    protected void validateProjectRequirements(IProject project) {
        super.validateProjectRequirements(project);
    }

    private static class Msgs extends NLS {
        public static String createNewPortlet;
        public static String portletClassLabel;
        public static String useDefaultPortlet;

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