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

Java tutorial

Introduction

Here is the source code for com.liferay.ide.hook.ui.wizard.NewPortalPropertiesHookWizardPage.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.INewHookDataModelProperties;
import com.liferay.ide.hook.ui.HookUI;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.project.ui.wizard.StringArrayTableWizardSectionCallback;
import com.liferay.ide.ui.util.SWTUtil;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
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.project.J2EEProjectUtilities;
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.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.Text;
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.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage;

/**
 * @author Greg Amerson
 */
@SuppressWarnings("restriction")
public class NewPortalPropertiesHookWizardPage extends DataModelWizardPage implements INewHookDataModelProperties {
    protected EventActionsTableWizardSection eventActionsSection;
    protected Text portalPropertiesFile;
    protected PropertyOverridesTableWizardSection propertyOverridesSection;

    public NewPortalPropertiesHookWizardPage(IDataModel dataModel, String pageName) {
        super(dataModel, pageName, Msgs.createPortalProperties,
                HookUI.imageDescriptorFromPlugin(HookUI.PLUGIN_ID, "/icons/wizban/hook_wiz.png")); //$NON-NLS-1$

        setDescription(Msgs.specifyPortalProperties);
    }

    protected void createEventActionsGroup(Composite topComposite) {
        Composite composite = SWTUtil.createTopComposite(topComposite, 2);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));

        eventActionsSection = new EventActionsTableWizardSection(composite, Msgs.defineActions, Msgs.addEventAction,
                Msgs.add, Msgs.edit, Msgs.remove, new String[] { Msgs.eventTitle, Msgs.classTitle },
                new String[] { Msgs.eventLabel, Msgs.classLabel }, null, getDataModel(),
                PORTAL_PROPERTIES_ACTION_ITEMS);

        GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1);
        gd.heightHint = 150;

        eventActionsSection.setLayoutData(gd);
        eventActionsSection.setCallback(new StringArrayTableWizardSectionCallback());

        IProject project = CoreUtil.getProject(getDataModel().getStringProperty(PROJECT_NAME));

        if (project != null) {
            eventActionsSection.setProject(project);
        }
    }

    protected void createPortalPropertiesFileGroup(Composite topComposite) {
        Composite composite = SWTUtil.createTopComposite(topComposite, 3);

        GridLayout gl = new GridLayout(3, false);
        gl.marginLeft = 5;

        composite.setLayout(gl);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));

        SWTUtil.createLabel(composite, SWT.LEAD, Msgs.portalPropertiesFileLabel, 1);

        portalPropertiesFile = SWTUtil.createText(composite, 1);
        this.synchHelper.synchText(portalPropertiesFile, PORTAL_PROPERTIES_FILE, null);

        Button iconFileBrowse = SWTUtil.createPushButton(composite, Msgs.browse, null);
        iconFileBrowse.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                handleBrowseButton(NewPortalPropertiesHookWizardPage.this.portalPropertiesFile);
            }
        });
    }

    protected void createPropertiesOverridesGroup(Composite topComposite) {
        Composite composite = SWTUtil.createTopComposite(topComposite, 2);
        composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));

        propertyOverridesSection = new PropertyOverridesTableWizardSection(composite, Msgs.specifyProperties,
                Msgs.addPropertyOverride, Msgs.add, Msgs.edit, Msgs.remove,
                new String[] { Msgs.propertyTitle, Msgs.valueTitle },
                new String[] { Msgs.propertyLabel, Msgs.valueLabel }, null, getDataModel(),
                PORTAL_PROPERTIES_OVERRIDE_ITEMS);

        GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1);
        gd.heightHint = 150;

        propertyOverridesSection.setLayoutData(gd);
        propertyOverridesSection.setCallback(new StringArrayTableWizardSectionCallback());

        IProject project = CoreUtil.getProject(getDataModel().getStringProperty(PROJECT_NAME));

        if (project != null) {
            propertyOverridesSection.setProject(project);
        }
    }

    @Override
    protected Composite createTopLevelComposite(Composite parent) {
        Composite topComposite = SWTUtil.createTopComposite(parent, 3);
        topComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        createPortalPropertiesFileGroup(topComposite);

        createEventActionsGroup(topComposite);

        createPropertiesOverridesGroup(topComposite);

        return topComposite;
    }

    protected ISelectionStatusValidator getContainerDialogSelectionValidator() {
        return new ISelectionStatusValidator() {

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

                return HookUI.createErrorStatus(Msgs.chooseValidFileFolder);
            }
        };
    }

    protected ViewerFilter getContainerDialogViewerFilter() {
        return new ViewerFilter() {
            @SuppressWarnings("deprecation")
            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 = CoreUtil.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;
                        }
                    }
                } else if (element instanceof IFile) {
                    IFile file = (IFile) element;

                    return file.exists() && file.getName().equals("portal.properties"); //$NON-NLS-1$
                }

                return false;
            }
        };
    }

    @Override
    protected String[] getValidationPropertyNames() {
        return new String[] { PORTAL_PROPERTIES_FILE, PORTAL_PROPERTIES_ACTION_ITEMS,
                PORTAL_PROPERTIES_OVERRIDE_ITEMS };
    }

    protected void handleBrowseButton(final Text text) {
        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(Msgs.portalPropertiesFile);
        dialog.setMessage(Msgs.portalPropertiesFile);
        dialog.addFilter(filter);
        dialog.setInput(CoreUtil.getWorkspaceRoot());

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

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

                    text.setText(file.getFullPath().toPortableString());
                } else if (element instanceof IFolder) {
                    IFolder folder = (IFolder) element;

                    text.setText(folder.getFullPath().append("portal.properties").toPortableString()); //$NON-NLS-1$
                }
            } catch (Exception ex) {
                // Do nothing
            }

        }
    }

    private static class Msgs extends NLS {
        public static String add;
        public static String addEventAction;
        public static String addPropertyOverride;
        public static String browse;
        public static String chooseValidFileFolder;
        public static String classLabel;
        public static String classTitle;
        public static String createPortalProperties;
        public static String defineActions;
        public static String edit;
        public static String eventLabel;
        public static String eventTitle;
        public static String portalPropertiesFileLabel;
        public static String portalPropertiesFile;
        public static String propertyLabel;
        public static String propertyTitle;
        public static String remove;
        public static String specifyPortalProperties;
        public static String specifyProperties;
        public static String valueLabel;
        public static String valueTitle;

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