package org.jboss.windup.bootstrap.commands.addons; import static org.jboss.windup.bootstrap.Bootstrap.getVersionString; import java.util.concurrent.atomic.AtomicBoolean; import org.jboss.forge.furnace.Furnace; import org.jboss.forge.furnace.addons.AddonId; import org.jboss.forge.furnace.manager.impl.AddonManagerImpl; import org.jboss.forge.furnace.manager.maven.addon.MavenAddonDependencyResolver; import org.jboss.forge.furnace.manager.request.RemoveRequest; import org.jboss.forge.furnace.manager.spi.AddonDependencyResolver; import org.jboss.forge.furnace.repositories.AddonRepository; import org.jboss.forge.furnace.repositories.MutableAddonRepository; import org.jboss.windup.bootstrap.commands.Command; import org.jboss.windup.bootstrap.commands.CommandPhase; import org.jboss.windup.bootstrap.commands.CommandResult; import org.jboss.windup.bootstrap.commands.FurnaceDependent; /** * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ public class RemoveAddonCommand extends AbstractAddonCommand implements Command, FurnaceDependent { private Furnace furnace; private final String addonId; private final AtomicBoolean batchMode; public RemoveAddonCommand(String addonId, AtomicBoolean batchMode) { this.addonId = addonId; this.batchMode = batchMode; } @Override public void setFurnace(Furnace furnace) { this.furnace = furnace; } @Override public CommandResult execute() { remove(addonId, batchMode.get()); return CommandResult.CONTINUE; } /** * @return Exit after execution of this. */ void remove(String coordinates, boolean batchMode) { try { AddonDependencyResolver resolver = new MavenAddonDependencyResolver(); AddonManagerImpl addonManager = new AddonManagerImpl(furnace, resolver); AddonId addon = null; coordinates = convertColonVersionToComma(coordinates); // This allows windup --remove maven if (coordinates.matches(artifactWithCommaVersionPattern)) { addon = AddonId.fromCoordinates(coordinates); coordinates = addon.getName(); } REPOS: for (AddonRepository repository : furnace.getRepositories()) { for (AddonId id : repository.listEnabled()) { if (!coordinates.equals(id.getName()) || !(repository instanceof MutableAddonRepository)) continue; addon = id; RemoveRequest request = addonManager.remove(id, (repository)); System.out.println(request); if (!batchMode) { String result = System.console().readLine("Confirm uninstallation [Y/n]? "); if ("n".equalsIgnoreCase(result.trim())) { System.out.println("Uninstallation aborted."); return; } } request.perform(); System.out.println("Uninstallation completed successfully."); System.out.println(); break REPOS; } } if (addon == null) { throw new IllegalArgumentException("No addon exists with id " + coordinates); } } catch (Exception e) { e.printStackTrace(); System.out.println(getVersionString()); } } @Override public CommandPhase getPhase() { return CommandPhase.POST_CONFIGURATION; } }