Skip to content

Commit

Permalink
Reverted InstallRequestImpl changes
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed May 7, 2013
1 parent f784f6e commit 8dce0df
Showing 1 changed file with 31 additions and 63 deletions.
Expand Up @@ -26,6 +26,7 @@
import org.jboss.forge.container.repositories.AddonDependencyEntry;
import org.jboss.forge.container.repositories.AddonRepository;
import org.jboss.forge.container.repositories.MutableAddonRepository;
import org.jboss.forge.container.util.Assert;
import org.jboss.forge.container.util.Predicate;
import org.jboss.forge.dependencies.Coordinate;
import org.jboss.forge.dependencies.DependencyNode;
Expand All @@ -34,9 +35,9 @@
/**
* When an addon is installed, another addons could be required. This object returns the necessary information for the
* installation of an addon to succeed, like required addons and dependencies
*
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*
*/
public class InstallRequestImpl implements InstallRequest
{
Expand All @@ -51,7 +52,7 @@ public class InstallRequestImpl implements InstallRequest

/**
* Package-access constructor. Only AddonManager should be allowed to call this constructor.
*
*
* @param addonManager
*/
InstallRequestImpl(AddonManager addonManager, Forge forge, DependencyNode requestedAddonNode)
Expand Down Expand Up @@ -103,34 +104,29 @@ public List<DependencyNode> getRequiredAddons()
@Override
public void perform()
{
forge.getLockManager().performLocked(LockMode.WRITE, new Callable<Void>()
forge.getLockManager().performLocked(LockMode.WRITE, new Callable<AddonId>()
{
@Override
public Void call() throws Exception
public AddonId call() throws Exception
{
for (DependencyNode requiredAddon : getRequiredAddons())
{
AddonId requiredAddonId = toAddonId(requiredAddon);
AddonRepository deployed = null;
boolean deployed = false;
for (AddonRepository repository : forge.getRepositories())
{
if (repository.isDeployed(requiredAddonId))
{
log.info("Addon " + requiredAddonId + " is already deployed.");
deployed = repository;
log.info("Addon " + requiredAddonId + " is already deployed. Skipping...");
deployed = true;
break;
}
}

if (deployed == null)
if (!deployed)
{
addonManager.install(requiredAddonId).perform();
}
else if (requiredAddon.getDependency().getCoordinate().isSnapshot())
{
log.info("Re-installing Addon SNAPSHOT " + requiredAddonId + ".");
addonManager.install(requiredAddonId).perform(deployed);
}
}

AddonId requestedAddonId = toAddonId(requestedAddonNode);
Expand All @@ -145,59 +141,49 @@ else if (requiredAddon.getDependency().getCoordinate().isSnapshot())
break;
}
}
return null;
return requestedAddonId;
}
});
}

@Override
public void perform(final AddonRepository target)
{
forge.getLockManager().performLocked(LockMode.WRITE, new Callable<Void>()
Assert.isTrue(!(target instanceof MutableAddonRepository), "Addon repository ["
+ target.getRootDirectory().getAbsolutePath()
+ "] is not writable.");

forge.getLockManager().performLocked(LockMode.WRITE, new Callable<AddonId>()
{
@Override
public Void call() throws Exception
public AddonId call() throws Exception
{
for (DependencyNode requiredAddon : getRequiredAddons())
{
AddonId requiredAddonId = toAddonId(requiredAddon);

AddonRepository deployed = null;
boolean deployed = false;
for (AddonRepository repository : forge.getRepositories())
{
if (repository.isDeployed(requiredAddonId))
{
log.info("Addon " + requiredAddonId + " is already deployed.");
deployed = repository;
log.info("Addon " + requiredAddonId + " is already deployed. Skipping...");
deployed = true;
break;
}
}

if (deployed == null)
if (!deployed)
{
addonManager.install(requiredAddonId).perform();
}
else if (requiredAddon.getDependency().getCoordinate().isSnapshot())
{
log.info("Re-installing Addon SNAPSHOT " + requiredAddonId + ".");
addonManager.install(requiredAddonId).perform(deployed);
addonManager.install(requiredAddonId).perform(target);
}
}

AddonId requestedAddonId = toAddonId(requestedAddonNode);

if (target instanceof MutableAddonRepository)
{
MutableAddonRepository mutableRespository = (MutableAddonRepository) target;
deploy(mutableRespository, requestedAddonId, requestedAddonNode);
mutableRespository.enable(requestedAddonId);
}
else
{
throw new IllegalArgumentException("Addon repository [" + target.getRootDirectory().getAbsolutePath()
+ "] is not writable.");
}
return null;
MutableAddonRepository mutableRepository = (MutableAddonRepository) target;
deploy(mutableRepository, requestedAddonId, requestedAddonNode);
mutableRepository.enable(requestedAddonId);
return requestedAddonId;
}
});
}
Expand Down Expand Up @@ -226,42 +212,24 @@ public boolean accept(DependencyNode node)
return AddonId.from(coord.getGroupId() + ":" + coord.getArtifactId(), coord.getVersion(), apiVersion);
}

private void deploy(MutableAddonRepository repository, AddonId addonId, DependencyNode root)
private void deploy(MutableAddonRepository repository, AddonId addon, DependencyNode root)
{
List<File> resourceJars = toResourceJars(DependencyNodeUtil.select(root, new LocalResourceFilter(root)));

if (resourceJars.isEmpty())
{
log.fine("No resource JARs found for " + addonId);
log.fine("No resource JARs found for " + addon);
}
List<AddonDependencyEntry> addonDependencies =
toAddonDependencies(DependencyNodeUtil
.select(root.getChildren().iterator(), new DirectAddonFilter(root)));

if (addonDependencies.isEmpty())
{
log.fine("No dependencies found for addon " + addonId);
}

boolean deploy = true;
if (repository.isDeployed(addonId))
{
if (root.getDependency().getCoordinate().isSnapshot())
{
log.fine("Removing previous deployment of " + addonId);
repository.undeploy(addonId);
}
else
{
deploy = false;
}
}

if (deploy)
{
log.info("Deploying addon " + addonId);
repository.deploy(addonId, addonDependencies, resourceJars);
log.fine("No dependencies found for addon " + addon);
}
log.info("Deploying addon " + addon);
repository.deploy(addon, addonDependencies, resourceJars);
}

private List<AddonDependencyEntry> toAddonDependencies(List<DependencyNode> dependencies)
Expand Down

0 comments on commit 8dce0df

Please sign in to comment.