Skip to content

Commit

Permalink
Merge pull request #413 from lincolnthree/WINDUP-312
Browse files Browse the repository at this point in the history
WINDUP-312: Allow rules to assert on SourceModeOption as a Condition
  • Loading branch information
jsight committed Jan 15, 2015
2 parents 3264d23 + 740f57b commit c240d44
Show file tree
Hide file tree
Showing 2 changed files with 195 additions and 0 deletions.
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);
}

}
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;
}
}
}

0 comments on commit c240d44

Please sign in to comment.