[jboss-cvs] jbosside/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/module ...

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/module 
                        Ejb30ModuleFactory.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/module/Ejb30ModuleFactory.java
  
  Index: Ejb30ModuleFactory.java
  ===================================================================
  /**
   * JBoss, a Division of Red Hat
   * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
  * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this software; if not, write to the Free
   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   */
  package org.jboss.ide.eclipse.ejb3.core.module;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  import org.eclipse.core.resources.IProject;
  import org.eclipse.core.runtime.CoreException;
  import org.eclipse.core.runtime.IPath;
  import org.eclipse.core.runtime.IStatus;
  import org.eclipse.core.runtime.Path;
  import org.eclipse.core.runtime.Status;
  import org.eclipse.jem.util.logger.proxy.Logger;
  import org.eclipse.jst.j2ee.internal.deployables.J2EEFlexProjDeployable;
  import org.eclipse.wst.common.componentcore.ComponentCore;
  import org.eclipse.wst.common.componentcore.ModuleCoreNature;
  import org.eclipse.wst.common.componentcore.internal.StructureEdit;
  import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
  import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
  import org.eclipse.wst.common.project.facet.core.IFacetedProject;
  import org.eclipse.wst.common.project.facet.core.IProjectFacet;
  import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
  import org.eclipse.wst.server.core.IModule;
  import org.eclipse.wst.server.core.model.IModuleResource;
  import org.eclipse.wst.server.core.model.ModuleDelegate;
  import org.eclipse.wst.server.core.util.ProjectModuleFactoryDelegate;
  import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
  import org.jboss.ide.eclipse.ejb3.core.EJB3WizardsCorePlugin;
  
  /**
   *
   * @author rob.stryker at jboss.com
   */
  public class Ejb30ModuleFactory extends ProjectModuleFactoryDelegate {
  	protected Map moduleDelegates = new HashMap(5);
  	
  	public static final String ID = "org.eclipse.jst.j2ee.server"; //$NON-NLS-1$
  	public static final String EJB30_TYPE = "jboss.ejb30";
  
  	protected IModule[] createModules(IProject project) {
  		try {
  			ModuleCoreNature nature = (ModuleCoreNature) project.getNature(IModuleConstants.MODULE_NATURE_ID);
  			if (nature != null)
  				return createModules(nature);
  		} catch (CoreException e) {
  			Logger.getLogger().write(e);
  		}
  		return null;
  	}
  
  	protected IModule[] createModules(ModuleCoreNature nature) {
  		IProject project = nature.getProject();
  		try {
  			IVirtualComponent comp = ComponentCore.createComponent(project);
  			return createModuleDelegates(comp);
  		} catch (Exception e) {
  			Logger.getLogger().write(e);
  		}
  		return null;
  	}
  
  	public ModuleDelegate getModuleDelegate(IModule module) {
  		return (ModuleDelegate) moduleDelegates.get(module);
  	}
  
  	protected IModule[] createModuleDelegates(IVirtualComponent component) {
  		List projectModules = new ArrayList();
  		try {
  			IModule module = null;
  			if( isProjectEjb30(component.getProject())) {
  				String version = getProjectEjb30Version(component.getProject());
  				module = createModule(component.getDeployedName(), component.getDeployedName(), EJB30_TYPE, version, component.getProject());
  
  				Object moduleDelegate = new J2EEFlexProjDeployable(component.getProject());
  
  				moduleDelegates.put(module, moduleDelegate);
  				projectModules.add(module);
  			}
  		} catch (Exception e) {
  			Logger.getLogger().write(e);
  		}
  		return (IModule[]) projectModules.toArray(new IModule[projectModules.size()]);
  	}
  	
  
  	public static boolean isProjectEjb30(IProject project) {
  		IFacetedProject facetedProject = null;
  		try {
  			facetedProject = ProjectFacetsManager.create(project);
  		} catch (CoreException e) {
  			return false;
  		}
  
  		if (facetedProject != null && ProjectFacetsManager.isProjectFacetDefined(EJB30_TYPE)) {
  			IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(EJB30_TYPE);
  			return projectFacet != null && facetedProject.hasProjectFacet(projectFacet);
  		}
  		return false;
  	}
  	
  	public static String getProjectEjb30Version(IProject project) {
  		IFacetedProject facetedProject = null;
  		IProjectFacet facet = null;
  		try {
  			facetedProject = ProjectFacetsManager.create(project);
  			facet = ProjectFacetsManager.getProjectFacet(EJB30_TYPE);
  		} catch (Exception e) {
  			// Not Faceted project or not J2EE Project
  		}
  		if (facet != null && facetedProject.hasProjectFacet(facet))
  			return facetedProject.getInstalledVersion(facet).getVersionString();
  		return null;
  	}
  	
  
  	/**
  	 * Returns the list of resources that the module should listen to
  	 * for state changes. The paths should be project relative paths.
  	 * Subclasses can override this method to provide the paths.
  	 *
  	 * @return a possibly empty array of paths
  	 */
  	protected IPath[] getListenerPaths() {
  		return new IPath[] {
  			new Path(".project"), // nature
  			new Path(StructureEdit.MODULE_META_FILE_NAME), // component
  			new Path(".settings/org.eclipse.wst.common.project.facet.core.xml") // facets
  		};
  	}
  
  	protected void clearCache() {
  		moduleDelegates = new HashMap(5);
  	}
  	
  	
  	
  	//  Stub
  	public class Ejb30ModuleDelegate extends ModuleDelegate {
  
  		public IModule[] getChildModules() {
  			return new IModule[0];
  		}
  
  		public IModuleResource[] members() throws CoreException {
  			return new IModuleResource[0];
  		}
  
  		public IStatus validate() {
  			return new Status(IStatus.OK, EJB3WizardsCorePlugin.PLUGIN_ID, 
  					0, "", null);
  		}
  	}
  	
  }
  
  



More information about the jboss-cvs-commits mailing list