com.liferay.ide.ui.snippets.wizard.AbstractModelWizardPage.java Source code

Java tutorial

Introduction

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

import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.core.util.StringPool;
import com.liferay.ide.ui.util.SWTUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog;
import org.eclipse.jdt.internal.ui.wizards.SuperInterfaceSelectionDialog;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.CheckedListDialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
import org.eclipse.jdt.ui.wizards.NewTypeWizardPage;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.window.Window;
import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector;
import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;

/**
 * @author Greg Amerson
 */
@SuppressWarnings({ "restriction", "rawtypes" })
public class AbstractModelWizardPage extends NewTypeWizardPage {

    protected class TypeFieldAdapter implements IStringButtonAdapter, IDialogFieldListener, IListAdapter {

        // -------- IStringButtonAdapter
        public void changeControlPressed(DialogField field) {
            typeChangeControlPressed(field);
        }

        public void customButtonPressed(ListDialogField field, int index) {
            // doButtonPressed(index);
        }

        public void dialogFieldChanged(DialogField field) {

        }

        public void doubleClicked(ListDialogField field) {

        }

        public void selectionChanged(ListDialogField field) {

        }

    }

    protected static final int IDX_DESELECT = 1;

    protected static final int IDX_SELECT = 0;

    public static Object[] getTypeProperties(IType type) {
        if (type == null) {
            return null;
        }

        JDTBeanIntrospector beanIntrospector = new JDTBeanIntrospector(type);
        Map<String, JDTBeanProperty> properties = beanIntrospector.getProperties();
        return properties.keySet().toArray();
    }

    protected IEditorPart editorPart;

    protected String lastVarName = StringPool.EMPTY;

    protected StringButtonDialogField modelClassDialogField;

    protected CheckedListDialogField propertyListField;

    protected Label varNameLabel;

    protected Text varNameText;

    public AbstractModelWizardPage(String pageName, IEditorPart editor) {
        super(true, pageName);

        editorPart = editor;

        TypeFieldAdapter adapter = new TypeFieldAdapter();

        modelClassDialogField = new StringButtonDialogField(adapter);
        modelClassDialogField.setLabelText(Msgs.modelClassLabel);
        modelClassDialogField.setButtonLabel(Msgs.newTypeWizardPage_superclass_button);

        String[] buttonLabels = new String[] { Msgs.selectAllLabel, Msgs.deselectAllLabel };

        propertyListField = new CheckedListDialogField(adapter, buttonLabels, new LabelProvider());
        propertyListField.setDialogFieldListener(adapter);
        propertyListField.setLabelText(Msgs.propertyColumnsLabel);
        propertyListField.setCheckAllButtonIndex(IDX_SELECT);
        propertyListField.setUncheckAllButtonIndex(IDX_DESELECT);
    }

