Hibernate SVN: r15992 - validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report.
by hibernate-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2009-02-17 23:45:23 -0500 (Tue, 17 Feb 2009)
New Revision: 15992
Modified:
validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
Log:
added section summary
Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-17 19:34:06 UTC (rev 15991)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-18 04:45:23 UTC (rev 15992)
@@ -74,6 +74,8 @@
public void generate(OutputStream out) throws IOException {
writeHeader(out);
+ writeMasterSummary(out);
+ writeSectionSummary(out);
writeCoverage(out);
writeUnmatched(out);
writeFooter(out);
@@ -147,7 +149,107 @@
out.write(sb.toString().getBytes());
}
+
+ private void writeMasterSummary(OutputStream out) throws IOException {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("<h3>Master Summary</h3>\n");
+
+ sb.append("<table border=\"0\">");
+
+ sb.append("<tr>");
+ sb.append("<td>Total number of assertions</td>");
+ sb.append("<td>");
+
+ int assertionTotal = 0;
+
+ for (List<AuditAssertion> assertions : auditParser.getAssertions().values())
+ {
+ assertionTotal += assertions.size();
+ }
+
+ sb.append(assertionTotal);
+ sb.append("</td>");
+ sb.append("</tr>");
+
+ sb.append("</table>");
+
+ out.write(sb.toString().getBytes());
+ }
+ private void writeSectionSummary(OutputStream out) throws IOException {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("<h3>Section Summary</h3>\n");
+
+ sb.append("<table width=\"100%\">");
+
+ sb.append("<tr style=\"background-color:#dddddd\">");
+ sb.append("<th align=\"left\">Section</th>");
+ sb.append("<th>Assertions</th>");
+ sb.append("<th>Coverage</th>");
+ sb.append("<th>Coverage %</th>");
+ sb.append("</tr>");
+
+ boolean odd = true;
+
+ for (String sectionId : auditParser.getSectionIds()) {
+
+ if (odd)
+ {
+ sb.append("<tr style=\"background-color:#f7f7f7\">");
+ }
+ else
+ {
+ sb.append("<tr>");
+ }
+
+ odd = !odd;
+
+ int margin = (sectionId.split("[.]").length - 1) * 16;
+
+ sb.append("<td style=\"padding-left:" + margin + "px\">");
+ sb.append("<a href=\"#" + sectionId + "\">");
+ sb.append(sectionId);
+ sb.append(" ");
+ sb.append(auditParser.getSectionTitle(sectionId));
+ sb.append("</a>");
+ sb.append("</td>");
+
+ int assertions = auditParser.getAssertionsForSection(sectionId).size();
+ int coverage = 0;
+
+ for (AuditAssertion assertion : auditParser.getAssertionsForSection(sectionId))
+ {
+ if (!getCoverageForAssertion(sectionId, assertion.getId()).isEmpty())
+ {
+ coverage++;
+ }
+ }
+
+ double coveragePercent = assertions > 0 ? ((coverage * 1.0) / assertions) * 100 : 0;
+
+ sb.append("<td align=\"center\">");
+ sb.append(assertions);
+ sb.append("</td>");
+
+ sb.append("<td align=\"center\">");
+ sb.append(coverage);
+ sb.append("</td>");
+
+ String bgColor = coveragePercent < 60 ? "#ffaaaa" : coveragePercent < 80 ? "#ffffaa" : "#aaffaa";
+
+ sb.append("<td align=\"center\" style=\"background-color:" + bgColor + "\">");
+ sb.append(String.format("%.2f%%", coveragePercent));
+ sb.append("</td>");
+
+ sb.append("</tr>");
+ }
+
+ sb.append("</table>");
+ out.write(sb.toString().getBytes());
+ }
+
private void writeCoverage(OutputStream out) throws IOException {
out.write("<h3>Coverage Detail</h3>\n".getBytes());
@@ -159,8 +261,9 @@
if (sectionAssertions != null && !sectionAssertions.isEmpty()) {
StringBuilder sb = new StringBuilder();
- out.write(("<div class=\"sectionHeader\">Section " + sectionId + " - " +
- auditParser.getSectionTitle(sectionId) + "</div>\n").getBytes());
+ out.write(("<h4 class=\"sectionHeader\" id=\"" + sectionId + "\">Section " +
+ sectionId + " - " +
+ auditParser.getSectionTitle(sectionId) + "</h4>\n").getBytes());
for (AuditAssertion assertion : sectionAssertions) {
List<SpecReference> coverage = getCoverageForAssertion(sectionId, assertion.getId());
15 years, 2 months
Hibernate SVN: r15991 - in search/trunk: src/java/org/hibernate/search/store and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: sannegrinovero
Date: 2009-02-17 14:34:06 -0500 (Tue, 17 Feb 2009)
New Revision: 15991
Modified:
search/trunk/doc/reference/en/modules/configuration.xml
search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java
search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java
search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
Log:
HSEARCH-284: Be able to configure a LockFactory
Modified: search/trunk/doc/reference/en/modules/configuration.xml
===================================================================
--- search/trunk/doc/reference/en/modules/configuration.xml 2009-02-17 17:27:48 UTC (rev 15990)
+++ search/trunk/doc/reference/en/modules/configuration.xml 2009-02-17 19:34:06 UTC (rev 15991)
@@ -58,6 +58,16 @@
</thead>
<tbody>
+ <row>
+ <entry>org.hibernate.search.store.RAMDirectoryProvider</entry>
+
+ <entry>Memory based directory, the directory will be uniquely
+ identified (in the same deployment unit) by the
+ <literal>@Indexed.index</literal> element</entry>
+
+ <entry>none</entry>
+ </row>
+
<row>
<entry>org.hibernate.search.store.FSDirectoryProvider</entry>
@@ -66,7 +76,9 @@
<entry><para><literal>indexBase</literal> : Base
directory</para><para><literal>indexName</literal>: override
- @Indexed.index (useful for sharded indexes)</para></entry>
+ @Indexed.index (useful for sharded indexes)</para><para><literal>
+ locking_strategy</literal> : optional, see <xref linkend="search-configuration-directory-lockfactories" />
+ </para></entry>
</row>
<row>
@@ -97,7 +109,9 @@
(the copy will take place every refresh seconds).</para><para>
<literal>buffer_size_on_copy</literal>: The amount of MegaBytes to
move in a single low level copy instruction; defaults to
- 16MB.</para></entry>
+ 16MB.</para><para><literal>
+ locking_strategy</literal> : optional, see <xref linkend="search-configuration-directory-lockfactories" />
+ </para></entry>
</row>
<row>
@@ -128,18 +142,11 @@
(the copy will take place every refresh seconds).</para><para>
<literal>buffer_size_on_copy</literal>: The amount of MegaBytes to
move in a single low level copy instruction; defaults to
- 16MB.</para></entry>
+ 16MB.</para><para><literal>
+ locking_strategy</literal> : optional, see <xref linkend="search-configuration-directory-lockfactories" />
+ </para></entry>
</row>
- <row>
- <entry>org.hibernate.search.store.RAMDirectoryProvider</entry>
-
- <entry>Memory based directory, the directory will be uniquely
- identified (in the same deployment unit) by the
- <literal>@Indexed.index</literal> element</entry>
-
- <entry>none</entry>
- </row>
</tbody>
</tgroup>
</table>
@@ -843,4 +850,78 @@
</tgroup>
</table>
</section>
+
+ <section id="search-configuration-directory-lockfactories" revision="1">
+ <title>LockFactory configuration</title>
+ <para>Lucene Directories have default locking strategies which work well for most cases,
+ but it's possible to specify for each index managed by Hibernate Search which LockingFactory
+ you want to use.</para><para>Some of these locking strategies require a filesystem level lock and may be used
+ even on RAM based indexes, but this is not recommended and of no practical use.</para>
+ <para>To select a locking factory, set the <literal>hibernate.search.<index>.locking_strategy</literal> option to
+ one of <literal>simple</literal>, <literal>native</literal>, <literal>single</literal>
+ or <literal>none</literal>.
+
+ <table id="search-configuration-directory-lockfactories-table">
+ <title>List of available LockFactory implementations</title>
+
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry align="center">name</entry>
+ <entry align="center">Class</entry>
+ <entry align="center">Description</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry>simple</entry>
+ <entry>org.apache.lucene.store.SimpleFSLockFactory</entry>
+ <entry>
+ <para>Safe implementation based on Java's File API, it marks the usage of the index by creating a marker file.</para>
+ <para>If for some reason you had to kill your application, you will need to remove this file before restarting it.</para>
+ <para>This is the default implementation for <literal>FSDirectoryProvider</literal>,<literal>FSMasterDirectoryProvider</literal> and
+ <literal>FSSlaveDirectoryProvider</literal>.</para>
+ </entry>
+ </row>
+ <row>
+ <entry>native</entry>
+ <entry>org.apache.lucene.store.NativeFSLockFactory</entry>
+ <entry>
+ <para>As does <literal>simple</literal> this also marks the usage of the index by creating a marker file, but this one
+ is using native OS file locks so that even if your application crashes the locks will be cleaned up.</para>
+ <para>This implementation has known problems on NFS.</para>
+ </entry>
+ </row>
+ <row>
+ <entry>single</entry>
+ <entry>org.apache.lucene.store.SingleInstanceLockFactory</entry>
+ <entry>
+ <para>This LockFactory doesn't use a file marker but is a Java object lock held in memory; therefore
+ it's possible to use it only when you are sure the index is not going to be shared by any other process.</para>
+ <para>This is the default implementation for <literal>RAMDirectoryProvider</literal>.</para>
+ </entry>
+ </row>
+ <row>
+ <entry>none</entry>
+ <entry>org.apache.lucene.store.NoLockFactory</entry>
+ <entry>
+ <para>All changes to this index are not coordinated by any lock; test your application carefully
+ and make sure you know what it means.</para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ </para>Configuration example:
+ <programlisting>hibernate.search.default simple
+hibernate.search.Animals native</programlisting>
+ <para>
+ </para>
+
+ <para>If you need more flexibility it is possible to use your own LockFactory when implementing a custom DirectoryProvider.</para>
+
+ </section>
+
</chapter>
Modified: search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java 2009-02-17 17:27:48 UTC (rev 15990)
+++ search/trunk/src/java/org/hibernate/search/store/DirectoryProviderHelper.java 2009-02-17 19:34:06 UTC (rev 15991)
@@ -9,6 +9,11 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.store.LockFactory;
+import org.apache.lucene.store.NativeFSLockFactory;
+import org.apache.lucene.store.NoLockFactory;
+import org.apache.lucene.store.SimpleFSLockFactory;
+import org.apache.lucene.store.SingleInstanceLockFactory;
import org.slf4j.Logger;
import org.hibernate.annotations.common.util.StringHelper;
@@ -68,13 +73,15 @@
}
/**
- * Creates an FSDirectory in provided directory if not already existing.
+ * Creates an FSDirectory in provided directory and initializes
+ * an index if not already existing.
* @param indexDir The directory where to write a new index
* @return the created FSDirectory
* @throws IOException
*/
- public static FSDirectory createFSIndex(File indexDir) throws IOException {
- FSDirectory fsDirectory = FSDirectory.getDirectory( indexDir );
+ public static FSDirectory createFSIndex(File indexDir, Properties dirConfiguration) throws IOException {
+ LockFactory lockFactory = createLockFactory(indexDir, dirConfiguration);
+ FSDirectory fsDirectory = FSDirectory.getDirectory( indexDir, lockFactory );
if ( ! IndexReader.indexExists( fsDirectory ) ) {
log.debug( "Initialize index: '{}'", indexDir.getAbsolutePath() );
IndexWriter.MaxFieldLength fieldLength = new IndexWriter.MaxFieldLength( IndexWriter.DEFAULT_MAX_FIELD_LENGTH );
@@ -83,6 +90,39 @@
}
return fsDirectory;
}
+
+ /**
+ * Creates a LockFactory as selected in the configuration for the
+ * DirectoryProvider.
+ * The SimpleFSLockFactory and NativeFSLockFactory need a File to know
+ * were to stock the filesystem based locks; other implementations
+ * ignore this parameter.
+ * @param indexDir the directory to use to store locks, if needed by implementation
+ * @param dirConfiguration the configuration of current DirectoryProvider
+ * @return the LockFactory as configured, or a SimpleFSLockFactory
+ * in case of configuration errors or as a default.
+ * @throws IOException
+ */
+ public static LockFactory createLockFactory(File indexDir, Properties dirConfiguration) throws IOException {
+ String lockFactoryName = dirConfiguration.getProperty( "locking_strategy", "simple" );
+ if ( "simple".equals( lockFactoryName ) ) {
+ return new SimpleFSLockFactory( indexDir );
+ }
+ else if ( "native".equals( lockFactoryName ) ) {
+ return new NativeFSLockFactory( indexDir );
+ }
+ else if ( "single".equals( lockFactoryName ) ) {
+ return new SingleInstanceLockFactory();
+ }
+ else if ( "none".equals( lockFactoryName ) ) {
+ return new NoLockFactory();
+ }
+ else {
+ log.warn( "Invalid configuration setting for option locking_strategy \"{}\"; option ignored!",
+ lockFactoryName );
+ return new SimpleFSLockFactory( indexDir );
+ }
+ }
/**
* Verify the index directory exists and is writable,
Modified: search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java 2009-02-17 17:27:48 UTC (rev 15990)
+++ search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java 2009-02-17 19:34:06 UTC (rev 15991)
@@ -41,7 +41,7 @@
try {
indexName = indexDir.getCanonicalPath();
//this is cheap so it's not done in start()
- directory = DirectoryProviderHelper.createFSIndex( indexDir );
+ directory = DirectoryProviderHelper.createFSIndex( indexDir, properties );
}
catch (IOException e) {
throw new SearchException( "Unable to initialize index: " + directoryProviderName, e );
Modified: search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2009-02-17 17:27:48 UTC (rev 15990)
+++ search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2009-02-17 19:34:06 UTC (rev 15991)
@@ -60,7 +60,7 @@
log.debug( "Index directory: {}", indexDir.getPath() );
try {
indexName = indexDir.getCanonicalPath();
- directory = DirectoryProviderHelper.createFSIndex( indexDir );
+ directory = DirectoryProviderHelper.createFSIndex( indexDir, properties );
}
catch (IOException e) {
throw new SearchException( "Unable to initialize index: " + directoryProviderName, e );
Modified: search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2009-02-17 17:27:48 UTC (rev 15990)
+++ search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2009-02-17 19:34:06 UTC (rev 15991)
@@ -75,8 +75,8 @@
int readCurrentState = current; //Unneeded value, but ensure visibility of state protected by memory barrier
int currentToBe = 0;
try {
- directory1 = DirectoryProviderHelper.createFSIndex( new File( indexDir, "1" ) );
- directory2 = DirectoryProviderHelper.createFSIndex( new File( indexDir, "2" ) );
+ directory1 = DirectoryProviderHelper.createFSIndex( new File( indexDir, "1" ), properties );
+ directory2 = DirectoryProviderHelper.createFSIndex( new File( indexDir, "2" ), properties );
File currentMarker = new File( indexDir, "current1" );
File current2Marker = new File( indexDir, "current2" );
if ( currentMarker.exists() ) {
15 years, 2 months
Hibernate SVN: r15990 - in validator/trunk/hibernate-validator/src: main/java/org/hibernate/validation/engine and 4 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-02-17 12:27:48 -0500 (Tue, 17 Feb 2009)
New Revision: 15990
Added:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/package.html
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/package.html
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/package.html
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/package.html
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java
Removed:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Account.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
Log:
HV-92 Some cleanup in preperation for the real grouping feature.
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/package.html
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/package.html (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/package.html 2009-02-17 17:27:48 UTC (rev 15990)
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!--
+
+ JBoss, Home of Professional Open Source
+ Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ by the @authors tag. See the copyright.txt in the distribution for a
+ full listing of individual contributors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+</head>
+<body>
+This package contains the implementations of the builtin constraints as well as Hibernate Validator specific
+constraints and their implementations.
+</body>
+</html>
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java 2009-02-17 13:16:07 UTC (rev 15989)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -61,7 +61,7 @@
/**
* @return A map mapping defined group sequences to a list of groups.
*/
- Map<Class<?>, List<Class<?>>> getGroupSequences();
+ List<Class<?>> getDefaultGroupSequence();
/**
* @return A list of <code>MetaConstraint</code> instances encapsulating the information of all the constraints
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java 2009-02-17 13:16:07 UTC (rev 15989)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -22,15 +22,16 @@
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Arrays;
import javax.validation.BeanDescriptor;
import javax.validation.GroupSequence;
import javax.validation.PropertyDescriptor;
import javax.validation.Valid;
import javax.validation.ValidationException;
+import javax.validation.groups.Default;
import org.slf4j.Logger;
@@ -83,7 +84,7 @@
/**
* Maps group sequences to the list of group/sequences.
*/
- private Map<Class<?>, List<Class<?>>> groupSequences = new HashMap<Class<?>, List<Class<?>>>();
+ private List<Class<?>> defaultGroupSequence = new ArrayList<Class<?>>();
private final BuiltinConstraints builtinConstraints;
@@ -99,6 +100,7 @@
*/
private void createMetaData() {
beanDescriptor = new BeanDescriptorImpl<T>( beanClass, this );
+ initDefaultGroupSequence( beanClass );
List<Class> classes = new ArrayList<Class>();
computeClassHierarchy( beanClass, classes );
for ( Class current : classes ) {
@@ -128,54 +130,21 @@
}
private void initClass(Class clazz) {
- initGroupSequences( clazz );
initClassConstraints( clazz );
initMethodConstraints( clazz );
initFieldConstraints( clazz );
}
- private void initGroupSequences(Class<?> clazz) {
+ private void initDefaultGroupSequence(Class<?> clazz) {
GroupSequence groupSequenceAnnotation = clazz.getAnnotation( GroupSequence.class );
- if ( groupSequenceAnnotation != null ) {
- addGroupSequence( groupSequenceAnnotation );
+ if ( groupSequenceAnnotation == null ) {
+ defaultGroupSequence.add( Default.class );
}
-
- for ( Map.Entry<Class<?>, List<Class<?>>> mapEntry : groupSequences.entrySet() ) {
- List<Class<?>> groups = mapEntry.getValue();
- List<Class<?>> expandedGroups = new ArrayList<Class<?>>();
- for ( Class<?> group : groups ) {
- expandedGroups.addAll( expandGroupSequences( group ) );
- }
- groupSequences.put( mapEntry.getKey(), expandedGroups );
- }
- if ( log.isDebugEnabled() && !groupSequences.isEmpty() ) {
- log.debug( "Expanded groups sequences: {}", groupSequences );
- }
- }
-
- private List<Class<?>> expandGroupSequences(Class<?> group) {
- List<Class<?>> groupList = new ArrayList<Class<?>>();
- if ( groupSequences.containsKey( group ) ) {
- for ( Class<?> localGroup : groupSequences.get( group ) ) {
- groupList.addAll( expandGroupSequences( localGroup ) );
- }
- }
else {
- groupList.add( group );
+ defaultGroupSequence.addAll( Arrays.asList( groupSequenceAnnotation.sequence() ) );
}
- if ( log.isTraceEnabled() ) {
- log.trace( "Expanded {} to {}", group, groupList.toString() );
- }
- return groupList;
}
- private void addGroupSequence(GroupSequence groupSequence) {
- if ( groupSequences.containsKey( groupSequence.name() ) ) {
- throw new ValidationException( "Encountered duplicate sequence name: " + groupSequence.name() );
- }
- groupSequences.put( groupSequence.name(), Arrays.asList( groupSequence.sequence() ) );
- }
-
private void initFieldConstraints(Class clazz) {
for ( Field field : clazz.getDeclaredFields() ) {
List<ConstraintDescriptorImpl> fieldMetadata = findFieldLevelConstraints( field );
@@ -244,12 +213,6 @@
@SuppressWarnings("unchecked")
private <A extends Annotation> ConstraintDescriptorImpl buildConstraintDescriptor(A annotation) {
Class<?>[] groups = ReflectionHelper.getAnnotationParameter( annotation, "groups", Class[].class );
- for ( Class<?> groupName : groups ) {
- if ( groupSequences.containsKey( groupName ) ) {
- throw new ValidationException( groupName + " is illegally used as group and sequence name." );
- }
- }
-
return new ConstraintDescriptorImpl( annotation, groups, builtinConstraints );
}
@@ -360,8 +323,8 @@
return cascadedMembers;
}
- public Map<Class<?>, List<Class<?>>> getGroupSequences() {
- return groupSequences;
+ public List<Class<?>> getDefaultGroupSequence() {
+ return defaultGroupSequence;
}
public List<MetaConstraint> geMetaConstraintList() {
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2009-02-17 13:16:07 UTC (rev 15989)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -178,6 +178,7 @@
* @param context the validation context.
* @param type the type of the cascaded field or property.
* @param value the actual value.
+ *
* @return An iterator over the value of a cascaded property.
*/
private <T> Iterator<?> createIteratorForCascadedValue(ExecutionContext<T> context, Type type, Object value) {
@@ -202,7 +203,7 @@
iter = list.iterator();
}
return iter;
- }
+ }
private <T> void validateCascadedConstraint(ExecutionContext<T> context, Iterator<?> iter) {
Object actualValue;
@@ -403,8 +404,8 @@
boolean isGroupSequence;
BeanMetaData<T> metaDataProvider = getBeanMetaData( beanType );
- if ( metaDataProvider.getGroupSequences().containsKey( group ) ) {
- expandedGroups.addAll( metaDataProvider.getGroupSequences().get( group ) );
+ if ( Default.class.getName().equals( group.getName() ) ) {
+ expandedGroups.addAll( metaDataProvider.getDefaultGroupSequence() );
isGroupSequence = true;
}
else {
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -0,0 +1,26 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+/**
+ * Used to determine the execution order if there is one or more group or group sequences are specified.
+ *
+ * @author Hardy Ferentschik
+ */
+public class GroupExecutionOrder {
+}
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/package.html
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/package.html (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/package.html 2009-02-17 17:27:48 UTC (rev 15990)
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!--
+
+ JBoss, Home of Professional Open Source
+ Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ by the @authors tag. See the copyright.txt in the distribution for a
+ full listing of individual contributors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+</head>
+<body>
+This package contains helper classes for the processing of groups.
+</body>
+</html>
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/package.html
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/package.html (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/package.html 2009-02-17 17:27:48 UTC (rev 15990)
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!--
+
+ JBoss, Home of Professional Open Source
+ Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ by the @authors tag. See the copyright.txt in the distribution for a
+ full listing of individual contributors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+</head>
+<body>
+This package contains the implementing classes for the core interfaces of JSR-303.
+</body>
+</html>
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/package.html
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/package.html (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/package.html 2009-02-17 17:27:48 UTC (rev 15990)
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<!--
+
+ JBoss, Home of Professional Open Source
+ Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ by the @authors tag. See the copyright.txt in the distribution for a
+ full listing of individual contributors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+</head>
+<body>
+This package contains helper independend helper classes.
+</body>
+</html>
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Account.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Account.java 2009-02-17 13:16:07 UTC (rev 15989)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Account.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -1,3 +1,20 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
package org.hibernate.validation.eg;
import javax.validation.Valid;
Deleted: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java 2009-02-17 13:16:07 UTC (rev 15989)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -1,30 +0,0 @@
-// $Id$
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-* http://www.apache.org/licenses/LICENSE-2.0
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.hibernate.validation.eg;
-
-import javax.validation.GroupSequence;
-import javax.validation.groups.Default;
-
-import org.hibernate.validation.eg.groups.First;
-
-/**
- * @author Hardy Ferentschik
- */
-@GroupSequence(name = Default.class, sequence = { First.class }) // illegal - default is already defined in Book
-public class EnglishDictonary extends Dictonary {
-}
\ No newline at end of file
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java (from rev 15989, validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -0,0 +1,181 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validator;
+import javax.validation.groups.Default;
+
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+import org.hibernate.validation.eg.Animal;
+import org.hibernate.validation.eg.Author;
+import org.hibernate.validation.eg.Book;
+import org.hibernate.validation.eg.DefaultAlias;
+import org.hibernate.validation.eg.Dictonary;
+import org.hibernate.validation.eg.groups.First;
+import org.hibernate.validation.eg.groups.Last;
+import org.hibernate.validation.eg.groups.Second;
+import org.hibernate.validation.util.TestUtil;
+
+/**
+ * Tests for the implementation of <code>Validator</code>.
+ *
+ * @author Hardy Ferentschik
+ */
+public class GroupTest {
+
+ @Test
+ public void testGroups() {
+ Validator validator = TestUtil.getValidator();
+
+ Author author = new Author();
+ author.setLastName( "" );
+ author.setFirstName( "" );
+ Book book = new Book();
+ book.setTitle( "" );
+ book.setAuthor( author );
+
+ Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
+ assertEquals( "Wrong number of constraints", 3, constraintViolations.size() );
+
+ author.setFirstName( "Gavin" );
+ author.setLastName( "King" );
+
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
+ ConstraintViolation constraintViolation = constraintViolations.iterator().next();
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+ assertEquals( "Wrong message", "may not be empty", constraintViolation.getMessage() );
+ assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
+ assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
+ assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
+
+ book.setTitle( "Hibernate Persistence with JPA" );
+ book.setSubtitle( "Revised Edition of Hibernate in Action" );
+
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
+ constraintViolation = constraintViolations.iterator().next();
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+ assertEquals( "Wrong message", "length must be between 0 and 30", constraintViolation.getMessage() );
+ assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
+ assertEquals( "Wrong value", book.getSubtitle(), constraintViolation.getInvalidValue() );
+ assertEquals( "Wrong propertyName", "subtitle", constraintViolation.getPropertyPath() );
+
+ book.setSubtitle( "Revised Edition" );
+ author.setCompany( "JBoss a divison of RedHat" );
+
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
+ constraintViolation = constraintViolations.iterator().next();
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+ assertEquals( "Wrong message", "length must be between 0 and 20", constraintViolation.getMessage() );
+ assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
+ assertEquals( "Wrong value", author.getCompany(), constraintViolation.getInvalidValue() );
+ assertEquals( "Wrong propertyName", "author.company", constraintViolation.getPropertyPath() );
+
+ author.setCompany( "JBoss" );
+
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
+ assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
+ }
+
+ @Test
+ public void testDefaultGroupSequence() {
+ Validator validator = TestUtil.getValidator();
+
+ Author author = new Author();
+ author.setLastName( "" );
+ author.setFirstName( "" );
+ Book book = new Book();
+ book.setAuthor( author );
+
+ Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, Default.class );
+ assertEquals( "Wrong number of constraints", 2, constraintViolations.size() );
+
+ author.setFirstName( "Gavin" );
+ author.setLastName( "King" );
+
+ constraintViolations = validator.validate( book, Default.class );
+ ConstraintViolation constraintViolation = constraintViolations.iterator().next();
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+ assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
+ assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
+ assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
+ assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
+
+ book.setTitle( "Hibernate Persistence with JPA" );
+ book.setSubtitle( "Revised Edition of Hibernate in Action" );
+
+ constraintViolations = validator.validate( book, Default.class );
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+
+ book.setSubtitle( "Revised Edition" );
+ author.setCompany( "JBoss a divison of RedHat" );
+
+ constraintViolations = validator.validate( book, Default.class );
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+
+ author.setCompany( "JBoss" );
+
+ constraintViolations = validator.validate( book, Default.class );
+ assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
+ }
+
+ @Test
+ public void testGroupSequences() {
+ Validator validator = TestUtil.getValidator();
+
+ Dictonary dictonary = new Dictonary();
+ dictonary.setTitle( "English - German" );
+ Author author = new Author();
+ author.setLastName( "-" );
+ author.setFirstName( "-" );
+ author.setCompany( "Langenscheidt Publ." );
+ dictonary.setAuthor( author );
+
+ Set<ConstraintViolation<Dictonary>> constraintViolations = validator.validate( dictonary, DefaultAlias.class );
+ assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
+ }
+
+ @Test
+ public void testValidationFailureInMultipleGroups() {
+ Validator validator = TestUtil.getValidator();
+ Animal elepfant = new Animal();
+ elepfant.setName( "" );
+ elepfant.setDomain( Animal.Domain.EUKARYOTA );
+
+ Set<ConstraintViolation<Animal>> constraintViolations = validator.validate( elepfant, First.class, Second.class );
+ assertEquals(
+ "The should be two invalid constraints since the same propertyName gets validated in both groups",
+ 1,
+ constraintViolations.size()
+ );
+
+ ConstraintViolation constraintViolation = constraintViolations.iterator().next();
+ Set<Class<?>> expected = new HashSet<Class<?>>();
+ expected.add( First.class );
+ expected.add( Second.class );
+ assertEquals(
+ "The constraint should be invalid for both groups",
+ expected,
+ constraintViolation.getGroups()
+ );
+ }
+}
\ No newline at end of file
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:mergeinfo
+
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java 2009-02-17 13:16:07 UTC (rev 15989)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java 2009-02-17 17:27:48 UTC (rev 15990)
@@ -17,12 +17,10 @@
*/
package org.hibernate.validation.engine;
-import java.util.HashSet;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.ValidationException;
import javax.validation.Validator;
-import javax.validation.groups.Default;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -31,20 +29,11 @@
import org.hibernate.validation.eg.Actor;
import org.hibernate.validation.eg.Address;
-import org.hibernate.validation.eg.Animal;
-import org.hibernate.validation.eg.Author;
-import org.hibernate.validation.eg.Book;
import org.hibernate.validation.eg.Boy;
import org.hibernate.validation.eg.Customer;
-import org.hibernate.validation.eg.DefaultAlias;
-import org.hibernate.validation.eg.Dictonary;
import org.hibernate.validation.eg.Engine;
-import org.hibernate.validation.eg.EnglishDictonary;
import org.hibernate.validation.eg.Order;
import org.hibernate.validation.eg.UnconstraintEntity;
-import org.hibernate.validation.eg.groups.First;
-import org.hibernate.validation.eg.groups.Last;
-import org.hibernate.validation.eg.groups.Second;
import org.hibernate.validation.util.TestUtil;
/**
@@ -103,101 +92,6 @@
}
@Test
- public void testGroups() {
- Validator validator = TestUtil.getValidator();
-
- Author author = new Author();
- author.setLastName( "" );
- author.setFirstName( "" );
- Book book = new Book();
- book.setTitle( "" );
- book.setAuthor( author );
-
- Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
- assertEquals( "Wrong number of constraints", 3, constraintViolations.size() );
-
- author.setFirstName( "Gavin" );
- author.setLastName( "King" );
-
- constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
- ConstraintViolation constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be empty", constraintViolation.getMessage() );
- assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
- assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
- assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
-
- book.setTitle( "Hibernate Persistence with JPA" );
- book.setSubtitle( "Revised Edition of Hibernate in Action" );
-
- constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
- constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "length must be between 0 and 30", constraintViolation.getMessage() );
- assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
- assertEquals( "Wrong value", book.getSubtitle(), constraintViolation.getInvalidValue() );
- assertEquals( "Wrong propertyName", "subtitle", constraintViolation.getPropertyPath() );
-
- book.setSubtitle( "Revised Edition" );
- author.setCompany( "JBoss a divison of RedHat" );
-
- constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
- constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "length must be between 0 and 20", constraintViolation.getMessage() );
- assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
- assertEquals( "Wrong value", author.getCompany(), constraintViolation.getInvalidValue() );
- assertEquals( "Wrong propertyName", "author.company", constraintViolation.getPropertyPath() );
-
- author.setCompany( "JBoss" );
-
- constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
- assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
- }
-
- @Test
- public void testDefaultGroupSequence() {
- Validator validator = TestUtil.getValidator();
-
- Author author = new Author();
- author.setLastName( "" );
- author.setFirstName( "" );
- Book book = new Book();
- book.setAuthor( author );
-
- Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, Default.class );
- assertEquals( "Wrong number of constraints", 2, constraintViolations.size() );
-
- author.setFirstName( "Gavin" );
- author.setLastName( "King" );
-
- constraintViolations = validator.validate( book, Default.class );
- ConstraintViolation constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
- assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
- assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
- assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
-
- book.setTitle( "Hibernate Persistence with JPA" );
- book.setSubtitle( "Revised Edition of Hibernate in Action" );
-
- constraintViolations = validator.validate( book, Default.class );
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
-
- book.setSubtitle( "Revised Edition" );
- author.setCompany( "JBoss a divison of RedHat" );
-
- constraintViolations = validator.validate( book, Default.class );
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
-
- author.setCompany( "JBoss" );
-
- constraintViolations = validator.validate( book, Default.class );
- assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
- }
-
- @Test
public void testBasicValidation() {
Validator validator = TestUtil.getValidator();
@@ -214,53 +108,6 @@
}
@Test
- public void testGroupSequences() {
- Validator validator = TestUtil.getValidator();
-
- Dictonary dictonary = new Dictonary();
- dictonary.setTitle( "English - German" );
- Author author = new Author();
- author.setLastName( "-" );
- author.setFirstName( "-" );
- author.setCompany( "Langenscheidt Publ." );
- dictonary.setAuthor( author );
-
- Set<ConstraintViolation<Dictonary>> constraintViolations = validator.validate( dictonary, DefaultAlias.class );
- assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
- }
-
- @Test
- public void testValidationFailureInMultipleGroups() {
- Validator validator = TestUtil.getValidator();
- Animal elepfant = new Animal();
- elepfant.setName( "" );
- elepfant.setDomain( Animal.Domain.EUKARYOTA );
-
- Set<ConstraintViolation<Animal>> constraintViolations = validator.validate( elepfant, First.class, Second.class );
- assertEquals(
- "The should be two invalid constraints since the same propertyName gets validated in both groups",
- 1,
- constraintViolations.size()
- );
-
- ConstraintViolation constraintViolation = constraintViolations.iterator().next();
- Set<Class<?>> expected = new HashSet<Class<?>>();
- expected.add( First.class );
- expected.add( Second.class );
- assertEquals(
- "The constraint should be invalid for both groups",
- expected,
- constraintViolation.getGroups()
- );
- }
-
- @Test(expected = ValidationException.class)
- public void testInvalidSequenceName() {
- Validator validator = TestUtil.getValidator();
- validator.getConstraintsForClass( EnglishDictonary.class ).hasConstraints();
- }
-
- @Test
public void testValidationMethod() {
Validator validator = TestUtil.getValidator();
15 years, 2 months
Hibernate SVN: r15989 - validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine and 3 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-02-17 08:16:07 -0500 (Tue, 17 Feb 2009)
New Revision: 15989
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintViolationImpl.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ConstraintCompositionTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java
Log:
BVAL-120 rename Rename ConstraintViolation getRawMessage=>getMessageTemplate, getInterpolatedMessage=>getMessage
Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java 2009-02-17 13:06:46 UTC (rev 15988)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java 2009-02-17 13:16:07 UTC (rev 15989)
@@ -32,12 +32,12 @@
/**
* @return The interpolated error message for this constraint violation.
*/
- String getInterpolatedMessage();
+ String getMessage();
/**
* @return The non-interpolated error message for this constraint violation.
*/
- String getRawMessage();
+ String getMessageTemplate();
/**
* @return The root bean being validated.
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java 2009-02-17 13:06:46 UTC (rev 15988)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java 2009-02-17 13:16:07 UTC (rev 15989)
@@ -117,14 +117,14 @@
&& getParent().getDescriptor().isReportAsSingleViolation();
}
- private <T> void createConstraintViolation(Object value, Class<T> beanClass, ExecutionContext<T> executionContext, Object leafBeanInstance, String message, ConstraintDescriptor descriptor) {
+ private <T> void createConstraintViolation(Object value, Class<T> beanClass, ExecutionContext<T> executionContext, Object leafBeanInstance, String messageTemplate, ConstraintDescriptor descriptor) {
String interpolatedMessage = executionContext.getMessageResolver().interpolate(
- message,
+ messageTemplate,
descriptor,
leafBeanInstance
);
ConstraintViolationImpl<T> failingConstraintViolation = new ConstraintViolationImpl<T>(
- message,
+ messageTemplate,
interpolatedMessage,
executionContext.getRootBean(),
beanClass,
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintViolationImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintViolationImpl.java 2009-02-17 13:06:46 UTC (rev 15988)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintViolationImpl.java 2009-02-17 13:16:07 UTC (rev 15989)
@@ -38,10 +38,10 @@
private String rawMessage;
- public ConstraintViolationImpl(String rawMessage, String interpolatedMessage, T rootBean, Class<T> beanClass,
+ public ConstraintViolationImpl(String messageTemplate, String interpolatedMessage, T rootBean, Class<T> beanClass,
Object leafBeanInstance, Object value,
String propertyPath, Class<?> group, ConstraintDescriptor constraintDescriptor) {
- this.rawMessage = rawMessage;
+ this.rawMessage = messageTemplate;
this.interpolatedMessage = interpolatedMessage;
this.rootBean = rootBean;
this.beanClass = beanClass;
@@ -56,11 +56,11 @@
/**
* {@inheritDoc}
*/
- public String getInterpolatedMessage() {
+ public String getMessage() {
return interpolatedMessage;
}
- public String getRawMessage() {
+ public String getMessageTemplate() {
return rawMessage;
}
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java 2009-02-17 13:06:46 UTC (rev 15988)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java 2009-02-17 13:16:07 UTC (rev 15989)
@@ -108,7 +108,7 @@
Set<ConstraintViolation<Customer>> constraintViolations = validator.validate( customer );
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
ConstraintViolation<Customer> constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
//FIXME nothing guarantee that a configuration can be reused
// now we modify the configuration, get a new factory and valiator and try again
@@ -128,7 +128,7 @@
constraintViolations = validator.validate( customer );
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong message", "my custom message", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "my custom message", constraintViolation.getMessage() );
}
@Test
@@ -146,7 +146,7 @@
Set<ConstraintViolation<Customer>> constraintViolations = validator.validate( customer );
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
ConstraintViolation<Customer> constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
// get a new factory using a custom configuration
configuration = Validation.byDefaultProvider().configure();
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ConstraintCompositionTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ConstraintCompositionTest.java 2009-02-17 13:06:46 UTC (rev 15988)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ConstraintCompositionTest.java 2009-02-17 13:16:07 UTC (rev 15989)
@@ -60,7 +60,7 @@
constraintViolations = validator.validate( address );
assertNumberOfViolations( constraintViolations, 3 );
for ( ConstraintViolation violation : constraintViolations ) {
- if ( violation.getInterpolatedMessage().equals( "A french zip code has a length of 5" ) ) {
+ if ( violation.getMessage().equals( "A french zip code has a length of 5" ) ) {
assertConstraintViolation(
violation,
"A french zip code has a length of 5",
@@ -69,7 +69,7 @@
"zipCode"
);
}
- else if ( violation.getInterpolatedMessage().equals( "must match \"d*\"" ) ) {
+ else if ( violation.getMessage().equals( "must match \"d*\"" ) ) {
assertConstraintViolation(
violation,
"must match \"d*\"",
@@ -78,7 +78,7 @@
"zipCode"
);
}
- else if ( violation.getInterpolatedMessage().equals( "must match \".....\"" ) ) {
+ else if ( violation.getMessage().equals( "must match \".....\"" ) ) {
assertConstraintViolation(
violation,
"must match \".....\"",
@@ -97,7 +97,7 @@
constraintViolations = validator.validate( address );
assertNumberOfViolations( constraintViolations, 2 );
for ( ConstraintViolation violation : constraintViolations ) {
- if ( violation.getInterpolatedMessage().equals( "A french zip code has a length of 5" ) ) {
+ if ( violation.getMessage().equals( "A french zip code has a length of 5" ) ) {
assertConstraintViolation(
violation,
"A french zip code has a length of 5",
@@ -106,7 +106,7 @@
"zipCode"
);
}
- else if ( violation.getInterpolatedMessage().equals( "must match \".....\"" ) ) {
+ else if ( violation.getMessage().equals( "must match \".....\"" ) ) {
assertConstraintViolation(
violation,
"must match \".....\"",
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java 2009-02-17 13:06:46 UTC (rev 15988)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java 2009-02-17 13:16:07 UTC (rev 15989)
@@ -122,7 +122,7 @@
constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be empty", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "may not be empty", constraintViolation.getMessage() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
@@ -133,7 +133,7 @@
constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "length must be between 0 and 30", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "length must be between 0 and 30", constraintViolation.getMessage() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", book.getSubtitle(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "subtitle", constraintViolation.getPropertyPath() );
@@ -144,7 +144,7 @@
constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "length must be between 0 and 20", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "length must be between 0 and 20", constraintViolation.getMessage() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", author.getCompany(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "author.company", constraintViolation.getPropertyPath() );
@@ -174,7 +174,7 @@
constraintViolations = validator.validate( book, Default.class );
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
@@ -315,7 +315,7 @@
constraintViolations = validator.validate( customer );
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
assertEquals( "Wrong root entity", customer, constraintViolation.getRootBean() );
assertEquals( "Wrong value", order1.getOrderNumber(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "orderList[0].orderNumber", constraintViolation.getPropertyPath() );
@@ -361,7 +361,7 @@
Set<ConstraintViolation<Actor>> constraintViolations = validator.validate( clint );
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be empty", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "may not be empty", constraintViolation.getMessage() );
assertEquals( "Wrong root entity", clint, constraintViolation.getRootBean() );
assertEquals( "Wrong value", morgan.getLastName(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "playedWith[0].playedWith[1].lastName", constraintViolation.getPropertyPath() );
@@ -380,7 +380,7 @@
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
assertEquals( "Wrong root entity", null, constraintViolation.getRootBean() );
assertEquals( "Wrong value", order.getOrderNumber(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "orderList[0].orderNumber", constraintViolation.getPropertyPath() );
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java 2009-02-17 13:06:46 UTC (rev 15988)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/TestUtil.java 2009-02-17 13:16:07 UTC (rev 15989)
@@ -85,7 +85,7 @@
}
public static void assertConstraintViolation(ConstraintViolation violation, String message) {
- assertEquals( "Wrong message", message, violation.getInterpolatedMessage() );
+ assertEquals( "Wrong message", message, violation.getMessage() );
}
public static void assertNumberOfViolations(Set violations, int expectedViolations) {
15 years, 2 months
Hibernate SVN: r15988 - beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-02-17 08:06:46 -0500 (Tue, 17 Feb 2009)
New Revision: 15988
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java
Log:
add byte support for Digits
Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java 2009-02-17 12:41:10 UTC (rev 15987)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java 2009-02-17 13:06:46 UTC (rev 15988)
@@ -33,14 +33,14 @@
* <li><code>BigInteger</code></li>
* <li><code>Number</code></li>
* <li><code>String</code></li>
- * <li><code>short</code>, <code>int</code>, <code>long</code>, <code>float</code>,
+ * <li><code>byte</code>, <code>short</code>, <code>int</code>,
+ * <code>long</code>, <code>float</code>,
* <code>double</code></li>
* </ul>
* <p/>
* <code>null</code> elements are considered valid
*
* @author Emmanuel Bernard
- * @todo support byte ?!
* @todo Is string supported or not?
*/
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
15 years, 2 months
Hibernate SVN: r15987 - beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-02-17 07:41:10 -0500 (Tue, 17 Feb 2009)
New Revision: 15987
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java
Log:
BVAL-119 @Pattern
Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java 2009-02-17 12:24:58 UTC (rev 15986)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java 2009-02-17 12:41:10 UTC (rev 15987)
@@ -34,7 +34,7 @@
/**
* error message template
*/
- String message() default "{validator.past}";
+ String message() default "{validator.pattern}";
/**
* groups the constraint belongs to
15 years, 2 months
Hibernate SVN: r15986 - beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-02-17 07:24:58 -0500 (Tue, 17 Feb 2009)
New Revision: 15986
Added:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java
Log:
BVAL-119 @Pattern
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pattern.java 2009-02-17 12:24:58 UTC (rev 15986)
@@ -0,0 +1,90 @@
+package javax.validation.constraints;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Documented;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+
+/**
+ * The annotated String must match the following regular expression.
+ * The regular expression follows the Java regular expression conventions
+ * see {@link java.util.regex.Pattern}.
+ *
+ * Accepts String.
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Pattern {
+ /**
+ * regular expression to match
+ */
+ String regexp();
+
+ /**
+ * Flags considered when resolving the regular expression
+ */
+ Flag[] flags() default {};
+
+ /**
+ * error message template
+ */
+ String message() default "{validator.past}";
+
+ /**
+ * groups the constraint belongs to
+ */
+ Class<?>[] groups() default { };
+
+ /**
+ * Possible Regexp flags
+ */
+ public static enum Flag {
+ /**
+ * Enables Unix lines mode
+ * @see java.util.regex.Pattern#UNIX_LINES
+ */
+ UNIX_LINES,
+
+ /**
+ * Enables case-insensitive matching
+ * @see java.util.regex.Pattern#CASE_INSENSITIVE
+ */
+ CASE_INSENSITIVE,
+
+ /**
+ * Permits whitespace and comments in pattern
+ * @see java.util.regex.Pattern#COMMENTS
+ */
+ COMMENTS,
+
+ /**
+ * Enables multiline mode
+ * @see java.util.regex.Pattern#MULTILINE
+ */
+ MULTILINE,
+
+ /**
+ * Enables dotall mode
+ * @see java.util.regex.Pattern#DOTALL
+ */
+ DOTALL,
+
+ /**
+ * Enables Unicode-aware case folding
+ * @see java.util.regex.Pattern#UNICODE_CASE
+ */
+ UNICODE_CASE,
+
+ /**
+ * Enables canonical equivalence
+ * @see java.util.regex.Pattern#CANON_EQ
+ */
+ CANON_EQ,
+ }
+}
15 years, 2 months
Hibernate SVN: r15985 - in branches/Branch_3_2/HibernateExt/tools: src/java/org/hibernate/cfg/reveng and 6 other directories.
by hibernate-commits@lists.jboss.org
Author: max.andersen(a)jboss.com
Date: 2009-02-17 06:06:06 -0500 (Tue, 17 Feb 2009)
New Revision: 15985
Added:
branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest.hbm.xml
Modified:
branches/Branch_3_2/HibernateExt/tools/.classpath
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/ant/AntHibernateToolTest.java
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenericExporterTest.java
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Hbm2HbmXmlTest.java
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OneToOneTest.java
branches/Branch_3_2/HibernateExt/tools/src/testsupport/anttest-build.xml
branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest-hibernate.cfg.xml
Log:
HBX-1108 don't ignore properties in cfg.xml just because properties are specified
HBX-1103 many-to-many detection did not check if the keys were part of the primary key as a whole
Fixed various issues in tests affected by changed ordering of classes and properties inside hibernate core.
Modified: branches/Branch_3_2/HibernateExt/tools/.classpath
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/.classpath 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/.classpath 2009-02-17 11:06:06 UTC (rev 15985)
@@ -1,35 +1,67 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src/java"/>
- <classpathentry kind="src" path="src/test"/>
- <classpathentry kind="src" path="src/testsupport"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="lib" path="lib/freemarker.jar"/>
- <classpathentry kind="lib" path="lib/jtidy-r8-20060801.jar"/>
- <classpathentry kind="lib" path="lib/org.eclipse.core.runtime_3.2.0.v20060603.jar"/>
- <classpathentry kind="lib" path="lib/org.eclipse.equinox.common_3.2.0.v20060603.jar"/>
- <classpathentry kind="lib" path="lib/org.eclipse.jdt.core_3.2.0.v_671.jar"/>
- <classpathentry kind="lib" path="lib/org.eclipse.text_3.2.0.v20060605-1400.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
- <classpathentry combineaccessrules="false" kind="src" path="/hibernate-3.2"/>
- <classpathentry kind="lib" path="/hibernate-3.2/lib/commons-logging-1.0.4.jar"/>
- <classpathentry kind="lib" path="/hibernate-3.2/lib/dom4j-1.6.1.jar"/>
- <classpathentry kind="lib" path="/hibernate-3.2/lib/ant-1.6.5.jar"/>
- <classpathentry kind="lib" path="/hibernate-3.2/lib/antlr-2.7.6.jar"/>
- <classpathentry kind="lib" path="/hibernate-3.2/lib/cglib-2.1.3.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/commons-collections-2.1.1.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/commons-logging-1.0.4.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/dom4j-1.6.1.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/ejb3-persistence.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/hibernate3.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/hibernate-annotations.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/hibernate-commons-annotations.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/hibernate-entitymanager.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/javassist.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/jboss-annotations-ejb3.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/jboss-archive-browsing.jar"/>
- <classpathentry kind="lib" path="lib/testlibs/jboss-ejb3x.jar"/>
- <classpathentry kind="lib" path="etc"/>
- <classpathentry kind="lib" path="C:/work/documents/presentations/eclipsecon2008/database/lib/hsqldb.jar"/>
- <classpathentry kind="output" path="build/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/java"/>
+ <classpathentry kind="src" path="src/test"/>
+ <classpathentry kind="src" path="src/testsupport"/>
+ <classpathentry kind="src" path="src/templates"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="lib/freemarker.jar"/>
+ <classpathentry kind="lib" path="lib/jtidy-r8-20060801.jar"/>
+ <classpathentry kind="lib" path="lib/org.eclipse.core.runtime_3.2.0.v20060603.jar"/>
+ <classpathentry kind="lib" path="lib/org.eclipse.equinox.common_3.2.0.v20060603.jar"/>
+ <classpathentry kind="lib" path="lib/org.eclipse.jdt.core_3.2.0.v_671.jar"/>
+ <classpathentry kind="lib" path="lib/org.eclipse.text_3.2.0.v20060605-1400.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+ <classpathentry kind="lib" path="lib/testlibs/commons-collections-2.1.1.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/commons-logging-1.0.4.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/dom4j-1.6.1.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/ejb3-persistence.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/hibernate3.jar" sourcepath="/hibernate-3.2"/>
+ <classpathentry kind="lib" path="lib/testlibs/hibernate-annotations.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/hibernate-commons-annotations.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/hibernate-entitymanager.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/javassist.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/jboss-annotations-ejb3.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/jboss-archive-browsing.jar"/>
+ <classpathentry kind="lib" path="lib/testlibs/jboss-ejb3x.jar"/>
+ <classpathentry kind="lib" path="etc"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/antlr-2.7.6.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/ant-1.6.5.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/cglib-2.1.3.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/junit-3.8.1.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/jdbc/hsqldb.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/ant-antlr-1.6.5.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/ant-junit-1.6.5.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/ant-launcher-1.6.5.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/ant-swing-1.6.5.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/asm-attrs.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/asm.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/c3p0-0.9.1.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/checkstyle-all.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/cleanimports.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/commons-collections-2.1.1.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/commons-logging-1.0.4.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/concurrent-1.3.2.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/dom4j-1.6.1.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/ehcache-1.2.3.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jaas.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jacc-1_0-fr.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/javassist.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jaxen-1.1-beta-7.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jboss-cache.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jboss-common.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jboss-jmx.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jboss-system.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jgroups-2.2.8.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/jta.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/log4j-1.2.11.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/oscache-2.1.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/proxool-0.8.3.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/swarmcache-1.0rc2.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/syndiag2.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/versioncheck.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/xerces-2.6.2.jar"/>
+ <classpathentry kind="lib" path="/hibernate-3.2/lib/xml-apis.jar"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/hibernate-3.2"/>
+ <classpathentry kind="output" path="build/classes"/>
+</classpath>
Modified: branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/DefaultReverseEngineeringStrategy.java 2009-02-17 11:06:06 UTC (rev 15985)
@@ -14,6 +14,7 @@
import org.apache.commons.logging.LogFactory;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.ForeignKey;
+import org.hibernate.mapping.PrimaryKey;
import org.hibernate.mapping.Table;
import org.hibernate.util.StringHelper;
@@ -256,8 +257,18 @@
public boolean isManyToManyTable(Table table) {
if(settings.getDetectManyToMany()) {
+
+ // if the number of columns in the primary key is different
+ // than the total number of columns then it can't be a middle table
+ PrimaryKey pk = table.getPrimaryKey();
+ if ( pk==null || pk.getColumns().size() != table.getColumnSpan() )
+ return false;
+
Iterator foreignKeyIterator = table.getForeignKeyIterator();
List foreignKeys = new ArrayList();
+
+ // if we have more than 2 fk, means we have more than 2 table implied
+ // in this table --> cannot be a simple many-to-many
while ( foreignKeyIterator.hasNext() ) {
ForeignKey fkey = (ForeignKey) foreignKeyIterator.next();
foreignKeys.add( fkey );
@@ -269,20 +280,28 @@
return false;
}
+ // tests that all columns are implied in the fks
Set columns = new HashSet();
Iterator columnIterator = table.getColumnIterator();
while ( columnIterator.hasNext() ) {
Column column = (Column) columnIterator.next();
columns.add(column);
}
-
+
+
foreignKeyIterator = table.getForeignKeyIterator();
while ( !columns.isEmpty() && foreignKeyIterator.hasNext() ) {
ForeignKey element = (ForeignKey) foreignKeyIterator.next();
columns.removeAll( element.getColumns() );
}
// what if one of the columns is not the primary key?
+
return columns.isEmpty();
+
+
+
+
+
} else {
return false;
}
Modified: branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/tool/ant/ConfigurationTask.java 2009-02-17 11:06:06 UTC (rev 15985)
@@ -96,8 +96,11 @@
if (configurationFile != null) configuration.configure( configurationFile );
addMappings(getFiles() );
Properties p = getProperties();
- if(p!=null) {
- configuration.setProperties(p);
+ if(p!=null) {
+ Properties overrides = new Properties();
+ overrides.putAll(configuration.getProperties());
+ overrides.putAll(p);
+ configuration.setProperties(overrides);
}
}
Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/ant/AntHibernateToolTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/ant/AntHibernateToolTest.java 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/ant/AntHibernateToolTest.java 2009-02-17 11:06:06 UTC (rev 15985)
@@ -51,7 +51,7 @@
// allow to test creation of script file + delimiter
// + non execution (test will fail if executed because of crappy delimiter)
- executeTarget("testScriptCreattion");
+ executeTarget("testScriptCreation");
assertTrue(onlyCreate.exists());
assertTrue(onlyDrop.exists());
Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenericExporterTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenericExporterTest.java 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/GenericExporterTest.java 2009-02-17 11:06:06 UTC (rev 15985)
@@ -149,7 +149,7 @@
ge.start();
fail();
} catch(ExporterException e) {
- assertTrue(e.getMessage().startsWith("Error while processing Entity: HelloWorld"));
+ assertTrue(e.getMessage().startsWith("Error while processing Entity:"));
}
Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Hbm2HbmXmlTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Hbm2HbmXmlTest.java 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/hbm2hbmxml/Hbm2HbmXmlTest.java 2009-02-17 11:06:06 UTC (rev 15985)
@@ -307,12 +307,26 @@
xpath = DocumentHelper.createXPath("//hibernate-mapping/class/id/generator/param");
list = xpath.selectNodes(document);
assertEquals("Expected to get correct number of generator param elements", 2, list.size() );
- Attribute paramTableAtt = ( (Element)list.get(0) ).attribute("name");
+ Element tableElement = (Element)list.get(0);
+ Attribute paramTableAtt = tableElement.attribute("name");
+ Element columnElement = (Element)list.get(1);
+ Attribute paramColumnAtt = columnElement.attribute("name");
+
+ if(paramTableAtt.getStringValue().equals("column")) {
+ // to make sure the order of the elements doesn't matter.
+ Element tempElement = tableElement;
+ Attribute temp = paramTableAtt;
+
+ paramTableAtt = paramColumnAtt;
+ tableElement = columnElement;
+ paramColumnAtt = temp;
+ columnElement = tempElement;
+ }
+
assertEquals("Unexpected generator param name", "table", paramTableAtt.getStringValue() );
- Attribute paramColumnAtt = ( (Element)list.get(1) ).attribute("name");
assertEquals("Unexpected generator param name", "column", paramColumnAtt.getStringValue() );
- assertEquals("Unexpected param value for table", "uni_table", ( (Element)list.get(0) ).getStringValue() );
- assertEquals("Unexpected param value for column", "next_hi_value", ( (Element)list.get(1) ).getStringValue() );
+ assertEquals("Unexpected param value for table", "uni_table", tableElement.getStringValue() );
+ assertEquals("Unexpected param value for column", "next_hi_value", columnElement.getStringValue() );
}
public void testGeneralHbmSettingsQuery() throws Exception {
Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/ManyToManyTest.java 2009-02-17 11:06:06 UTC (rev 15985)
@@ -98,7 +98,14 @@
assertNotNull( projectClass.getProperty( "employees" ));
}
-
+
+ public void testFalsePositive() {
+
+ assertNotNull("Middle class should be generated.", cfg.getClassMapping( "NonMiddle" ));
+
+
+ }
+
public void testBuildMappings() {
localCfg.buildMappings();
@@ -115,9 +122,13 @@
assertFileAndExists( new File(getOutputDir(), "Project.hbm.xml") );
assertFileAndExists( new File(getOutputDir(), "WorksOnContext.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "Right.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "Left.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "NonMiddle.hbm.xml") ); //Must be there since it has a fkey that is not part of the pk
+
assertFalse(new File(getOutputDir(), "WorksOn.hbm.xml").exists() );
- assertEquals(3, getOutputDir().listFiles().length);
+ assertEquals(6, getOutputDir().listFiles().length);
Configuration configuration = new Configuration()
.addFile( new File(getOutputDir(), "Employee.hbm.xml") )
@@ -145,6 +156,10 @@
"create table WORKS_ON ( project_id integer not null, employee_id integer not null, primary key (project_id, employee_id), constraint workson_employee foreign key (employee_id) references EMPLOYEE, foreign key (project_id) references PROJECT )",
"create table WORKS_ON_CONTEXT ( project_id integer not null, employee_id integer not null, created_by integer, primary key (project_id, employee_id), constraint workson_ctx_employee foreign key (employee_id) references EMPLOYEE, foreign key (project_id) references PROJECT, foreign key (created_by) references EMPLOYEE )",
//"alter table PROJECT add constraint project_manager foreign key (team_lead) references EMPLOYEE"
+ // nonmiddle left and right are used to test a false association table isn't detected.
+ "create table LEFT ( id integer not null, primary key (id) )",
+ "create table RIGHT ( id integer not null, primary key (id) )",
+ "create table NON_MIDDLE ( left_id integer not null, right_id integer not null, primary key (left_id), constraint FK_MIDDLE_LEFT foreign key (left_id) references LEFT, constraint FK_MIDDLE_RIGHT foreign key (right_id) references RIGHT)",
};
}
@@ -154,7 +169,10 @@
"drop table WORKS_ON_CONTEXT",
"drop table WORKS_ON",
"drop table EMPLOYEE",
- "drop table PROJECT",
+ "drop table PROJECT",
+ "drop table NON_MIDDLE",
+ "drop table LEFT",
+ "drop table RIGHT",
};
}
Modified: branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OneToOneTest.java
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OneToOneTest.java 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/OneToOneTest.java 2009-02-17 11:06:06 UTC (rev 15985)
@@ -1,316 +1,335 @@
-/*
- * Created on 2004-12-01
- *
- */
-package org.hibernate.tool.test.jdbc2cfg;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.hibernate.MappingException;
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.JDBCMetaDataConfiguration;
-import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
-import org.hibernate.mapping.OneToOne;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.mapping.Property;
-import org.hibernate.mapping.SimpleValue;
-import org.hibernate.tool.JDBCMetaDataBinderTestCase;
-import org.hibernate.tool.hbm2ddl.SchemaValidator;
-import org.hibernate.tool.hbm2x.HibernateMappingExporter;
-import org.hibernate.tool.hbm2x.POJOExporter;
-import org.hibernate.tool.test.TestHelper;
-
-/**
- * @author max
- *
- */
-public class OneToOneTest extends JDBCMetaDataBinderTestCase {
-
- public static Test suite() {
- return new TestSuite(OneToOneTest.class);
- }
-
- private JDBCMetaDataConfiguration localCfg;
-
- protected void configure(JDBCMetaDataConfiguration configuration) {
- super.configure( configuration );
-
- }
-
- protected void setUp() throws Exception {
- super.setUp();
-
- localCfg = new JDBCMetaDataConfiguration();
-
- DefaultReverseEngineeringStrategy c = new DefaultReverseEngineeringStrategy();
-
- localCfg.setReverseEngineeringStrategy(c);
- localCfg.readFromJDBC();
- }
- protected void tearDown() throws Exception {
- localCfg = null;
-
- super.tearDown();
- }
-
- public void testOneToOneSingleColumnBiDirectional() {
-
- PersistentClass person = localCfg.getClassMapping("Person");
-
- Property addressProperty = person.getProperty("addressPerson");
- assertNotNull(addressProperty);
-
- assertTrue(addressProperty.getValue() instanceof OneToOne);
-
- OneToOne oto = (OneToOne) addressProperty.getValue();
-
- assertEquals(oto.getColumnSpan(),1);
- assertEquals("Person", oto.getEntityName());
- assertEquals("AddressPerson", oto.getReferencedEntityName());
-
-
- assertEquals(2, person.getPropertyClosureSpan());
- assertEquals("personId", person.getIdentifierProperty().getName());
- assertFalse(oto.isConstrained());
-
- PersistentClass addressPerson = localCfg.getClassMapping("AddressPerson");
-
-
- Property personProperty = addressPerson.getProperty("person");
- assertNotNull(personProperty);
-
- assertTrue(personProperty.getValue() instanceof OneToOne);
-
- oto = (OneToOne) personProperty.getValue();
-
- assertTrue(oto.isConstrained());
- assertEquals(oto.getColumnSpan(),1);
- assertEquals("AddressPerson", oto.getEntityName());
- assertEquals("Person", oto.getReferencedEntityName());
-
- assertEquals(2, addressPerson.getPropertyClosureSpan());
- assertEquals("addressId", addressPerson.getIdentifierProperty().getName());
-
- }
-
- public void testAddressWithForeignKeyGeneration() {
-
- PersistentClass address = localCfg.getClassMapping("AddressPerson");
-
- assertEquals("foreign", ((SimpleValue)address.getIdentifier()).getIdentifierGeneratorStrategy());
- }
-
- public void testOneToOneMultiColumnBiDirectional() {
-
- PersistentClass person = localCfg.getClassMapping("MultiPerson");
-
- Property addressProperty = person.getProperty("addressMultiPerson");
- assertNotNull(addressProperty);
-
- assertTrue(addressProperty.getValue() instanceof OneToOne);
-
- OneToOne oto = (OneToOne) addressProperty.getValue();
-
- assertEquals(oto.getColumnSpan(),2);
- assertEquals("MultiPerson", oto.getEntityName());
- assertEquals("AddressMultiPerson", oto.getReferencedEntityName());
- assertFalse(oto.isConstrained());
-
- assertEquals(2, person.getPropertyClosureSpan());
- assertEquals("compositeid gives generic id name", "id", person.getIdentifierProperty().getName());
-
- PersistentClass addressPerson = localCfg.getClassMapping("AddressMultiPerson");
-
-
- Property personProperty = addressPerson.getProperty("multiPerson");
- assertNotNull(personProperty);
-
- assertTrue(personProperty.getValue() instanceof OneToOne);
-
- oto = (OneToOne) personProperty.getValue();
-
- assertEquals(oto.getColumnSpan(),2);
- assertEquals("AddressMultiPerson", oto.getEntityName());
- assertEquals("MultiPerson", oto.getReferencedEntityName());
-
- assertEquals(2, addressPerson.getPropertyClosureSpan());
- assertEquals("compositeid gives generic id name","id", addressPerson.getIdentifierProperty().getName());
- assertTrue(oto.isConstrained());
- }
-
-
- public void xtestNoCreation() {
-
- assertNull("No middle class should be generated.", cfg.getClassMapping( "WorksOn" ));
-
- assertNotNull("Should create worksontext since one of the foreign keys is not part of pk", cfg.getClassMapping( "WorksOnContext" ));
-
- PersistentClass projectClass = cfg.getClassMapping("Project");
- assertNotNull( projectClass );
-
- PersistentClass employeeClass = cfg.getClassMapping("Employee");
- assertNotNull( employeeClass );
-
- assertPropertyNotExist( projectClass, "worksOns" );
- assertPropertyNotExist( employeeClass, "worksOns" );
-
- Property property = employeeClass.getProperty( "projects" );
- assertNotNull( property);
- assertNotNull( projectClass.getProperty( "employees" ));
-
- }
-
- public void testBuildMappings() {
-
- localCfg.buildMappings();
-
- }
-
- public void testGenerateMappingAndReadable() throws MalformedURLException {
-
- cfg.buildMappings();
-
- HibernateMappingExporter hme = new HibernateMappingExporter(cfg, getOutputDir());
- hme.start();
-
- assertFileAndExists( new File(getOutputDir(), "Person.hbm.xml") );
- assertFileAndExists( new File(getOutputDir(), "AddressPerson.hbm.xml") );
- assertFileAndExists( new File(getOutputDir(), "AddressMultiPerson.hbm.xml") );
- assertFileAndExists( new File(getOutputDir(), "MultiPerson.hbm.xml") );
-
- assertEquals(4, getOutputDir().listFiles().length);
-
- POJOExporter exporter = new POJOExporter(cfg, getOutputDir() );
- exporter.setTemplatePath(new String[0]);
- exporter.getProperties().setProperty("ejb3", "false");
- exporter.getProperties().setProperty("jdk5", "false");
- exporter.start();
-
- ArrayList list = new ArrayList();
- List jars = new ArrayList();
- addAnnotationJars(jars);
- TestHelper.compile(
- getOutputDir(), getOutputDir(), TestHelper.visitAllFiles( getOutputDir(), list ), "1.5",
- TestHelper.buildClasspath( jars )
- );
-
- URL[] urls = new URL[] { getOutputDir().toURL() };
- ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
- URLClassLoader ucl = new URLClassLoader(urls, oldLoader );
- try {
- Thread.currentThread().setContextClassLoader(ucl);
-
- Configuration configuration = new Configuration()
- .addFile( new File(getOutputDir(), "Person.hbm.xml") )
- .addFile( new File(getOutputDir(), "AddressPerson.hbm.xml") )
- .addFile( new File(getOutputDir(), "AddressMultiPerson.hbm.xml"))
- .addFile( new File(getOutputDir(), "MultiPerson.hbm.xml"));
-
- configuration.buildMappings();
-
- new SchemaValidator(configuration).validate();
- } finally {
- Thread.currentThread().setContextClassLoader(oldLoader);
- }
- }
-
- public void testGenerateAnnotatedClassesAndReadable() throws MappingException, ClassNotFoundException, MalformedURLException {
-
- cfg.buildMappings();
- POJOExporter exporter = new POJOExporter(cfg, getOutputDir() );
- exporter.setTemplatePath(new String[0]);
- exporter.getProperties().setProperty("ejb3", "true");
- exporter.getProperties().setProperty("jdk5", "true");
- exporter.start();
-
- assertFileAndExists( new File(getOutputDir(), "Person.java") );
- assertFileAndExists( new File(getOutputDir(), "AddressPerson.java") );
- assertFileAndExists( new File(getOutputDir(), "MultiPersonId.java") );
- assertFileAndExists( new File(getOutputDir(), "AddressMultiPerson.java") );
- assertFileAndExists( new File(getOutputDir(), "AddressMultiPersonId.java") );
- assertFileAndExists( new File(getOutputDir(), "MultiPerson.java") );
-
- assertEquals(6, getOutputDir().listFiles().length);
- ArrayList list = new ArrayList();
- List jars = new ArrayList();
- addAnnotationJars(jars);
- TestHelper.compile(
- getOutputDir(), getOutputDir(), TestHelper.visitAllFiles( getOutputDir(), list ), "1.5",
- TestHelper.buildClasspath( jars )
- );
- URL[] urls = new URL[] { getOutputDir().toURL() };
- ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
- URLClassLoader ucl = new URLClassLoader(urls, oldLoader );
- Class personClass = ucl.loadClass("Person");
- Class multiPersonClass = ucl.loadClass("MultiPerson");
- Class addressMultiPerson = ucl.loadClass("AddressMultiPerson");
- Class addressMultiPersonId = ucl.loadClass("AddressMultiPersonId");
- Class addressPerson = ucl.loadClass("AddressPerson");
- Class multiPersonIdClass = ucl.loadClass("MultiPersonId");
- try {
- Thread.currentThread().setContextClassLoader(ucl);
- AnnotationConfiguration configuration = new AnnotationConfiguration();
- configuration.addAnnotatedClass(personClass)
- .addAnnotatedClass(multiPersonClass)
- .addAnnotatedClass(addressMultiPerson)
- .addAnnotatedClass(addressMultiPersonId)
- .addAnnotatedClass(addressPerson)
- .addAnnotatedClass(multiPersonIdClass);
-
- configuration.buildMappings();
- new SchemaValidator(configuration).validate();
- } finally {
- Thread.currentThread().setContextClassLoader(oldLoader);
- }
-
- }
-
- private void addAnnotationJars(List jars) {
- jars.add( "ejb3-persistence.jar" );
- jars.add( "hibernate-annotations.jar" );
- jars.add( "hibernate-commons-annotations.jar" );
- jars.add( "hibernate3.jar" );
- jars.add( "dom4j-1.6.1.jar" );
- jars.add( "commons-logging-1.0.4.jar" );
-
- }
-
- private void assertPropertyNotExist(PersistentClass projectClass, String prop) {
- try {
- projectClass.getProperty(prop);
- fail("property " + prop + " should not exist on " + projectClass);
- } catch(MappingException e) {
- // expected
- }
- }
-
- protected String[] getCreateSQL() {
- return new String[] {
- "create table PERSON ( person_id integer not null, name varchar(50), primary key (person_id) )",
- "create table ADDRESS_PERSON ( address_id integer not null, name varchar(50), primary key (address_id), constraint address_person foreign key (address_id) references PERSON)",
- "create table MULTI_PERSON ( person_id integer not null, person_compid integer not null, name varchar(50), primary key (person_id, person_compid) )",
- "create table ADDRESS_MULTI_PERSON ( address_id integer not null, address_compid integer not null, name varchar(50), primary key (address_id, address_compid), constraint address_multi_person foreign key (address_id, address_compid) references MULTI_PERSON)",
-
- };
- }
-
- protected String[] getDropSQL() {
- return new String[] {
- "drop table ADDRESS_PERSON",
- "drop table PERSON",
- "drop table ADDRESS_MULTI_PERSON",
- "drop table MULTI_PERSON",
-
- };
- }
-
-}
+/*
+ * Created on 2004-12-01
+ *
+ */
+package org.hibernate.tool.test.jdbc2cfg;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.hibernate.MappingException;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.JDBCMetaDataConfiguration;
+import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
+import org.hibernate.mapping.OneToOne;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.tool.JDBCMetaDataBinderTestCase;
+import org.hibernate.tool.hbm2ddl.SchemaValidator;
+import org.hibernate.tool.hbm2x.HibernateMappingExporter;
+import org.hibernate.tool.hbm2x.POJOExporter;
+import org.hibernate.tool.test.TestHelper;
+
+/**
+ * @author max
+ *
+ */
+public class OneToOneTest extends JDBCMetaDataBinderTestCase {
+
+ public static Test suite() {
+ return new TestSuite(OneToOneTest.class);
+ }
+
+ private JDBCMetaDataConfiguration localCfg;
+
+ protected void configure(JDBCMetaDataConfiguration configuration) {
+ super.configure( configuration );
+
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ localCfg = new JDBCMetaDataConfiguration();
+
+ DefaultReverseEngineeringStrategy c = new DefaultReverseEngineeringStrategy();
+
+ localCfg.setReverseEngineeringStrategy(c);
+ localCfg.readFromJDBC();
+ }
+ protected void tearDown() throws Exception {
+ localCfg = null;
+
+ super.tearDown();
+ }
+
+ public void testOneToOneSingleColumnBiDirectional() {
+
+ PersistentClass person = localCfg.getClassMapping("Person");
+
+ Property addressProperty = person.getProperty("addressPerson");
+ assertNotNull(addressProperty);
+
+ assertTrue(addressProperty.getValue() instanceof OneToOne);
+
+ OneToOne oto = (OneToOne) addressProperty.getValue();
+
+ assertEquals(oto.getColumnSpan(),1);
+ assertEquals("Person", oto.getEntityName());
+ assertEquals("AddressPerson", oto.getReferencedEntityName());
+
+
+ assertEquals(2, person.getPropertyClosureSpan());
+ assertEquals("personId", person.getIdentifierProperty().getName());
+ assertFalse(oto.isConstrained());
+
+ PersistentClass addressPerson = localCfg.getClassMapping("AddressPerson");
+
+
+ Property personProperty = addressPerson.getProperty("person");
+ assertNotNull(personProperty);
+
+ assertTrue(personProperty.getValue() instanceof OneToOne);
+
+ oto = (OneToOne) personProperty.getValue();
+
+ assertTrue(oto.isConstrained());
+ assertEquals(oto.getColumnSpan(),1);
+ assertEquals("AddressPerson", oto.getEntityName());
+ assertEquals("Person", oto.getReferencedEntityName());
+
+ assertEquals(2, addressPerson.getPropertyClosureSpan());
+ assertEquals("addressId", addressPerson.getIdentifierProperty().getName());
+
+ }
+
+ public void testAddressWithForeignKeyGeneration() {
+
+ PersistentClass address = localCfg.getClassMapping("AddressPerson");
+
+ assertEquals("foreign", ((SimpleValue)address.getIdentifier()).getIdentifierGeneratorStrategy());
+ }
+
+ public void testOneToOneMultiColumnBiDirectional() {
+
+ PersistentClass person = localCfg.getClassMapping("MultiPerson");
+
+ Property addressProperty = person.getProperty("addressMultiPerson");
+ assertNotNull(addressProperty);
+
+ assertTrue(addressProperty.getValue() instanceof OneToOne);
+
+ OneToOne oto = (OneToOne) addressProperty.getValue();
+
+ assertEquals(oto.getColumnSpan(),2);
+ assertEquals("MultiPerson", oto.getEntityName());
+ assertEquals("AddressMultiPerson", oto.getReferencedEntityName());
+ assertFalse(oto.isConstrained());
+
+ assertEquals(2, person.getPropertyClosureSpan());
+ assertEquals("compositeid gives generic id name", "id", person.getIdentifierProperty().getName());
+
+ PersistentClass addressPerson = localCfg.getClassMapping("AddressMultiPerson");
+
+
+ Property personProperty = addressPerson.getProperty("multiPerson");
+ assertNotNull(personProperty);
+
+ assertTrue(personProperty.getValue() instanceof OneToOne);
+
+ oto = (OneToOne) personProperty.getValue();
+
+ assertEquals(oto.getColumnSpan(),2);
+ assertEquals("AddressMultiPerson", oto.getEntityName());
+ assertEquals("MultiPerson", oto.getReferencedEntityName());
+
+ assertEquals(2, addressPerson.getPropertyClosureSpan());
+ assertEquals("compositeid gives generic id name","id", addressPerson.getIdentifierProperty().getName());
+ assertTrue(oto.isConstrained());
+ }
+
+
+ public void xtestNoCreation() {
+
+ assertNull("No middle class should be generated.", cfg.getClassMapping( "WorksOn" ));
+
+ assertNotNull("Should create worksontext since one of the foreign keys is not part of pk", cfg.getClassMapping( "WorksOnContext" ));
+
+ PersistentClass projectClass = cfg.getClassMapping("Project");
+ assertNotNull( projectClass );
+
+ PersistentClass employeeClass = cfg.getClassMapping("Employee");
+ assertNotNull( employeeClass );
+
+ assertPropertyNotExist( projectClass, "worksOns" );
+ assertPropertyNotExist( employeeClass, "worksOns" );
+
+ Property property = employeeClass.getProperty( "projects" );
+ assertNotNull( property);
+ assertNotNull( projectClass.getProperty( "employees" ));
+
+ }
+
+ public void testBuildMappings() {
+
+ localCfg.buildMappings();
+
+ }
+
+ public void testGenerateMappingAndReadable() throws MalformedURLException {
+
+ cfg.buildMappings();
+
+ HibernateMappingExporter hme = new HibernateMappingExporter(cfg, getOutputDir());
+ hme.start();
+
+ assertFileAndExists( new File(getOutputDir(), "Person.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "AddressPerson.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "AddressMultiPerson.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "MultiPerson.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "Middle.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "Left.hbm.xml") );
+ assertFileAndExists( new File(getOutputDir(), "Right.hbm.xml") );
+
+ assertEquals(7, getOutputDir().listFiles().length);
+
+ POJOExporter exporter = new POJOExporter(cfg, getOutputDir() );
+ exporter.setTemplatePath(new String[0]);
+ exporter.getProperties().setProperty("ejb3", "false");
+ exporter.getProperties().setProperty("jdk5", "false");
+ exporter.start();
+
+ ArrayList list = new ArrayList();
+ List jars = new ArrayList();
+ addAnnotationJars(jars);
+ TestHelper.compile(
+ getOutputDir(), getOutputDir(), TestHelper.visitAllFiles( getOutputDir(), list ), "1.5",
+ TestHelper.buildClasspath( jars )
+ );
+
+ URL[] urls = new URL[] { getOutputDir().toURL() };
+ ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+ URLClassLoader ucl = new URLClassLoader(urls, oldLoader );
+ try {
+ Thread.currentThread().setContextClassLoader(ucl);
+
+ Configuration configuration = new Configuration()
+ .addFile( new File(getOutputDir(), "Person.hbm.xml") )
+ .addFile( new File(getOutputDir(), "AddressPerson.hbm.xml") )
+ .addFile( new File(getOutputDir(), "AddressMultiPerson.hbm.xml"))
+ .addFile( new File(getOutputDir(), "MultiPerson.hbm.xml"))
+ .addFile( new File(getOutputDir(), "Middle.hbm.xml"))
+ .addFile( new File(getOutputDir(), "Left.hbm.xml"))
+ .addFile( new File(getOutputDir(), "Right.hbm.xml"));
+
+ configuration.buildMappings();
+
+ new SchemaValidator(configuration).validate();
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldLoader);
+ }
+ }
+
+ public void testGenerateAnnotatedClassesAndReadable() throws MappingException, ClassNotFoundException, MalformedURLException {
+
+ cfg.buildMappings();
+ POJOExporter exporter = new POJOExporter(cfg, getOutputDir() );
+ exporter.setTemplatePath(new String[0]);
+ exporter.getProperties().setProperty("ejb3", "true");
+ exporter.getProperties().setProperty("jdk5", "true");
+ exporter.start();
+
+ assertFileAndExists( new File(getOutputDir(), "Person.java") );
+ assertFileAndExists( new File(getOutputDir(), "AddressPerson.java") );
+ assertFileAndExists( new File(getOutputDir(), "MultiPersonId.java") );
+ assertFileAndExists( new File(getOutputDir(), "AddressMultiPerson.java") );
+ assertFileAndExists( new File(getOutputDir(), "AddressMultiPersonId.java") );
+ assertFileAndExists( new File(getOutputDir(), "MultiPerson.java") );
+
+ assertEquals(9, getOutputDir().listFiles().length);
+ ArrayList list = new ArrayList();
+ List jars = new ArrayList();
+ addAnnotationJars(jars);
+ TestHelper.compile(
+ getOutputDir(), getOutputDir(), TestHelper.visitAllFiles( getOutputDir(), list ), "1.5",
+ TestHelper.buildClasspath( jars )
+ );
+ URL[] urls = new URL[] { getOutputDir().toURL() };
+ ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+ URLClassLoader ucl = new URLClassLoader(urls, oldLoader );
+ Class personClass = ucl.loadClass("Person");
+ Class multiPersonClass = ucl.loadClass("MultiPerson");
+ Class addressMultiPerson = ucl.loadClass("AddressMultiPerson");
+ Class addressMultiPersonId = ucl.loadClass("AddressMultiPersonId");
+ Class addressPerson = ucl.loadClass("AddressPerson");
+ Class multiPersonIdClass = ucl.loadClass("MultiPersonId");
+ Class middleClass = ucl.loadClass("Middle");
+ Class rightClass = ucl.loadClass("Left");
+ Class leftClass = ucl.loadClass("Right");
+ try {
+ Thread.currentThread().setContextClassLoader(ucl);
+ AnnotationConfiguration configuration = new AnnotationConfiguration();
+ configuration.addAnnotatedClass(personClass)
+ .addAnnotatedClass(multiPersonClass)
+ .addAnnotatedClass(addressMultiPerson)
+ .addAnnotatedClass(addressMultiPersonId)
+ .addAnnotatedClass(addressPerson)
+ .addAnnotatedClass(multiPersonIdClass)
+ .addAnnotatedClass(middleClass)
+ .addAnnotatedClass(rightClass)
+ .addAnnotatedClass(leftClass);
+
+ configuration.buildMappings();
+ new SchemaValidator(configuration).validate();
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldLoader);
+ }
+
+ }
+
+ private void addAnnotationJars(List jars) {
+ jars.add( "ejb3-persistence.jar" );
+ jars.add( "hibernate-annotations.jar" );
+ jars.add( "hibernate-commons-annotations.jar" );
+ jars.add( "hibernate3.jar" );
+ jars.add( "dom4j-1.6.1.jar" );
+ jars.add( "commons-logging-1.0.4.jar" );
+
+ }
+
+ private void assertPropertyNotExist(PersistentClass projectClass, String prop) {
+ try {
+ projectClass.getProperty(prop);
+ fail("property " + prop + " should not exist on " + projectClass);
+ } catch(MappingException e) {
+ // expected
+ }
+ }
+
+ protected String[] getCreateSQL() {
+ return new String[] {
+ // middle left and right are used to test a false association table isn't detected.
+ "create table LEFT ( id integer not null, primary key (id) )",
+ "create table RIGHT ( id integer not null, primary key (id) )",
+ "create table MIDDLE ( left_id integer not null, right_id integer not null, primary key (left_id), constraint FK_MIDDLE_LEFT foreign key (left_id) references LEFT, constraint FK_MIDDLE_RIGHT foreign key (right_id) references RIGHT)",
+ "create table PERSON ( person_id integer not null, name varchar(50), primary key (person_id) )",
+ "create table ADDRESS_PERSON ( address_id integer not null, name varchar(50), primary key (address_id), constraint address_person foreign key (address_id) references PERSON)",
+ "create table MULTI_PERSON ( person_id integer not null, person_compid integer not null, name varchar(50), primary key (person_id, person_compid) )",
+ "create table ADDRESS_MULTI_PERSON ( address_id integer not null, address_compid integer not null, name varchar(50), primary key (address_id, address_compid), constraint address_multi_person foreign key (address_id, address_compid) references MULTI_PERSON)",
+
+ };
+ }
+
+ protected String[] getDropSQL() {
+ return new String[] {
+ "drop table MIDDLE",
+ "drop table LEFT",
+ "drop table RIGHT",
+ "drop table ADDRESS_PERSON",
+ "drop table PERSON",
+ "drop table ADDRESS_MULTI_PERSON",
+ "drop table MULTI_PERSON",
+
+ };
+ }
+
+}
Modified: branches/Branch_3_2/HibernateExt/tools/src/testsupport/anttest-build.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/testsupport/anttest-build.xml 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/testsupport/anttest-build.xml 2009-02-17 11:06:06 UTC (rev 15985)
@@ -19,15 +19,12 @@
<target name="cleanup" description="task used for ensuring cleanup to be done even in the case of test failure" depends="afterCfg2hbm"/>
- <target name="testScriptCreattion">
+ <target name="testScriptCreation">
- <mkdir dir="build/testsupport" />
+
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" />
<hibernatetool destdir="${build.dir}/topdown">
- <classpath>
- <path location="../../build/testsupport" />
- </classpath>
-
+
<configuration namingstrategy="org.hibernate.cfg.ImprovedNamingStrategy" entityresolver="DummyEntityResolver">
<fileset dir="../test" id="id">
<include name="**/*TopDown.hbm.xml" />
@@ -53,13 +50,10 @@
<target name="testantcfgUpdateExecuted">
- <mkdir dir="build/testsupport" />
+
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" />
<hibernatetool destdir="${build.dir}/topdown">
- <classpath>
- <path location="../../build/testsupport" />
- </classpath>
-
+
<configuration namingstrategy="org.hibernate.cfg.ImprovedNamingStrategy" entityresolver="DummyEntityResolver">
<fileset dir="../test" id="id">
<include name="**/*TopDown.hbm.xml" />
@@ -78,13 +72,10 @@
<target name="testantcfgExportExecuted">
- <mkdir dir="build/testsupport" />
+
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" />
<hibernatetool destdir="${build.dir}/topdown">
- <classpath>
- <path location="../../build/testsupport" />
- </classpath>
-
+
<configuration namingstrategy="org.hibernate.cfg.ImprovedNamingStrategy" entityresolver="DummyEntityResolver">
<fileset dir="../test" id="id">
<include name="**/*TopDown.hbm.xml" />
@@ -450,6 +441,7 @@
<sql onerror="continue" driver="${hibernate.connection.driver_class}" url="${hibernate.connection.url}" userid="${hibernate.connection.username}" password="${hibernate.connection.password}" classpath="${hibernate-core.home}\jdbc\hsqldb.jar">
delete from VeriSimplyTable where id > 0;
drop table VeriSimplyTable;
+ drop table column;
</sql>
</target>
@@ -537,6 +529,7 @@
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="tasks.classpath" />
<hibernatetool destdir="${build.dir}/querytest">
<configuration propertyfile="../../etc/hibernate.properties" configurationfile="querytest-hibernate.cfg.xml" />
+ <classpath location="."/>
<query>
<hql>from java.lang.Object</hql>
<hql>from java.io.Serializable</hql>
Modified: branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest-hibernate.cfg.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest-hibernate.cfg.xml 2009-02-17 10:29:05 UTC (rev 15984)
+++ branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest-hibernate.cfg.xml 2009-02-17 11:06:06 UTC (rev 15985)
@@ -3,7 +3,10 @@
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
- <session-factory>
+ <session-factory>
<property name="show_sql">true</property>
+ <!-- Drop and re-create the database schema on startup -->
+ <property name="hibernate.hbm2ddl.auto">create</property>
+ <mapping resource="querytest.hbm.xml"/>
</session-factory>
</hibernate-configuration>
\ No newline at end of file
Added: branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest.hbm.xml
===================================================================
--- branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest.hbm.xml (rev 0)
+++ branches/Branch_3_2/HibernateExt/tools/src/testsupport/querytest.hbm.xml 2009-02-17 11:06:06 UTC (rev 15985)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.hibernate.tool.hbm2x.hbm2hbmxml">
+<!--
+ This mapping demonstrates basic attributes of the mapping document
+
+ (1) Simple id and properties
+ (2) Id generation with no arguments.
+-->
+ <class name="org.hibernate.mapping.Column">
+ <id name="name">
+ <generator class="assigned"/>
+ </id>
+
+ <property name="length"
+ type="int">
+
+ </property>
+ </class>
+
+</hibernate-mapping>
15 years, 2 months
Hibernate SVN: r15984 - validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-02-17 05:29:05 -0500 (Tue, 17 Feb 2009)
New Revision: 15984
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java
Log:
HV-118 fixed typo in BuiltinConstraints
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java 2009-02-17 10:23:38 UTC (rev 15983)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java 2009-02-17 10:29:05 UTC (rev 15984)
@@ -33,6 +33,7 @@
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Size;
+import javax.validation.constraints.Past;
import org.hibernate.validation.constraints.AssertFalseValidator;
import org.hibernate.validation.constraints.AssertTrueValidator;
@@ -98,7 +99,7 @@
constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
constraintList.add( PastValidatorForCalendar.class );
constraintList.add( PastValidatorForDate.class );
- builtinConstraints.put( Future.class, constraintList );
+ builtinConstraints.put( Past.class, constraintList );
constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
constraintList.add( DigitsValidatorForString.class );
15 years, 2 months
Hibernate SVN: r15983 - validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints and 3 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-02-17 05:23:38 -0500 (Tue, 17 Feb 2009)
New Revision: 15983
Added:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForNumber.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForString.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java
validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages.properties
validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages_de.properties
Log:
HV-117 Added builtin constrain Digits based on a modified version of Alaa's patch
Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java 2009-02-17 10:14:09 UTC (rev 15982)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java 2009-02-17 10:23:38 UTC (rev 15983)
@@ -52,12 +52,12 @@
Class<?>[] groups() default { };
/**
- * @return maximum number of integral digits accepted for this number
+ * @return maximum number of integral digits accepted for this number.
*/
int integer();
/**
- * @return maximum number of fractional digits accepted for this numbe
+ * @return maximum number of fractional digits accepted for this number.
*/
int fraction();
}
\ No newline at end of file
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForNumber.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForNumber.java (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForNumber.java 2009-02-17 10:23:38 UTC (rev 15983)
@@ -0,0 +1,62 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.constraints;
+
+import java.math.BigDecimal;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.Digits;
+
+/**
+ * Validates that the <code>Number</code> being validates matches the pattern
+ * defined in the constraint.
+ *
+ * @author Alaa Nassef
+ * @author Hardy Ferentschik
+ * @todo Implement exception handling in initalize once exception behaviour is specified BVAL-117
+ */
+public class DigitsValidatorForNumber implements ConstraintValidator<Digits, Number> {
+
+ private int maxIntegerLength;
+ private int maxFractionLength;
+
+ public void initialize(Digits constraintAnnotation) {
+ this.maxIntegerLength = constraintAnnotation.integer();
+ this.maxFractionLength = constraintAnnotation.fraction();
+ }
+
+ public boolean isValid(Number num, ConstraintValidatorContext constraintValidatorContext) {
+ //null values are valid
+ if ( num == null ) {
+ return true;
+ }
+
+ BigDecimal bigNum;
+ if ( num instanceof BigDecimal ) {
+ bigNum = ( BigDecimal ) num;
+ }
+ else {
+ bigNum = new BigDecimal( num.toString() );
+ }
+
+ int integerPartLength = bigNum.precision() - bigNum.scale();
+ int fractionPartLength = bigNum.scale() < 0 ? 0 : bigNum.scale() ;
+
+ return ( maxIntegerLength >= integerPartLength && maxFractionLength >= fractionPartLength );
+ }
+}
Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForNumber.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForString.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForString.java (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForString.java 2009-02-17 10:23:38 UTC (rev 15983)
@@ -0,0 +1,70 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.constraints;
+
+import java.math.BigDecimal;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.Digits;
+
+/**
+ * Validates that the <code>String</code> being validated consists of digits,
+ * and matches the pattern defined in the constraint.
+ *
+ * @author Alaa Nassef
+ * @author Hardy Ferentschik
+ *
+ */
+public class DigitsValidatorForString implements ConstraintValidator<Digits, String> {
+
+ private int maxIntegerLength;
+ private int maxFractionLength;
+
+ public void initialize(Digits constraintAnnotation) {
+ this.maxIntegerLength = constraintAnnotation.integer();
+ this.maxFractionLength = constraintAnnotation.fraction();
+ }
+
+ public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) {
+ //null values are valid
+ if ( str == null ) {
+ return true;
+ }
+
+ BigDecimal bigNum = getBigDecimalValue( str );
+ if ( bigNum == null ) {
+ return false;
+ }
+
+ int integerPartLength = bigNum.precision() - bigNum.scale();
+ int fractionPartLength = bigNum.scale() < 0 ? 0 : bigNum.scale() ;
+
+ return ( maxIntegerLength >= integerPartLength && maxFractionLength >= fractionPartLength );
+ }
+
+ private BigDecimal getBigDecimalValue(String str) {
+ BigDecimal bd;
+ try {
+ bd = new BigDecimal( str );
+ }
+ catch ( NumberFormatException nfe ) {
+ return null;
+ }
+ return bd;
+ }
+}
Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/DigitsValidatorForString.java
___________________________________________________________________
Name: svn:keywords
+ Id
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java 2009-02-17 10:14:09 UTC (rev 15982)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java 2009-02-17 10:23:38 UTC (rev 15983)
@@ -26,6 +26,7 @@
import javax.validation.ValidationException;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.AssertTrue;
+import javax.validation.constraints.Digits;
import javax.validation.constraints.Future;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
@@ -35,6 +36,8 @@
import org.hibernate.validation.constraints.AssertFalseValidator;
import org.hibernate.validation.constraints.AssertTrueValidator;
+import org.hibernate.validation.constraints.DigitsValidatorForNumber;
+import org.hibernate.validation.constraints.DigitsValidatorForString;
import org.hibernate.validation.constraints.FutureValidatorForCalendar;
import org.hibernate.validation.constraints.FutureValidatorForDate;
import org.hibernate.validation.constraints.MaxValidatorForNumber;
@@ -52,6 +55,7 @@
/**
* @author Hardy Ferentschik
+ * @author Alaa Nassef
*/
public class BuiltinConstraints {
@@ -97,6 +101,11 @@
builtinConstraints.put( Future.class, constraintList );
constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+ constraintList.add( DigitsValidatorForString.class );
+ constraintList.add( DigitsValidatorForNumber.class );
+ builtinConstraints.put( Digits.class, constraintList );
+
+ constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
constraintList.add( SizeValidatorForString.class );
constraintList.add( SizeValidatorForCollection.class );
constraintList.add( SizeValidatorForArray.class );
Modified: validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages.properties
===================================================================
--- validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages.properties 2009-02-17 10:14:09 UTC (rev 15982)
+++ validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages.properties 2009-02-17 10:23:38 UTC (rev 15983)
@@ -11,3 +11,4 @@
validator.future=must be in the future
validator.assertTrue=must be true
validator.assertFalse=must be false
+validator.digits=numeric value out of bounds (<{integer} digits>.<{fraction} digits> expected)
Modified: validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages_de.properties
===================================================================
--- validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages_de.properties 2009-02-17 10:14:09 UTC (rev 15982)
+++ validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/ValidationMessages_de.properties 2009-02-17 10:23:38 UTC (rev 15983)
@@ -11,3 +11,4 @@
validator.future=muss in der Zukunft liegen
validator.assertTrue=muss wahr sein
validator.assertFalse=muss falsch sein
+validator.digits=numerischer Wert aus\u00DFerhalb erlaubten Wertebereichs (<{integer} Ziffern>.<{fraction} Ziffern> erwarted)
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java 2009-02-17 10:23:38 UTC (rev 15983)
@@ -0,0 +1,82 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.constraints;
+
+import java.math.BigDecimal;
+import javax.validation.constraints.Digits;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+import org.hibernate.validation.util.annotationfactory.AnnotationDescriptor;
+import org.hibernate.validation.util.annotationfactory.AnnotationFactory;
+
+/**
+ * @author Alaa Nassef
+ * @author Hardy Ferentschik
+ */
+public class DigitsValidatorForNumberTest {
+
+ @Test
+ public void testIsValid() {
+
+ AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+ descriptor.setValue( "integer", 5 );
+ descriptor.setValue( "fraction", 2 );
+ descriptor.setValue( "message", "{validator.digits}" );
+ Digits p = AnnotationFactory.create( descriptor );
+
+ DigitsValidatorForNumber constraint = new DigitsValidatorForNumber();
+ constraint.initialize( p );
+
+
+ assertTrue( constraint.isValid( null, null ) );
+ assertTrue( constraint.isValid( Byte.valueOf( "0" ), null ) );
+ assertTrue( constraint.isValid( Double.valueOf( "500.2" ), null ) );
+
+ assertTrue( constraint.isValid( new BigDecimal( "-12345.12" ), null ) );
+ assertFalse( constraint.isValid( new BigDecimal( "-123456.12" ), null ) );
+ assertFalse( constraint.isValid( new BigDecimal( "-123456.123" ), null ) );
+ assertFalse( constraint.isValid( new BigDecimal( "-12345.123" ), null ) );
+ assertFalse( constraint.isValid( new BigDecimal( "12345.123" ), null ) );
+
+ assertTrue( constraint.isValid( Float.valueOf( "-000000000.22" ), null ) );
+ assertFalse( constraint.isValid( Integer.valueOf( "256874" ), null ) );
+ assertFalse( constraint.isValid( Double.valueOf( "12.0001" ), null ) );
+ }
+
+ @Test
+ public void testIsValidZeroLength() {
+
+ AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+ descriptor.setValue( "integer", 0 );
+ descriptor.setValue( "fraction", 0 );
+ descriptor.setValue( "message", "{validator.digits}" );
+ Digits p = AnnotationFactory.create( descriptor );
+
+ DigitsValidatorForNumber constraint = new DigitsValidatorForNumber();
+ constraint.initialize( p );
+
+
+ assertTrue( constraint.isValid( null, null ) );
+ assertFalse( constraint.isValid( Byte.valueOf( "0" ), null ) );
+ assertFalse( constraint.isValid( Double.valueOf( "500.2" ), null ) );
+ }
+
+}
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java 2009-02-17 10:23:38 UTC (rev 15983)
@@ -0,0 +1,63 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.constraints;
+
+import javax.validation.constraints.Digits;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import org.hibernate.validation.util.annotationfactory.AnnotationDescriptor;
+import org.hibernate.validation.util.annotationfactory.AnnotationFactory;
+
+/**
+ * @author Alaa Nassef
+ */
+public class DigitsValidatorForStringTest {
+
+ private static DigitsValidatorForString constraint;
+
+ @BeforeClass
+ public static void init() {
+
+ AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+ descriptor.setValue( "integer", 5 );
+ descriptor.setValue( "fraction", 2 );
+ descriptor.setValue( "message", "{validator.digits}" );
+ Digits p = AnnotationFactory.create( descriptor );
+
+ constraint = new DigitsValidatorForString();
+ constraint.initialize( p );
+ }
+
+ @Test
+ public void testIsValid() {
+
+ assertTrue( constraint.isValid( null, null ) );
+ assertTrue( constraint.isValid( "0", null ) );
+ assertTrue( constraint.isValid( "500.2", null ) );
+ assertTrue( constraint.isValid( "-12456.22", null ) );
+ assertTrue( constraint.isValid( "-000000000.22", null ) );
+ //should throw number format exception
+ assertFalse( constraint.isValid( "", null ) );
+ assertFalse( constraint.isValid( "256874.0", null ) );
+ assertFalse( constraint.isValid( "12.0001", null ) );
+ }
+}
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
15 years, 2 months