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.javaee.jpa.JPAFacet;
import org.jboss.forge.addon.javaee.jpa.ui.setup.JPASetupWizard;
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.command.PrerequisiteCommandsProvider;
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.NavigationResult;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.result.Results;
import org.jboss.forge.addon.ui.result.navigation.NavigationResultBuilder;
import org.jboss.forge.addon.ui.util.Categories;
import org.jboss.forge.addon.ui.util.Metadata;
import org.picketlink.forge.SchemaOperations;
/**
* Provides features for generating a custom identity model
*
* @author Shane Bryzak
*/
public class PicketLinkSchemaCommand extends AbstractProjectCommand implements PrerequisiteCommandsProvider {
public static final String PICKETLINK_SCHEMA_PACKAGE = "picketlinkSchemaPackage";
public static final String DEFAULT_SCHEMA_PACKAGE = "picketlink.schema";
@Inject ProjectFactory projectFactory;
@Inject @WithAttributes(label = "Model package", required = true,
description = "The Identity Model will be created in this package",
shortName = 'm')
private UIInput<String> modelPackage;
@Inject @WithAttributes(label = "Schema package", required = true,
description = "The Identity Schema will be created in this package",
shortName = 's')
private UIInput<String> schemaPackage;
@Inject SchemaOperations schemaOps;
@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(PicketLinkModelCommand.PICKETLINK_MODEL_PACKAGE)) {
modelPackage.setValue(config.getString(PicketLinkModelCommand.PICKETLINK_MODEL_PACKAGE));
} else {
MetadataFacet metadataFacet = project.getFacet(MetadataFacet.class);
modelPackage.setValue(metadataFacet.getTopLevelPackage() + "." + PicketLinkModelCommand.DEFAULT_MODEL_PACKAGE);
}
builder.add(modelPackage);
if (config.containsKey(PICKETLINK_SCHEMA_PACKAGE)) {
schemaPackage.setValue(config.getString(PICKETLINK_SCHEMA_PACKAGE));
} else {
MetadataFacet metadataFacet = project.getFacet(MetadataFacet.class);
schemaPackage.setValue(metadataFacet.getTopLevelPackage() + "." + DEFAULT_SCHEMA_PACKAGE);
}
builder.add(schemaPackage);
}
@Override
public Result execute(UIExecutionContext context) throws Exception {
Project project = getSelectedProject(context);
ConfigurationFacet facet = project.getFacet(ConfigurationFacet.class);
Configuration config = facet.getConfiguration();
config.setProperty(PICKETLINK_SCHEMA_PACKAGE, schemaPackage.getValue());
schemaOps.createIdentitySchema(project, schemaPackage.getValue());
return Results.success("Successful");
}
@Override
public UICommandMetadata getMetadata(UIContext context)
{
return Metadata.forCommand(getClass())
.name("PicketLink: Create Schema")
.description("Generates a JPA schema for your Identity Model.")
.category(Categories.create("PicketLink"));
}
@Override
protected boolean isProjectRequired() {
return true;
}
@Override
protected ProjectFactory getProjectFactory() {
return projectFactory;
}
@Override
public NavigationResult getPrerequisiteCommands(UIContext context) {
NavigationResultBuilder builder = NavigationResultBuilder.create();
Project project = getSelectedProject(context);
if (project != null)
{
if (!project.hasFacet(JPAFacet.class))
{
builder.add(JPASetupWizard.class);
}
}
return builder.build();
}
}