[jboss-cvs] JBossAS SVN: r101822 - in projects/profileservice/trunk: core/src/main/java/org/jboss/profileservice/dependency and 27 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 4 08:42:57 EST 2010


Author: emuckenhuber
Date: 2010-03-04 08:42:54 -0500 (Thu, 04 Mar 2010)
New Revision: 101822

Added:
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopProfileFactory.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactFilter.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeploymentMetaData.java
Removed:
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeployment.java
Modified:
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceInitializer.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileDependencyContext.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileMetaDataRegistry.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileRequirementDependencyItem.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileServiceController.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractDeploymentInfo.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractProfileDeployment.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/AbstractHDScannerFactory.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/HDScannerFactory.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyCapability.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/AbstractVFSProfileSource.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileDeploymentMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/ClassPathProfileMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/EmptyProfileMetaData.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifact.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifactRepository.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractRepositoryId.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/ArtifactRepositoryManager.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/FileArtifact.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/LocalFileArtifactRepository.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/LocalMavenArtifactRepository.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifact.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualDeploymentRepository.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualProfileFactory.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/AbstractRequirementResolver.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNode.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNodeDependency.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/AbstractVirtualDeploymentAssembly.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/BasicVirtualAssemblyContext.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/ImmutableAssemblyContext.java
   projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/deployment/AbstractVirtualDeployment.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/metadata/support/VirtualRepositoryMetaData.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/AbstractResolverTest.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/RequirementResolverTestSuite.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/UserRequirementUnitTestCase.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopArtifactRepository.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestArtifactRepository.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestVirtualDeploymentRepository.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/AbstractVirtualAssemblyTestCase.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/StructureMetaDataUnitTestCase.java
   projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/VirtualDeploymentAssemblyUnitTestCase.java
   projects/profileservice/trunk/core/src/test/resources/system/profiles/clustering-profiles.xml
   projects/profileservice/trunk/core/src/test/resources/system/profiles/stack-profiles.xml
   projects/profileservice/trunk/core/src/test/resources/system/profiles/web-profiles.xml
   projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestComponentMetaData.java
   projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestServiceComponentMetaData.java
   projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/test/SimpleViewUnitTestCase.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileKey.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/VirtualDeploymentRepository.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/metadata/ProfileDeploymentMetaData.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/Artifact.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepository.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepositoryId.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssembly.java
   projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssemblyContext.java
Log:


Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceInitializer.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceInitializer.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/bootstrap/AbstractProfileServiceInitializer.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -72,7 +72,7 @@
    {
       // initialize the config
       config.setManagementDomain(createManagementDomain(domainMetaData));
-      config.setServerConfiguration(createServerConfiguration(domainMetaData));
+      config.setServerConfiguration(createServerConfiguration(domainMetaData));     
       // Create profile service
       return createProfileService();
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileDependencyContext.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileDependencyContext.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileDependencyContext.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -23,10 +23,12 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.profileservice.deployment.ProfileDeployerPlugin;
 import org.jboss.profileservice.metadata.helpers.AbstractProfileKeyCapability;
 import org.jboss.profileservice.spi.ProfileKey;
@@ -72,7 +74,10 @@
    
    /** The profile features. */
    private List<ProfileFeatureMetaData> features = new ArrayList<ProfileFeatureMetaData>();
-      
+
+   /** The iDependOn. */
+   private List<ProfileRequirementDependencyItem> iDependOn = new ArrayList<ProfileRequirementDependencyItem>();
+   
    public ProfileDependencyContext(ProfileKey key, ProfileMetaData metaData, ProfileMetaDataRegistry domain)
    {
       if(key == null)
@@ -132,6 +137,8 @@
    public void addRequirement(ProfileRequirement requirement)
    {
       this.requirements.add(requirement);
+      // Create the dependency
+      this.iDependOn.add(createDependencyItem(requirement));
    }
 
    public Collection<ProfileCapability> getCapabilities()
@@ -144,6 +151,11 @@
       return this.requirements;
    }
    
+   public List<ProfileRequirementDependencyItem> getiDependOn()
+   {
+      return iDependOn;
+   }
+   
    @Override
    public void addFeature(ProfileFeatureMetaData feature)
    {
@@ -175,22 +187,26 @@
    
    protected ProfileKey resolve(ProfileRequirementDependencyItem requirement)
    {
-      return domain.resolve(this, requirement.getRequirement()); 
+      return domain.resolve(this, requirement.getRequirement(), Collections.EMPTY_SET); 
    }
 
-   protected void describe(ControllerContext context)
+   protected ProfileRequirementDependencyItem createDependencyItem(final ProfileRequirement requirement)
    {
-      // Create the dependencies
-      Collection<ProfileRequirement> requirements = getRequirements();
-      if(requirements != null && requirements.isEmpty() == false)
+      return new ProfileRequirementDependencyItem(this, requirement, ControllerState.INSTALLED);
+   }
+   
+   protected void describe(ProfileControllerContext context)
+   {
+      // Add the dependencies
+      Collection<ProfileRequirementDependencyItem> dependencies = getiDependOn();
+      if(dependencies != null && dependencies.isEmpty() == false)
       {
-         for(ProfileRequirement requirement : requirements)
+         for(DependencyItem dependency : dependencies)
          {
-               context.getDependencyInfo().addIDependOn(
-                     new ProfileRequirementDependencyItem(this,
-                           requirement, ControllerState.DESCRIBED));
+            context.getDependencyInfo().addIDependOn(dependency);
          }
       }
+      context.setDependencyContext(this);
    }
    
    public String toString()
@@ -209,12 +225,5 @@
       builder.append("key=").append(getKey());
    }
    
-   
-   class RequirementWrapper
-   {
-      ProfileRequirement requirement;
-      ProfileKey resolvesTo;
-   }
-   
 }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileMetaDataRegistry.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileMetaDataRegistry.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileMetaDataRegistry.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -24,8 +24,9 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.jboss.logging.Logger;
@@ -58,7 +59,7 @@
    private List<ProfileDependencyContext> profiles = new CopyOnWriteArrayList<ProfileDependencyContext>();
    
    /** The profiles by name. */
-   private Map<String, ProfileDependencyContext> profilesByName = new ConcurrentHashMap<String, ProfileDependencyContext>();
+   private ConcurrentMap<String, ProfileDependencyContext> profilesByName = new ConcurrentHashMap<String, ProfileDependencyContext>();
    
    /** The registered profiles. */
    private List<ProfileKey> registeredProfiles = new ArrayList<ProfileKey>();
@@ -127,25 +128,29 @@
          throw new IllegalArgumentException("empty profile name");
       }
       ProfileKey profileKey = createProfileKey(profileName);
-      if(this.registeredProfiles.contains(profileKey))
-      {
-         if(failOnDuplicates)
-         {
-            throw new IllegalStateException("duplicate profile " + profileKey);
-         }
-         return profileKey;
-      }
       ProfileDependencyContext context = new ProfileDependencyContext(profileKey, metaData, this);
-      addContext(context);
-      return profileKey;      
+      return addContext(context, failOnDuplicates);
    }
    
-   public void addContext(ProfileDependencyContext context)
+   public ProfileKey addContext(ProfileDependencyContext context)
    {
+      return addContext(context, true);
+   }
+   
+   public ProfileKey addContext(ProfileDependencyContext context, boolean failOnDuplicates)
+   {
       if(context == null)
       {
-         throw new IllegalArgumentException("null context");
+         throw new IllegalArgumentException("null dependency context");
       }
+      if(this.profilesByName.containsKey(context.getName()))
+      {
+         if(failOnDuplicates)
+         {
+            throw new IllegalStateException("duplicate profile " + context.getKey());
+         }
+         return context.getKey();
+      }
       this.profiles.add(context);
       this.registeredProfiles.add(context.getKey());
       this.profilesByName.put(context.getName(), context);
@@ -154,8 +159,9 @@
          // TODO
          this.onDemandContexts.add(context.getKey());
       }
+      return context.getKey();
    }
-   
+
    public ProfileDependencyContext getContext(String name)
    {
       if(name == null)
@@ -220,13 +226,17 @@
       return domainName;
    }
    
