/******************************************************************************* * Copyright (c) 2007-2013 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.attribute.editor; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.ElementChangedEvent; import org.eclipse.jdt.core.IElementChangedListener; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.jboss.tools.common.model.ui.ModelUIPlugin; import org.jboss.tools.common.model.ui.templates.configuration.MetaClassTemplateHelper; import org.jboss.tools.common.model.util.EclipseResourceUtil; class JavaAdapter { private String superClass; private String[] interfacees; private IJavaProject javaProject; private IJavaElement javaElement; private IPackageFragmentRoot packageFragmentRoot; private String className; private String packageName; private static JavaAdapter INSTANCE; long lastTimeChange = 0; private JavaAdapter() { JavaCore.addElementChangedListener(new IElementChangedListener() { public void elementChanged(ElementChangedEvent event) { lastTimeChange = System.currentTimeMillis(); } }); } public static JavaAdapter getInstance() { if (INSTANCE==null) { INSTANCE = new JavaAdapter(); } return INSTANCE; } public IPackageFragmentRoot getPackageFragmentRoot(IProject project) { if(project == null) return null; try { javaProject = (IJavaProject)project.getNature(JavaCore.NATURE_ID); } catch (CoreException e) { ModelUIPlugin.getPluginLog().logError("Cannot find Java Project Nature.", e); //$NON-NLS-1$ return null; } IResource r = EclipseResourceUtil.getJavaSourceRoot(project); if(r == null || !r.exists()) r = project; return packageFragmentRoot = javaProject == null ? null : javaProject.getPackageFragmentRoot(r); } public void init(IProject project, String publicId, String xPath, String name) { if (publicId != null) { this.superClass = MetaClassTemplateHelper.instance.getSuperClassName(project, publicId, xPath); this.interfacees = MetaClassTemplateHelper.instance.getInterfacesName(project, publicId, xPath); } if (project == null) { return; } packageName = null; String fullClassName = null; if (name == null) name = ""; //$NON-NLS-1$ fullClassName = name.replace('.', '/') + ".java"; //$NON-NLS-1$ if (name.lastIndexOf('.') > 0) { className = name.substring(name.lastIndexOf('.') + 1); packageName = name.substring(0,name.lastIndexOf('.')); } else { className = name; packageName = ""; //$NON-NLS-1$ } try { javaProject = (IJavaProject)project.getNature(JavaCore.NATURE_ID); } catch (CoreException e) { ModelUIPlugin.getPluginLog().logError("Cannot find Java Project Nature.", new Exception()); //$NON-NLS-1$ return; } packageFragmentRoot = javaProject == null ? null : javaProject.getPackageFragmentRoot(javaProject.getResource()); try { if(javaProject == null) { javaElement = null; } else { javaElement = javaProject.findElement(new Path(fullClassName)); if(javaElement == null) { javaElement = javaProject.findType(name); } if(javaElement == null) { javaElement = javaProject.findType(name, new NullProgressMonitor()); } } } catch (JavaModelException e) { javaElement = null; // no validation here // ModelUIPlugin.log("Cannot find Java Class.", e); } } public String getSuperClass() { if (superClass==null || superClass.length()==0) superClass = "java.lang.Object"; //$NON-NLS-1$ return superClass; } public void setSuperClass(String superClass) { this.superClass = superClass; } public String[] getInterfacees() { return interfacees; } public void setInterfacees(String[] interfacees) { this.interfacees = interfacees; } public IJavaElement getJavaElement() { return javaElement; } public void setJavaElement(IJavaElement javaElement) { this.javaElement = javaElement; } public String getClassName() { return className; } public String getPackageName() { return packageName; } public void setClassName(String className) { this.className = className; } public IJavaProject getJavaProject() { return javaProject; } public void setJavaProject(IJavaProject javaProject) { this.javaProject = javaProject; } public IPackageFragmentRoot getPackageFragmentRoot() { return packageFragmentRoot; } public void setPackageFragmentRoot(IPackageFragmentRoot packageFragmentRoot) { this.packageFragmentRoot = packageFragmentRoot; } }