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