Skip to content

Commit

Permalink
AddonManager resolves plugins. AddonRepository API updates
Browse files Browse the repository at this point in the history
  • Loading branch information
lincolnthree committed Nov 26, 2012
1 parent 1eb7d90 commit fbb57dd
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 99 deletions.
Expand Up @@ -155,7 +155,7 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException
}
}

addonUtil.install(addon);
addonUtil.enable(addon);

HTTPContext httpContext = new HTTPContext("localhost", 4141);
httpContext.add(new Servlet("ArquillianServletRunner", "/ArquillianServletRunner"));
Expand Down Expand Up @@ -192,7 +192,7 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException
public void undeploy(Archive<?> archive) throws DeploymentException
{
AddonEntry addon = getAddonEntry(archive);
addonUtil.remove(addon);
addonUtil.disable(addon);

long start = System.currentTimeMillis();
boolean deployed = true;
Expand Down
Expand Up @@ -110,7 +110,7 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException

System.out.println("Unzipping " + archive.toString(true));

addonUtil.install(addon);
addonUtil.enable(addon);

HTTPContext httpContext = new HTTPContext("localhost", 4141);
httpContext.add(new Servlet("ArquillianServletRunner", "/ArquillianServletRunner"));
Expand All @@ -123,7 +123,7 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException
public void undeploy(Archive<?> archive) throws DeploymentException
{
AddonEntry addon = getAddonEntry(archive);
addonUtil.remove(addon);
addonUtil.disable(addon);

File dir = addonUtil.getAddonBaseDir(addon);
boolean deleted = Files.delete(dir, true);
Expand Down
Expand Up @@ -109,7 +109,7 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException

System.out.println("Unzipping " + archive.toString(true));

addonUtil.install(addon);
addonUtil.enable(addon);

HTTPContext httpContext = new HTTPContext("localhost", 4141);
httpContext.add(new Servlet("ArquillianServletRunner", "/ArquillianServletRunner"));
Expand All @@ -122,7 +122,7 @@ public ProtocolMetaData deploy(Archive<?> archive) throws DeploymentException
public void undeploy(Archive<?> archive) throws DeploymentException
{
AddonEntry addon = getAddonEntry(archive);
addonUtil.remove(addon);
addonUtil.disable(addon);

File dir = addonUtil.getAddonBaseDir(addon);
boolean deleted = Files.delete(dir, true);
Expand Down
8 changes: 1 addition & 7 deletions forge-addon-manager/pom.xml
Expand Up @@ -17,14 +17,8 @@
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.jboss.forge</groupId>
<artifactId>forge-test-harness</artifactId>
Expand Down
Expand Up @@ -8,67 +8,86 @@
package org.jboss.forge.addon.manager;

import java.io.File;
import java.util.Arrays;
import java.util.List;

import javax.inject.Inject;

import org.jboss.forge.container.AddonEntry;
import org.jboss.forge.container.AddonRepository;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.jboss.shrinkwrap.resolver.api.maven.MavenResolvedArtifact;
import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency;
import org.jboss.shrinkwrap.resolver.api.maven.filter.MavenResolutionFilter;
import org.jboss.shrinkwrap.resolver.api.maven.strategy.MavenResolutionStrategy;

/**
* Installs addons into an {@link AddonRepository}
*
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*
*/
public class AddonManager
{
private AddonRepository repository;
private MavenResolutionStrategy strategy = new MavenResolutionStrategy()
{

@Override
public MavenResolutionFilter[] getPreResolutionFilters()
{
return Arrays.asList(new MavenResolutionFilter()
{
@Override
public boolean accepts(MavenDependency dependency, List<MavenDependency> dependenciesForResolution)
{
// TODO Auto-generated method stub
return false;
}
}).toArray(new MavenResolutionFilter[] {});
}

@Override
public MavenResolutionFilter[] getResolutionFilters()
{
return Arrays.asList(new MavenResolutionFilter()
{
@Override
public boolean accepts(MavenDependency dependency, List<MavenDependency> dependenciesForResolution)
{
// TODO Auto-generated method stub
return false;
}
}).toArray(new MavenResolutionFilter[] {});
}
};

@Inject
public AddonManager(AddonRepository repository)
{
this.repository = repository;
}

// XXX
public AddonEntry install(String coordinates)
public boolean install(AddonEntry entry)
{
MavenResolvedArtifact[] artifacts = null;
artifacts = Maven.resolver().offline().resolve(coordinates).withTransitivity()
.asResolvedArtifact();
System.out.println("Transient files: ");
list(artifacts);
return null;

// MavenResolvedArtifact farArtifact = Maven.resolver().offline().resolve(coordinates).withoutTransitivity()
// .asSingleResolvedArtifact();
// repository.deploy(entry, farFile, dependencies)
String coordinates = toMavenCoordinates(entry);
File far = Maven.resolver().offline().resolve(coordinates).withoutTransitivity().asSingleFile();
File[] dependencies = Maven.resolver().offline().resolve(coordinates).using(strategy).asFile();
return install(entry, far, dependencies);
}

private void list(MavenResolvedArtifact[] artifacts)
public String toMavenCoordinates(AddonEntry entry)
{
for (MavenResolvedArtifact mavenArtifact : artifacts)
{
if ("far".equals(mavenArtifact.getExtension()))
{
System.out.println("Depends on addon : " + mavenArtifact.getCoordinate() + " - " + mavenArtifact.asFile());
}
else
{
System.out.println(mavenArtifact.asFile());
}
}
return entry.toCoordinates().replaceAll("([^:]+):([^:]+):([^:]+)", "$1:$2:far:$3");
}

public void install(AddonEntry entry, File farFile, File[] dependencies)
public boolean install(AddonEntry entry, File farFile, File[] dependencies)
{
repository.deploy(entry, farFile, dependencies);
return repository.enable(entry);
}

public void remove(String coordinates)
public boolean remove(AddonEntry entry)
{
AddonEntry entry = AddonEntry.fromCoordinates(coordinates);
repository.remove(entry);
return repository.disable(entry);
}
}
Expand Up @@ -20,17 +20,15 @@
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
@Ignore
public class AddonManagerTest
{
@Inject
private AddonManager addonManager;

@Inject
private AddonRepository repository;

Expand All @@ -41,17 +39,20 @@ public static ForgeArchive getDeployment()
.create(ForgeArchive.class)
.addPackages(true, AddonManager.class.getPackage())
.addAsLibraries(
Maven.resolver().offline().loadPomFromFile("pom.xml").importRuntimeDependencies()
.asFile())
Maven.resolver().offline().loadPomFromFile("pom.xml").importRuntimeDependencies().asFile())
.addAsManifestResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml"))
.setAsForgeXML(new StringAsset("<addon/>"));

System.out.println(archive.toString(true));

return archive;
}

@Test
public void testResolvingAddon()
{
AddonEntry installed = addonManager.install("org.jboss.forge:forge-example-plugin:far:2.0.0-SNAPSHOT");
Assert.assertTrue(repository.has(installed));
AddonEntry addon = AddonEntry.fromCoordinates("org.jboss.forge:forge-example-plugin:2.0.0-SNAPSHOT");
Assert.assertTrue(addonManager.install(addon));
Assert.assertTrue(repository.has(addon));
}
}
Expand Up @@ -19,7 +19,7 @@
*/
public interface AddonRepository
{
public AddonEntry deploy(AddonEntry entry, File farFile, File... dependencies);
public boolean deploy(AddonEntry entry, File farFile, File... dependencies);

public AddonEntry get(final AddonEntry addon);

Expand All @@ -41,11 +41,11 @@ public interface AddonRepository

public boolean has(final AddonEntry addon);

public boolean install(AddonEntry addon);
public boolean enable(AddonEntry addon);

public List<AddonEntry> listByAPICompatibleVersion(final String version);

public List<AddonEntry> listInstalled();

public boolean remove(final AddonEntry addon);
public boolean disable(final AddonEntry addon);
}

This file was deleted.

Expand Up @@ -23,7 +23,6 @@
import org.jboss.forge.container.AddonDependency;
import org.jboss.forge.container.AddonEntry;
import org.jboss.forge.container.AddonRepository;
import org.jboss.forge.container.exception.AddonDeploymentException;
import org.jboss.forge.container.util.Assert;
import org.jboss.forge.container.util.Files;
import org.jboss.forge.container.util.OSUtils;
Expand Down Expand Up @@ -218,7 +217,7 @@ public synchronized List<AddonEntry> listInstalled()
return result;
}