-   public ProfileKey resolve(ProfileDependencyContext ctx, ProfileRequirement requirement)
+   public ProfileKey resolve(ProfileDependencyContext ctx, ProfileRequirement requirement, Set<ProfileKey> excludes)
    {
       // Resolve the requirements based on the exposed capabilities
       final boolean trace = log.isTraceEnabled();
       ProfileKey resolved = null;
       for(ProfileDependencyContext profile : profiles)
       {
+         if(excludes.contains(profile.getKey()))
+         {
+            continue;
+         }
          Collection<ProfileCapability> capabilities = profile.getCapabilities();
          if(capabilities != null && capabilities.isEmpty() == false)
          {
@@ -241,6 +251,7 @@
                   if(resolved == null)
                   {
                      resolved = profile.getKey();
+                     break;
                   }
                   else
                   {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileRequirementDependencyItem.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileRequirementDependencyItem.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileRequirementDependencyItem.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -56,15 +56,38 @@
       this.requirement = requirement;
    }
 
+   public ProfileKey getName()
+   {
+      return context.getKey();
+   }
+   
+   public ProfileKey getIDependOn()
+   {
+      return ProfileKey.class.cast(super.getIDependOn());
+   }
+   
    public ProfileRequirement getRequirement()
    {
       return requirement;
    }
    
+   public void setIDependOn(Object iDependOn)
+   {
+      super.setIDependOn(iDependOn);
+   }
+   
    @Override
    public boolean resolve(Controller controller)
    {
-      ProfileKey iDependOn = getDependencyContext().resolve(this);
+      ProfileKey iDependOn = getIDependOn();
+      if(iDependOn == null)
+      {
+         iDependOn = getDependencyContext().resolve(this);
+         if(iDependOn != null)
+         {
+            setIDependOn(iDependOn);
+         }
+      }
 
       // Not resolvable 
       if(iDependOn == null)
@@ -72,12 +95,11 @@
          setResolved(getRequirement().isOptional());
          return isResolved();
       }
-
+      
       // Self dependencies
       if(getName().equals(iDependOn))
       {
          ControllerContext context = controller.getContext(iDependOn, null);
-         setIDependOn(iDependOn);
          addDependsOnMe(controller, context);
          setResolved(true);
          return isResolved();
@@ -86,7 +108,6 @@
       ControllerContext context = controller.getContext(iDependOn, getDependentState());
       if(context != null)
       {
-         setIDependOn(iDependOn);
          addDependsOnMe(controller, context);
          setResolved(true);
          return isResolved();

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileServiceController.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileServiceController.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/dependency/ProfileServiceController.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -173,7 +173,7 @@
       metaDataRegistry.removeProfile(key);
    }
    
-   void install(ProfileDependencyContext context, Profile profile) throws Throwable
+   public void install(ProfileDependencyContext context, Profile profile) throws Throwable
    {
       ProfileControllerContext pCCtx = createControllerContext(context, profile);
       controller.install(pCCtx);      
@@ -213,8 +213,6 @@
       kCtx.setMode(ControllerMode.MANUAL);
       // Describe the the controller context
       context.describe(kCtx);
-      // Set the meta data context
-      kCtx.setDependencyContext(context);
       
       // Add the lifecycle callback
       final LifecycleCallbackItem callbackItem = config.getLifeCycleActions();

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractDeploymentInfo.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractDeploymentInfo.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractDeploymentInfo.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -52,31 +52,41 @@
       return this.name;
    }
 
-   @Override
+   /**
+    * {@inheritDoc}
+    */
    public boolean hasFlag(ProfileDeploymentFlag flag)
    {
       return ((dFlags & flag.getFlag()) == flag.getFlag());
    }
 
-   @Override
+   /**
+    * {@inheritDoc}
+    */
    public boolean isDeployed()
    {
       return hasFlag(ProfileDeploymentFlag.DEPLOYED);
    }
 
-   @Override
+   /**
+    * {@inheritDoc}
+    */
    public boolean isLocked()
    {
       return hasFlag(ProfileDeploymentFlag.LOCKED);
    }
 
-   @Override
+   /**
+    * {@inheritDoc}
+    */
    public void setFlag(ProfileDeploymentFlag flag)
    {
       dFlags |= flag.getFlag();
    }
 
-   @Override
+   /**
+    * {@inheritDoc}
+    */
    public void clearFlag(ProfileDeploymentFlag flag)
    {
       dFlags &= ~flag.getFlag();

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractProfileDeployment.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractProfileDeployment.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/AbstractProfileDeployment.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -25,7 +25,6 @@
 import org.jboss.profileservice.spi.ProfileDeployment;
 import org.jboss.profileservice.spi.deployment.DeploymentAttachments;
 import org.jboss.profileservice.spi.deployment.ProfileDeploymentInfo;
-import org.jboss.vfs.VFSUtils;
 import org.jboss.vfs.VirtualFile;
 
 /**
@@ -82,7 +81,7 @@
       try
       {
          // URI without the trailing '/'
-         return VFSUtils.fixName(root.toURI().toString());
+         return root.asFileURI().toString();
       }
       catch (Exception e)
       {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/AbstractHDScannerFactory.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/AbstractHDScannerFactory.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/AbstractHDScannerFactory.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -21,6 +21,8 @@
 */
 package org.jboss.profileservice.deployment.hotdeploy;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ScheduledFuture;
@@ -123,6 +125,14 @@
    /**
     * {@inheritDoc}
     */
+   public Collection<Scanner> getRegisteredScanners()
+   {
+      return new ArrayList<Scanner>(this.registeredScans.values());
+   }
+   
+   /**
+    * {@inheritDoc}
+    */
    public void activateScanner(ProfileKey key)
    {
       Scanner scanner = this.registeredScans.get(key);

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/HDScannerFactory.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/HDScannerFactory.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/deployment/hotdeploy/HDScannerFactory.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -21,6 +21,8 @@
 */
 package org.jboss.profileservice.deployment.hotdeploy;
 
+import java.util.Collection;
+
 import org.jboss.profileservice.spi.MutableProfile;
 import org.jboss.profileservice.spi.ProfileKey;
 
@@ -61,7 +63,7 @@
     * @return the Scanner created
     */
    Scanner registerScanner(MutableProfile profile, ScannerConfiguration configuration);
-   
+
    /**
     * Activate a scanner.
     * 
@@ -82,6 +84,13 @@
     * @param key the profile key
     */
    Scanner unregisterScanner(ProfileKey key);
+
+   /**
+    * Get the registered scanners.
+    * 
+    * @return the registered scanners
+    */
+   Collection<Scanner> getRegisteredScanners();
    
 }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyCapability.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyCapability.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyCapability.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -52,7 +52,7 @@
    {
       if(other != null && other instanceof AbstractProfileKeyCapability)
       {
-         return getName().equals(AbstractProfileKeyCapability.class.cast(other)) == false;
+         return getName().equals(AbstractProfileKeyCapability.class.cast(other).getName()) == false;
       }
       return true;
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/metadata/helpers/AbstractProfileKeyMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -78,7 +78,7 @@
       if (obj == null || obj instanceof AbstractProfileKeyMetaData == false)
          return false;
       
-      AbstractProfileKeyMetaData other = (AbstractProfileKeyMetaData) obj;
+      AbstractProfileKeyMetaData other = AbstractProfileKeyMetaData.class.cast(obj);
       return equals(name, other.name);
    }
    

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/AbstractVFSProfileSource.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/AbstractVFSProfileSource.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/AbstractVFSProfileSource.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -250,7 +250,7 @@
       }
       
       // Check if we accept this deployment
-      String key = component.toURI().toString();
+      String key = component.asFileURI().toString();
       if(acceptsDeployment(key) == false)
          return;
 
@@ -324,7 +324,7 @@
     */
    protected String addVirtualFileCache(VirtualFile vf) throws MalformedURLException, URISyntaxException
    {
-      String uri = vf.toURI().toString();
+      String uri = vf.asFileURI().toString();
       this.applicationVFCache.put(uri, vf);
       return uri;
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileDeploymentMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileDeploymentMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/BasicProfileDeploymentMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -32,7 +32,7 @@
 import org.jboss.profileservice.spi.metadata.ProfileMetaDataVisitor;
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 
 /**
  * The basic profile deployment meta data.
@@ -54,7 +54,7 @@
    }
 
    @Override
-   public List<VirtualDeployment> getChildren()
+   public List<VirtualDeploymentMetaData> getChildren()
    {
       return Collections.emptyList();
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/ClassPathProfileMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/ClassPathProfileMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/ClassPathProfileMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -41,7 +41,7 @@
 import org.jboss.profileservice.spi.metadata.ProfileSourceMetaData;
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.xb.annotations.JBossXmlSchema;
 
 /**
@@ -149,7 +149,7 @@
       
       @Override
       @XmlTransient
-      public List<VirtualDeployment> getChildren()
+      public List<VirtualDeploymentMetaData> getChildren()
       {
          return Collections.emptyList();
       }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/EmptyProfileMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/EmptyProfileMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/profile/metadata/plugin/EmptyProfileMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -90,14 +90,22 @@
       /** The dependency mode. */
       private DependencyMode mode = DependencyMode.getDefault();
 
+      public DependencyModeRequirement()
+      {
+         //
+      }
+      
+      public DependencyModeRequirement(String name)
+      {
+         setName(name);
+      }
+      
       @XmlAttribute(name = "name")
       public String getName()
       {
          return super.getName();
       }
-      
-      
-      
+
       @XmlAttribute(name = "mode")
       public DependencyMode getDependencyMode()
       {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifact.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifact.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifact.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -36,7 +36,7 @@
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */
-public class AbstractArtifact<T extends ArtifactId> implements Artifact<T>
+public abstract class AbstractArtifact<T extends ArtifactId> implements Artifact<T>
 {
 
    private final T identifier;
@@ -65,14 +65,7 @@
    @Override
    public long getLastModified()
    {
-      try
-      {
-         return getFile().getLastModified();
-      }
-      catch(IOException e)
-      {
-         return 0L;
-      }
+      return getFile().getLastModified();
    }
    
    @Override
@@ -86,10 +79,22 @@
       return getFile().openStream();
    }
    
-   public VirtualFile getFile() throws IOException
+   public VirtualFile getFile()
    {
-      return this.repository.getArtifactFile(getIdentifier());
+      try
+      {
+         return this.repository.getArtifactFile(getIdentifier());
+      }
+      catch(IOException ioe) // TODO this is unlikely?
+      {
+         throw new RuntimeException("failed to get file", ioe);
+      }
    }
+
+   protected ArtifactRepository<T> getArtifactRepository()
+   {
+      return this.repository;
+   }
    
 }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifactRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractArtifactRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -24,7 +24,11 @@
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collection;
 
+import org.jboss.profileservice.spi.repository.Artifact;
+import org.jboss.profileservice.spi.repository.ArtifactFilter;
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.repository.ArtifactRepository;
 import org.jboss.profileservice.spi.repository.ArtifactRepositoryConfiguration;
@@ -80,6 +84,19 @@
       this.configuration = new BasicRepositoryConfiguration(root.toURI(), false);
    }
    
+   public Collection<Artifact<T>> getArtifacts(ArtifactFilter<T> filter)
+   {
+      Collection<Artifact<T>> filtered = new ArrayList<Artifact<T>>();
+      for(Artifact<T> artifact : getArtifacts())
+      {
+         if(filter.accepts(artifact))
+         {
+            filtered.add(artifact);
+         }
+      }
+      return filtered;
+   }
+   
    @Override
    public ArtifactRepositoryId getIdentifier()
    {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractRepositoryId.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractRepositoryId.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/AbstractRepositoryId.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -80,8 +80,8 @@
    protected int createHashCode()
    {
       int result = 17;
-      result = 31 * name.hashCode();
-      result = 31 * type.hashCode();
+      result = result + 31 * name.hashCode();
+      result = result + 31 * type.hashCode();
       return result;      
    }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/ArtifactRepositoryManager.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/ArtifactRepositoryManager.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/ArtifactRepositoryManager.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -134,7 +134,9 @@
       if(repository.getIdentifier() == null)
          throw new IllegalArgumentException("null repository configuration");
       // Don't override existing repositories
-      repositories.putIfAbsent(repository.getIdentifier(), repository);
+      ArtifactRepository<ArtifactId> other = repositories.putIfAbsent(repository.getIdentifier(), repository);
+      if(other != null)
+         throw new IllegalStateException("duplicate repository " + repository);
    }
    
    public void removeRepository(ArtifactRepository<ArtifactId> repository)

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/FileArtifact.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/FileArtifact.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/FileArtifact.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -38,5 +38,10 @@
       super(identifier, repository);
    }
 
+   public String getRelativePath()
+   {
+      return getIdentifier().getPath();
+   }
+   
 }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/LocalFileArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/LocalFileArtifactRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/file/LocalFileArtifactRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -57,7 +57,7 @@
    }
    
    @Override
-   public Artifact<FileArtifactId> getArtifact(FileArtifactId artifactId)
+   public FileArtifact getArtifact(FileArtifactId artifactId)
    {
       return new FileArtifact(artifactId, this);
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/AbstractMavenArtifactRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -76,6 +76,11 @@
       builder.append(".").append(artifact.getPackagingType());
       return builder.toString();
    }
+
+   String getRelativePath(MavenArtifactId artifact) throws IOException
+   {
+      return getArtifactFile(artifact).getPathNameRelativeTo(getRepositoryRoot());
+   }
    
 }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/LocalMavenArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/LocalMavenArtifactRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/LocalMavenArtifactRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -29,6 +29,7 @@
 
 import org.jboss.profileservice.repository.artifact.AbstractRepositoryId;
 import org.jboss.profileservice.spi.repository.Artifact;
