[jboss-cvs] jbosside/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/facet ...
Robert Stryker
rawblem at gmail.com
Mon Nov 6 12:04:26 EST 2006
User: rawb
Date: 06/11/06 12:04:26
Added: ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/facet
Ejb30FacetPostInstallDelegate.java
Ejb30FacetProjectCreationDataModelProvider.java
Ejb30FacetInstallDelegate.java
Ejb30FacetInstallDataModelProvider.java
Log:
Completely new infrastructure to support the webtools / facets. It still needs better text messages and some cleanup but should be more than functional.
Revision Changes Path
1.1 date: 2006/11/06 17:04:26; author: rawb; state: Exp;jbosside/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/facet/Ejb30FacetPostInstallDelegate.java
Index: Ejb30FacetPostInstallDelegate.java
===================================================================
package org.jboss.ide.eclipse.ejb3.core.facet;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
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.eclipse.jst.common.project.facet.core.ClasspathHelper;
import org.eclipse.jst.j2ee.internal.common.operations.JavaModelUtil;
import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetInstallDataModelProperties;
import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
import org.eclipse.jst.j2ee.project.facet.J2EEFacetInstallDelegate;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
import org.jboss.ide.eclipse.ejb3.core.classpath.AopFromRuntimeClasspathContainer;
import org.jboss.ide.eclipse.ejb3.core.classpath.EJB3ClasspathContainer;
import org.jboss.ide.eclipse.jdt.aop.core.classpath.AopJdk15ClasspathContainer;
public class Ejb30FacetPostInstallDelegate extends J2EEFacetInstallDelegate implements IDelegate {
public void execute(IProject project, IProjectFacetVersion fv, Object config, IProgressMonitor monitor) throws CoreException {
if (monitor != null) {
monitor.beginTask("", 3); //$NON-NLS-1$
}
wstEjbPostInstall(project, fv, config, monitor);
jbossPostInstall(project, fv, config, monitor);
if (monitor != null) {
monitor.done();
}
}
public void wstEjbPostInstall(IProject project, IProjectFacetVersion fv, Object config, IProgressMonitor monitor) throws CoreException {
IDataModel model = (IDataModel) config;
ComponentCore.createComponent(project);
final String earProjectName = (String) model.getProperty(
IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME);
// Associate with an EAR, if necessary.
if (model.getBooleanProperty(IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR)) {
if (earProjectName != null && !earProjectName.equals("")) { //$NON-NLS-1$
String j2eeVersionText = "5.0";
final String moduleURI = model.getStringProperty(
IJ2EEModuleFacetInstallDataModelProperties.MODULE_URI);
installAndAddModuletoEAR( j2eeVersionText,
earProjectName,
(IRuntime) model.getProperty(IJ2EEFacetInstallDataModelProperties.FACET_RUNTIME),
project,
moduleURI,
monitor );
}
// No support for clients
}
if (monitor != null) {
monitor.worked(1);
}
}
public void jbossPostInstall(IProject project, IProjectFacetVersion fv, Object config, IProgressMonitor monitor) throws CoreException {
addClasspathEntries(project, fv, config, monitor);
addJNDIFile(project);
}
public void addClasspathEntries(IProject project, IProjectFacetVersion fv, Object config, IProgressMonitor monitor) throws CoreException {
ArrayList list = new ArrayList();
String runtimeKey = IFacetProjectCreationDataModelProperties.FACET_RUNTIME;
if( config instanceof IDataModel ) {
IDataModel model = (IDataModel)config;
Object runtime = model.getProperty(runtimeKey);
String runtimeName = null;
if( runtime instanceof IRuntime ) {
runtimeName = ((IRuntime)runtime).getName();
}
//list.add(JavaCore.newContainerEntry(new Path(AopJdk15ClasspathContainer.CONTAINER_ID)));
list.add(JavaCore.newContainerEntry(new Path(EJB3ClasspathContainer.CONTAINER_ID).append(runtimeName)));
list.add(JavaCore.newContainerEntry(new Path(AopFromRuntimeClasspathContainer.CONTAINER_ID).append(runtimeName)));
ClasspathHelper.addClasspathEntries(project, fv, list);
}
if (monitor != null) {
monitor.worked(1);
}
}
public void addJNDIFile(IProject project) {
try {
String sourcePath = findSourcePaths(project);
createJndiProperties(new Path(sourcePath));
} catch( CoreException ce ) {
}
}
private class JndiPropertiesFileFilter implements FileFilter {
public boolean accept(File file) {
return (file.getName().equals("jndi.properties"));
}
}
private void createJndiProperties(IPath srcPath) throws CoreException {
IPath jndiPath = srcPath.append("jndi.properties");
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(jndiPath);
String jndiProps = "java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory\n"
+ "java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces\n"
+ "java.naming.provider.url=localhost:1099\n";
file.create(new ByteArrayInputStream(jndiProps.getBytes()), true, new NullProgressMonitor());
}
private String findSourcePaths(IProject project) throws CoreException {
IJavaElement elem = JavaCore.create(project);
IPackageFragmentRoot initRoot= null;
if (elem != null) {
initRoot= JavaModelUtil.getPackageFragmentRoot(elem);
try {
if (initRoot == null || initRoot.getKind() != IPackageFragmentRoot.K_SOURCE) {
IJavaProject jproject= elem.getJavaProject();
if (jproject != null) {
initRoot= null;
if (jproject.exists()) {
IPackageFragmentRoot[] roots= jproject.getPackageFragmentRoots();
for (int i= 0; i < roots.length; i++) {
if (roots[i].getKind() == IPackageFragmentRoot.K_SOURCE) {
initRoot= roots[i];
break;
}
}
}
if (initRoot == null) {
initRoot= jproject.getPackageFragmentRoot(jproject.getResource());
}
}
}
} catch (JavaModelException e) {}
}
return initRoot.getPath().makeRelative().toString();
}
}
1.1 date: 2006/11/06 17:04:26; author: rawb; state: Exp;jbosside/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/facet/Ejb30FacetProjectCreationDataModelProvider.java
Index: Ejb30FacetProjectCreationDataModelProvider.java
===================================================================
package org.jboss.ide.eclipse.ejb3.core.facet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jst.common.project.facet.IJavaFacetInstallDataModelProperties;
import org.eclipse.jst.common.project.facet.JavaFacetInstallDataModelProvider;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
import org.eclipse.jst.j2ee.project.facet.J2EEFacetProjectCreationDataModelProvider;
import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
import org.eclipse.wst.common.frameworks.datamodel.DataModelEvent;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelListener;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
import org.eclipse.wst.server.core.ServerCore;
import org.jboss.ide.eclipse.as.core.server.JBossServer;
import org.jboss.ide.eclipse.as.core.server.runtime.JBossServerRuntime;
import org.jboss.ide.eclipse.ejb3.core.classpath.EJB3ClasspathContainer;
public class Ejb30FacetProjectCreationDataModelProvider extends J2EEFacetProjectCreationDataModelProvider {
public static final String EJB30_FACET_ID = "jboss.ejb30";
public static final IProjectFacet EJB_30_FACET_OBJECT = ProjectFacetsManager.getProjectFacet(EJB30_FACET_ID);
public Ejb30FacetProjectCreationDataModelProvider() {
super();
}
public void init() {
super.init();
FacetDataModelMap map = (FacetDataModelMap) getProperty(FACET_DM_MAP);
IDataModel javaFacet = DataModelFactory.createDataModel(new JavaFacetInstallDataModelProvider());
map.add(javaFacet);
IDataModel ejbFacet = DataModelFactory.createDataModel(new Ejb30FacetInstallDataModelProvider());
map.add(ejbFacet);
javaFacet.setProperty(IJavaFacetInstallDataModelProperties.SOURCE_FOLDER_NAME,ejbFacet.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER));
ejbFacet.addListener(new IDataModelListener() {
public void propertyChanged(DataModelEvent event) {
if (IJ2EEModuleFacetInstallDataModelProperties.EAR_PROJECT_NAME.equals(event.getPropertyName())) {
setProperty(EAR_PROJECT_NAME, event.getProperty());
}else if (IJ2EEModuleFacetInstallDataModelProperties.ADD_TO_EAR.equals(event.getPropertyName())) {
setProperty(ADD_TO_EAR, event.getProperty());
}
}
});
Collection requiredFacets = new ArrayList();
requiredFacets.add(ProjectFacetsManager.getProjectFacet(javaFacet.getStringProperty(IFacetDataModelProperties.FACET_ID)));
requiredFacets.add(ProjectFacetsManager.getProjectFacet(ejbFacet.getStringProperty(IFacetDataModelProperties.FACET_ID)));
setProperty(REQUIRED_FACETS_COLLECTION, requiredFacets);
}
public boolean propertySet(String propertyName, Object propertyValue) {
if( propertyName.equals( MODULE_URI )){
FacetDataModelMap map = (FacetDataModelMap) getProperty(FACET_DM_MAP);
IDataModel ejbFacet = map.getFacetDataModel( J2EEProjectUtilities.EJB );
ejbFacet.setProperty( IJ2EEModuleFacetInstallDataModelProperties.MODULE_URI, propertyValue );
}
return super.propertySet(propertyName, propertyValue);
}
public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
if (FACET_RUNTIME.equals(propertyName)) {
DataModelPropertyDescriptor[] descriptors = super.getValidPropertyDescriptors(propertyName);
List list = new ArrayList();
for (int i = 0; i < descriptors.length; i++) {
IRuntime rt = (IRuntime) descriptors[i].getPropertyValue();
if( rt == null ) continue;
Map properties = rt.getProperties();
String id = (String)properties.get("id");
org.eclipse.wst.server.core.IRuntime wstRuntime = ServerCore.findRuntime(id);
try {
JBossServerRuntime jbrt = (JBossServerRuntime) wstRuntime.getAdapter(JBossServerRuntime.class);
if( hasEJB3(jbrt)) {
list.add(descriptors[i]);
}
} catch( Exception e ) {
e.printStackTrace();
}
}
descriptors = new DataModelPropertyDescriptor[list.size()];
for (int i = 0; i < descriptors.length; i++) {
descriptors[i] = (DataModelPropertyDescriptor) list.get(i);
}
return descriptors;
}
return super.getValidPropertyDescriptors(propertyName);
}
protected boolean hasEJB3(JBossServerRuntime jbrt) {
IPath jarToCheck = EJB3ClasspathContainer.jbossConfigRelativeJarPaths[0];
String jbossBaseDir = jbrt.getRuntime().getLocation().toOSString();
String jbossConfigDir = jbrt.getConfigName();
IPath absoluteJarPath = new Path(jbossBaseDir).append("server").append(jbossConfigDir).append(jarToCheck);
return absoluteJarPath.toFile().exists();
}
}
1.1 date: 2006/11/06 17:04:26; author: rawb; state: Exp;jbosside/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/facet/Ejb30FacetInstallDelegate.java
Index: Ejb30FacetInstallDelegate.java
===================================================================
package org.jboss.ide.eclipse.ejb3.core.facet;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.jst.common.project.facet.WtpUtils;
import org.eclipse.jst.common.project.facet.core.ClasspathHelper;
import org.eclipse.jst.j2ee.ejb.componentcore.util.EJBArtifactEdit;
import org.eclipse.jst.j2ee.internal.J2EEConstants;
import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
import org.eclipse.jst.j2ee.project.facet.J2EEFacetInstallDelegate;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.datamodel.FacetDataModelProvider;
import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.project.facet.IProductConstants;
import org.eclipse.wst.project.facet.ProductManager;
public class Ejb30FacetInstallDelegate extends J2EEFacetInstallDelegate implements IDelegate {
public void execute(IProject project, IProjectFacetVersion fv, Object config, IProgressMonitor monitor) throws CoreException {
if (monitor != null) {
monitor.beginTask("", 1); //$NON-NLS-1$
}
try {
// add java nature first
addProjectNature(project, JavaCore.NATURE_ID);
IDataModel model = (IDataModel) config;
final IJavaProject jproj = JavaCore.create(project);
// Add WTP natures.
WtpUtils.addNatures(project);
// Create the directory structure.
final IWorkspace ws = ResourcesPlugin.getWorkspace();
final IPath pjpath = project.getFullPath();
// Setup the flexible project structure.
final IVirtualComponent c = ComponentCore.createComponent(project);
c.create(0, null);
c.setMetaProperty("java-output-path", ProductManager.getProperty(IProductConstants.OUTPUT_FOLDER)); //$NON-NLS-1$
final IVirtualFolder ejbroot = c.getRootFolder();
IFolder ejbFolder = null;
String configFolder = null;
configFolder = model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER);
ejbroot.createLink(new Path("/" + configFolder), 0, null); //$NON-NLS-1$
String ejbFolderName = model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER);
IPath ejbFolderpath = pjpath.append(ejbFolderName);
ejbFolder = ws.getRoot().getFolder(ejbFolderpath);
// add source folder maps
final IClasspathEntry[] cp = jproj.getRawClasspath();
for (int i = 0; i < cp.length; i++) {
final IClasspathEntry cpe = cp[i];
if (cpe.getEntryKind() == IClasspathEntry.CPE_SOURCE) {
ejbroot.createLink(cpe.getPath().removeFirstSegments(1), 0, null);
}
}
// Setup the classpath.
ClasspathHelper.removeClasspathEntries(project, fv);
if (!ClasspathHelper.addClasspathEntries(project, fv)) {
// TODO: Support the no runtime case.
// ClasspathHelper.addClasspathEntries( project, fv, <something> );
}
try {
((IDataModelOperation) model.getProperty(FacetDataModelProvider.NOTIFICATION_OPERATION)).execute(monitor, null);
} catch (ExecutionException e) {
Logger.getLogger().logError(e);
}
if (monitor != null) {
monitor.worked(1);
}
}
finally {
if (monitor != null) {
monitor.done();
}
}
}
/**
* Add the given project nature to the given project (if it isn't already added).
*/
public boolean addProjectNature(IProject project, String natureId) {
boolean added = false;
try {
if (project != null && natureId != null) {
IProjectDescription desc = project.getDescription();
if (!project.hasNature(natureId)) {
String natureIds[] = desc.getNatureIds();
String newNatureIds[] = new String[natureIds.length + 1];
System.arraycopy(natureIds, 0, newNatureIds, 1, natureIds.length);
newNatureIds[0] = natureId;
desc.setNatureIds(newNatureIds);
project.getProject().setDescription(desc, new NullProgressMonitor());
added = true;
}
}
}
catch (CoreException e) {
e.printStackTrace();
}
return added;
}
}
1.1 date: 2006/11/06 17:04:26; author: rawb; state: Exp;jbosside/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/facet/Ejb30FacetInstallDataModelProvider.java
Index: Ejb30FacetInstallDataModelProvider.java
===================================================================
package org.jboss.ide.eclipse.ejb3.core.facet;
import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.internal.common.CreationConstants;
import org.eclipse.jst.j2ee.internal.ejb.project.operations.IEjbFacetInstallDataModelProperties;
import org.eclipse.jst.j2ee.internal.plugin.IJ2EEModuleConstants;
import org.eclipse.jst.j2ee.project.facet.J2EEModuleFacetInstallDataModelProvider;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
public class Ejb30FacetInstallDataModelProvider extends J2EEModuleFacetInstallDataModelProvider
implements IEjbFacetInstallDataModelProperties{
public static final String EJB30_FACET_ID = "jboss.ejb30";
public static final IProjectFacetVersion EJB_30 = ProjectFacetsManager.getProjectFacet(EJB30_FACET_ID).getVersion("1.0"); //$NON-NLS-1$
public Set getPropertyNames() {
Set names = super.getPropertyNames();
names.add(CONFIG_FOLDER);
return names;
}
public Object getDefaultProperty(String propertyName) {
if(propertyName.equals(FACET_ID)){
return EJB30_FACET_ID;
} else if (propertyName.equals(CONFIG_FOLDER)){
return CreationConstants.DEFAULT_EJB_SOURCE_FOLDER;
} else if (propertyName.equals(MODULE_URI)) {
String projectName = model.getStringProperty(FACET_PROJECT_NAME).replace(' ', '_');
return projectName + IJ2EEModuleConstants.JAR_EXT;
}
return super.getDefaultProperty(propertyName);
}
protected int convertFacetVersionToJ2EEVersion(IProjectFacetVersion version) {
// I've only got one facet version so far, so woohoo
return J2EEVersionConstants.J2EE_1_4_ID;
}
public boolean isPropertyEnabled(String propertyName) {
return super.isPropertyEnabled(propertyName);
}
public boolean propertySet(String propertyName, Object propertyValue) {
boolean status = super.propertySet(propertyName, propertyValue);
return status;
}
public IStatus validate(String propertyName) {
return super.validate(propertyName);
}
}
More information about the jboss-cvs-commits
mailing list