org.eclipse.jst.jsf.common.ui.internal.dialogfield.JavaClassWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jst.jsf.common.ui.internal.dialogfield.JavaClassWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2006 Sybase, Inc. and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are 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:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.jsf.common.ui.internal.dialogfield;

import java.util.List;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaConventions;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.wizards.NewClassWizardPage;

/**
 * @author mengbo
 */
/*package*/ class JavaClassWizardPage extends NewClassWizardPage {
    private String _className;

    private final IProject _project;

    private final InitialClassProperties _initialValues;

    private IJavaProject _javaProject;

    private IStatus _fClassNameStatus, _fPackageNameStatus;

    private final static String SOURCE_COMPLIANCE_1_3 = JavaCore.VERSION_1_3;

    static class InitialClassProperties {
        // populate new wizard page
        private String superClassName;

        private List interfacesName;

        private String className;

        private String classArgs;

        private String packageName;

        private IPackageFragmentRoot packageFragmentRoot;

        private IPackageFragment packageFragment;

        InitialClassProperties() {
            this.superClassName = ""; //$NON-NLS-1$
            this.interfacesName = null;
            this.className = null;
            this.classArgs = null;
            this.packageName = null;
            this.packageFragment = null;
            this.packageFragmentRoot = null;
        }
    }

    /**
     * @param project
     * @param className
     * @param superClassName
     * @param interfacesName
     */
    public JavaClassWizardPage(IProject project, String className, String superClassName, List interfacesName) {
        super();
        this._className = className;
        this._project = project;
        try {
            if (project != null && project.hasNature(JavaCore.NATURE_ID)) {
                this._javaProject = JavaCore.create(project);
            } else {
                this._javaProject = null;
            }
        } catch (CoreException e) {
            e.printStackTrace();// PDEPlugin.logException(e);
        }
        _initialValues = new InitialClassProperties();
        _initialValues.className = className;
        _initialValues.superClassName = superClassName;
        _initialValues.interfacesName = interfacesName;
    }

    /**
     * @param project
     * @param className
     */
    public JavaClassWizardPage(IProject project, String className) {
        this(project, className, null, null);
    }

    /**
     * Call when page is added to wizard to initialize
     */
    public void init() {
        initializeExpectedValues();
        initializeWizardPage();
    }

    private void initializeExpectedValues() {
        // source folder name, package name, class name
        int loc = _className.indexOf(":"); //$NON-NLS-1$
        if (loc != -1) {
            if (loc < _className.length()) {
                _initialValues.classArgs = _className.substring(loc + 1, _className.length());
                _className = _className.substring(0, loc);
            }
            if (loc > 0) {
                _initialValues.className = _className.substring(0, loc);
            } else if (loc == 0) {
                _initialValues.className = ""; //$NON-NLS-1$
            }
        }
        _fClassNameStatus = JavaConventions.validateJavaTypeName(_initialValues.className, SOURCE_COMPLIANCE_1_3,
                SOURCE_COMPLIANCE_1_3);

        loc = _className.lastIndexOf('.');
        if (loc != -1) {
            _initialValues.packageName = _className.substring(0, loc);
            _initialValues.className = _className.substring(loc + 1);
            _fPackageNameStatus = JavaConventions.validateJavaTypeName(_initialValues.packageName,
                    SOURCE_COMPLIANCE_1_3, SOURCE_COMPLIANCE_1_3);
            _fClassNameStatus = JavaConventions.validateJavaTypeName(_initialValues.className,
                    SOURCE_COMPLIANCE_1_3, SOURCE_COMPLIANCE_1_3);
        }
        if (_javaProject == null) {
            return;
        }
        try {
            if (_initialValues.packageFragmentRoot == null) {
                IPackageFragmentRoot srcEntryDft = null;
                IPackageFragmentRoot[] roots = _javaProject.getPackageFragmentRoots();
                for (int i = 0; i < roots.length; i++) {
                    if (roots[i].getKind() == IPackageFragmentRoot.K_SOURCE) {
                        srcEntryDft = roots[i];
                        break;
                    }
                }
                if (srcEntryDft != null) {
                    _initialValues.packageFragmentRoot = srcEntryDft;
                } else {
                    _initialValues.packageFragmentRoot = _javaProject
                            .getPackageFragmentRoot(_javaProject.getResource());
                }
                if (_initialValues.packageFragment == null && _initialValues.packageFragmentRoot != null
                        && _initialValues.packageName != null && _initialValues.packageName.length() > 0) {
                    IFolder packageFolder = _project.getFolder(_initialValues.packageName);
                    _initialValues.packageFragment = _initialValues.packageFragmentRoot
                            .getPackageFragment(packageFolder.getProjectRelativePath().toOSString());
                }
            }
            // superclass and interface
            if (_initialValues.superClassName == null) {
                _initialValues.superClassName = "java.lang.Object"; //$NON-NLS-1$
            }
            //         _initialValues.superClassType = findTypeForName(_initialValues.superClassName);
        } catch (JavaModelException e) {
            e.printStackTrace();// PDEPlugin.logException(e);
        }
    }

    /**
     * initialize the wizard page
     */
    protected void initializeWizardPage() {
        setPackageFragmentRoot(_initialValues.packageFragmentRoot, true);
        setPackageFragment(_initialValues.packageFragment, true);
        setEnclosingType(null, true);
        setEnclosingTypeSelection(false, true);
        setTypeName(_initialValues.className, true);
        setSuperClass(_initialValues.superClassName, true);
        if (_initialValues.interfacesName != null) {
            setSuperInterfaces(_initialValues.interfacesName, true);
        }
        boolean hasSuperClass = _initialValues.superClassName != null && _initialValues.superClassName.length() > 0;
        boolean hasInterface = _initialValues.interfacesName != null && _initialValues.interfacesName.size() > 0;
        setMethodStubSelection(false, hasSuperClass, hasInterface || hasSuperClass, true);
    }

    //   private IType findTypeForName(String typeName) throws JavaModelException {
    //      if (typeName == null || typeName.length() == 0) {
    //         return null;
    //      }
    //      IType type = null;
    //      String fileName = typeName.replace('.', '/') + ".java"; //$NON-NLS-1$
    //      IJavaElement element = _javaProject.findElement(new Path(fileName));
    //      if (element == null) {
    //         return null;
    //      }
    //      if (element instanceof IClassFile) {
    //         type = ((IClassFile) element).getType();
    //      } else if (element instanceof ICompilationUnit) {
    //         IType[] types = ((ICompilationUnit) element).getTypes();
    //         type = types[0];
    //      }
    //      return type;
    //   }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jdt.ui.wizards.NewClassWizardPage#setVisible(boolean)
     */
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        // policy: wizards are not allowed to come up with an error message;
        // in this wizard, some fields may need initial validation and thus,
        // potentially start with an error message.
        if (_fClassNameStatus != null && !_fClassNameStatus.isOK()) {
            updateStatus(_fClassNameStatus);
        }
        if (_fPackageNameStatus != null && !_fPackageNameStatus.isOK()) {
            updateStatus(_fPackageNameStatus);
        }
    }

    /**
     * @return the class arguments or "" if not set
     */
    public String getClassArgs() {
        if (_initialValues.classArgs == null) {
            return ""; //$NON-NLS-1$
        }
        return _initialValues.classArgs;
    }

}