@Override
public Result execute(UIExecutionContext context) throws Exception
{
UIContext uiContext = context.getUIContext();
Project project = getSelectedProject(uiContext);
JavaClass javaClass = javaSourceFactory.create(JavaClass.class).setName(named.getValue())
.setPackage(packageName.getValue());
// Add imports
javaClass.addImport("org.jboss.arquillian.container.test.api.Deployment");
javaClass.addImport("org.jboss.arquillian.junit.Arquillian");
javaClass.addImport("org.junit.runner.RunWith");
javaClass.addImport("org.jboss.forge.arquillian.AddonDependency");
javaClass.addImport("org.jboss.forge.arquillian.Dependencies");
javaClass.addImport("org.jboss.forge.arquillian.archive.ForgeArchive");
javaClass.addImport("org.jboss.forge.furnace.repositories.AddonDependencyEntry");
javaClass.addImport("org.jboss.shrinkwrap.api.ShrinkWrap");
// Add Arquillian annotation
javaClass.addAnnotation("RunWith").setLiteralValue("Arquillian.class");
// Create getDeployment method
StringBuilder body = new StringBuilder(
"ForgeArchive archive = ShrinkWrap.create(ForgeArchive.class).addBeansXML()");
StringBuilder dependenciesAnnotationBody = new StringBuilder();
if (addonDependencies.hasValue())
{
body.append(".addAsAddonDependencies(");
Iterator<AddonId> it = addonDependencies.getValue().iterator();
while (it.hasNext())
{
AddonId addonId = it.next();
Dependency dependency = DependencyBuilder.create(addonId.getName()).setVersion(
addonId.getVersion().toString());
String name = addonId.getName();
String version = null;
if (dependencyInstaller.isInstalled(project, dependency))
{
version = addonId.getVersion().toString();
}
body.append("AddonDependencyEntry.create(\"").append(name);
dependenciesAnnotationBody.append("@AddonDependency(name = \"").append(name);
if (version != null)
{
body.append("\", \"");
body.append(version);
dependenciesAnnotationBody.append("\", version=\"");
dependenciesAnnotationBody.append(version);
}
body.append("\")");
dependenciesAnnotationBody.append("\")");
if (it.hasNext())
{
body.append(",");
dependenciesAnnotationBody.append(",");
}
}
body.append(")");
}
body.append(";");
body.append("return archive;");
Method<JavaClass> getDeployment = javaClass.addMethod().setName("getDeployment").setPublic().setStatic(true)
.setBody(body.toString());
getDeployment.addAnnotation("Deployment");
String annotationBody = dependenciesAnnotationBody.toString();
if (annotationBody.length() > 0)
{
getDeployment.addAnnotation("Dependencies").setLiteralValue("{" + annotationBody + "}");
}
JavaSourceFacet facet = project.getFacet(JavaSourceFacet.class);
JavaResource javaResource = facet.saveTestJavaSource(javaClass);
uiContext.setSelection(javaResource);
return Results.success("Test class " + javaClass.getQualifiedName() + " created");
}