Skip to content

Commit

Permalink
FORGE-449
Browse files Browse the repository at this point in the history
  • Loading branch information
lincolnthree committed Jan 24, 2012
1 parent d0fc315 commit 990b761
Show file tree
Hide file tree
Showing 10 changed files with 291 additions and 81 deletions.
Expand Up @@ -32,15 +32,15 @@
*/
public interface ValidationDescriptor extends Descriptor
{
ValidationDescriptor defaultProvider(String defaultProvider);
ValidationDescriptor setDefaultProvider(String defaultProvider);

ValidationDescriptor messageInterpolator(String messageInterpolator);
ValidationDescriptor setMessageInterpolator(String messageInterpolator);

ValidationDescriptor traversableResolver(String traversableResolver);
ValidationDescriptor setTraversableResolver(String traversableResolver);

ValidationDescriptor constraintValidatorFactory(String constraintValidatorFactory);
ValidationDescriptor setConstraintValidatorFactory(String constraintValidatorFactory);

ValidationDescriptor constraintMapping(String constraintMapping);
ValidationDescriptor setConstraintMapping(String constraintMapping);

String getDefaultProvider();

Expand Down
Expand Up @@ -49,35 +49,35 @@ public ValidationDescriptorImpl(String descriptorName, Node model)
}

@Override
public ValidationDescriptor defaultProvider(String defaultProvider)
public ValidationDescriptor setDefaultProvider(String defaultProvider)
{
model.getOrCreate("default-provider").text(defaultProvider);
return this;
}

@Override
public ValidationDescriptor messageInterpolator(String messageInterpolator)
public ValidationDescriptor setMessageInterpolator(String messageInterpolator)
{
model.getOrCreate("message-interpolator").text(messageInterpolator);
return this;
}

@Override
public ValidationDescriptor traversableResolver(String traversableResolver)
public ValidationDescriptor setTraversableResolver(String traversableResolver)
{
model.getOrCreate("traversable-resolver").text(traversableResolver);
return this;
}

@Override
public ValidationDescriptor constraintValidatorFactory(String constraintValidatorFactory)
public ValidationDescriptor setConstraintValidatorFactory(String constraintValidatorFactory)
{
model.getOrCreate("constraint-validator-factory").text(constraintValidatorFactory);
return this;
}

