Skip to content

Commit

Permalink
Very big refactoring. Things much easier to comprehend.
Browse files Browse the repository at this point in the history
  • Loading branch information
lincolnthree committed Jul 5, 2013
1 parent 0a1a587 commit 55ea898
Show file tree
Hide file tree
Showing 23 changed files with 783 additions and 689 deletions.
Expand Up @@ -6,7 +6,6 @@
*/
package org.jboss.forge.furnace.addons;

import org.jboss.forge.furnace.versions.Version;

/**
* An edge in the registered {@link Addon} graph.
Expand All @@ -15,21 +14,11 @@
*/
public interface AddonDependency
{
/**
* Get the {@link Addon} dependent on the {@link Addon} returned by {@link #getDependency()}.
*/
public Addon getDependent();

/**
* Get the {@link Addon} dependency of the {@link Addon} returned by {@link #getDependent()}.
*/
public Addon getDependency();

/**
* Return the {@link Version} of which the {@link Addon} returned by {@link #getDependency()} must be included.
*/
public Version getDependencyVersion();

/**
* Return <code>true</code> if the {@link Addon} dependency returned by {@link #getDependency()} is exported by the
* dependent {@link Addon}. If the dependency is not exported, return <code>false</code>.
Expand Down
Expand Up @@ -10,13 +10,11 @@
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import org.jboss.forge.addon.convert.ConverterFactory;
import org.jboss.forge.addon.manager.AddonManager;
import org.jboss.forge.addon.manager.impl.AddonManagerImpl;
import org.jboss.forge.addon.maven.dependencies.FileResourceFactory;
import org.jboss.forge.addon.maven.dependencies.MavenContainer;
import org.jboss.forge.addon.maven.dependencies.MavenDependencyResolver;
import org.jboss.forge.addon.resource.DirectoryResource;
import org.jboss.forge.arquillian.ConfigurationScanListener;
import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.addons.Addon;
Expand All @@ -25,7 +23,6 @@
import org.jboss.forge.furnace.repositories.AddonRepository;
import org.jboss.forge.furnace.repositories.AddonRepositoryMode;
import org.jboss.forge.furnace.se.ForgeFactory;
import org.jboss.forge.furnace.services.ExportedInstance;
import org.jboss.forge.furnace.spi.ContainerLifecycleListener;
import org.jboss.forge.furnace.spi.ListenerRegistration;
import org.jboss.forge.furnace.util.Addons;
Expand Down Expand Up @@ -60,7 +57,7 @@ public void teardown()
}

@Test
public void testAddonsCanBeSharedBetweenViews() throws IOException, InterruptedException
public void testAddonsSharedIfSubgraphEquivalent() throws IOException, InterruptedException
{
Furnace furnace = ForgeFactory.getInstance(Furnace.class.getClassLoader());
AddonRepository left = furnace.addRepository(AddonRepositoryMode.MUTABLE, repodir1);
Expand Down Expand Up @@ -121,7 +118,7 @@ public void testAddonsCanBeSharedBetweenViews() throws IOException, InterruptedE
}

@Test
public void testAddonsDontFailIfDuplicatedInOtherRepositories() throws IOException, Exception
public void testAddonsDuplicatedIfSubgraphDiffers() throws IOException, InterruptedException
{
Furnace furnace = ForgeFactory.getInstance(Furnace.class.getClassLoader());
AddonRepository left = furnace.addRepository(AddonRepositoryMode.MUTABLE, repodir1);
Expand All @@ -131,43 +128,59 @@ public void testAddonsDontFailIfDuplicatedInOtherRepositories() throws IOExcepti
new MavenContainer());
AddonManager manager = new AddonManagerImpl(furnace, resolver);

AddonId facets = AddonId.from("org.jboss.forge.addon:facets", "2.0.0-SNAPSHOT");
AddonId convert = AddonId.from("org.jboss.forge.addon:convert", "2.0.0-SNAPSHOT");
AddonId resources = AddonId.from("org.jboss.forge.addon:resources", "2.0.0-SNAPSHOT");
AddonId facets = AddonId.from("org.jboss.forge.addon:facets", "2.0.0.Alpha5");
AddonId convert = AddonId.from("org.jboss.forge.addon:convert", "2.0.0.Alpha5");
AddonId resources = AddonId.from("org.jboss.forge.addon:resources", "2.0.0.Alpha5");
AddonId dependencies = AddonId.from("org.jboss.forge.addon:dependencies", "2.0.0.Alpha5");

AddonId facets6 = AddonId.from("org.jboss.forge.addon:facets", "2.0.0.Alpha6");

Assert.assertFalse(left.isDeployed(dependencies));
Assert.assertFalse(left.isDeployed(resources));
Assert.assertFalse(left.isDeployed(facets));
Assert.assertFalse(left.isDeployed(facets6));
Assert.assertFalse(left.isDeployed(convert));
Assert.assertFalse(right.isDeployed(dependencies));
Assert.assertFalse(right.isDeployed(resources));
Assert.assertFalse(right.isDeployed(facets));
Assert.assertFalse(right.isDeployed(facets6));
Assert.assertFalse(right.isDeployed(convert));

manager.install(facets).perform(left);
manager.install(convert).perform(left);
manager.install(resources).perform(left);
manager.install(resources).perform(right);
manager.install(dependencies).perform(left);

Assert.assertFalse(right.isDeployed(facets));
Assert.assertFalse(right.isDeployed(convert));
Assert.assertTrue(left.isDeployed(resources));
manager.install(facets6).perform(right);

Assert.assertTrue(left.isDeployed(facets));
Assert.assertTrue(left.isDeployed(convert));
Assert.assertTrue(left.isDeployed(resources));
Assert.assertTrue(right.isDeployed(resources));
Assert.assertTrue(left.isDeployed(dependencies));
Assert.assertFalse(left.isDeployed(facets6));

Assert.assertFalse(right.isDeployed(facets));
Assert.assertFalse(right.isDeployed(convert));
Assert.assertFalse(right.isDeployed(resources));
Assert.assertFalse(right.isDeployed(dependencies));
Assert.assertTrue(right.isDeployed(facets6));

furnace.startAsync();

Addons.waitUntilStarted(furnace.getAddonRegistry().getAddon(resources), 10, TimeUnit.SECONDS);
Addons.waitUntilStarted(furnace.getAddonRegistry().getAddon(facets), 10, TimeUnit.SECONDS);
Addons.waitUntilStarted(furnace.getAddonRegistry().getAddon(convert), 10, TimeUnit.SECONDS);
ConfigurationScanListener listener = new ConfigurationScanListener();
ListenerRegistration<ContainerLifecycleListener> registration = furnace.addContainerLifecycleListener(listener);

while (!listener.isConfigurationScanned())
Thread.sleep(100);

AddonRegistry registry = furnace.getAddonRegistry();
Addons.waitUntilStarted(registry.getAddon(resources), 10, TimeUnit.SECONDS);
AddonRegistry leftRegistry = furnace.getAddonRegistry(left);

System.out.println("Getting instances.");
ExportedInstance<ConverterFactory> instance = furnace.getAddonRegistry()
.getExportedInstance(ConverterFactory.class);
ConverterFactory factory = instance.get();
Addon addon = leftRegistry.getAddon(facets);
Assert.assertNotNull(addon);

factory.getConverter(File.class,
furnace.getAddonRegistry().getAddon(resources).getClassLoader()
.loadClass(DirectoryResource.class.getName()));
registration.removeListener();

furnace.stop();
}
Expand Down
56 changes: 10 additions & 46 deletions container/src/main/java/org/jboss/forge/furnace/FurnaceImpl.java
Expand Up @@ -14,7 +14,6 @@
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

Expand All @@ -30,7 +29,6 @@
import org.jboss.forge.furnace.spi.ContainerLifecycleListener;
import org.jboss.forge.furnace.spi.ListenerRegistration;
import org.jboss.forge.furnace.util.Assert;
import org.jboss.forge.furnace.util.Sets;
import org.jboss.forge.furnace.versions.Version;
import org.jboss.modules.Module;
import org.jboss.modules.log.StreamModuleLogger;
Expand All @@ -56,7 +54,6 @@ public class FurnaceImpl implements Furnace
private Map<AddonRepository, Integer> lastRepoVersionSeen = new HashMap<AddonRepository, Integer>();

private final LockManager lock = new LockManagerImpl();
private final Set<AddonView> views = Sets.getConcurrentSet();

private String[] args;

Expand Down Expand Up @@ -141,7 +138,7 @@ public Furnace start(ClassLoader loader)
do
{
boolean dirty = false;
if (!manager.isStartingAddons(views))
if (!manager.isStartingAddons())
{
for (AddonRepository repository : repositories)
{
Expand All @@ -159,7 +156,7 @@ public Furnace start(ClassLoader loader)
try
{
fireBeforeConfigurationScanEvent();
manager.forceUpdate(views);
manager.forceUpdate();
fireAfterConfigurationScanEvent();
}
catch (Exception e)
Expand All @@ -172,7 +169,7 @@ public Furnace start(ClassLoader loader)
}
while (alive && serverMode);

while (alive && manager.isStartingAddons(views))
while (alive && manager.isStartingAddons())
{
Thread.sleep(100);
}
Expand Down Expand Up @@ -269,50 +266,26 @@ public AddonRegistry getAddonRegistry(AddonRepository... repositories)
{
assertIsAlive();

AddonRegistry result = findView(repositories);
AddonRegistry result = manager.findView(repositories);

if (result == null)
{
if (repositories == null || repositories.length == 0)
{
result = new AddonRegistryImpl(lock, manager, getRepositories(), "ROOT");
views.add(result);
manager.addView(result);
}
else
{
result = new AddonRegistryImpl(lock, manager, Arrays.asList(repositories), String.valueOf(registryCount++));
views.add(result);
manager.forceUpdate(views);
manager.addView(result);
manager.forceUpdate();
}
}

return result;
}

private AddonRegistry findView(AddonRepository... repositories)
{
AddonRegistry result = null;

for (AddonView view : views)
{
Set<AddonRepository> viewRepositories = view.getRepositories();
if (repositories == null || repositories.length == 0)
{
if (viewRepositories.containsAll(getRepositories()) && getRepositories().containsAll(viewRepositories))
result = (AddonRegistry) view;
}
else if (viewRepositories.containsAll(Arrays.asList(repositories))
&& Arrays.asList(repositories).containsAll(viewRepositories))
{
result = (AddonRegistry) view;
}

if (result != null)
break;
}
return result;
}

public void disposeAddonView(AddonView view)
{
assertIsAlive();
Expand All @@ -321,12 +294,8 @@ public void disposeAddonView(AddonView view)
throw new IllegalArgumentException(
"Cannot dispose the root AddonRegistry. Call .stop() instead.");

if (!views.contains(view))
throw new IllegalArgumentException("The given AddonRegistry does not belong to this Furnace instance.");

views.remove(view);

manager.forceUpdate(views);
manager.removeView(view);
manager.forceUpdate();
}

@Override
Expand Down Expand Up @@ -402,7 +371,7 @@ public ContainerStatus getStatus()
if (!alive)
return ContainerStatus.STOPPED;

boolean startingAddons = manager.isStartingAddons(views);
boolean startingAddons = manager.isStartingAddons();
return startingAddons ? ContainerStatus.STARTING : status;
}

Expand All @@ -416,11 +385,6 @@ public AddonLifecycleManager getAddonLifecycleManager()
return manager;
}

public Set<AddonView> getViews()
{
return views;
}

@Override
public String toString()
{
Expand Down
Expand Up @@ -6,63 +6,40 @@
*/
package org.jboss.forge.furnace.addons;

import org.jboss.forge.furnace.addons.Addon;
import org.jboss.forge.furnace.addons.AddonDependency;
import org.jboss.forge.furnace.lock.LockManager;
import org.jboss.forge.furnace.util.Assert;
import org.jboss.forge.furnace.versions.Version;

/**
* An edge in the registered {@link Addon} graph.
*
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class AddonDependencyImpl implements AddonDependency
{
private final Addon dependent;

private boolean exported = false;
private boolean optional = false;
private Addon dependency;
private Version dependencyVersion;

@SuppressWarnings("unused")
private LockManager lockManager;

public AddonDependencyImpl(LockManager lockManager,
Addon dependent, Version dependencyVersion, Addon dependency, boolean exported, boolean optional)
public AddonDependencyImpl(LockManager lockManager, Addon dependency, boolean exported, boolean optional)
{
Assert.notNull(lockManager, "LockManager must not be null.");
Assert.notNull(dependent, "Dependent Addon must not be null.");
Assert.notNull(dependencyVersion, "VersionRange must not be null.");
Assert.notNull(dependency, "Dependency Addon not be null.");

this.lockManager = lockManager;
this.dependent = dependent;
this.dependencyVersion = dependencyVersion;
this.dependency = dependency;
this.exported = exported;
this.optional = optional;
}

@Override
public Addon getDependent()
{
return dependent;
}

@Override
public Addon getDependency()
{
return dependency;
}

@Override
public Version getDependencyVersion()
{
return dependencyVersion;
}

@Override
public boolean isExported()
{
Expand Down

0 comments on commit 55ea898

Please sign in to comment.