/******************************************************************************* * 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.common.model.ui.wizards; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; 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.IType; import org.eclipse.jdt.core.JavaConventions; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.jboss.tools.common.model.ui.ModelUIPlugin; /** * @author au */ public class NewTypeWizardAdapter { // common data private IJavaProject javaProject; private IProject project; private boolean rawData = true; private boolean createMain = true; private boolean createConstructors = true; private boolean createInherited = true; private boolean canBeModified = true; private IStatus classNameStatus; private IStatus packageNameStatus; // raw data // private String rawInterfaceName; private HashSet<String> rawInterfaces = new HashSet<String>(); // adapted data // private IType superClassType; private String superClassName; // private IType interfaceType; // private String interfaceName; private String className; // private String classArgs; private String packageName; private IPackageFragmentRoot packageFragmentRoot; private IPackageFragment packageFragment; private ArrayList<String> interfaces = new ArrayList<String>(); private NewTypeWizardAdapter() {} // Interface for us public NewTypeWizardAdapter(IProject project) { if(project != null) try { this.javaProject = (IJavaProject)project.getNature(JavaCore.NATURE_ID); } catch (CoreException e) { ModelUIPlugin.getPluginLog().logError(e); } this.project = project; } public void setRawClassName(String rawClassName) { this.rawData = true; this.className = rawClassName; } public void setRawSuperClassName(String rawSuperClassName) { this.rawData = true; this.superClassName = rawSuperClassName; } public void setRawPackageName(String rawPackageName) { this.rawData = true; this.packageName = rawPackageName; } public void addRawInterfaceName(String rawInterfaceName) { this.rawData = true; this.rawInterfaces.add(rawInterfaceName); } public void setCanBeModified(boolean canBeModified) { this.canBeModified = canBeModified; } public void setCreateConstructors(boolean createConstructors) { this.createConstructors = createConstructors; } public void setCreateInherited(boolean createInherited) { this.createInherited = createInherited; } public void setCreateMain(boolean createMain) { this.createMain = createMain; } // doAdapted private void doAdapted() { // source folder name, package name, class name int loc = className.indexOf(":"); //$NON-NLS-1$ if (loc != -1) { if (loc < className.length()) { // classArgs = className.substring(loc + 1, className.length()); className = className.substring(0, loc); } if (loc > 0) className = className.substring(0, loc); else if (loc == 0) className = ""; //$NON-NLS-1$ } classNameStatus = JavaConventions.validateJavaTypeName(className); loc = className.lastIndexOf('.'); if (loc != -1) { packageName = className.substring(0, loc); className = className.substring(loc + 1); packageNameStatus = JavaConventions.validatePackageName(packageName); classNameStatus = JavaConventions.validateJavaTypeName(className); } if (javaProject == null) return; try { if (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) packageFragmentRoot = srcEntryDft; else { packageFragmentRoot = javaProject.getPackageFragmentRoot(javaProject.getResource()); } if (packageFragment == null && packageFragmentRoot != null && packageName != null && packageName.length() > 0) { IFolder packageFolder = project.getFolder(packageName); packageFragment = packageFragmentRoot .getPackageFragment(packageFolder .getProjectRelativePath().toOSString()); } } // superclass and interface if (this.rawInterfaces != null && this.rawInterfaces.size()>0) { Iterator i = this.rawInterfaces.iterator(); this.interfaces.clear(); while (i.hasNext()) { String _interface = (String)i.next(); // check interface name this.interfaces.add(_interface); } } if (this.superClassName !=null && this.superClassName.length()>0) { // check super class } rawData = false; } catch (JavaModelException e) { ModelUIPlugin.getPluginLog().logError(e); } } /* 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; } */ // Interface for NewClassWizardPage public IPackageFragmentRoot getPackageFragmentRoot() { if (rawData) doAdapted(); return this.packageFragmentRoot; } public IPackageFragment getPackageFragment() { if (rawData) doAdapted(); return this.packageFragment; } public IType getEnclosingType() { if (rawData) doAdapted(); return null; } public boolean getEnclosingTypeSelection() { if (rawData) doAdapted(); return false; } public String getTypeName() { if (rawData) doAdapted(); return this.className; } public String getSuperClass() { if (rawData) doAdapted(); return this.superClassName; } public List getSuperInterfaces() { if (rawData) doAdapted(); return this.interfaces; } public boolean isCreateMain() { if (rawData) doAdapted(); return this.createMain; } public boolean isCreateConstructors() { if (rawData) doAdapted(); return this.createConstructors; } public boolean isCreateInherited() { if (rawData) doAdapted(); return this.createInherited; } public boolean isCanBeModified() { if (rawData) doAdapted(); return this.canBeModified; } public IStatus getClassNameStatus() { return classNameStatus; } public IStatus getPackageNameStatus() { return packageNameStatus; } }