+import org.jboss.profileservice.spi.repository.ArtifactFilter;
 import org.jboss.profileservice.spi.repository.ArtifactRepository;
 import org.jboss.profileservice.spi.repository.ArtifactRepositoryConfiguration;
 import org.jboss.profileservice.spi.repository.ArtifactRepositoryFactory;
@@ -91,10 +92,25 @@
    {
       Collection<Artifact<MavenArtifactId>> artifacts = new ArrayList<Artifact<MavenArtifactId>>();
       for(MavenArtifact artifact : this.artifacts)
+      {
          artifacts.add(artifact);
+      }
       return artifacts;
    }
    
+   public Collection<Artifact<MavenArtifactId>> getArtifacts(ArtifactFilter<MavenArtifactId> filter)
+   {
+      Collection<Artifact<MavenArtifactId>> filtered = new ArrayList<Artifact<MavenArtifactId>>();
+      for(Artifact<MavenArtifactId> artifact : getArtifacts())
+      {
+         if(filter.accepts(artifact))
+         {
+            filtered.add(artifact);
+         }
+      }
+      return filtered;
+   }
+   
    @Override
    public VirtualFile getArtifactFile(MavenArtifactId artifactId) throws IOException
    {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifact.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifact.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/artifact/maven/MavenArtifact.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -21,8 +21,9 @@
 */
 package org.jboss.profileservice.repository.artifact.maven;
 
+import java.io.IOException;
+
 import org.jboss.profileservice.repository.artifact.AbstractArtifact;
-import org.jboss.profileservice.spi.repository.ArtifactRepository;
 
 /**
  * A mvn like artifact.
@@ -33,7 +34,7 @@
 public class MavenArtifact extends AbstractArtifact<MavenArtifactId>
 {
 
-   public MavenArtifact(MavenArtifactMetaData identifier, ArtifactRepository<MavenArtifactId> repository)
+   public MavenArtifact(MavenArtifactMetaData identifier, AbstractMavenArtifactRepository repository)
    {
       super(identifier, repository);
    }
@@ -44,5 +45,23 @@
       return (MavenArtifactMetaData) super.getIdentifier();
    }
    
+   
+   public String getRelativePath()
+   {
+      try
+      {
+         return getArtifactRepository().getRelativePath(getIdentifier());
+      }
+      catch(IOException e)
+      {
+         throw new RuntimeException("failed to get relative path", e);
+      }
+   }
+  
+   protected AbstractMavenArtifactRepository getArtifactRepository()
+   {
+      return AbstractMavenArtifactRepository.class.cast(super.getArtifactRepository());
+   }
+   
 }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualDeploymentRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualDeploymentRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualDeploymentRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -27,7 +27,7 @@
 import org.jboss.profileservice.spi.ProfileDeployment;
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.repository.ArtifactRepository;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.spi.virtual.assembly.VirtualDeploymentAssemblyContext;
 import org.jboss.profileservice.virtual.assembly.AbstractVirtualDeploymentAssembly;
 import org.jboss.vfs.VirtualFile;
@@ -51,7 +51,7 @@
     * @return the profile deployment
     * @throws Exception for any error
     */
-   public ProfileDeployment createDeployment(VirtualDeployment deployment) throws IOException
+   public ProfileDeployment createDeployment(VirtualDeploymentMetaData deployment) throws IOException
    {
       if(deployment == null)
       {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualProfileFactory.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualProfileFactory.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/repository/virtual/AbstractVirtualProfileFactory.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -33,7 +33,7 @@
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.repository.ArtifactRepository;
 import org.jboss.profileservice.spi.repository.ArtifactRepositoryId;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 
 
 /**
@@ -99,7 +99,7 @@
    static class UnconfiguredVirtualDeploymentRepository implements VirtualDeploymentRepository
    {
       @Override
-      public ProfileDeployment createDeployment(VirtualDeployment virtual) throws IOException
+      public ProfileDeployment createDeployment(VirtualDeploymentMetaData virtual) throws IOException
       {
          throw new RuntimeException("repository not configured");
       }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/AbstractRequirementResolver.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/AbstractRequirementResolver.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/AbstractRequirementResolver.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -33,6 +34,7 @@
 import org.jboss.logging.Logger;
 import org.jboss.profileservice.dependency.ProfileDependencyContext;
 import org.jboss.profileservice.dependency.ProfileMetaDataRegistry;
+import org.jboss.profileservice.dependency.ProfileRequirementDependencyItem;
 import org.jboss.profileservice.spi.ProfileKey;
 import org.jboss.profileservice.spi.dependency.DependencyMode;
 import org.jboss.profileservice.spi.dependency.ProfileCapability;
@@ -57,7 +59,7 @@
    private Set<ProfileNode> included = new HashSet<ProfileNode>();
    
    /** The included keys. */
-   private List<ProfileKey> includedKeys = new ArrayList<ProfileKey>();
+   private Set<ProfileKey> includedKeys = new HashSet<ProfileKey>();
    
    /** The activation callback registry. */
    private List<ProfileNode> callbacks = new ArrayList<ProfileNode>();
@@ -91,20 +93,92 @@
       {
          throw new IllegalArgumentException("null dependency context");
       }
-      resolve(context, false, true);
+      resolveRoot(context);
    }
    
    /**
+    * Resolve the root context. The root context should specify the configuration,
+    * also have the ability to select specific profiles which both expose a common
+    * capability (which cannot be resolved). Therefore those contexts are resolved
+    * first and later resolution will check the included first before asking the
+    * meta data registry.
+    * 
+    * @param context the root context to resolve
+    */
+   void resolveRoot(final ProfileDependencyContext context)
+   {
+      final ProfileKey currentKey = context.getKey();
+      final ProfileNode currentNode = getNode(context);
+      
+      // Include it in the configuration
+      included.add(currentNode);
+      includedKeys.add(currentKey);
+      
+      final List<ProfileDependencyContext> toProcess = new ArrayList<ProfileDependencyContext>();
+      
+      final Collection<ProfileRequirementDependencyItem> requirements = context.getiDependOn();
+      if(requirements != null && requirements.isEmpty() == false)
+      {
+         for(final ProfileRequirementDependencyItem dependencyItem : requirements)
+         {
+            // Try to resolve the requirement
+            final ProfileRequirement requirement = dependencyItem.getRequirement();
+            final ProfileKey dependencyKey = registry.resolve(context, requirement, Collections.EMPTY_SET); 
+            if(dependencyKey == null)
+            {
+               // if the requirement is not optional add to unresolved
+               if(requirement.isOptional() == false)
+               {
+                  unresolved.add(requirement);
+               }
+               continue;
+            }
+            // Ignore self dependencies
+            dependencyItem.setIDependOn(dependencyKey);
+            if(currentKey.equals(dependencyKey))
+            {
+               continue;
+            }
+            
+            // Get the dependency context
+            final ProfileDependencyContext dependencyContext = registry.getProfile(dependencyKey);
+            final ProfileNode depenencyNode = getNode(dependencyContext);
+            
+            // Add the dependency context
+            addDependencyContext(dependencyContext);
+            toProcess.add(dependencyContext);
+            
+            final ProfileNodeDependency dependency = new ProfileNodeDependency(dependencyItem, false);
+
+            // Add dependency information
+            currentNode.addIDependOn(dependency);
+            depenencyNode.addDependsOnMe(dependency);
+         }
+      }
+      // Check if everything is resolvable
+      if(this.unresolved.isEmpty() == false)
+      {
+         // The root has to be fully resolvable 
+         return;
+      }
+      // Process the referenced contexts
+      for(final ProfileDependencyContext process : toProcess)
+      {
+         resolve(process, false);
+      }
+   }
+   
+   /**
     * Try to resolve a context based on it's meta data dependencies.
     * 
     * @param context the context
     * @param fromActivationCallback is recursively called from an activation callback
     */
-   void resolve(final ProfileDependencyContext context, final boolean fromActivationCallback, final boolean root)
+   void resolve(final ProfileDependencyContext context, final boolean fromActivationCallback)
    {
       final boolean trace = log.isTraceEnabled();
       final ProfileKey currentKey = context.getKey();
-      final ProfileNode currentNode = getNode(currentKey);
+      final ProfileNode currentNode = getNode(context);
       // Don't process a node twice
       if(included(currentNode))
       {
@@ -131,20 +205,17 @@
          // Don't include callbacks we need to process them afterwards
          callbacks.add(currentNode);
       }
-      final Collection<ProfileRequirement> requirements = context.getRequirements();
+      final Collection<ProfileRequirementDependencyItem> requirements = context.getiDependOn();
       if(requirements != null && requirements.isEmpty() == false)
       {
-         for(final ProfileRequirement requirement : requirements)
+         for(final ProfileRequirementDependencyItem dependencyItem : requirements)
          {
             // Try to resolve the requirement
-            ProfileKey dependencyKey = null; 
-            if(root == false)
-            {
-               dependencyKey = internalResolve(context, requirement);
-            }
+            final ProfileRequirement requirement = dependencyItem.getRequirement();
+            ProfileKey dependencyKey = internalResolve(context, requirement); 
             if(dependencyKey == null)
             {
-               dependencyKey = registry.resolve(context, requirement);
+               dependencyKey = registry.resolve(context, requirement, this.includedKeys);
             }
             if(dependencyKey == null)
             {
@@ -156,33 +227,35 @@
                continue;
             }
             // Ignore self dependencies
+            dependencyItem.setIDependOn(dependencyKey);
             if(currentKey.equals(dependencyKey))
             {
                continue;
             }
+            
             // Get the mode and dependency context
             final DependencyMode mode = getDependencyMode(requirement);
-            final ProfileNode depenencyNode = getNode(dependencyKey);
             final ProfileDependencyContext dependencyContext = registry.getProfile(dependencyKey);
+            final ProfileNode depenencyNode = getNode(dependencyContext);
 
             // Add the dependency context
             addDependencyContext(dependencyContext);
             
-            if(root || mode == DependencyMode.RESOLVE || dependencyContext.isOnDemandEnabled())
+            if(mode == DependencyMode.RESOLVE || dependencyContext.isOnDemandEnabled())
             {
                // Resolve
-               resolve(dependencyContext, false, false);
+               resolve(dependencyContext, false);
             }
             // We don't support nested activation callbacks
             else if(fromActivationCallback == false && mode == DependencyMode.ACTIVATION_CALLBACK)
             {
                // Process activation callbacks
-               resolve(dependencyContext, true, false);
+               resolve(dependencyContext, true);
             }
             // If the dependency is already included we can mark it as non-optional
             final boolean dependencyIncluded = included(depenencyNode);
             final boolean optional = requirement.isOptional() && dependencyIncluded == false;
-            final ProfileNodeDependency dependency = new ProfileNodeDependency(requirement, currentKey, dependencyKey, optional);
+            final ProfileNodeDependency dependency = new ProfileNodeDependency(dependencyItem, optional);
 
             // Add dependency information
             currentNode.addIDependOn(dependency);
@@ -201,11 +274,18 @@
       }
    }
    
+   /**
+    * Internal resolve a requirement. This does need to check for duplicates, since when
+    * adding the context as included it has to filter inconsistent capabilities.
+    * 
+    * @param ctx the meta data context
+    * @param requirement the requirement
+    * @return the resolved profile key, null if it can't be resolved
+    */
    protected ProfileKey internalResolve(ProfileDependencyContext ctx, ProfileRequirement requirement)
    {
       // Resolve the requirements based on the exposed capabilities
       final boolean trace = log.isTraceEnabled();
-      ProfileKey resolved = null;
       for(ProfileDependencyContext profile : includedContexts)
       {
          Collection<ProfileCapability> capabilities = profile.getCapabilities();
@@ -219,22 +299,22 @@
                   {
                      log.trace(profile.getKey() + ":" + capability + " resolved " + requirement);
                   }
-                  if(resolved == null)
-                  {
-                     resolved = profile.getKey();
-                  }
-                  else
-                  {
-                     return null;
-                  }
+                  return profile.getKey();
                }
             }
          }
       }
       // Unresolved
-      return resolved;
+      return null;
    }
    
