package org.picketlink.forge.ui;
import javax.inject.Inject;
import org.jboss.forge.addon.configuration.Configuration;
import org.jboss.forge.addon.configuration.facets.ConfigurationFacet;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.projects.facets.MetadataFacet;
import org.jboss.forge.addon.projects.ui.AbstractProjectCommand;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.metadata.UICommandMetadata;
import org.jboss.forge.addon.ui.metadata.WithAttributes;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.result.Results;
import org.jboss.forge.addon.ui.util.Categories;
import org.jboss.forge.addon.ui.util.Metadata;
import org.picketlink.forge.ModelOperations;
/**
* Provides features for generating a custom identity model
*
* @author Shane Bryzak
*
*/
public class PicketLinkModelCommand extends AbstractProjectCommand {
public static final String PICKETLINK_MODEL_PACKAGE = "picketlinkModelPackage";
public static final String DEFAULT_MODEL_PACKAGE = "picketlink.model";
@Inject ProjectFactory projectFactory;
@Inject @WithAttributes(label = "Model package", required = true,
description = "The Identity Model will be created in this package",
shortName = 'p')
private UIInput<String> modelPackage;
@Inject @WithAttributes(label = "Support for Roles", required = false,
description = "Select this if the Identity Model should support roles", shortName = 'r')
private UIInput<Boolean> supportRoles;
@Inject @WithAttributes(label = "Support for Groups", required = false,
description = "Select this if the Identity Model should support groups", shortName = 'g')
private UIInput<Boolean> supportGroups;
@Inject @WithAttributes(label = "Support for Realms", required = false,
description = "Select this if the Identity Model should support realm partitions", shortName = 'p')
private UIInput<Boolean> supportRealms;
@Inject ModelOperations modelOps;
@Override
public void initializeUI(UIBuilder builder) throws Exception {
Project project = getSelectedProject(builder.getUIContext());
ConfigurationFacet facet = project.getFacet(ConfigurationFacet.class);
Configuration config = facet.getConfiguration();
if (config.containsKey(PICKETLINK_MODEL_PACKAGE)) {
modelPackage.setValue(config.getString(PICKETLINK_MODEL_PACKAGE));
} else {
MetadataFacet metadataFacet = project.getFacet(MetadataFacet.class);
modelPackage.setValue(metadataFacet.getTopLevelPackage() + "." + DEFAULT_MODEL_PACKAGE);
}
builder.add(modelPackage);
supportRoles.setValue(true);
builder.add(supportRoles);
supportGroups.setValue(true);
builder.add(supportGroups);
builder.add(supportRealms);
}
@Override
public Result execute(UIExecutionContext context) throws Exception {
Project project = getSelectedProject(context);
modelOps.createIdentityModel(project, modelPackage.getValue(), supportRoles.getValue(), supportGroups.getValue(),
supportRealms.getValue());
ConfigurationFacet facet = project.getFacet(ConfigurationFacet.class);
Configuration config = facet.getConfiguration();
config.setProperty(PICKETLINK_MODEL_PACKAGE, modelPackage.getValue());
return Results.success("Successful");
}
@Override
public UICommandMetadata getMetadata(UIContext context)
{
return Metadata.forCommand(getClass())
.name("PicketLink: Create Model")
.description("Generates a new Identity Model for your project.")
.category(Categories.create("PicketLink"));
}
@Override
protected boolean isProjectRequired() {
return true;
}
@Override
protected ProjectFactory getProjectFactory() {
return projectFactory;
}
}