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

Java tutorial

Introduction

Here is the source code for com.liferay.ide.hook.ui.wizard.NewLanguagePropertiesHookWizardPage.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.StringArrayTableWizardSection;
import com.liferay.ide.project.ui.wizard.StringArrayTableWizardSectionCallback;
import com.liferay.ide.ui.util.SWTUtil;

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.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
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.plugin.J2EEUIMessages;
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 NewLanguagePropertiesHookWizardPage extends DataModelWizardPage
        implements INewHookDataModelProperties {

    protected Text contentFolder;

    protected StringArrayTableWizardSection languagePropertiesSection;

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

        setDescription(Msgs.createNewLanguagePropertiesFiles);
    }

    protected void createContentFolderGroup(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.contentFolder, 1);

        contentFolder = SWTUtil.createText(composite, 1);
        this.synchHelper.synchText(contentFolder, CONTENT_FOLDER, null);

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

            @Override
            public void widgetSelected(SelectionEvent e) {
                handleFileBrowseButton(NewLanguagePropertiesHookWizardPage.this.contentFolder);
            }
        });
    }

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

        languagePropertiesSection = new StringArrayTableWizardSection(composite, Msgs.languagePropertyFiles,
                Msgs.languagePropertyFileTitle, Msgs.add, Msgs.edit, Msgs.remove, new String[] { Msgs.add },
                new String[] { Msgs.languagePropertyFileLabel }, null, getDataModel(), LANGUAGE_PROPERTIES_ITEMS);

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

        languagePropertiesSection.setLayoutData(gd);
        languagePropertiesSection.setCallback(new StringArrayTableWizardSectionCallback());
    }

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

        createContentFolderGroup(topComposite);

        createLanguagePropertiesGroup(topComposite);

        return topComposite;
    }

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

        this.synchHelper.synchAllUIWithModel();
    }

    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 IFile)) {
                    return Status.OK_STATUS;
                }

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

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

                return false;
            }
        };
    }

    @Override
    protected String[] getValidationPropertyNames() {
        return new String[] { CONTENT_FOLDER, LANGUAGE_PROPERTIES_ITEMS };
    }

    protected void handleFileBrowseButton(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(J2EEUIMessages.CONTAINER_SELECTION_DIALOG_TITLE);
        dialog.setMessage(J2EEUIMessages.CONTAINER_SELECTION_DIALOG_DESC);
        dialog.addFilter(filter);
        dialog.setInput(CoreUtil.getWorkspaceRoot());

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

            try {
                if (element instanceof IFolder) {
                    IFolder folder = (IFolder) element;

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

                    List<IFolder> sources = CoreUtil.getSourceFolders(JavaCore.create(project));

                    if (sources.size() > 0 && folder.equals(sources.get(0))) {
                        folder = folder.getFolder("content"); //$NON-NLS-1$
                    }

                    text.setText(folder.getFullPath().toPortableString());
                }
            } catch (Exception ex) {
                // Do nothing
            }

        }
    }

    private static class Msgs extends NLS {
        public static String add;
        public static String browse;
        public static String chooseValidFolder;
        public static String contentFolder;
        public static String createLanguageProperties;
        public static String createNewLanguagePropertiesFiles;
        public static String edit;
        public static String languagePropertyFileLabel;
        public static String languagePropertyFiles;
        public static String languagePropertyFileTitle;
        public static String remove;

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