Skip to content

Commit

Permalink
Fix bug in AddonManager that was causing addons not to be removed fro…
Browse files Browse the repository at this point in the history
…m repositories
  • Loading branch information
lincolnthree committed Apr 24, 2013
1 parent 2a122c3 commit 3e31519
Show file tree
Hide file tree
Showing 7 changed files with 228 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,30 @@
package org.jboss.forge.addon.manager;

import org.jboss.forge.container.addons.AddonId;
import org.jboss.forge.container.repositories.AddonRepository;
import org.jboss.forge.container.services.Exported;

/**
* Responsible for installing, removing, enabling, and disabling {@link AddonId} instances in any registered
* {@link AddonRepository}.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
@Exported
public interface AddonManager
{
/**
* Create a new {@link InstallRequest} for the given {@link AddonId}.
*/
public abstract InstallRequest install(AddonId id);

public abstract boolean remove(AddonId id);
/**
* Create a new {@link RemoveRequest} for the given {@link AddonId}.
*/
public abstract RemoveRequest remove(AddonId id);

public abstract boolean disable(AddonId id);
/**
* Create a new {@link DisableRequest} for the given {@link AddonId}.
*/
public abstract DisableRequest disable(AddonId id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.addon.manager;

import org.jboss.forge.container.addons.Addon;
import org.jboss.forge.container.addons.AddonId;
import org.jboss.forge.container.repositories.AddonRepository;
import org.jboss.forge.container.repositories.MutableAddonRepository;

/**
* This object is responsible for disabling an {@link Addon}.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public interface DisableRequest
{
/**
* The {@link AddonId} to disable.
*/
public abstract AddonId getAddonIdToDisable();

/**
* This will disable the {@link AddonId} in all registered {@link MutableAddonRepository} instances.
*/
public abstract void perform();

/**
* This will disable the {@link AddonId} in the given {@link MutableAddonRepository} instances.
*/
public abstract void perform(AddonRepository target);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.addon.manager;

import org.jboss.forge.container.addons.Addon;
import org.jboss.forge.container.addons.AddonId;
import org.jboss.forge.container.repositories.AddonRepository;
import org.jboss.forge.container.repositories.MutableAddonRepository;

/**
* This object is responsible for removing an {@link Addon}.
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public interface RemoveRequest
{
/**
* The {@link AddonId} to remove.
*/
public abstract AddonId getAddonIdToRemove();

/**
* This will remove the {@link AddonId} from all registered {@link MutableAddonRepository} instances.
*/
public abstract void perform();

/**
* This will remove the {@link AddonId} from the given {@link MutableAddonRepository} instances.
*/
public abstract void perform(AddonRepository target);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@
import javax.inject.Inject;

import org.jboss.forge.addon.manager.AddonManager;
import org.jboss.forge.addon.manager.DisableRequest;
import org.jboss.forge.addon.manager.InstallRequest;
import org.jboss.forge.addon.manager.RemoveRequest;
import org.jboss.forge.container.Forge;
import org.jboss.forge.container.addons.AddonId;
import org.jboss.forge.container.repositories.AddonRepository;
import org.jboss.forge.container.repositories.MutableAddonRepository;
import org.jboss.forge.dependencies.AddonDependencyResolver;
import org.jboss.forge.dependencies.DependencyNode;
import org.jboss.forge.dependencies.builder.DependencyQueryBuilder;
Expand Down Expand Up @@ -49,24 +50,14 @@ public InstallRequest install(AddonId id)
}

@Override
public boolean remove(AddonId id)
public RemoveRequest remove(AddonId id)
{
for (AddonRepository repository : forge.getRepositories())
{
if (repository instanceof MutableAddonRepository && repository.isEnabled(id))
return ((MutableAddonRepository) repository).undeploy(id);
}
return false;
return new RemoveRequestImpl(this, forge, id);
}

@Override
public boolean disable(AddonId id)
public DisableRequest disable(AddonId id)
{
for (AddonRepository repository : forge.getRepositories())
{
if (repository instanceof MutableAddonRepository && repository.isEnabled(id))
return ((MutableAddonRepository) repository).disable(id);
}
return false;
return new DisableRequestImpl(this, forge, id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.addon.manager.impl;

import org.jboss.forge.addon.manager.AddonManager;
import org.jboss.forge.addon.manager.DisableRequest;
import org.jboss.forge.container.Forge;
import org.jboss.forge.container.addons.AddonId;
import org.jboss.forge.container.repositories.AddonRepository;
import org.jboss.forge.container.repositories.MutableAddonRepository;
import org.jboss.forge.container.util.Assert;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public class DisableRequestImpl implements DisableRequest
{
@SuppressWarnings("unused")
private AddonManager manager;

private Forge forge;
private AddonId id;

public DisableRequestImpl(AddonManager manager, Forge forge, AddonId id)
{
Assert.notNull(manager, "AddonManager must not be null.");
Assert.notNull(forge, "Forge must not be null.");
Assert.notNull(id, "AddonId must not be null.");
this.manager = manager;
this.forge = forge;
this.id = id;
}

@Override
public AddonId getAddonIdToDisable()
{
return null;
}

@Override
public void perform()
{
for (AddonRepository repository : forge.getRepositories())
{
if (repository instanceof MutableAddonRepository && repository.isEnabled(id))
((MutableAddonRepository) repository).disable(id);
}
}

@Override
public void perform(AddonRepository repository)
{
if (repository instanceof MutableAddonRepository)
((MutableAddonRepository) repository).disable(id);
else
throw new IllegalArgumentException(
"Cannot remove addons from an immutable AddonRepository (must implement MutableAddonRepository.");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.addon.manager.impl;

import org.jboss.forge.addon.manager.AddonManager;
import org.jboss.forge.addon.manager.RemoveRequest;
import org.jboss.forge.container.Forge;
import org.jboss.forge.container.addons.AddonId;
import org.jboss.forge.container.repositories.AddonRepository;
import org.jboss.forge.container.repositories.MutableAddonRepository;
import org.jboss.forge.container.util.Assert;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public class RemoveRequestImpl implements RemoveRequest
{
@SuppressWarnings("unused")
private AddonManager manager;

private Forge forge;
private AddonId id;

public RemoveRequestImpl(AddonManager manager, Forge forge, AddonId id)
{
Assert.notNull(manager, "AddonManager must not be null.");
Assert.notNull(forge, "Forge must not be null.");
Assert.notNull(id, "AddonId must not be null.");
this.manager = manager;
this.forge = forge;
this.id = id;
}

@Override
public AddonId getAddonIdToRemove()
{
return id;
}

@Override
public void perform()
{
for (AddonRepository repository : forge.getRepositories())
{
if (repository instanceof MutableAddonRepository && repository.isEnabled(id))
((MutableAddonRepository) repository).undeploy(id);
}
}

@Override
public void perform(AddonRepository repository)
{
if (repository instanceof MutableAddonRepository)
((MutableAddonRepository) repository).undeploy(id);
else
throw new IllegalArgumentException("Cannot remove addons from an immutable AddonRepository (must implement MutableAddonRepository.");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ public Result execute(UIContext context) throws Exception
AddonId addonId = iterator.next();
builder.append(addonId.toCoordinates());

manager.disable(addonId);
manager.remove(addonId);
manager.disable(addonId).perform();
manager.remove(addonId).perform();

if (iterator.hasNext())
builder.append(", ");
Expand Down

0 comments on commit 3e31519

Please sign in to comment.