Skip to content

Commit

Permalink
Merge pull request #27 from pmuir/various-fixes
Browse files Browse the repository at this point in the history
Various fixes
  • Loading branch information
gastaldi committed Apr 16, 2013
2 parents f36ec7a + 4b6a492 commit 2fb3d82
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 34 deletions.
60 changes: 34 additions & 26 deletions src/main/java/org/jboss/forge/arquillian/ArquillianPlugin.java
Expand Up @@ -152,44 +152,52 @@ public void installContainer(
FileResource<?> resource = (FileResource<?>) resources.getTestResourceFolder().getChild("arquillian.xml");
if (!resource.exists()) {
Node arquillianConfig = createNewArquillianConfig();
// Add an empty container config
arquillianConfig.getOrCreate("container@qualifier=" + containerId);
resource.setContents(XMLParser.toXMLString(arquillianConfig));
}
}

@Command(value = "configure-container")
public void configureContainer(
@Option(name = "profile", required = true, completer = ProfileCommandCompleter.class) String profileId) {

Profile profile = getProfile(profileId);
Container container;
try {
container = getContainer(profile);
} catch (IOException e) {
throw new RuntimeException(e);
}

Configuration configuration = shell.promptChoiceTyped("Which property do you want to set?",
container.getConfigurations());

ResourceFacet resources = project.getFacet(ResourceFacet.class);
FileResource<?> resource = (FileResource<?>) resources.getTestResourceFolder().getChild("arquillian.xml");

Node xml = null;
if (!resource.exists()) {
xml = createNewArquillianConfig();
} else {
xml = XMLParser.parse(resource.getResourceInputStream());

// loop, user presses ctrl-c to exit
while (true) {
Profile profile = getProfile(profileId);
Container container;
try {
container = getContainer(profile);
} catch (IOException e) {
throw new RuntimeException(e);
}

Configuration configuration = shell.promptChoiceTyped("Which property do you want to set? Or, enter 0 to return to the shell.",
container.getConfigurations(), null);
if (configuration == null) {
break;
}

ResourceFacet resources = project.getFacet(ResourceFacet.class);
FileResource<?> resource = (FileResource<?>) resources.getTestResourceFolder().getChild("arquillian.xml");

Node xml = null;
if (!resource.exists()) {
xml = createNewArquillianConfig();
} else {
xml = XMLParser.parse(resource.getResourceInputStream());
}

String value = shell.prompt("What value do you want to set?");
addPropertyToArquillianConfig(xml, container.getId(), configuration.getName(), value);

resource.setContents(XMLParser.toXMLString(xml));
}

String value = shell.prompt("What value do you want to set?");
addPropertyToArquillianConfig(xml, container.getId(), configuration.getName(), value);

resource.setContents(XMLParser.toXMLString(xml));
}

private Container getContainer(Profile profile) throws IOException {
for (Container container : containerDirectoryParser.getContainers()) {
if (container.getId().equals(profile.getId())) {
if (container.getProfileId().equals(profile.getId())) {
return container;
}
}
Expand Down
Expand Up @@ -42,7 +42,7 @@ public void installContainer(Container container) {
dependencies.add(resolveVersion(dependencyBuilder));
}
}
profileBuilder.addProfile(container.getId(), dependencies);
profileBuilder.addProfile(container, dependencies);

}

Expand Down
60 changes: 53 additions & 7 deletions src/main/java/org/jboss/forge/arquillian/ProfileBuilder.java
@@ -1,43 +1,74 @@
package org.jboss.forge.arquillian;

import java.io.IOException;
import java.io.StringReader;
import java.util.List;

import javax.inject.Inject;

import org.apache.maven.model.BuildBase;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.Profile;
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.jboss.forge.arquillian.container.Container;
import org.jboss.forge.maven.MavenCoreFacet;
import org.jboss.forge.maven.dependencies.MavenDependencyAdapter;
import org.jboss.forge.project.Project;
import org.jboss.forge.project.dependencies.Dependency;
import org.jboss.forge.project.dependencies.DependencyBuilder;

import java.util.List;

public class ProfileBuilder
{

@Inject
Project project;

public void addProfile(String profileId, List<Dependency> dependencies) {
public void addProfile(Container container, List<Dependency> dependencies) {
Dependency[] deps = new Dependency[dependencies.size()];
addProfile(profileId, dependencies.toArray(deps));
addProfile(container, dependencies.toArray(deps));
}

public void addProfile(String profileId, Dependency... dependencies)
public void addProfile(Container container, Dependency... dependencies)
{
MavenCoreFacet facet = project.getFacet(MavenCoreFacet.class);


Profile profile = new Profile();
profile.setId(profileId);
profile.setId(container.getProfileId());

/*
* Create the surefire plugin configuration, so we call the relevant Arqullina container config
*
* <plugin>
* <artifactId>maven-surefire-plugin</artifactId>
* <configuration>
* <systemPropertyVariables>
* <arquillian.launch>${profileId}</arquillian.launch>
* </systemPropertyVariables>
* </configuration>
* </plugin>
*
*/

Plugin surefirePlugin = new Plugin();
surefirePlugin.setArtifactId("maven-surefire-plugin");
surefirePlugin.setConfiguration(buildConfiguration(container.getId()));
surefirePlugin.setVersion("2.14.1");

BuildBase buildBase = new BuildBase();
buildBase.addPlugin(surefirePlugin);

profile.setBuild(buildBase);

for (Dependency dependency : dependencies)
{
profile.addDependency(new MavenDependencyAdapter(DependencyBuilder.create(dependency)));
}

Model pom = facet.getPOM();
Profile existingProfile = findProfileById(profileId, pom);
Profile existingProfile = findProfileById(container.getProfileId(), pom);
if(existingProfile != null)
{
pom.removeProfile(existingProfile);
Expand All @@ -46,6 +77,21 @@ public void addProfile(String profileId, Dependency... dependencies)

facet.setPOM(pom);
}

private Object buildConfiguration(String profileId) {
try {
return Xpp3DomBuilder.build(new StringReader(
"<configuration>\n" +
" <systemPropertyVariables>\n" +
" <arquillian.launch>" + profileId + "</arquillian.launch>\n" +
" </systemPropertyVariables>\n" +
"</configuration>"));
} catch (XmlPullParserException e) {
throw new IllegalStateException(e);
} catch (IOException e) {
throw new java.lang.IllegalStateException(e);
}
}

private Profile findProfileById(String profileId, Model pom)
{
Expand Down
Expand Up @@ -73,6 +73,10 @@ public void setConfigurations(List<Configuration> configurations) {
public String getId() {
return name.replace("Arquillian Container ", "").replaceAll(" ", "_").toUpperCase();
}

public String getProfileId() {
return "arq-" + name.replace("Arquillian Container ", "").replaceAll(" ", "_").toLowerCase();
}

@Override
public String toString() {
Expand Down
6 changes: 6 additions & 0 deletions src/main/resources/containers.json
Expand Up @@ -1229,6 +1229,12 @@
"description":"Openshift login",
"name":"login",
"default":""
},
{
"type":"java.lang.String",
"description":"Deployment timeout (in seconds)",
"name":"deploymentTimeoutInSeconds",
"default":"90"
}
]
}
Expand Down

0 comments on commit 2fb3d82

Please sign in to comment.