+   /**
+    * Add the dependency context to the included configuration. This will also
+    * validate the capabilities, so that the cannot be a more contexts exposing
+    * the same capability.
+    * 
+    * @param context the context to add
+    */
    protected void addDependencyContext(final ProfileDependencyContext context)
    {
       if(this.includedContexts.contains(context))
@@ -290,6 +370,7 @@
             {
                callback.hardenDependsOnMe();
                included.add(callback);
+               includedKeys.add(callback.getKey());
             }
          }
          i.remove();
@@ -305,20 +386,26 @@
     * @param key the profile key
     * @return the profile node
     */
-   ProfileNode getNode(ProfileKey key)
+   ProfileNode getNode(ProfileDependencyContext ctx)
    {
+      final ProfileKey key = ctx.getKey();
       if(nodes.containsKey(key))
       {
          return nodes.get(key);
       }
       else
       {
-         final ProfileNode node = new ProfileNode(key);
+         final ProfileNode node = new ProfileNode(ctx);
          nodes.put(key, node);
          return node;
       }
    }
    
+   ProfileNode getProcessedNode(ProfileKey key)
+   {
+      return nodes.get(key);
+   }
+   
    /**
     * Check whether a node is included or not. 
     * 
@@ -327,7 +414,7 @@
     */
    boolean included(ProfileNode node)
    {
-      return included.contains(node);
+      return includedKeys.contains(node.getKey());
    }
    
    /**
@@ -375,8 +462,8 @@
                      continue;
                   }
                   // Get the dependent node
-                  final ProfileNode otherNode = getNode(dependsOnMe.getFrom());
-                  if(included(otherNode) == false)
+                  final ProfileNode otherNode = getProcessedNode(dependsOnMe.getFrom());
+                  if(otherNode == null || included(otherNode) == false)
                   {
                      throw new IllegalStateException("trying to activate non included node " + otherNode);
                   }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNode.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNode.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNode.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -21,9 +21,14 @@
 */
 package org.jboss.profileservice.resolver;
 
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
+import org.jboss.profileservice.dependency.ProfileDependencyContext;
 import org.jboss.profileservice.spi.ProfileKey;
 
 /**
@@ -35,28 +40,31 @@
 class ProfileNode
 {
 
-   /** The node key. */
-   private final ProfileKey key;
+   /** The meta data context. */
+   private final ProfileDependencyContext ctx;
    
    /** I depend on. */
    private List<ProfileNodeDependency> iDependOn = new LinkedList<ProfileNodeDependency>();
+   private ConcurrentMap<String, Set<ProfileNodeDependency>> iDependOnByName = new ConcurrentHashMap<String, Set<ProfileNodeDependency>>();
    
    /** Depends on me. */
    private List<ProfileNodeDependency> dependsOnMe = new LinkedList<ProfileNodeDependency>();
 
-   public ProfileNode(ProfileKey key)
+   public ProfileNode(ProfileDependencyContext ctx)
    {
-      this.key = key;
+      this.ctx = ctx;
    }
 
    public ProfileKey getKey()
    {
-      return key;
+      return ctx.getKey();
    }
    
    void addIDependOn(ProfileNodeDependency dependency)
    {
       this.iDependOn.add(dependency);
+      this.iDependOnByName.putIfAbsent(dependency.getTo().getName(), new HashSet<ProfileNodeDependency>());
+      this.iDependOnByName.get(dependency.getTo().getName()).add(dependency);
    }
    
    public List<ProfileNodeDependency> getiDependOn()
@@ -66,13 +74,18 @@
    
    void markAsResolved(ProfileKey key)
    {
-      for(ProfileNodeDependency dependency : iDependOn)
+      Set<ProfileNodeDependency> dependencies = this.iDependOnByName.get(key.getName());
+      for(final ProfileNodeDependency dependency : dependencies)
       {
-         if(key.equals(dependency.getTo()))
-         {
-            dependency.markAsResolved();
-         }
+         dependency.markAsResolved();
       }
+//      for(final ProfileNodeDependency dependency : iDependOn)
+//      {
+//         if(key.equals(dependency.getTo()))
+//         {
+//            dependency.markAsResolved();
+//         }
+//      }
    }
    
    void addDependsOnMe(ProfileNodeDependency dependency)
