org.jboss.tools.jsf.ui.wizard.project.ImportProjectFoldersPage.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.jsf.ui.wizard.project.ImportProjectFoldersPage.java

Source

/*******************************************************************************
 * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.jsf.ui.wizard.project;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import org.jboss.tools.common.model.ui.attribute.XAttributeSupport;
import org.jboss.tools.common.model.ui.attribute.adapter.IModelPropertyEditorAdapter;
import org.jboss.tools.common.model.ui.attribute.editor.DirectoryFieldEditorEx;

import org.jboss.tools.jsf.JSFPreference;
import org.jboss.tools.jsf.web.JSFTemplate;
import org.jboss.tools.jsf.web.helpers.context.ImportProjectWizardContext;
import org.jboss.tools.jst.web.context.IImportWebProjectContext;
import org.jboss.tools.jst.web.context.ImportWebProjectContext;
import org.jboss.tools.jst.web.ui.wizards.appregister.AppRegisterComponent;
import org.jboss.tools.common.model.ui.util.ModelUtilities;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

import org.jboss.tools.common.meta.action.*;
import org.jboss.tools.common.meta.action.impl.XEntityDataImpl;
import org.jboss.tools.common.meta.action.impl.handlers.DefaultCreateHandler;
import org.jboss.tools.common.meta.action.impl.handlers.HUtil;

public class ImportProjectFoldersPage extends WizardPage {
    static String[] ATTRIBUTES = { ImportProjectWizardContext.ATTR_CLASSES, ImportProjectWizardContext.ATTR_LIB,
            ImportProjectWizardContext.ATTR_ADD_LIB, ImportProjectWizardContext.ATTR_VERSION,
            ImportProjectWizardContext.ATTR_SERVLET_VERSION };
    private ImportWebProjectContext context;
    private XAttributeSupport support;
    private IModelPropertyEditorAdapter webrootLocationAdapter;
    private IModelPropertyEditorAdapter srcLocationAdapter;
    private IModelPropertyEditorAdapter classesLocationAdapter;
    private IModelPropertyEditorAdapter libLocationAdapter;
    private IModelPropertyEditorAdapter addLibAdapter;
    private IModelPropertyEditorAdapter versionAdapter;
    private IModelPropertyEditorAdapter servletVersionAdapter;
    private PropertyChangeListener updateDataListener;
    AppRegisterComponent appRegister = new AppRegisterComponent();
    Composite supportControl;

    protected ImportProjectFoldersPage(ImportWebProjectContext context) {
        super("Import Project Folders");
        this.context = context;
        appRegister.setContext(context.getRegisterServerContext());
        appRegister.setLayoutForSupport(getLayoutForSupport());

        appRegister.setEnabling(false);
        XEntityData entityData = XEntityDataImpl
                .create(new String[][] { { ImportProjectWizardContext.PAGE_FOLDERS, "" }, //$NON-NLS-1$
                        { "web root", "yes" }, //$NON-NLS-1$ //$NON-NLS-2$
                        { "src", "" }, //$NON-NLS-1$ //$NON-NLS-2$
                        { ATTRIBUTES[0], "" }, //$NON-NLS-1$
                        { ATTRIBUTES[1], "" }, //$NON-NLS-1$
                        { ATTRIBUTES[2], "" }, //$NON-NLS-1$
                        { ATTRIBUTES[3], "" }, //$NON-NLS-1$
                        { ATTRIBUTES[4], "" } //$NON-NLS-1$
        });
        appRegister.setDisableContextRoot(true);
        XAttributeData[] ad = entityData.getAttributeData();
        for (int i = 0; i < ad.length; i++)
            ad[i].setValue(""); //$NON-NLS-1$

        if (context.getServletVersion() == null) {
            context.setServletVersion(JSFPreference.DEFAULT_JSF_IMPORT_SERVLET_VERSION.getValue());
        }

        JSFTemplate t = new JSFTemplate();
        String[] versions = t.getVersionList();
        HUtil.hackAttributeConstraintList(new XEntityData[] { entityData }, 0, ATTRIBUTES[3], versions);
        if (versions.length > 0) {
            context.setTemplateVersion(versions[0]);
            entityData.setValue(ATTRIBUTES[3], versions[0]);
        }

        support = new XAttributeSupport(ModelUtilities.getPreferenceModel().getRoot(), entityData);
        support.setLayout(getLayoutForSupport());

        webrootLocationAdapter = support.getPropertyEditorAdapterByName("web root"); //$NON-NLS-1$
        srcLocationAdapter = support.getPropertyEditorAdapterByName("src"); //$NON-NLS-1$
        classesLocationAdapter = support.getPropertyEditorAdapterByName(ImportProjectWizardContext.ATTR_CLASSES);
        libLocationAdapter = support.getPropertyEditorAdapterByName(ImportProjectWizardContext.ATTR_LIB);
        addLibAdapter = support.getPropertyEditorAdapterByName(ImportProjectWizardContext.ATTR_ADD_LIB);
        versionAdapter = support.getPropertyEditorAdapterByName(ImportProjectWizardContext.ATTR_VERSION);
        servletVersionAdapter = support
                .getPropertyEditorAdapterByName(ImportProjectWizardContext.ATTR_SERVLET_VERSION);
        appRegister.init();
        initListeners();
    }

    public void dispose() {
        super.dispose();
        if (support != null)
            support.dispose();
        support = null;
        updateDataListener = null;
        if (supportControl != null && !supportControl.isDisposed())
            supportControl.dispose();
        supportControl = null;
        if (appRegister != null)
            appRegister.dispose();
        appRegister = null;
        webrootLocationAdapter = null;
        srcLocationAdapter = null;
        classesLocationAdapter = null;
        libLocationAdapter = null;
        addLibAdapter = null;
        versionAdapter = null;
        servletVersionAdapter = null;
    }

    private Layout getLayoutForSupport() {
        GridLayout gridLayout = new GridLayout(2, false);
        gridLayout.marginHeight = 4;
        gridLayout.marginWidth = 4;
        gridLayout.horizontalSpacing = 10;
        gridLayout.verticalSpacing = 10;
        return gridLayout;
    }

    public void createControl(Composite parent) {
        initializeDialogUnits(parent);
        Composite c = new Composite(parent, SWT.NONE);
        c.setLayout(new GridLayout());
        supportControl = support.createControl(c);
        supportControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Label label = new Label(c, SWT.SEPARATOR | SWT.HORIZONTAL);
        label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Control ch = appRegister.createControl(c);
        ch.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        setControl(c);
        validate();

    }

    public void setVisible(boolean visible) {
        if (visible) {
            lock = true;

            webrootLocationAdapter.setValue(context.getWebRootPath());
            srcLocationAdapter.setValue(context.getModules()[0].getAttributeValue("java src")); //$NON-NLS-1$

            classesLocationAdapter.setValue(context.getClassesLocation());
            libLocationAdapter.setValue(context.getLibLocation());
            addLibAdapter.setValue("" + context.getAddLibraries()); //$NON-NLS-1$
            versionAdapter.setValue(context.getTemplateVersion());
            servletVersionAdapter.setValue(context.getServletVersion());
            for (int i = 0; i < ATTRIBUTES.length; i++) {
                FieldEditor f = support.getPropertyEditorByName(ATTRIBUTES[i])
                        .getFieldEditor(getControl().getParent());
                if (f instanceof DirectoryFieldEditorEx)
                    ((DirectoryFieldEditorEx) f).setLastPath(context.getWebInfLocation());
            }
            appRegister.loadApplicationName();
            lock = false;
        }
        validate();
        super.setVisible(visible);
    }

    public void setDialogSize() {
        Shell shell = getShell();
        getShell().setSize(shell.getSize().x, shell.getSize().y);
    }

    boolean lock = false;

    private void initListeners() {
        updateDataListener = new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent evt) {
                if (!lock) {
                    updateContext();
                    setDependencies();
                    validateSrcLastPath();
                    validate();
                }
            }
        };
        support.addPropertyChangeListener(updateDataListener);
        appRegister.addPropertyChangeListener(inputListener);
    }

    private void updateContext() {
        context.getModules()[0].setAttributeValue("root", webrootLocationAdapter.getStringValue(false)); //$NON-NLS-1$
        context.getModules()[0].setAttributeValue("java src", srcLocationAdapter.getStringValue(false)); //$NON-NLS-1$

        context.setClassesLocation(classesLocationAdapter.getStringValue(false));
        context.setLibLocation(libLocationAdapter.getStringValue(false));
        context.setAddLibraries("true".equals(addLibAdapter.getStringValue(true))); //$NON-NLS-1$
        context.setTemplateVersion(versionAdapter.getStringValue(true));
        context.setServletVersion(servletVersionAdapter.getStringValue(true));
        context.setBuildXmlLocation(""/*buildXmlLocationAdapter.getStringValue(false)*/); //$NON-NLS-1$
    }

    public void validate() {
        setDependencies();
        String message = appRegister.getErrorMessage();
        if (message == null) {
            if (context.getWebRootPath() == null || context.getWebRootPath().length() == 0) {

                message = DefaultCreateHandler.getReguiredMessage(webrootLocationAdapter.getAttribute().getName());
            }
        }
        setPageComplete(message == null);
        setErrorMessage(message);
        if (message == null && !context.isServletVersionConsistentToWebXML()) {
            String warning = IImportWebProjectContext.SERVLET_VERSION_WARNING;
            setMessage(warning, WARNING);
        } else {
            setMessage(null, 0);
        }
        validateSrcLastPath();
    }

    void validateSrcLastPath() {
        String srcLocation = srcLocationAdapter.getStringValue(true);
        if (srcLocation.length() == 0) {
            String webRootLocation = webrootLocationAdapter.getStringValue(true);
            DirectoryFieldEditorEx srcField = (DirectoryFieldEditorEx) support.getFieldEditorByName("src"); //$NON-NLS-1$
            if (webRootLocation.length() > 0 && srcField != null) {
                srcField.setLastPath(webRootLocation);
            }
        }
    }

    InputChangeListener inputListener = new InputChangeListener();

    class InputChangeListener implements java.beans.PropertyChangeListener {
        public void propertyChange(java.beans.PropertyChangeEvent evt) {
            validate();
            if (!lock) {
                String an = appRegister.getApplicationName();
                if (an.length() > 0 && !an.equals(context.getProjectName())) {
                    context.setApplicationName(an);
                }
            }
        }
    }

    protected void setDependencies() {
        boolean b = "true".equals(addLibAdapter.getStringValue(true)); //$NON-NLS-1$
        FieldEditor f = support.getFieldEditorByName("version"); //$NON-NLS-1$
        f.setEnabled(b, supportControl);
    }

}