    public void createControl(Composite parent) {
        Composite topComposite = SWTUtil.createTopComposite(parent, 3);

        modelClassDialogField.doFillIntoGrid(topComposite, 3);
        // Text modelClassText = modelClassDialogField.getTextControl(null);
        //
        // JavaTypeCompletionProcessor classCompletionProcessor = new JavaTypeCompletionProcessor(false, false, true);
        // classCompletionProcessor.setCompletionContextRequestor(new CompletionContextRequestor() {
        //
        // @Override
        // public StubTypeContext getStubTypeContext() {
        // return getClassStubTypeContext();
        // }
        // });
        //
        // ControlContentAssistHelper.createTextContentAssistant(modelClassText, classCompletionProcessor);
        // TextFieldNavigationHandler.install(modelClassText);

        propertyListField.doFillIntoGrid(topComposite, 3);
        LayoutUtil.setHorizontalSpan(propertyListField.getLabelControl(null), 1);
        LayoutUtil.setWidthHint(propertyListField.getLabelControl(null), convertWidthInCharsToPixels(40));
        LayoutUtil.setHorizontalGrabbing(propertyListField.getListControl(null));

        propertyListField.getTableViewer().setComparator(new ViewerComparator());

        varNameLabel = new Label(topComposite, SWT.LEFT);
        varNameLabel.setText(Msgs.variableNameLabel);
        varNameLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));

        varNameText = new Text(topComposite, SWT.SINGLE | SWT.BORDER);
        varNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        varNameText.addModifyListener(new ModifyListener() {

            public void modifyText(ModifyEvent e) {
                lastVarName = varNameText.getText();
            }
        });

        setControl(topComposite);
    }

    public IJavaProject getJavaProject() {
        IJavaProject javaProject = null;

        if (editorPart != null) {
            IEditorInput editorInput = editorPart.getEditorInput();
            if (editorInput instanceof IFileEditorInput) {
                IProject project = ((IFileEditorInput) editorInput).getFile().getProject();
                return JavaCore.create(project);
            }
        }

        return javaProject;
    }

    public String getModel() {
        try {
            IType type = getJavaProject().findType(getModelClass());
            return type.getElementName();
        } catch (Exception e) {

        }
        return StringPool.EMPTY;
    }

    public String getModelClass() {
        return modelClassDialogField.getText();
    }

    // protected StubTypeContext getClassStubTypeContext() {
    // if (fClassStubTypeContext == null) {
    // fClassStubTypeContext = TypeContextChecker.createSuperClassStubTypeContext(getTypeName(), null, null);
    // }
    // return fClassStubTypeContext;
    // }

    public String[] getPropertyColumns() {
        return (String[]) propertyListField.getCheckedElements().toArray(new String[0]);
    }

    public String getTypeName() {
        return modelClassDialogField.getText();
    }

    public String getVarName() {
        return lastVarName;
    }

    protected IType chooseClass() {
        IJavaProject project = getJavaProject();
        if (project == null) {
            return null;
        }

        IJavaElement[] elements = new IJavaElement[] { project };
        IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements);

        FilteredTypesSelectionDialog dialog = new FilteredTypesSelectionDialog(getShell(), false,
                getWizard().getContainer(), scope, IJavaSearchConstants.CLASS_AND_INTERFACE);
        dialog.setTitle(Msgs.modelClassSelection);
        dialog.setMessage(Msgs.newTypeWizardPage_SuperClassDialog_message);
        dialog.setInitialPattern(getSuperClass());

        if (dialog.open() == Window.OK) {
            return (IType) dialog.getFirstResult();
        }
        return null;
    }

    protected void handleBrowseButtonPressed() {

    }

    protected void typeChangeControlPressed(DialogField field) {
        IType type = chooseClass();
        if (type != null) {
            modelClassDialogField.setText(SuperInterfaceSelectionDialog.getNameWithTypeParameters(type));

            updatePropertyList(type);
        }
    }

    protected void updatePropertyList(IType type) {
        List<Object> propNames = new ArrayList<Object>();

        Object[] props = getTypeProperties(type);

        if (!CoreUtil.isNullOrEmpty(props)) {
            propNames.addAll(Arrays.asList(props));
        }

        try {
            if (type.isInterface()) {
                String[] superInterfaces = type.getSuperInterfaceNames();

                if (!CoreUtil.isNullOrEmpty(superInterfaces)) {
                    for (String superInterface : superInterfaces) {
                        IType superInterfaceType = type.getJavaProject().findType(superInterface);
                        Object[] superInterfaceProps = getTypeProperties(superInterfaceType);

                        if (!CoreUtil.isNullOrEmpty(superInterfaceProps)) {
                            propNames.addAll(Arrays.asList(superInterfaceProps));
                        }
                    }
                }
            } else {
                IType superType = type.getJavaProject().findType(type.getSuperclassName());
                Object[] superTypeProps = getTypeProperties(superType);

                if (!CoreUtil.isNullOrEmpty(superTypeProps)) {
                    propNames.addAll(Arrays.asList(superTypeProps));
                }
            }

        } catch (Exception e) {
            // no error this is best effort
        }

        propertyListField.setElements(propNames);

        varNameText.setText("a" + getModel()); //$NON-NLS-1$
    }

    private static class Msgs extends NLS {
        public static String deselectAllLabel;
        public static String modelClassLabel;
        public static String modelClassSelection;
        public static String newTypeWizardPage_superclass_button;
        public static String newTypeWizardPage_SuperClassDialog_message;
        public static String propertyColumnsLabel;
        public static String selectAllLabel;
        public static String variableNameLabel;

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