public synchronized boolean install(AddonEntry addon)
public synchronized boolean enable(AddonEntry addon)
{
if (addon == null)
{
Expand All @@ -243,7 +242,7 @@ public synchronized boolean install(AddonEntry addon)
{
if (addon.getName().equals(e.getName()))
{
remove(e);
disable(e);
}
}

Expand All @@ -252,21 +251,20 @@ public synchronized boolean install(AddonEntry addon)
{
Node installed = XMLParser.parse(registryFile);

installed.getOrCreate(
"addon@" + ATTR_NAME + "=" + addon.getName() + "&" + ATTR_API_VERSION + "=" + addon.getApiVersion())
installed.getOrCreate("addon@" + ATTR_NAME + "=" + addon.getName() +
"&" + ATTR_API_VERSION + "=" + addon.getApiVersion())
.attribute(ATTR_SLOT, addon.getSlot());
Streams.write(XMLParser.toXMLInputStream(installed), new FileOutputStream(registryFile));

return true;
}
catch (FileNotFoundException e)
{
throw new RuntimeException("Could not read [" + registryFile.getAbsolutePath()
+ "] - ", e);
throw new RuntimeException("Could not read [" + registryFile.getAbsolutePath() + "] - ", e);
}
}

public synchronized boolean remove(final AddonEntry addon)
public synchronized boolean disable(final AddonEntry addon)
{
if (addon == null)
{
Expand All @@ -289,6 +287,7 @@ public synchronized boolean remove(final AddonEntry addon)
}
catch (FileNotFoundException e)
{
throw new RuntimeException("Could not read [" + registryFile.getAbsolutePath() + "] - ", e);
}
}
return false;
Expand Down Expand Up @@ -434,7 +433,7 @@ public synchronized File getAddonDescriptor(AddonEntry addon)
}

@Override
public synchronized AddonEntry deploy(AddonEntry entry, File farFile, File... dependencies)
public synchronized boolean deploy(AddonEntry entry, File farFile, File... dependencies)
{
File addonSlotDir = getAddonSlotDir(entry);
try
Expand All @@ -444,11 +443,13 @@ public synchronized AddonEntry deploy(AddonEntry entry, File farFile, File... de
{
Files.copyFileToDirectory(dependency, addonSlotDir);
}
return true;
}
catch (IOException io)
{
throw new AddonDeploymentException("Could not deploy addon " + entry, io);
// TODO throw exception instead?
io.printStackTrace();
return false;
}
return entry;
}
}

0 comments on commit fbb57dd

Please sign in to comment.