-
Notifications
You must be signed in to change notification settings - Fork 130
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #413 from lincolnthree/WINDUP-312
WINDUP-312: Allow rules to assert on SourceModeOption as a Condition
- Loading branch information
Showing
2 changed files
with
195 additions
and
0 deletions.
There are no files selected for viewing
47 changes: 47 additions & 0 deletions
47
rules-java/src/main/java/org/jboss/windup/rules/apps/java/condition/SourceMode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package org.jboss.windup.rules.apps.java.condition; | ||
|
||
import org.jboss.windup.config.GraphRewrite; | ||
import org.jboss.windup.config.condition.GraphCondition; | ||
import org.jboss.windup.rules.apps.java.config.SourceModeOption; | ||
import org.ocpsoft.rewrite.config.ConditionBuilder; | ||
import org.ocpsoft.rewrite.context.EvaluationContext; | ||
|
||
/** | ||
* Condition that returns <code>true</code> if {@link SourceModeOption} is set to <code>true</code>. | ||
* | ||
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> | ||
*/ | ||
public class SourceMode extends GraphCondition | ||
{ | ||
/** | ||
* Create a new {@link SourceMode} condition that returns <code>true</code> if {@link SourceModeOption} is enabled. | ||
*/ | ||
public static ConditionBuilder isEnabled() | ||
{ | ||
return new SourceMode(Boolean.TRUE); | ||
} | ||
|
||
/** | ||
* Create a new {@link SourceMode} condition that returns <code>true</code> if {@link SourceModeOption} is NOT | ||
* enabled. | ||
*/ | ||
public static ConditionBuilder isDisabled() | ||
{ | ||
return new SourceMode(Boolean.FALSE); | ||
} | ||
|
||
private Boolean value; | ||
|
||
private SourceMode(Boolean value) | ||
{ | ||
this.value = value; | ||
} | ||
|
||
@Override | ||
public boolean evaluate(GraphRewrite event, EvaluationContext context) | ||
{ | ||
Boolean result = (Boolean) event.getGraphContext().getOptionMap().get(SourceModeOption.NAME); | ||
return value.equals(result); | ||
} | ||
|
||
} |
148 changes: 148 additions & 0 deletions
148
rules-java/src/test/java/org/jboss/windup/rules/java/SourceModeTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
package org.jboss.windup.rules.java; | ||
|
||
import java.io.IOException; | ||
import java.nio.file.Path; | ||
import java.nio.file.Paths; | ||
|
||
import javax.inject.Inject; | ||
import javax.inject.Singleton; | ||
|
||
import org.apache.commons.io.FileUtils; | ||
import org.apache.commons.lang.RandomStringUtils; | ||
import org.jboss.arquillian.container.test.api.Deployment; | ||
import org.jboss.arquillian.junit.Arquillian; | ||
import org.jboss.forge.arquillian.AddonDependency; | ||
import org.jboss.forge.arquillian.Dependencies; | ||
import org.jboss.forge.arquillian.archive.ForgeArchive; | ||
import org.jboss.forge.furnace.repositories.AddonDependencyEntry; | ||
import org.jboss.shrinkwrap.api.ShrinkWrap; | ||
import org.jboss.windup.config.GraphRewrite; | ||
import org.jboss.windup.config.WindupRuleProvider; | ||
import org.jboss.windup.config.operation.GraphOperation; | ||
import org.jboss.windup.engine.predicates.RuleProviderWithDependenciesPredicate; | ||
import org.jboss.windup.exec.WindupProcessor; | ||
import org.jboss.windup.exec.configuration.WindupConfiguration; | ||
import org.jboss.windup.graph.GraphContext; | ||
import org.jboss.windup.graph.GraphContextFactory; | ||
import org.jboss.windup.rules.apps.java.condition.SourceMode; | ||
import org.jboss.windup.rules.apps.java.config.SourceModeOption; | ||
import org.junit.Assert; | ||
import org.junit.Test; | ||
import org.junit.runner.RunWith; | ||
import org.ocpsoft.rewrite.config.Configuration; | ||
import org.ocpsoft.rewrite.config.ConfigurationBuilder; | ||
import org.ocpsoft.rewrite.context.EvaluationContext; | ||
|
||
@RunWith(Arquillian.class) | ||
public class SourceModeTest | ||
{ | ||
@Deployment | ||
@Dependencies({ | ||
@AddonDependency(name = "org.jboss.windup.config:windup-config"), | ||
@AddonDependency(name = "org.jboss.windup.exec:windup-exec"), | ||
@AddonDependency(name = "org.jboss.windup.rules.apps:rules-java"), | ||
@AddonDependency(name = "org.jboss.forge.furnace.container:cdi") | ||
}) | ||
public static ForgeArchive getDeployment() | ||
{ | ||
final ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class) | ||
.addBeansXML() | ||
.addClass(SourceModeTestRuleProvider.class) | ||
.addClass(SourceModeTest.class) | ||
.addAsAddonDependencies( | ||
AddonDependencyEntry.create("org.jboss.windup.config:windup-config"), | ||
AddonDependencyEntry.create("org.jboss.windup.exec:windup-exec"), | ||
AddonDependencyEntry.create("org.jboss.windup.rules.apps:rules-java"), | ||
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi") | ||
); | ||
|
||
return archive; | ||
} | ||
|
||
@Inject | ||
SourceModeTestRuleProvider provider; | ||
|
||
@Inject | ||
private WindupProcessor processor; | ||
|
||
@Inject | ||
private GraphContextFactory factory; | ||
|
||
@Test | ||
public void testJavaClassCondition() throws IOException, InstantiationException, IllegalAccessException | ||
{ | ||
final Path inputDir = Paths.get("src/test/resources/org/jboss/windup/rules/java"); | ||
final Path outputPath = Paths.get(FileUtils.getTempDirectory().toString(), | ||
"windup_" + RandomStringUtils.randomAlphanumeric(6)); | ||
|
||
try (GraphContext context = factory.create(getDefaultPath())) | ||
{ | ||
final WindupConfiguration processorConfig = new WindupConfiguration(); | ||
processorConfig.setRuleProviderFilter(new RuleProviderWithDependenciesPredicate( | ||
SourceModeTestRuleProvider.class)); | ||
processorConfig.setGraphContext(context); | ||
processorConfig.setInputPath(inputDir); | ||
processorConfig.setOutputDirectory(outputPath); | ||
processorConfig.setOptionValue(SourceModeOption.NAME, true); | ||
|
||
processor.execute(processorConfig); | ||
|
||
Assert.assertEquals(1, provider.getFirstRuleMatchCount()); | ||
Assert.assertEquals(0, provider.getSecondRuleMatchCount()); | ||
} | ||
} | ||
|
||
private Path getDefaultPath() | ||
{ | ||
return FileUtils.getTempDirectory().toPath().resolve("Windup") | ||
.resolve("windupgraph_sourcemodetest" + RandomStringUtils.randomAlphanumeric(6)); | ||
} | ||
|
||
@Singleton | ||
public static class SourceModeTestRuleProvider extends WindupRuleProvider | ||
{ | ||
private int firstRuleMatchCount = 0; | ||
private int secondRuleMatchCount = 0; | ||
|
||
// @formatter:off | ||
@Override | ||
public Configuration getConfiguration(GraphContext context) | ||
{ | ||
return ConfigurationBuilder.begin() | ||
.addRule().when( | ||
SourceMode.isEnabled() | ||
).perform(new GraphOperation() | ||
{ | ||
@Override | ||
public void perform(GraphRewrite event, EvaluationContext context) | ||
{ | ||
firstRuleMatchCount++; | ||
} | ||
} | ||
) | ||
|
||
.addRule().when( | ||
SourceMode.isDisabled() | ||
).perform(new GraphOperation() | ||
{ | ||
@Override | ||
public void perform(GraphRewrite event, EvaluationContext context) | ||
{ | ||
secondRuleMatchCount++; | ||
} | ||
} | ||
); | ||
} | ||
// @formatter:on | ||
|
||
public int getFirstRuleMatchCount() | ||
{ | ||
return firstRuleMatchCount; | ||
} | ||
|
||
public int getSecondRuleMatchCount() | ||
{ | ||
return secondRuleMatchCount; | ||
} | ||
} | ||
} |