com.liferay.ide.project.ui.wizard.LiferayDataModelWizardPage.java Source code

Java tutorial

Introduction

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

import com.liferay.ide.core.IWebProject;
import com.liferay.ide.core.LiferayCore;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.ui.LiferayUIPlugin;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.viewsupport.IViewPartInputProvider;
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.osgi.util.NLS;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchPart;
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.ui.views.contentoutline.ContentOutline;
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;
import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;

/**
 * @author Greg Amerson
 */
@SuppressWarnings("restriction")
public abstract class LiferayDataModelWizardPage extends DataModelWizardPage {

    public LiferayDataModelWizardPage(IDataModel model, String pageName, String title, ImageDescriptor titleImage) {
        super(model, pageName, title, titleImage);
    }

    protected ISelectionStatusValidator getContainerDialogSelectionValidator() {
        return new ISelectionStatusValidator() {
            public IStatus validate(Object[] selection) {
                if (selection != null && selection.length > 0 && selection[0] != null
                        && !(selection[0] instanceof IProject) && !(selection[0] instanceof IFolder)) {
                    return Status.OK_STATUS;
                }

                return LiferayUIPlugin.createErrorStatus(Msgs.chooseValidProjectFile);
            }
        };
    }

    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) {
                    return true;
                } else if (element instanceof IFile) {
                    return true;
                }

                return false;
            }
        };
    }

    protected IJavaElement getInitialJavaElement(ISelection selection) {
        IJavaElement jelem = null;

        if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
            Object selectedElement = ((IStructuredSelection) selection).getFirstElement();

            jelem = getJavaElement(selectedElement);

            if (jelem == null) {
                IResource resource = getResource(selectedElement);

                if (resource != null && resource.getType() != IResource.ROOT) {
                    while (jelem == null && resource.getType() != IResource.PROJECT) {
                        resource = resource.getParent();

                        jelem = (IJavaElement) resource.getAdapter(IJavaElement.class);
                    }

                    if (jelem == null) {
                        jelem = JavaCore.create(resource); // java project
                    }
                }
            }
        }

        if (jelem == null) {
            IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();

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

            IWorkbenchPart part = window.getActivePage().getActivePart();

            if (part instanceof ContentOutline) {
                part = window.getActivePage().getActiveEditor();
            }

            if (part instanceof IViewPartInputProvider) {
                Object elem = ((IViewPartInputProvider) part).getViewPartInput();

                if (elem instanceof IJavaElement) {
                    jelem = (IJavaElement) elem;
                }
            }
        }

        if (jelem == null || jelem.getElementType() == IJavaElement.JAVA_MODEL) {
            try {
                IJavaProject[] projects = JavaCore.create(getWorkspaceRoot()).getJavaProjects();

                if (projects.length == 1) {
                    jelem = projects[0];
                }
            } catch (JavaModelException e) {
                JavaPlugin.log(e);
            }
        }

        return jelem;
    }

    protected IJavaElement getJavaElement(Object obj) {
        if (obj == null) {
            return null;
        }

        if (obj instanceof IJavaElement) {
            return (IJavaElement) obj;
        }

        if (obj instanceof IAdaptable) {
            return (IJavaElement) ((IAdaptable) obj).getAdapter(IJavaElement.class);
        }

        return (IJavaElement) Platform.getAdapterManager().getAdapter(obj, IJavaElement.class);
    }

    protected IResource getResource(Object obj) {
        if (obj == null) {
            return null;
        }

        if (obj instanceof IResource) {
            return (IResource) obj;
        }

        if (obj instanceof IAdaptable) {
            return (IResource) ((IAdaptable) obj).getAdapter(IResource.class);
        }

        return (IResource) Platform.getAdapterManager().getAdapter(obj, IResource.class);
    }

    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 null;
    }

    protected IWorkspaceRoot getWorkspaceRoot() {
        return ResourcesPlugin.getWorkspace().getRoot();
    }

    protected void handleFileBrowseButton(final Text text, String title, String message) {
        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(title);
        dialog.setMessage(message);
        dialog.addFilter(filter);

        final IWebProject lrproject = LiferayCore.create(IWebProject.class, CoreUtil.getProject(
                getDataModel().getStringProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME)));

        // IDE-110
        if (lrproject != null) {
            final IFolder defaultDocroot = lrproject.getDefaultDocrootFolder();

            if (defaultDocroot != null) {
                dialog.setInput(defaultDocroot);

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

                    try {
                        if (element instanceof IFile) {
                            IFile file = (IFile) element;

                            final IPath relativePath = file.getFullPath()
                                    .makeRelativeTo(defaultDocroot.getFullPath());

                            text.setText("/" + relativePath.toPortableString()); //$NON-NLS-1$
                            // dealWithSelectedContainerResource(container);
                        }
                    } catch (Exception ex) {
                        // Do nothing
                    }
                }
            }
        }
    }

    protected String initializeProjectList(Combo projectCombo, IDataModel dataModel) {
        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 null;
        }

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

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

        projectCombo.setItems(names);

        IProject selectedProject = null;

        try {
            if (dataModel != null) {
                String projectNameFromModel = dataModel
                        .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)) {

                projectCombo.setText(selectedProject.getName());

                validateProjectRequirements(selectedProject);

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

        if ((projectCombo.getText() == null || projectCombo.getText().length() == 0) && names[0] != null) {
            projectCombo.setText(names[0]);

            validateProjectRequirements(CoreUtil.getProject(names[0]));

            dataModel.setProperty(IArtifactEditOperationDataModelProperties.PROJECT_NAME, names[0]);
        }

        return names[0];
    }

    protected abstract boolean isProjectValid(IProject project);

    protected void validateProjectRequirements(IProject project) {
    }

    private static class Msgs extends NLS {
        public static String chooseValidProjectFile;

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