diff --git a/integration-tests/src/test/java/org/openmrs/maven/plugins/RemoveDependencyTest.java b/integration-tests/src/test/java/org/openmrs/maven/plugins/RemoveDependencyTest.java new file mode 100644 index 00000000..84758a09 --- /dev/null +++ b/integration-tests/src/test/java/org/openmrs/maven/plugins/RemoveDependencyTest.java @@ -0,0 +1,51 @@ +package org.openmrs.maven.plugins; + +import org.apache.maven.plugin.MojoExecutionException; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.openmrs.maven.plugins.model.DistroProperties; +import org.openmrs.maven.plugins.utility.DistroHelper; + +import java.io.File; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +public class RemoveDependencyTest extends AbstractSdkIntegrationTest { + + private String distroFile; + + + private DistroProperties originalProperties; + + @Before + public void setUp() { + distroFile = testDirectory + File.separator + "openmrs-distro.properties"; + originalProperties = DistroHelper.getDistroPropertiesFromFile(new File(distroFile)); + } + + @Test + public void shouldRemoveExistingDependency() throws Exception { + DistroProperties distroProperties = DistroHelper.getDistroPropertiesFromFile(new File(distroFile)); + assertNotNull(distroProperties); + + assertTrue(distroProperties.getAllKeys().contains("omod.uicommons")); + + addTaskParam("distro", distroFile); + addTaskParam("property", "omod.uicommons"); + + executeTask("remove"); + assertSuccess(); + + distroProperties = DistroHelper.getDistroPropertiesFromFile(new File(distroFile)); + assertFalse(distroProperties.getAllKeys().contains("omod.uicommons")); + } + + @After + public void reset() throws MojoExecutionException { + originalProperties.saveTo(new File(distroFile).getParentFile()); + } + +} diff --git a/maven-plugin/src/main/java/org/openmrs/maven/plugins/RemoveDependency.java b/maven-plugin/src/main/java/org/openmrs/maven/plugins/RemoveDependency.java new file mode 100644 index 00000000..41c35b8a --- /dev/null +++ b/maven-plugin/src/main/java/org/openmrs/maven/plugins/RemoveDependency.java @@ -0,0 +1,62 @@ +package org.openmrs.maven.plugins; + +import org.apache.commons.lang.StringUtils; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.openmrs.maven.plugins.model.DistroProperties; + +import java.io.File; +import java.util.ArrayList; + +@Mojo(name = "remove", requiresProject = false) +public class RemoveDependency extends AbstractTask { + + /** + * Path to the openmrs-distro.properties file to modify + */ + @Parameter(property = "distro") + private String distro; + + /** + * Name of the property you want to remove + */ + @Parameter(property = "property") + private String property; + + @Override + public void executeTask() throws MojoExecutionException, MojoFailureException { + + if (distro == null) { + File userDir = new File(System.getProperty("user.dir")); + File distroFile = new File(userDir, DistroProperties.DISTRO_FILE_NAME); + if (distroFile.exists()) { + distro = distroFile.getAbsolutePath(); + } else { + throw new MojoFailureException("Please specify a distro file"); + } + } + + DistroProperties properties = null; + + if (StringUtils.isNotBlank(distro)) { + properties = distroHelper.resolveDistroPropertiesForStringSpecifier(distro, versionsHelper); + + } + + if (properties == null) { + throw new MojoFailureException("Invalid distro file"); + } + + if (StringUtils.isBlank(property)) { + property = wizard.promptForMissingValueWithOptions("Enter the property you want to remove", + null, null, new ArrayList<>(properties.getPropertyNames())); + } + + if (StringUtils.isNotBlank(property)) { + properties.removeProperty(property); + properties.saveTo(new File(distro).getParentFile()); + } + } +} diff --git a/sdk-commons/src/main/java/org/openmrs/maven/plugins/model/DistroProperties.java b/sdk-commons/src/main/java/org/openmrs/maven/plugins/model/DistroProperties.java index 09f1e1e5..d6106edc 100644 --- a/sdk-commons/src/main/java/org/openmrs/maven/plugins/model/DistroProperties.java +++ b/sdk-commons/src/main/java/org/openmrs/maven/plugins/model/DistroProperties.java @@ -271,6 +271,17 @@ public List getExclusions() { return Arrays.asList(exclusions.split(",")); } + public Set getPropertyNames() { + return properties.stringPropertyNames(); + } + + public void removeProperty(String property) throws MojoExecutionException { + if (!properties.containsKey(property)) { + throw new MojoExecutionException("The property " + property + " was not found in the distro"); + } + properties.remove(property); + } + private String getPlaceholderKey(String string){ int startIndex = string.indexOf("${")+2; int endIndex = string.indexOf("}", startIndex);