Skip to content

Commit

Permalink
Refactoring in the Persistence Wizards
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed May 23, 2013
1 parent 225e22a commit db99c96
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 66 deletions.
Expand Up @@ -139,4 +139,10 @@ public PersistenceProvider getProvider()
{
return provider;
}

public void validate() throws Exception
{
getContainer().validate(this);
getProvider().validate(this);
}
}
Expand Up @@ -28,15 +28,15 @@
public class NewEntityCommand implements UICommand
{
@Inject
@WithAttributes(label = "Entity named", required = true, requiredMessage = "Entity named must be specified.")
@WithAttributes(label = "Entity name", required = true)
private UIInput<String> named;

@Inject
@WithAttributes(label = "Target package", required = true, requiredMessage = "Target package must be specified.")
@WithAttributes(label = "Target package", required = true)
private UIInput<String> targetPackage;

@Inject
@WithAttributes(label = "ID Column Generation Strategy", required = true, requiredMessage = "ID Column Generation Strategy must be specified.")
@WithAttributes(label = "ID Column Generation Strategy", required = true)
private UISelectOne<GenerationType> idStrategy;

@Override
Expand All @@ -56,14 +56,12 @@ public void initializeUI(UIBuilder builder) throws Exception
@Override
public void validate(UIValidationContext validator)
{
// TODO Auto-generated method stub

}

@Override
public Result execute(UIContext context) throws Exception
{
// TODO Auto-generated method stub

return null;
}

Expand Down
@@ -0,0 +1,72 @@
/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.addon.javaee.jpa.ui;

import javax.inject.Inject;

import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.javaee.facets.PersistenceFacet;
import org.jboss.forge.addon.javaee.facets.PersistenceMetaModelFacet;
import org.jboss.forge.addon.javaee.jpa.JPADataSource;
import org.jboss.forge.addon.javaee.jpa.PersistenceContainer;
import org.jboss.forge.addon.javaee.jpa.PersistenceProvider;
import org.jboss.forge.addon.projects.Project;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceDescriptor;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceUnit;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceUnitTransactionType;

public class PersistenceManager
{
public static final String DEFAULT_UNIT_NAME = "forge-default";
private static final String DEFAULT_UNIT_DESC = "Forge Persistence Unit";

private FacetFactory facetFactory;

@Inject
public PersistenceManager(FacetFactory facetFactory)
{
super();
this.facetFactory = facetFactory;
}

/**
* Setups JPA in the project
*
* @param project
* @param dataSource
* @param configureMetadata
*/
public void setup(Project project, JPADataSource dataSource, boolean configureMetadata)
{
if (project != null)
{
if (!project.hasFacet(PersistenceFacet.class))
{
facetFactory.install(PersistenceFacet.class, project);
}
PersistenceFacet facet = project.getFacet(PersistenceFacet.class);
PersistenceContainer container = dataSource.getContainer();
PersistenceProvider provider = dataSource.getProvider();
PersistenceDescriptor config = facet.getConfig();
PersistenceUnit<PersistenceDescriptor> unit = config.createPersistenceUnit();
unit.name(DEFAULT_UNIT_NAME).description(DEFAULT_UNIT_DESC);
unit.transactionType(container.isJTASupported() ? PersistenceUnitTransactionType._JTA
: PersistenceUnitTransactionType._RESOURCE_LOCAL);
unit.provider(provider.getProvider());

container.setupConnection(unit, dataSource);
provider.configure(unit, dataSource);
facet.saveConfig(config);
}
if (configureMetadata)
{
facetFactory.install(PersistenceMetaModelFacet.class, project);
}
}

}
Expand Up @@ -11,14 +11,12 @@

import javax.inject.Inject;

import org.jboss.forge.addon.facets.FacetFactory;
import org.jboss.forge.addon.javaee.facets.PersistenceFacet;
import org.jboss.forge.addon.javaee.facets.PersistenceMetaModelFacet;
import org.jboss.forge.addon.javaee.jpa.DatabaseType;
import org.jboss.forge.addon.javaee.jpa.JPADataSource;
import org.jboss.forge.addon.javaee.jpa.PersistenceContainer;
import org.jboss.forge.addon.javaee.jpa.PersistenceProvider;
import org.jboss.forge.addon.javaee.jpa.containers.JavaEEDefaultContainer;
import org.jboss.forge.addon.javaee.jpa.ui.PersistenceManager;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.resource.DirectoryResource;
Expand All @@ -38,21 +36,9 @@
import org.jboss.forge.addon.ui.result.Results;
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.addon.ui.wizard.UIWizardStep;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceDescriptor;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceUnit;
import org.jboss.shrinkwrap.descriptor.api.persistence20.PersistenceUnitTransactionType;

public class PersistenceSetupConnectionStep implements UIWizardStep
{
public static final String DEFAULT_UNIT_NAME = "forge-default";
private static final String DEFAULT_UNIT_DESC = "Forge Persistence Unit";

@Inject
private ProjectFactory projectFactory;

@Inject
private FacetFactory facetFactory;

@Inject
@WithAttributes(label = "Database Type:", required = true)
private UISelectOne<DatabaseType> dbType;
Expand All @@ -77,6 +63,12 @@ public class PersistenceSetupConnectionStep implements UIWizardStep
@WithAttributes(label = "Password:", required = true)
private UIInput<String> password;

@Inject
private ProjectFactory projectFactory;

@Inject
private PersistenceManager persistenceManager;

@Override
public NavigationResult next(UIContext context) throws Exception
{
Expand Down Expand Up @@ -151,29 +143,26 @@ public DatabaseType call() throws Exception
});
}

