From c68e2576b03c797ee2cd5cb78b095d72738837b1 Mon Sep 17 00:00:00 2001 From: Wikum Weerakutti Date: Thu, 29 Aug 2024 14:10:39 +0530 Subject: [PATCH] O3-3439: Add exclusions to distro.properties --- .../plugins/AddExclusionIntegrationTest.java | 49 +++++++++++ .../openmrs/maven/plugins/AddExclusion.java | 82 +++++++++++++++++++ .../maven/plugins/model/DistroProperties.java | 10 +++ .../maven/plugins/utility/DefaultWizard.java | 5 ++ .../openmrs/maven/plugins/utility/Wizard.java | 2 + 5 files changed, 148 insertions(+) create mode 100644 integration-tests/src/test/java/org/openmrs/maven/plugins/AddExclusionIntegrationTest.java create mode 100644 maven-plugin/src/main/java/org/openmrs/maven/plugins/AddExclusion.java diff --git a/integration-tests/src/test/java/org/openmrs/maven/plugins/AddExclusionIntegrationTest.java b/integration-tests/src/test/java/org/openmrs/maven/plugins/AddExclusionIntegrationTest.java new file mode 100644 index 000000000..43530d2f7 --- /dev/null +++ b/integration-tests/src/test/java/org/openmrs/maven/plugins/AddExclusionIntegrationTest.java @@ -0,0 +1,49 @@ +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 AddExclusionIntegrationTest 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 shouldAddExclusion() throws Exception { + DistroProperties distroProperties = DistroHelper.getDistroPropertiesFromFile(new File(distroFile)); + assertNotNull(distroProperties); + assertFalse(distroProperties.getExclusions().contains("omod.uicommons")); + + addTaskParam("distro", distroFile); + addTaskParam("property", "omod.uicommons"); + executeTask("exclusion"); + + assertSuccess(); + + distroProperties = DistroHelper.getDistroPropertiesFromFile(new File(distroFile)); + assertTrue(distroProperties.getExclusions().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/AddExclusion.java b/maven-plugin/src/main/java/org/openmrs/maven/plugins/AddExclusion.java new file mode 100644 index 000000000..4a2d6580b --- /dev/null +++ b/maven-plugin/src/main/java/org/openmrs/maven/plugins/AddExclusion.java @@ -0,0 +1,82 @@ +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.Artifact; +import org.openmrs.maven.plugins.model.DistroProperties; + +import java.io.File; +import java.util.List; +import java.util.stream.Collectors; + +@Mojo(name = "exclusion", requiresProject = false) +public class AddExclusion extends AbstractTask { + + /** + * Path to the openmrs-distro.properties file to modify + */ + @Parameter(property = "distro") + private String distro; + + /** + * Name of the property you want to exclude + */ + @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 originalDistroProperties = null; + + if (StringUtils.isNotBlank(distro)) { + originalDistroProperties = distroHelper.resolveDistroPropertiesForStringSpecifier(distro, versionsHelper); + + } + + if (originalDistroProperties == null) { + throw new MojoFailureException("Invalid distro file"); + } + + Artifact distroArtifact = originalDistroProperties.getParentArtifact(); + if (StringUtils.isNotBlank(distroArtifact.getArtifactId()) && StringUtils.isNotBlank(distroArtifact.getGroupId()) && StringUtils.isNotBlank(distroArtifact.getVersion())) { + DistroProperties distroProperties = distroHelper.resolveParentArtifact(distroArtifact, new File(distro).getParentFile(), originalDistroProperties, null); + if (StringUtils.isBlank(property)) { + List currentExclusions = distroProperties.getExclusions(); + List options = distroProperties.getPropertyNames().stream().filter(prop -> !currentExclusions.contains(prop)).collect(Collectors.toList()); + property = wizard.promptForMissingValueWithOptions("Enter the property you want to exclude", + null, null, options); + } else { + if (!distroProperties.getPropertyNames().contains(property)) { + wizard.showWarning("The property is not included in the parent distro"); + } + } + + } else { + wizard.showWarning("This distro properties file does not contain a valid parent distro"); + if (StringUtils.isBlank(property)) { + property = wizard.promptForValueIfMissing(null, "property to exclude"); + if (StringUtils.isBlank(property)) { + throw new MojoFailureException("Invalid property name"); + } + } + } + originalDistroProperties.addExclusion(property); + wizard.showMessage(property + " is added to exclusions"); + originalDistroProperties.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 d6106edc4..5117e9220 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 @@ -282,6 +282,16 @@ public void removeProperty(String property) throws MojoExecutionException { properties.remove(property); } + public void addExclusion(String exclusion) { + String exclusions = getParam("exclusions"); + if (exclusions == null){ + properties.setProperty("exclusions", exclusion); + return; + } + + properties.setProperty("exclusions", exclusions + "," + exclusion); + } + private String getPlaceholderKey(String string){ int startIndex = string.indexOf("${")+2; int endIndex = string.indexOf("}", startIndex); diff --git a/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DefaultWizard.java b/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DefaultWizard.java index dcc4a648c..52f70bd8b 100644 --- a/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DefaultWizard.java +++ b/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DefaultWizard.java @@ -325,6 +325,11 @@ public void showError(String textToShow) { writer.println("\n[ERROR]" + textToShow); } + @Override + public void showWarning(String message) { + writer.println("\n[WARNING]" + message); + } + /** * Prompt for a value if it not set, and default value is NOT set * diff --git a/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/Wizard.java b/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/Wizard.java index 566e5800b..0c19230c3 100644 --- a/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/Wizard.java +++ b/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/Wizard.java @@ -51,6 +51,8 @@ String promptForMissingValueWithOptions(String message, String value, String par void showError(String message); + void showWarning(String message); + String promptForValueIfMissingWithDefault(String message, String value, String parameterName, String defValue) throws MojoExecutionException;