Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
aslakknutsen committed May 14, 2014
1 parent 0bd019d commit 115e948
Show file tree
Hide file tree
Showing 12 changed files with 161 additions and 104 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<name>Arquillian Forge Addon</name>

<properties>
<version.forge_core>2.5.0.Final</version.forge_core>
<version.forge_core>2.5.1-SNAPSHOT</version.forge_core>
<version.furnace>${version.forge_core}</version.furnace>
<version.velocity>1.7</version.velocity>
<version.jackson>1.9.1</version.jackson>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import org.jboss.forge.addon.projects.ProjectFacet;
import org.jboss.forge.arquillian.util.DependencyUtil;

abstract class AbstractVersionedFacet extends AbstractFacet<Project> implements ProjectFacet {
public abstract class AbstractVersionedFacet extends AbstractFacet<Project> implements ProjectFacet {

@Inject
private DependencyResolver resolver;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
@FacetConstraint(DependencyFacet.class),
@FacetConstraint(MetadataFacet.class),
@FacetConstraint(ProjectFacet.class),
@FacetConstraint(ResourcesFacet.class)
})
public class ArquillianFacet extends AbstractVersionedFacet {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
package org.jboss.forge.arquillian.command;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;

import javax.enterprise.event.Event;
import javax.enterprise.inject.Any;
import javax.inject.Inject;

import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.dependencies.DependencyQuery;
import org.jboss.forge.addon.dependencies.DependencyResolver;
import org.jboss.forge.addon.dependencies.builder.DependencyBuilder;
import org.jboss.forge.addon.dependencies.builder.DependencyQueryBuilder;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.projects.ui.AbstractProjectCommand;
Expand All @@ -16,7 +22,11 @@
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
import org.jboss.forge.addon.ui.hints.InputType;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.InputComponentFactory;
import org.jboss.forge.addon.ui.input.UISelectOne;
import org.jboss.forge.addon.ui.input.ValueChangeListener;
import org.jboss.forge.addon.ui.input.events.ValueChangeEvent;
import org.jboss.forge.addon.ui.metadata.UICommandMetadata;
import org.jboss.forge.addon.ui.metadata.WithAttributes;
import org.jboss.forge.addon.ui.result.Result;
Expand All @@ -30,18 +40,22 @@
import org.jboss.forge.arquillian.container.ContainerResolver;
import org.jboss.forge.arquillian.container.model.Container;
import org.jboss.forge.arquillian.container.model.ContainerType;
import org.jboss.forge.arquillian.container.model.Dependency;
import org.jboss.forge.arquillian.util.DependencyUtil;

public class AddContainerCommand extends AbstractProjectCommand implements UICommand {

@Inject
private InputComponentFactory inputFactory;

@Inject
private ProjectFactory projectFactory;

@Inject
private ContainerInstaller containerInstaller;

@Inject
private ContainerResolver containerCompleter;
private ContainerResolver containerResolver;

@Inject
private DependencyResolver resolver;
Expand All @@ -50,12 +64,14 @@ public class AddContainerCommand extends AbstractProjectCommand implements UICom
@Any
private Event<ContainerInstallEvent> installEvent;

private final Map<Dependency, InputComponent<?, String>> dependencyVersions = new HashMap<>();

@Inject
@WithAttributes(shortName = 't', label = "Container Adapter", type = InputType.DROPDOWN, required = false)
@WithAttributes(shortName = 't', label = "Container Adapter Type", type = InputType.DROPDOWN, required = false)
private UISelectOne<ContainerType> containerAdapterType;

@Inject
@WithAttributes(shortName = 'c', label = "Container Adapter", type = InputType.DROPDOWN)
@WithAttributes(shortName = 'c', label = "Container Adapter", type = InputType.DROPDOWN, required = true)
private UISelectOne<Container> containerAdapter;

@Inject
Expand All @@ -71,19 +87,64 @@ public UICommandMetadata getMetadata(UIContext context) {
}

@Override
public void initializeUI(UIBuilder builder) throws Exception {
public void initializeUI(final UIBuilder builder) throws Exception {
builder.add(containerAdapterType)
.add(containerAdapter)
.add(containerAdapterVersion);

containerAdapterType.setValueChoices(Arrays.asList(ContainerType.values()));
containerAdapterType.setEnabled(true);
containerAdapter.setEnabled(true);
containerAdapter.setValueChoices(new Callable<Iterable<Container>>() {
@Override
public Iterable<Container> call() throws Exception {
return containerCompleter.getContainers(containerAdapterType.getValue());
return containerResolver.getContainers(containerAdapterType.getValue());
}
});
containerAdapter.setItemLabelConverter(new Converter<Container, String>() {
@Override
public String convert(Container source) {
return source.getId();
}
});
containerAdapter.addValueChangeListener(new ValueChangeListener() {

@Override
public void valueChanged(ValueChangeEvent event) {
Container selectedContainer = (Container)event.getNewValue();
if(selectedContainer == null || selectedContainer.getDependencies() == null) {
return;
}
for(final Dependency dependency : selectedContainer.getDependencies()) {
UISelectOne<String> dependencyVersion = inputFactory.createSelectOne(dependency.getArtifactId() + "-version", String.class);
builder.add(dependencyVersion);
dependencyVersions.put(dependency, dependencyVersion);

final DependencyQuery dependencyCoordinate = DependencyQueryBuilder.create(
DependencyBuilder.create()
.setGroupId(dependency.getGroupId())
.setArtifactId(dependency.getArtifactId())
.getCoordinate());

dependencyVersion.setEnabled(true);
dependencyVersion.setValueChoices(new Callable<Iterable<String>>() {
@Override
public Iterable<String> call() throws Exception {
return DependencyUtil.toVersionString(
resolver.resolveVersions(dependencyCoordinate));
}
});
dependencyVersion.setDefaultValue(new Callable<String>() {
@Override
public String call() throws Exception {
return DependencyUtil.getLatestNonSnapshotVersionCoordinate(
resolver.resolveVersions(dependencyCoordinate));
}
});

}
}
});

containerAdapterVersion.setEnabled(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
Expand All @@ -93,19 +154,25 @@ public Boolean call() throws Exception {
containerAdapterVersion.setValueChoices(new Callable<Iterable<String>>() {
@Override
public Iterable<String> call() throws Exception {
return DependencyUtil.toVersionString(
resolver.resolveVersions(
DependencyQueryBuilder.create(
containerAdapter.getValue().asDependency().getCoordinate())));
if(containerAdapterVersion.isEnabled()) {
return DependencyUtil.toVersionString(
resolver.resolveVersions(
DependencyQueryBuilder.create(
containerAdapter.getValue().asDependency().getCoordinate())));
}
return Collections.emptyList();
}
});
containerAdapterVersion.setDefaultValue(new Callable<String>() {
@Override
public String call() throws Exception {
return DependencyUtil.getLatestNonSnapshotVersionCoordinate(
resolver.resolveVersions(
DependencyQueryBuilder.create(
containerAdapter.getValue().asDependency().getCoordinate())));
if(containerAdapter.hasValue()) {
return DependencyUtil.getLatestNonSnapshotVersionCoordinate(
resolver.resolveVersions(
DependencyQueryBuilder.create(
containerAdapter.getValue().asDependency().getCoordinate())));
}
return null;
}
});
}
Expand All @@ -115,7 +182,8 @@ public Result execute(UIExecutionContext context) throws Exception {
containerInstaller.installContainer(
getSelectedProject(context),
containerAdapter.getValue(),
containerAdapterVersion.getValue());
containerAdapterVersion.getValue(),
getVersionedDependenciesMap());

ArquillianFacet arquillian = getSelectedProject(context).getFacet(ArquillianFacet.class);
ArquillianConfig config = arquillian.getConfig();
Expand All @@ -124,7 +192,7 @@ public Result execute(UIExecutionContext context) throws Exception {

installEvent.fire(new ContainerInstallEvent(containerAdapter.getValue()));

return Results.success("Installed");
return Results.success("Installed " + containerAdapter.getValue().getName());
}

@Override
Expand All @@ -146,54 +214,14 @@ protected ProjectFactory getProjectFactory() {
return projectFactory;
}

/*
@Command(value = "configure-container")
public void configureContainer(@Option(name = "profile", required = true, completer = ProfileCommandCompleter.class) String profileId)
{
// 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);
}
// TODO: show current values in options list
Configuration configuration = shell.promptChoiceTyped(
"Which property do you want to set? (default values shown)\n(Press Enter to return to shell)",
container.getConfigurations(), null);
if (configuration == null)
{
break;
}
JavaSourceFacet resources = project.getFacet(JavaSourceFacet.class);
FileResource<?> resource = (FileResource<?>) resources.getTestSourceDirectory().getChild("arquillian.xml");
Node xml = null;
if (!resource.exists())
{
xml = createNewArquillianConfig();
} else
{
xml = XMLParser.parse(resource.getResourceInputStream());
}
// TODO show current value
String value = shell.prompt("What value do you want to assign to the " + configuration.getName() + " property?");
addPropertyToArquillianConfig(xml, container.getId(), configuration.getName(), value);
resource.setContents(XMLParser.toXMLString(xml));
private Map<Dependency, String> getVersionedDependenciesMap() {
if(dependencyVersions.isEmpty()) {
return null;
}
Map<Dependency, String> resolved = new HashMap<>();
for(Map.Entry<Dependency, InputComponent<?, String>> dep : dependencyVersions.entrySet()) {
resolved.put(dep.getKey(), (String)dep.getValue().getValue());
}
return resolved;
}
*/
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.jboss.forge.arquillian.command;

import java.util.Collections;
import java.util.concurrent.Callable;

import javax.enterprise.event.Event;
Expand Down Expand Up @@ -88,13 +89,19 @@ public Boolean call() throws Exception {
testFrameworkVersion.setValueChoices(new Callable<Iterable<String>>() {
@Override
public Iterable<String> call() throws Exception {
return testFramework.getValue().getAvailableVersions();
if(testFrameworkVersion.isEnabled()) {
return testFramework.getValue().getAvailableVersions();
}
return Collections.emptyList();
}
});
testFrameworkVersion.setDefaultValue(new Callable<String>() {
@Override
public String call() throws Exception {
return testFrameworkVersion.isEnabled() ? testFramework.getValue().getDefaultVersion():null;
if(testFrameworkVersion.isEnabled()) {
return testFrameworkVersion.isEnabled() ? testFramework.getValue().getDefaultVersion():null;
}
return null;
}
});
}
Expand All @@ -107,9 +114,9 @@ public Result execute(UIExecutionContext context) throws Exception {
facetFactory.install(getSelectedProject(context), selectedTestFramework);
installEvent.fire(new TestFrameworkInstallEvent(selectedTestFramework));

return Results.success(selectedTestFramework + " installed");
return Results.success("Installed " + selectedTestFramework.getFrameworkName());
} catch(Exception e) {
return Results.fail("Could not install Test Framework " + selectedTestFramework, e);
return Results.fail("Could not install Test Framework " + selectedTestFramework.getFrameworkName(), e);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.jboss.forge.arquillian.command;

import java.util.Collections;
import java.util.concurrent.Callable;

import javax.inject.Inject;
Expand Down Expand Up @@ -38,7 +39,7 @@ public class ContainerConfigurationCommand extends AbstractProjectCommand implem
private UISelectOne<Profile> container;

@Inject
@WithAttributes(shortName = 'o', label = "Container Configuration Option", type = InputType.DROPDOWN)
@WithAttributes(shortName = 'o', label = "Container Configuration Option", type = InputType.DROPDOWN, required = true)
private UISelectOne<Configuration> containerOption;

@Inject
Expand Down Expand Up @@ -86,7 +87,13 @@ public String convert(Configuration source) {
containerOption.setValueChoices(new Callable<Iterable<Configuration>>() {
@Override
public Iterable<Configuration> call() throws Exception {
return profileManager.getContainer(container.getValue()).getConfigurations();
if(containerOption.isEnabled()) {
Iterable<Configuration> config = profileManager.getContainer(container.getValue()).getConfigurations();
if(config != null) {
return config;
}
}
return Collections.emptyList();
}
});

Expand All @@ -99,12 +106,21 @@ public Boolean call() throws Exception {
containerValue.setDefaultValue(new Callable<String>() {
@Override
public String call() throws Exception {
if(containerOption.hasValue()) {
containerOption.getValue().getDefault();
if(containerValue.isEnabled()) {
return containerOption.getValue().getDefault();
}
return null;
}
});
containerValue.setRequired(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
if(containerValue.isEnabled()) {
return containerOption.getValue().getDefault() != null;
}
return true;
}
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public void initializeUI(final UIBuilder builder) throws Exception {

@Override
public Result execute(UIExecutionContext context) throws Exception {
return Results.success("Arquillian setup");
return Results.success("Arquillian setup complete");
}

@Override
Expand Down
Loading

0 comments on commit 115e948

Please sign in to comment.