private JPADataSource getDataSource()
private JPADataSource getDataSource(UIContext context)
{
JPADataSource dataSource = new JPADataSource();
dataSource.setDatabase(dbType.getValue());
dataSource.setDatabaseURL(databaseURL.getValue());
dataSource.setUsername(username.getValue());
dataSource.setPassword(password.getValue());
dataSource.setProvider((PersistenceProvider) context.getAttribute(PersistenceProvider.class));
dataSource.setContainer((PersistenceContainer) context.getAttribute(PersistenceContainer.class));
return dataSource;
}

@Override
public void validate(UIValidationContext validator)
{
UIContext uiContext = validator.getUIContext();
PersistenceContainer pc = (PersistenceContainer) uiContext.getAttribute(PersistenceContainer.class);
PersistenceProvider pp = (PersistenceProvider) uiContext.getAttribute(PersistenceProvider.class);
JPADataSource ds = getDataSource();
ds.setContainer(pc);
ds.setProvider(pp);
JPADataSource ds = getDataSource(uiContext);
try
{
pc.validate(ds);
pp.validate(ds);
ds.validate();
}
catch (Exception e)
{
Expand All @@ -185,38 +174,12 @@ public void validate(UIValidationContext validator)
public Result execute(UIContext context) throws Exception
{
Project project = getSelectedProject(context);
if (project != null)
{
if (!project.hasFacet(PersistenceFacet.class))
{
facetFactory.install(PersistenceFacet.class, project);
}
PersistenceContainer container = (PersistenceContainer) context.getAttribute(PersistenceContainer.class);
PersistenceProvider provider = (PersistenceProvider) context.getAttribute(PersistenceProvider.class);
PersistenceFacet facet = project.getFacet(PersistenceFacet.class);
JPADataSource dataSource = getDataSource();

// Setup JPA
PersistenceDescriptor config = facet.getConfig();
PersistenceUnit<PersistenceDescriptor> unit = config.createPersistenceUnit();
unit.name(DEFAULT_UNIT_NAME).description(DEFAULT_UNIT_DESC);
unit.transactionType(container.isJTASupported() ? PersistenceUnitTransactionType._JTA
: PersistenceUnitTransactionType._RESOURCE_LOCAL);
unit.provider(provider.getProvider());

container.setupConnection(unit, dataSource);
provider.configure(unit, dataSource);
facet.saveConfig(config);
if ((Boolean) context.getAttribute("ConfigureMetadata"))
{
facetFactory.install(PersistenceMetaModelFacet.class, project);
}
}
JPADataSource dataSource = getDataSource(context);
Boolean configureMetadata = (Boolean) context.getAttribute("ConfigureMetadata");
persistenceManager.setup(project, dataSource, configureMetadata);
return Results.success("Persistence (JPA) is installed.");
}

// Helper methods

/**
* Returns the selected project. null if no project is found
*/
Expand Down
Expand Up @@ -105,25 +105,27 @@ private void initConfigureMetadata()
@Override
public void validate(UIValidationContext validator)
{

// NOOP
}

@Override
public Result execute(final UIContext context) throws Exception
{
context.setAttribute(PersistenceProvider.class, providers.getValue());
context.setAttribute(PersistenceContainer.class, containers.getValue());
context.setAttribute("ConfigureMetadata", configureMetadata.getValue());
applyUIValues(context);
return Results.success();
}

@Override
public NavigationResult next(UIContext context) throws Exception
{
context.setAttribute(PersistenceProvider.class, providers.getValue());
PersistenceContainer container = containers.getValue();
context.setAttribute(PersistenceContainer.class, container);
applyUIValues(context);
return Results.navigateTo(PersistenceSetupConnectionStep.class);
}

private void applyUIValues(final UIContext context)
{
context.setAttribute(PersistenceProvider.class, providers.getValue());
context.setAttribute(PersistenceContainer.class, containers.getValue());
context.setAttribute("ConfigureMetadata", configureMetadata.getValue());
}
}
Expand Up @@ -206,7 +206,7 @@ public static String validateRequired(final InputComponent<?, ?> input)
{
labelValue = labelValue.substring(0, labelValue.length() - 1);
}
requiredMessage = labelValue + " is required";
requiredMessage = labelValue + " must be specified.";
}
}
return requiredMessage;
Expand Down

0 comments on commit db99c96

Please sign in to comment.