package org.jboss.windup.rules.apps.java.config;
import java.util.Arrays;
import java.util.List;
import org.jboss.windup.config.AbstractConfigurationOption;
import org.jboss.windup.config.InputType;
import org.jboss.windup.config.ValidationResult;
/**
* Indicates the Java packages for Windup to scan.
*
* @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
*/
public class ScanPackagesOption extends AbstractConfigurationOption
{
public static final String NAME = "packages";
@Override
public String getDescription()
{
return "A list of java package name prefixes to scan (eg, com.myapp). Multiple items can be separated by a space (eg, --" + NAME
+ " PACKAGE_1 PACKAGE_2).";
}
@Override
public String getName()
{
return NAME;
}
@Override
public String getLabel()
{
return "Java packages to scan";
}
@Override
public Class<?> getType()
{
return String.class;
}
@Override
public InputType getUIType()
{
return InputType.MANY;
}
@Override
public boolean isRequired()
{
return false;
}
@SuppressWarnings("unchecked")
public ValidationResult validate(Object value)
{
if (packagesNotSpecified((List<String>) value))
{
String message = "No packages were set in --" + ScanPackagesOption.NAME
+ ". This will cause all .jar files to be decompiled and can possibly take a long time. "
+ "Check the Windup User Guide for performance tips.";
return new ValidationResult(ValidationResult.Level.WARNING, message);
}
else if (packagesTooGeneral((List<String>) value))
{
String message = "The packages specified to scan are very broad. This may cause many .jar files to be "
+ "decompiled and can possibly take a long time. "
+ "Check the Windup User Guide for performance tips.";
return new ValidationResult(ValidationResult.Level.WARNING, message);
}
return ValidationResult.SUCCESS;
}
private boolean packagesTooGeneral(List<String> includeJavaPackages)
{
List<String> generalPackages = Arrays.asList("com", "org", "net");
for (String packge : includeJavaPackages)
{
if (generalPackages.contains(packge))
continue;
return false;
}
return true;
}
/**
* @return <code>true</code> if the given packages are too general, or not set at all.
*/
private boolean packagesNotSpecified(List<String> includeJavaPackages)
{
return includeJavaPackages == null || includeJavaPackages.isEmpty();
}
}