@Override
public ValidationDescriptor constraintMapping(String constraintMapping)
public ValidationDescriptor setConstraintMapping(String constraintMapping)
{
model.createChild("constraint-mapping").text(constraintMapping);
return this;
Expand Down
Expand Up @@ -21,9 +21,6 @@
*/
package org.jboss.forge.spec.javaee.validation;

import static org.jboss.forge.shell.PromptType.JAVA_CLASS;
import static org.jboss.shrinkwrap.descriptor.api.Descriptors.create;

import java.util.Set;

import javax.enterprise.event.Event;
Expand All @@ -35,6 +32,7 @@
import org.jboss.forge.project.dependencies.DependencyInstaller;
import org.jboss.forge.project.facets.DependencyFacet;
import org.jboss.forge.project.facets.events.InstallFacets;
import org.jboss.forge.shell.PromptType;
import org.jboss.forge.shell.ShellPrompt;
import org.jboss.forge.shell.plugins.Alias;
import org.jboss.forge.shell.plugins.Command;
Expand All @@ -46,6 +44,7 @@
import org.jboss.forge.spec.javaee.descriptor.ValidationDescriptor;
import org.jboss.forge.spec.javaee.validation.provider.BVProvider;
import org.jboss.forge.spec.javaee.validation.provider.ValidationProvider;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;

/**
* @author Kevin Pollet
Expand Down Expand Up @@ -74,54 +73,49 @@ public ValidationPlugin(final Project project, final Event<InstallFacets> reques

@Command(value = "setup", help = "Setup validation for this project")
public void setup(
@Option(name = "provider", defaultValue = "HIBERNATE_VALIDATOR", required = true) final BVProvider provider,
@Option(name = "messageInterpolator", type = JAVA_CLASS) final String messageInterpolator,
@Option(name = "traversableResolver", type = JAVA_CLASS) final String traversableResolver,
@Option(name = "constraintValidatorFactory", type = JAVA_CLASS) final String constraintValidatorFactory)
@Option(name = "provider", defaultValue = "HIBERNATE_VALIDATOR", required = true) final BVProvider providerType,
@Option(name = "messageInterpolator", type = PromptType.JAVA_CLASS) final String messageInterpolator,
@Option(name = "traversableResolver", type = PromptType.JAVA_CLASS) final String traversableResolver,
@Option(name = "constraintValidatorFactory", type = PromptType.JAVA_CLASS) final String constraintValidatorFactory)
{
// instantiates the validation provider specified by the user
final ValidationProvider validationProvider = provider.getValidationProvider(beanManager);

installValidationFacet();
installDependencies(validationProvider.getDependencies());
final ValidationProvider provider = providerType.getValidationProvider(beanManager);

if (!validationProvider.getAdditionalDependencies().isEmpty())
if (!project.hasFacet(ValidationFacet.class))
{
if (prompt.promptBoolean("Would you install " + provider.getName() + " additional dependencies?", false)) {
installDependencies(validationProvider.getAdditionalDependencies());
}
request.fire(new InstallFacets(ValidationFacet.class));
}

// generates the default provider validation configuration file
final ValidationDescriptor providerDescriptor = validationProvider.getDefaultDescriptor();
final ValidationDescriptor descriptor = create(ValidationDescriptor.class)
.defaultProvider(providerDescriptor.getDefaultProvider())
.messageInterpolator(
messageInterpolator == null ? providerDescriptor.getMessageInterpolator() : messageInterpolator)
.traversableResolver(
traversableResolver == null ? providerDescriptor.getTraversableResolver() : traversableResolver)
.constraintValidatorFactory(
constraintValidatorFactory == null ? providerDescriptor.getConstraintValidatorFactory()
: constraintValidatorFactory);
installDependencies(provider.getDependencies());

project.getFacet(ValidationFacet.class).saveConfig(descriptor);
}
if (!provider.getAdditionalDependencies().isEmpty())
{
if (prompt.promptBoolean("Would you install " + providerType.getName() + " additional dependencies?", false)) {
installDependencies(provider.getAdditionalDependencies());
}
}

private void installValidationFacet()
{
if (!project.hasFacet(ValidationFacet.class))
if (provider.getDefaultDescriptor() != null)
{
request.fire(new InstallFacets(ValidationFacet.class));
final ValidationDescriptor providerDescriptor = provider.getDefaultDescriptor();
final ValidationDescriptor descriptor = Descriptors.create(ValidationDescriptor.class)
.setDefaultProvider(providerDescriptor.getDefaultProvider())
.setMessageInterpolator( messageInterpolator == null ? providerDescriptor.getMessageInterpolator() : messageInterpolator)
.setTraversableResolver( traversableResolver == null ? providerDescriptor.getTraversableResolver() : traversableResolver)
.setConstraintValidatorFactory( constraintValidatorFactory == null ? providerDescriptor.getConstraintValidatorFactory() : constraintValidatorFactory);

project.getFacet(ValidationFacet.class).saveConfig(descriptor);
}

}

private void installDependencies(final Set<Dependency> dependencies)
{
for (Dependency oneDependency : dependencies)
for (Dependency dep : dependencies)
{
if (!installer.isInstalled(project, oneDependency))
if (!installer.isInstalled(project, dep))
{
installer.install(project, oneDependency);
installer.install(project, dep);
}
}
}
Expand Down
Expand Up @@ -44,10 +44,10 @@ public ApacheBeanValidationProvider()
{
// define apache bean validation default descriptor file
this.defaultDescriptor = Descriptors.create(ValidationDescriptor.class)
.defaultProvider("org.apache.bval.jsr303.ApacheValidationProvider")
.messageInterpolator("org.apache.bval.jsr303.DefaultMessageInterpolator")
.traversableResolver("org.apache.bval.jsr303.resolver.DefaultTraversableResolver")
.constraintValidatorFactory("org.apache.bval.jsr303.DefaultConstraintValidatorFactory");
.setDefaultProvider("org.apache.bval.jsr303.ApacheValidationProvider")
.setMessageInterpolator("org.apache.bval.jsr303.DefaultMessageInterpolator")
.setTraversableResolver("org.apache.bval.jsr303.resolver.DefaultTraversableResolver")
.setConstraintValidatorFactory("org.apache.bval.jsr303.DefaultConstraintValidatorFactory");

// add apache bean validation dependencies
final DependencyBuilder apacheBeanValidation = DependencyBuilder.create()
Expand Down
Expand Up @@ -21,39 +21,40 @@
*/
package org.jboss.forge.spec.javaee.validation.provider;

import javax.enterprise.inject.spi.BeanManager;

import static org.jboss.forge.shell.util.BeanManagerUtils.getContextualInstance;

import javax.enterprise.inject.spi.BeanManager;

/**
* @author Kevin Pollet
*/
public enum BVProvider
{
HIBERNATE_VALIDATOR("Hibernate Validator", HibernateValidatorProvider.class),
APACHE_BEAN_VALIDATION("Apache Bean Validation", ApacheBeanValidationProvider.class);

private final String name;
private final Class<? extends ValidationProvider> validationProviderClass;

BVProvider(String name, Class<? extends ValidationProvider> validationProviderClass)
{
this.name = name;
this.validationProviderClass = validationProviderClass;
}

public String getName()
{
return name;
}

public ValidationProvider getValidationProvider(BeanManager manager)
{
return getContextualInstance(manager, validationProviderClass);
}

public Class<? extends ValidationProvider> getValidationProviderClass()
{
return validationProviderClass;
}
JAVA_EE("Generic Java EE", JavaEEValidatorProvider.class),
HIBERNATE_VALIDATOR("Hibernate Validator", HibernateValidatorProvider.class),
APACHE_BEAN_VALIDATION("Apache Bean Validation", ApacheBeanValidationProvider.class);

private final String name;
private final Class<? extends ValidationProvider> validationProviderClass;

BVProvider(String name, Class<? extends ValidationProvider> validationProviderClass)
{
this.name = name;
this.validationProviderClass = validationProviderClass;
}

public String getName()
{
return name;
}

public ValidationProvider getValidationProvider(BeanManager manager)
{
return getContextualInstance(manager, validationProviderClass);
}

public Class<? extends ValidationProvider> getValidationProviderClass()
{
return validationProviderClass;
}
}
Expand Up @@ -45,10 +45,10 @@ public HibernateValidatorProvider()
{
// define hibernate validator default descriptor file
this.defaultDescriptor = Descriptors.create(ValidationDescriptor.class)
.defaultProvider("org.hibernate.validator.HibernateValidator")
.messageInterpolator("org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator")
.traversableResolver("org.hibernate.validator.engine.resolver.DefaultTraversableResolver")
.constraintValidatorFactory("org.hibernate.validator.engine.ConstraintValidatorFactoryImpl");
.setDefaultProvider("org.hibernate.validator.HibernateValidator")
.setMessageInterpolator("org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator")
.setTraversableResolver("org.hibernate.validator.engine.resolver.DefaultTraversableResolver")
.setConstraintValidatorFactory("org.hibernate.validator.engine.ConstraintValidatorFactoryImpl");

// add hibernate validator dependencies
final DependencyBuilder hibernateValidator = DependencyBuilder.create()
Expand Down
@@ -0,0 +1,56 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2011, Red Hat, Inc., and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.forge.spec.javaee.validation.provider;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.jboss.forge.project.dependencies.Dependency;
import org.jboss.forge.spec.javaee.descriptor.ValidationDescriptor;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class JavaEEValidatorProvider implements ValidationProvider
{
public JavaEEValidatorProvider()
{}

@Override
public ValidationDescriptor getDefaultDescriptor()
{
return null;
}

@Override
public Set<Dependency> getDependencies()
{
return new HashSet<Dependency>();
}

@Override
public Set<Dependency> getAdditionalDependencies()
{
return Collections.emptySet();
}
}
Expand Up @@ -255,4 +255,9 @@ public static String stripArray(final String type)
return type;
}

public static boolean isPrimitive(String result)
{
return Arrays.asList("byte", "short", "int", "long", "float", "double", "boolean", "char").contains(result);
}

}
Expand Up @@ -281,6 +281,11 @@ public String resolveType(final String type)
String original = type;
String result = type;

if (Types.isPrimitive(result))
{
return result;
}

// Strip away any characters that might hinder the type matching process
if (Types.isArray(result))
{
Expand Down

0 comments on commit 990b761

Please sign in to comment.