@@ -99,14 +112,15 @@
       return this.dependsOnMe.size() > 0;
    }
    
-   boolean checkResolved(List<ProfileKey> included)
+   boolean checkResolved(Set<ProfileKey> included)
    {
       boolean resolved = true;
       for(ProfileNodeDependency dependency : iDependOn)
       {
          if(dependency.isOptional() == false)
          {
-            if(included.contains(dependency.getTo()) == false)
+            ProfileKey key = dependency.getTo();
+            if(key == null || included.contains(key) == false)
                resolved = false;
          }
       }
@@ -138,13 +152,13 @@
       if(obj == null || obj instanceof ProfileNode == false)
          return false;
       ProfileNode other = (ProfileNode) obj;
-      return key.equals(other.key);
+      return getKey().equals(other.getKey());
    }
    
    @Override
    public String toString()
    {
-      return key.getName();
+      return getKey().getName();
    }
    
 }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNodeDependency.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNodeDependency.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/resolver/ProfileNodeDependency.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -21,6 +21,7 @@
 */
 package org.jboss.profileservice.resolver;
 
+import org.jboss.profileservice.dependency.ProfileRequirementDependencyItem;
 import org.jboss.profileservice.spi.ProfileKey;
 import org.jboss.profileservice.spi.dependency.ProfileRequirement;
 
@@ -33,12 +34,6 @@
 class ProfileNodeDependency
 {
 
-   /** The from node. */
-   private final ProfileKey from;
-   
-   /** The to node. */
-   private ProfileKey to;
-   
    /** Is optional from -> to. */
    private boolean optional;
    
@@ -48,43 +43,25 @@
    /** Is marked as resolved. */
    private boolean resolved = false;
    
-   /** The requirement, for reporting. */
-   private final ProfileRequirement requirement;
+   /** The dependency item. */
+   private final ProfileRequirementDependencyItem dependencyItem;
    
-   ProfileNodeDependency(final ProfileRequirement requirement, final ProfileKey from,
-         final ProfileKey to, final boolean optional)
+   public ProfileNodeDependency(final ProfileRequirementDependencyItem dependencyItem, boolean optional)
    {
-      this.requirement = requirement;
-      this.from = from;
-      this.to = to;
+      this.dependencyItem = dependencyItem;
       this.optional = optional;
    }
-   
-   public ProfileRequirement getRequirement()
-   {
-      return requirement;
-   }
-   
+
    ProfileKey getFrom()
    {
-      return from;
+      return dependencyItem.getName();
    }
    
    ProfileKey getTo()
    {
-      return to;
+      return dependencyItem.getIDependOn();
    }
-
-   void setTo(ProfileKey key)
-   {
-      this.to = key;
-   }
    
-   boolean isDetermined()
-   {
-      return this.to != null;
-   }
-   
    boolean isOptional()
    {
       return optional;
@@ -134,5 +111,6 @@
       return builder.toString();
    }
    
+   
 }
 

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/AbstractVirtualDeploymentAssembly.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/AbstractVirtualDeploymentAssembly.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/AbstractVirtualDeploymentAssembly.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -26,7 +26,7 @@
 
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.spi.virtual.assembly.VirtualDeploymentAssembly;
 import org.jboss.profileservice.spi.virtual.assembly.VirtualDeploymentAssemblyContext;
 import org.jboss.vfs.VFS;
@@ -66,7 +66,7 @@
     * @return the assembled directory
     * @throws IOException
     */
-   public VirtualDeploymentAssemblyContext assemble(VirtualDeployment deployment) throws IOException
+   public VirtualDeploymentAssemblyContext assemble(VirtualDeploymentMetaData deployment) throws IOException
    {
       if(deployment == null)
          throw new IllegalArgumentException("null virtual deployment");
@@ -89,7 +89,7 @@
     * @param deployment the virtual deployment meta data
     * @throws IOException
     */
-   protected void assemble(VirtualDeploymentAssemblyContext ctx, VirtualDeployment deployment) throws IOException
+   protected void assemble(VirtualDeploymentAssemblyContext ctx, VirtualDeploymentMetaData deployment) throws IOException
    {
       if(deployment.getArtifacts() != null && deployment.getArtifacts().isEmpty() == false)
       {
@@ -98,7 +98,7 @@
       }
       if(deployment.getChildren() != null && deployment.getChildren().isEmpty() == false)
       {
-         for(VirtualDeployment child : deployment.getChildren())
+         for(VirtualDeploymentMetaData child : deployment.getChildren())
          {
             VirtualDeploymentAssemblyContext childCtx = ctx.addChild(child);
             assemble(childCtx, child);
@@ -112,7 +112,7 @@
     * @param deployment the virtual deployment meta data
     * @return the deployment name
     */
-   protected String createDeploymentName(VirtualDeployment deployment)
+   protected String createDeploymentName(VirtualDeploymentMetaData deployment)
    {
       return deployment.getName();
    }
@@ -124,7 +124,7 @@
     * @return the virtual deployment assembly context
     * @throws IOException
     */
-   protected VirtualDeploymentAssemblyContext createAssemblyContext(VirtualDeployment deployment) throws IOException
+   protected VirtualDeploymentAssemblyContext createAssemblyContext(VirtualDeploymentMetaData deployment) throws IOException
    {
       VirtualDeploymentAssemblyContext ctx = createNonAssembledContext(deployment);
       if(ctx == null)
@@ -142,7 +142,7 @@
     * @return the child virtual deployment assembly context
     * @throws IOException
     */
-   protected VirtualDeploymentAssemblyContext createChildAssemblyContext(VirtualDeployment deployment, VirtualFile parent) throws IOException
+   protected VirtualDeploymentAssemblyContext createChildAssemblyContext(VirtualDeploymentMetaData deployment, VirtualFile parent) throws IOException
    {
       VirtualDeploymentAssemblyContext ctx = createNonAssembledContext(deployment);
       if(ctx == null)
@@ -161,7 +161,7 @@
     * @param deployment the virtual deployment meta data
     * @return the virtual deployment assembly context
     */
-   protected VirtualDeploymentAssemblyContext assembleNewContext(VirtualDeployment deployment) throws IOException
+   protected VirtualDeploymentAssemblyContext assembleNewContext(VirtualDeploymentMetaData deployment) throws IOException
    {
       // Create assembled directory
       String fileName = createDeploymentName(deployment);
@@ -192,7 +192,7 @@
     * @return the static assembly context
     * @throws IOException
     */
-   protected VirtualDeploymentAssemblyContext createNonAssembledContext(VirtualDeployment deployment) throws IOException
+   protected VirtualDeploymentAssemblyContext createNonAssembledContext(VirtualDeploymentMetaData deployment) throws IOException
    {
       if(deployment.getArtifact() != null)
       {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/BasicVirtualAssemblyContext.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/BasicVirtualAssemblyContext.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/BasicVirtualAssemblyContext.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -27,7 +27,7 @@
 
 import org.jboss.profileservice.spi.virtual.PathRestriction;
 import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.spi.virtual.assembly.VirtualDeploymentAssemblyContext;
 import org.jboss.vfs.VirtualFile;
 import org.jboss.vfs.VirtualFileAssembly;
@@ -79,7 +79,7 @@
    /**
     * {@inheritDoc}
     */
-   public VirtualDeploymentAssemblyContext addChild(VirtualDeployment child) throws IOException
+   public VirtualDeploymentAssemblyContext addChild(VirtualDeploymentMetaData child) throws IOException
    {
       if(child == null)
       {

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/ImmutableAssemblyContext.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/ImmutableAssemblyContext.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/assembly/ImmutableAssemblyContext.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -24,7 +24,7 @@
 import java.io.IOException;
 
 import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.spi.virtual.assembly.VirtualDeploymentAssemblyContext;
 import org.jboss.vfs.VirtualFile;
 
@@ -63,7 +63,7 @@
    }
 
    @Override
-   public VirtualDeploymentAssemblyContext addChild(VirtualDeployment child) throws IOException
+   public VirtualDeploymentAssemblyContext addChild(VirtualDeploymentMetaData child) throws IOException
    {
       throw new IllegalStateException("cannot add a child to a non-assembled context");
    }

Modified: projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/deployment/AbstractVirtualDeployment.java
===================================================================
--- projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/deployment/AbstractVirtualDeployment.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/main/java/org/jboss/profileservice/virtual/deployment/AbstractVirtualDeployment.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -32,7 +32,7 @@
 import org.jboss.profileservice.spi.dependency.ProfileCapability;
 import org.jboss.profileservice.spi.dependency.ProfileRequirement;
 import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.version.Version;
 
 /**
@@ -42,7 +42,7 @@
  * @version $Revision$
  */
 @XmlType(propOrder = {"name", "artifact", "artifacts", "requires", "children" })
-public class AbstractVirtualDeployment extends AbstractProfileCapability implements VirtualDeployment
+public class AbstractVirtualDeployment extends AbstractProfileCapability implements VirtualDeploymentMetaData
 {
    
    /** The serialVersionUID */
@@ -55,7 +55,7 @@
    private List<VirtualArtifactMetaData> artifacts;
    
    /** The child deployments. */
-   private List<VirtualDeployment> children;
+   private List<VirtualDeploymentMetaData> children;
    
    /** The requirements. */
    private List<AbstractProfileRequirement> requires;
@@ -135,7 +135,7 @@
     * @return the children.
     */
    @XmlElement(name = "virtual-deployment", type = AbstractVirtualDeployment.class)
-   public List<VirtualDeployment> getChildren()
+   public List<VirtualDeploymentMetaData> getChildren()
    {
       return children;
    }
@@ -145,7 +145,7 @@
     * 
     * @param children The children to set.
     */
-   public void setChildren(List<VirtualDeployment> children)
+   public void setChildren(List<VirtualDeploymentMetaData> children)
    {
       this.children = children;
    }

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/metadata/support/VirtualRepositoryMetaData.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/metadata/support/VirtualRepositoryMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/metadata/support/VirtualRepositoryMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -28,7 +28,7 @@
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.virtual.deployment.AbstractVirtualDeployment;
 import org.jboss.xb.annotations.JBossXmlSchema;
 
@@ -47,15 +47,15 @@
 {
 
    /** The deployments. */
-   private List<VirtualDeployment> deployments;
+   private List<VirtualDeploymentMetaData> deployments;
 
    @XmlElement(name = "virtual-deployment", type = AbstractVirtualDeployment.class)
-   public List<VirtualDeployment> getDeployments()
+   public List<VirtualDeploymentMetaData> getDeployments()
    {
       return deployments;
    }
    
-   public void setDeployments(List<VirtualDeployment> deployments)
+   public void setDeployments(List<VirtualDeploymentMetaData> deployments)
    {
       this.deployments = deployments;
    }

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/AbstractResolverTest.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/AbstractResolverTest.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/AbstractResolverTest.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -37,6 +37,7 @@
 import org.jboss.profileservice.spi.metadata.ProfileMetaData;
 import org.jboss.test.profileservice.ProfileServiceTestBase;
 import org.jboss.test.profileservice.resolver.support.TestProfilesMetaData;
+import org.jboss.test.profileservice.support.NoopProfileFactory;
 
 /**
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
@@ -47,7 +48,7 @@
 
    private ProfileMetaDataRegistry registry;
    private AbstractRequirementResolver resolver;
-
+   private ProfileServiceConfig config;
    
    public AbstractResolverTest(String name)
    {
@@ -64,6 +65,11 @@
       return registry;
    }
    
+   public ProfileServiceConfig getConfig()
+   {
+      return config;
+   }
+   
    protected ProfileServiceConfig createConfig()
    {
       ManagementDomain domain = new ManagementDomain("default");
@@ -71,9 +77,19 @@
       return new ProfileServiceConfig(domain, server);
    }
    
+   protected ProfileMetaDataRegistry createRegistry()
+   {
+      this.config = createConfig();
+      
+      this.config.setProfileFactory(new NoopProfileFactory());
+      
+      this.registry = new ProfileMetaDataRegistry(this.config);
+      return this.registry;
+   }
+   
    protected TestProfilesMetaData parse(String file) throws Exception
    {
-      registry = new ProfileMetaDataRegistry(createConfig());
+      createRegistry();
       resolver = new AbstractRequirementResolver(registry);
       TestProfilesMetaData profiles = unmarshal(file, TestProfilesMetaData.class);
       for(ProfileMetaData profile : profiles.getProfiles())

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/RequirementResolverTestSuite.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/RequirementResolverTestSuite.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/RequirementResolverTestSuite.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -37,6 +37,7 @@
       
       suite.addTestSuite(BasicResolverUnitTestCase.class);
       suite.addTestSuite(ActivationCallbackUnitTestCase.class);
+      suite.addTestSuite(UserRequirementUnitTestCase.class);
       
       return suite;
    }

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/UserRequirementUnitTestCase.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/UserRequirementUnitTestCase.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/resolver/test/UserRequirementUnitTestCase.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -39,17 +39,30 @@
    {
       super(name);
    }
-
    
-   public void testOne() throws Exception
+   public void testNative() throws Exception
    {
+      List<String> resolved = resolveServices("capabilities.xml", "ejb3", "jboss-webservices");
+      assertTrue(resolved.contains("ejb3-webservices"));
+      assertTrue(resolved.contains("jboss-webservices"));
+   }
+
+   public void testNativeOrder() throws Exception
+   {
       List<String> resolved = resolveServices("capabilities.xml", "jboss-webservices", "ejb3");
       assertTrue(resolved.contains("ejb3-webservices"));
       assertTrue(resolved.contains("jboss-webservices"));
    }
    
-   public void testTwo() throws Exception
+   public void testOther() throws Exception
    {
+      List<String> resolved = resolveServices("capabilities.xml", "ejb3", "apache-webservices");
+      assertTrue(resolved.contains("ejb3-webservices"));
+      assertTrue(resolved.contains("apache-webservices"));
+   }
+
+   public void testOtherOrder() throws Exception
+   {
       List<String> resolved = resolveServices("capabilities.xml", "apache-webservices", "ejb3");
       assertTrue(resolved.contains("ejb3-webservices"));
       assertTrue(resolved.contains("apache-webservices"));
@@ -66,7 +79,7 @@
          log.debug(e);
          return;
       }
-      fail("");
+      fail("apache and webservices both expose a service(name=webservice) capability");
    }
    
    protected List<String> resolveServices(String file, String... services) throws Exception

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopArtifactRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopArtifactRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -25,6 +25,7 @@
 import java.util.Collection;
 
 import org.jboss.profileservice.spi.repository.Artifact;
+import org.jboss.profileservice.spi.repository.ArtifactFilter;
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.repository.ArtifactRepository;
 import org.jboss.profileservice.spi.repository.ArtifactRepositoryConfiguration;
@@ -73,7 +74,11 @@
       return null;
    }
    
-   @Override
+   public Collection<Artifact<ArtifactId>> getArtifacts(ArtifactFilter<ArtifactId> filter)
+   {
+      return null;
+   }
+   
    public ArtifactRepositoryConfiguration<ArtifactId> getConfiguration()
    {
       return null;

Added: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopProfileFactory.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopProfileFactory.java	                        (rev 0)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/support/NoopProfileFactory.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -0,0 +1,50 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2010, Red Hat Inc., 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.test.profileservice.support;
+
+import org.jboss.profileservice.profile.NoopProfile;
+import org.jboss.profileservice.spi.Profile;
+import org.jboss.profileservice.spi.ProfileFactory;
+import org.jboss.profileservice.spi.ProfileKey;
+import org.jboss.profileservice.spi.metadata.ProfileMetaData;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class NoopProfileFactory implements ProfileFactory<ProfileMetaData, Profile>
+{
+
+   private static final Profile profile = new NoopProfile(new ProfileKey("test"));
+   
+   public Profile createProfile(ProfileKey key, ProfileMetaData metaData) throws Exception
+   {
+      return profile;
+   }
+
+   public String[] getTypes()
+   {
+      return null;
+   }
+
+}
+

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/test/BasicProfileServiceUnitTestCase.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -93,9 +93,6 @@
       resolver.resolve(visitor.getCtx());
       List<ProfileKey> list = resolver.sort();
       
-      getLog().debug("processing took " + (System.currentTimeMillis() - millis));      
-      getLog().debug(list);
-      
       for(ProfileKey key : list)
       {
          if(key.getName().equals("test") == false)
@@ -104,6 +101,9 @@
             ps.registerProfile(ctx.getProfileMetaData());
          }
       }
+
+      getLog().debug("processing took " + (System.currentTimeMillis() - millis));      
+      getLog().debug(list);
       
       for(ProfileKey profile : list)
       {

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestArtifactRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestArtifactRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -23,14 +23,11 @@
 
 import java.io.IOException;
 import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
 
 import org.jboss.profileservice.repository.artifact.AbstractRepositoryId;
 import org.jboss.profileservice.repository.artifact.file.FileArtifactId;
 import org.jboss.profileservice.repository.artifact.file.LocalFileArtifactRepository;
 import org.jboss.profileservice.spi.repository.ArtifactRepositoryId;
-import org.jboss.vfs.VFS;
 import org.jboss.vfs.VirtualFile;
 
 /**

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestVirtualDeploymentRepository.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestVirtualDeploymentRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/support/TestVirtualDeploymentRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -30,7 +30,7 @@
 import org.jboss.profileservice.spi.VirtualDeploymentRepository;
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.repository.ArtifactRepository;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.spi.virtual.assembly.VirtualDeploymentAssemblyContext;
 import org.jboss.profileservice.virtual.assembly.AbstractVirtualDeploymentAssembly;
 import org.jboss.vfs.VFS;
@@ -62,7 +62,7 @@
     * @return the profile deployment
     * @throws Exception for any error
     */
-   public ProfileDeployment createDeployment(VirtualDeployment deployment) throws IOException
+   public ProfileDeployment createDeployment(VirtualDeploymentMetaData deployment) throws IOException
    {
       if(deployment == null)
       {

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/AbstractVirtualAssemblyTestCase.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/AbstractVirtualAssemblyTestCase.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/AbstractVirtualAssemblyTestCase.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -27,7 +27,7 @@
 import org.jboss.profileservice.spi.VirtualDeploymentRepository;
 import org.jboss.profileservice.spi.repository.ArtifactId;
 import org.jboss.profileservice.spi.repository.ArtifactRepository;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.test.profileservice.ProfileServiceTestBase;
 import org.jboss.test.profileservice.metadata.support.VirtualRepositoryMetaData;
 import org.jboss.test.profileservice.virtual.support.TestArtifactRepository;
@@ -96,10 +96,10 @@
       }
    }
    
-   protected Map<String, VirtualDeployment> mapDeployments(VirtualRepositoryMetaData metaData)
+   protected Map<String, VirtualDeploymentMetaData> mapDeployments(VirtualRepositoryMetaData metaData)
    {
-      Map<String, VirtualDeployment> deployments = new HashMap<String, VirtualDeployment>();
-      for(VirtualDeployment deployment : metaData.getDeployments())
+      Map<String, VirtualDeploymentMetaData> deployments = new HashMap<String, VirtualDeploymentMetaData>();
+      for(VirtualDeploymentMetaData deployment : metaData.getDeployments())
          deployments.put(deployment.getName(), deployment);
       return deployments;
    }

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/StructureMetaDataUnitTestCase.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/StructureMetaDataUnitTestCase.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/StructureMetaDataUnitTestCase.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -34,7 +34,7 @@
 import org.jboss.profileservice.deployers.VDFDeploymentBuilder;
 import org.jboss.profileservice.spi.ProfileDeployment;
 import org.jboss.profileservice.spi.VirtualDeploymentRepository;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.test.profileservice.metadata.support.VirtualRepositoryMetaData;
 
 /**
@@ -61,7 +61,7 @@
       
       // Get the repository meta data
       VirtualRepositoryMetaData repository = unmarshal("repository.xml", VirtualRepositoryMetaData.class);
-      Map<String, VirtualDeployment> deployments = mapDeployments(repository);
+      Map<String, VirtualDeploymentMetaData> deployments = mapDeployments(repository);
     
       this.profileDeploymentFactory = createRepository(REPOSITORY_LOCATION);
       
@@ -73,7 +73,7 @@
       **/
       
       // test.deployer
-      VirtualDeployment deployerVD = deployments.get("test.deployer");
+      VirtualDeploymentMetaData deployerVD = deployments.get("test.deployer");
       ProfileDeployment deployer = createProfileDeployment(deployerVD);
       StructureMetaData deployerStructure = createStructureMetaData(deployer);
       assertNotNull("null deployer structure", deployerStructure);
@@ -82,7 +82,7 @@
          {"deployer.jar", "fake.jar", "fake2.jar"});
 
       // test deployment
-      VirtualDeployment deploymentVD = deployments.get("test-deployment");
+      VirtualDeploymentMetaData deploymentVD = deployments.get("test-deployment");
       ProfileDeployment deployment = createProfileDeployment(deploymentVD);
       StructureMetaData deploymentStructure = createStructureMetaData(deployment);
       assertNotNull("null deployment structure", deploymentStructure);
@@ -114,7 +114,7 @@
       assertTrue(generated.containsAll(original));
    }
    
-   protected ProfileDeployment createProfileDeployment(VirtualDeployment deployment) throws Exception
+   protected ProfileDeployment createProfileDeployment(VirtualDeploymentMetaData deployment) throws Exception
    {
       return profileDeploymentFactory.createDeployment(deployment);
    }

Modified: projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/VirtualDeploymentAssemblyUnitTestCase.java
===================================================================
--- projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/VirtualDeploymentAssemblyUnitTestCase.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/java/org/jboss/test/profileservice/virtual/test/VirtualDeploymentAssemblyUnitTestCase.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -26,7 +26,7 @@
 import org.jboss.profileservice.spi.ProfileDeployment;
 import org.jboss.profileservice.spi.VirtualDeploymentRepository;
 import org.jboss.profileservice.spi.deployment.ProfileDeploymentFlag;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.profileservice.version.helpers.NameAndVersionRangeSupport;
 import org.jboss.profileservice.virtual.deployment.AbstractVirtualDeployment;
 import org.jboss.profileservice.virtual.deployment.AbstractVirtualDeploymentRequirement;
@@ -54,7 +54,7 @@
       
       // Get the repository meta data
       VirtualRepositoryMetaData repositoryMetaData = unmarshal("repository.xml", VirtualRepositoryMetaData.class);
-      Map<String, VirtualDeployment> deployments = mapDeployments(repositoryMetaData);
+      Map<String, VirtualDeploymentMetaData> deployments = mapDeployments(repositoryMetaData);
 
       // Get the VirtualDeploymentRepository
       VirtualDeploymentRepository factory = createRepository(REPOSITORY_LOCATION);

Modified: projects/profileservice/trunk/core/src/test/resources/system/profiles/clustering-profiles.xml
===================================================================
--- projects/profileservice/trunk/core/src/test/resources/system/profiles/clustering-profiles.xml	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/resources/system/profiles/clustering-profiles.xml	2010-03-04 13:42:54 UTC (rev 101822)
@@ -4,12 +4,15 @@
 		<file-repository group="jboss.clustering" />
 		<virtual-deployment name="jboss-cache-manager">
 			<meta-inf path="cache-manager" />
+			<artifact groupId="org.jboss.cache" artifactId="cache-manager" />
 		</virtual-deployment>
 		<virtual-deployment name="jgroups-channelfactory">
 			<meta-inf path="jgroups" />
+			<artifact groupId="org.jboss.jgroups" artifactId="channefactory" />
 		</virtual-deployment>
 		<virtual-deployment name="clustering">
 			<meta-inf path="clustering" />
+			<artifact groupId="org.jboss.as" artifactId="as-clustering" />
 		</virtual-deployment>
 	</profile>
 

Modified: projects/profileservice/trunk/core/src/test/resources/system/profiles/stack-profiles.xml
===================================================================
--- projects/profileservice/trunk/core/src/test/resources/system/profiles/stack-profiles.xml	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/resources/system/profiles/stack-profiles.xml	2010-03-04 13:42:54 UTC (rev 101822)
@@ -22,7 +22,7 @@
 		<file-repository group="stack1" />
 		<virtual-deployment name="stack1">
 			<meta-inf path="jboss-beans.xml" />
-			<!-- artifacts for stack1 -->
+			<artifact groupId="org.jboss.stack1" artifactId="stack-configuration" />
 		</virtual-deployment>
 	</profile>
 	<!-- 
@@ -36,6 +36,7 @@
 		<virtual-deployment name="stack2">
 			<meta-inf path="jboss-beans.xml" />
 			<!-- artifacts for stack2 -->
+			<artifact groupId="org.jboss.stack2" artifactId="stack-configuration" />
 		</virtual-deployment>
 	</profile>
 

Modified: projects/profileservice/trunk/core/src/test/resources/system/profiles/web-profiles.xml
===================================================================
--- projects/profileservice/trunk/core/src/test/resources/system/profiles/web-profiles.xml	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/core/src/test/resources/system/profiles/web-profiles.xml	2010-03-04 13:42:54 UTC (rev 101822)
@@ -33,12 +33,17 @@
 		<file-repository group="jboss.web" />
 		<virtual-deployment name="jboss.web.clustering">
 			<meta-inf path="clustering" />
+			<artifact groupId="org.jboss.web" artifactId="jbossweb-clustering" />
 		</virtual-deployment>
 		<requires name="jboss:profile=clustering" />
 	</profile>
 	
 	<profile name="jboss:profile=web,flavor=stack">
 		<file-repository group="jboss.web" />
+		<virtual-deployment name="jboss.web.clustering">
+			<meta-inf path="stack" />
+			<artifact groupId="org.jboss.web" artifactId="jbossweb-stack" />
+		</virtual-deployment>
 		<!-- depend on the alias -->
 		<requires name="jboss:profile=stack" />
 	</profile>

Modified: projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestComponentMetaData.java
===================================================================
--- projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestComponentMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestComponentMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -40,6 +40,8 @@
    /** The component name. */
    private String name;
    
+   /** . */
+   private String attachmentProperty;
    
    public TestComponentMetaData()
    {
@@ -64,5 +66,16 @@
       this.name = name;
    }
    
+   @ManagementProperty(name = "attachment-property")
+   public String getAttachmentProperty()
+   {
+      return this.attachmentProperty;
+   }
+   
+   public void setAttachmentProperty(String attachmentProperty)
+   {
+      this.attachmentProperty = attachmentProperty;
+   }
+   
 }
 

Modified: projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestServiceComponentMetaData.java
===================================================================
--- projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestServiceComponentMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/support/TestServiceComponentMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -40,6 +40,9 @@
    /** The component name. */
    private String name;
    
+   /** . */
+   private String runtimeProperty;
+   
    public TestServiceComponentMetaData()
    {
       //
@@ -62,6 +65,17 @@
       this.name = name;
    }
    
+   @ManagementProperty(name = "runtime-property")
+   public String getRuntimeProperty()
+   {
+      return runtimeProperty;
+   }
+   
+   public void setRuntimeProperty(String runtimeProperty)
+   {
+      this.runtimeProperty = runtimeProperty;
+   }
+   
    @ManagementOperation
    public void invoke()
    {

Modified: projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/test/SimpleViewUnitTestCase.java
===================================================================
--- projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/test/SimpleViewUnitTestCase.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/plugins/src/test/java/org/jboss/test/profileservice/plugins/mgt/test/SimpleViewUnitTestCase.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -85,6 +85,9 @@
       assertNotNull(one.getOperations());
       assertTrue(one.getOperations().size() > 0);
       
+      assertNotNull(one.getProperty("attachment-property"));
+      assertNotNull(one.getProperty("runtime-property"));
+      
    }
    
 }

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileDeployment.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -51,6 +51,13 @@
     * @return the simple deployment name
     */
    String getSimpleName();
+
+   /**
+    * Get the deployment info.
+    * 
+    * @return the deployment info
+    */
+   ProfileDeploymentInfo getDeploymentInfo();
    
    /**
     * Get the root of the deployment
@@ -60,20 +67,6 @@
    VirtualFile getRoot();
 
    /**
-    * Cleanup the associated {@code VirtualFile} information.
-    *
-    * @throws Exception for any error
-    */
-   void cleanup() throws Exception;
-   
-   /**
-    * Get the deployment info.
-    * 
-    * @return the deployment info
-    */
-   ProfileDeploymentInfo getDeploymentInfo();
-   
-   /**
     * Get the predetermined attachments.
     * 
     * @return the predetermined attachments
@@ -86,6 +79,13 @@
     * @return the transient attachments
     */
    DeploymentAttachments getTransientAttachments();
+
+   /**
+    * Cleanup the associated {@code VirtualFile} information.
+    *
+    * @throws Exception for any error
+    */
+   void cleanup() throws Exception;
    
 }
 

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileKey.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileKey.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/ProfileKey.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -38,7 +38,7 @@
 {
 
    /** The serialVersionUID */
-   private static final long serialVersionUID = 1;
+   private static final long serialVersionUID = 2;
 
    /** The DEFAULT value for domain, server, name */
    public static final String DEFAULT = "default";
@@ -47,12 +47,14 @@
    public static final ProfileKey DEFAULT_PROFILE_KEY = new ProfileKey(DEFAULT, DEFAULT, DEFAULT);
 
    /** The profile domain/cluster */
-   private String domain;
+   private final String domain;
    /** The server/node */
-   private String server;
+   private final String server;
    /** The profile name */
-   private String name;
+   private final String name;
    
+   private final int hashCode;
+   
    /**
     * Calls this this(DEFAULT, DEFAULT, name)
     * @param name - the profile name
@@ -81,34 +83,23 @@
       if( name == null )
          name = DEFAULT;
       this.name = name;
+      this.hashCode = domain.hashCode() + server.hashCode() + name.hashCode();
    }
 
    public String getName()
    {
       return name;
    }
-   public void setName(String name)
-   {
-      this.name = name;
-   }
 
    public String getDomain()
    {
       return domain;
    }
-   public void setDomain(String domain)
-   {
-      this.domain = domain;
-   }
 
    public String getServer()
    {
       return server;
    }
-   public void setServer(String server)
-   {
-      this.server = server;
-   }
 
    /**
     * Is this a default key. A default key is one where all
@@ -154,7 +145,7 @@
    
    public int hashCode()
    {
-      return domain.hashCode() + server.hashCode() + name.hashCode();
+      return hashCode;
    }
 
    public String toString()

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/VirtualDeploymentRepository.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/VirtualDeploymentRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/VirtualDeploymentRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -23,7 +23,7 @@
 
 import java.io.IOException;
 
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 
 /**
  * The virtual deployment repository.
@@ -42,7 +42,7 @@
     * @return the profile deployment
     * @throws IOException
     */
-   ProfileDeployment createDeployment(VirtualDeployment virtual) throws IOException;
+   ProfileDeployment createDeployment(VirtualDeploymentMetaData virtual) throws IOException;
    
 }
 

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/metadata/ProfileDeploymentMetaData.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/metadata/ProfileDeploymentMetaData.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/metadata/ProfileDeploymentMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -21,7 +21,7 @@
  */ 
 package org.jboss.profileservice.spi.metadata;
 
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 
 /**
  * The meta data describing a (virtual) profile deployment.
@@ -29,7 +29,7 @@
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */
-public interface ProfileDeploymentMetaData extends VirtualDeployment, ProfileMetaDataVisitorNode
+public interface ProfileDeploymentMetaData extends VirtualDeploymentMetaData, ProfileMetaDataVisitorNode
 {
      
 }

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/Artifact.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/Artifact.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/Artifact.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -24,7 +24,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.jboss.vfs.VirtualFile;
 
+
 /**
  * The artifact.
  * 
@@ -42,6 +44,13 @@
    ArtifactRepositoryId getRepository();
    
    /**
+    * Get the relative path to the repository.
+    * 
+    * @return the relative path to the repository
+    */
+   String getRelativePath();
+   
+   /**
     * Get the last modified.
     * 
     * @return last modified
@@ -49,6 +58,13 @@
    long getLastModified();
    
    /**
+    * Get the file.
+    * 
+    * @return the file.
+    */
+   VirtualFile getFile();
+   
+   /**
     * Get the artifacts input stream.
     * 
     * @return the input stream

Added: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactFilter.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactFilter.java	                        (rev 0)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactFilter.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -0,0 +1,53 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2010, Red Hat Inc., 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.profileservice.spi.repository;
+
+/**
+ * The artifact filter.
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public interface ArtifactFilter<T extends ArtifactId>
+{
+
+   /**
+    * Accepts an artifact.
+    * 
+    * @param artifact the artifact
+    * @return 
+    */
+   boolean accepts(Artifact<T> artifact);
+
+   /**
+    * Determine whether to recurse into a
+    * artifact - e.g. for file artifacts
+    * if it's a directory. 
+    * 
+    * TODO does this make sense?
+    * 
+    * @param artifact the artifact
+    * @return 
+    */
+   boolean recurse(Artifact<T> artifact);
+}
+

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepository.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepository.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepository.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -68,6 +68,14 @@
    Collection<Artifact<T>> getArtifacts();
    
    /**
+    * Get the filtered artifacts.
+    * 
+    * @param filter the artifact filter.
+    * @return the artifacts.
+    */
+   Collection<Artifact<T>> getArtifacts(ArtifactFilter<T> filter);
+   
+   /**
     * Get the artifact file from the repository.
     * 
     * @param artifact the artifact

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepositoryId.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepositoryId.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/repository/ArtifactRepositoryId.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -29,7 +29,6 @@
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */
-// TODO make this a unique identifier for a artifact repo
 public interface ArtifactRepositoryId extends Serializable
 {
 
@@ -48,9 +47,6 @@
     * @return the name
     */
    String getName();
-   
-   
-   // TODO relative url based on jboss home?
-   // String getRelativeLocation();
+
 }
 

Deleted: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeployment.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeployment.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeployment.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -1,66 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file 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.profileservice.spi.virtual;
-
-import java.util.List;
-
-import org.jboss.profileservice.spi.repository.ArtifactId;
-
-/**
- * The virtual deployment meta data.
- * 
- * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
- * @version $Revision$
- */
-public interface VirtualDeployment
-{
-
-   /**
-    * Get the deployment name.
-    * 
-    * @return the name
-    */
-   String getName();
-   
-   /** 
-    * Get the artifact id.
-    * 
-    * @return the artifact id
-    */
-   ArtifactId getArtifact();
-   
-   /**
-    * Get the deployment artifacts.
-    * 
-    * @return the artifacts
-    */
-   List<VirtualArtifactMetaData> getArtifacts();
-   
-   /**
-    * Get the children.
-    * 
-    * @return the children
-    */
-   List<VirtualDeployment> getChildren();
-   
-}
-

Copied: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeploymentMetaData.java (from rev 101460, projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeployment.java)
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeploymentMetaData.java	                        (rev 0)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/VirtualDeploymentMetaData.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -0,0 +1,66 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.profileservice.spi.virtual;
+
+import java.util.List;
+
+import org.jboss.profileservice.spi.repository.ArtifactId;
+
+/**
+ * The virtual deployment meta data.
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public interface VirtualDeploymentMetaData
+{
+
+   /**
+    * Get the deployment name.
+    * 
+    * @return the name
+    */
+   String getName();
+   
+   /** 
+    * Get the artifact id.
+    * 
+    * @return the artifact id
+    */
+   ArtifactId getArtifact();
+   
+   /**
+    * Get the deployment artifacts.
+    * 
+    * @return the artifacts
+    */
+   List<VirtualArtifactMetaData> getArtifacts();
+   
+   /**
+    * Get the children.
+    * 
+    * @return the children
+    */
+   List<VirtualDeploymentMetaData> getChildren();
+   
+}
+

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssembly.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssembly.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssembly.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -23,7 +23,7 @@
 
 import java.io.IOException;
 
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 
 /**
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
@@ -39,7 +39,7 @@
     * @return the assembly context
     * @throws IOException
     */
-   VirtualDeploymentAssemblyContext assemble(VirtualDeployment deployment) throws IOException;
+   VirtualDeploymentAssemblyContext assemble(VirtualDeploymentMetaData deployment) throws IOException;
  
    
    // TODO disassemble a virtual deployment, updating the artifacts in a mutable repo

Modified: projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssemblyContext.java
===================================================================
--- projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssemblyContext.java	2010-03-04 13:39:17 UTC (rev 101821)
+++ projects/profileservice/trunk/spi/src/main/java/org/jboss/profileservice/spi/virtual/assembly/VirtualDeploymentAssemblyContext.java	2010-03-04 13:42:54 UTC (rev 101822)
@@ -24,7 +24,7 @@
 import java.io.IOException;
 
 import org.jboss.profileservice.spi.virtual.VirtualArtifactMetaData;
-import org.jboss.profileservice.spi.virtual.VirtualDeployment;
+import org.jboss.profileservice.spi.virtual.VirtualDeploymentMetaData;
 import org.jboss.vfs.VirtualFile;
 
 /**
@@ -57,7 +57,7 @@
     * @param child the virtual deployment child
     * @throws IOException
     */
-   VirtualDeploymentAssemblyContext addChild(VirtualDeployment child) throws IOException;
+   VirtualDeploymentAssemblyContext addChild(VirtualDeploymentMetaData child) throws IOException;
 
 }
 




More information about the jboss-cvs-commits mailing list