Hibernate SVN: r17901 - in core/trunk/entitymanager/src: test/java/org/hibernate/ejb/test/metadata and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-11-03 12:19:57 -0500 (Tue, 03 Nov 2009)
New Revision: 17901
Added:
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Flower.java
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Garden.java
Modified:
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/PluralAttributeImpl.java
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java
core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/StaticMetadataTest.java
Log:
HHH-4542 read the collection type from the member rather than the expected Hibernate collection type
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java 2009-11-03 14:55:47 UTC (rev 17900)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/AttributeFactory.java 2009-11-03 17:19:57 UTC (rev 17901)
@@ -24,6 +24,8 @@
package org.hibernate.ejb.metamodel;
import java.lang.reflect.Member;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.util.Iterator;
import javax.persistence.metamodel.Attribute;
import javax.persistence.metamodel.Type;
@@ -83,18 +85,21 @@
private <X, Y, V, K> AttributeImplementor<X, Y> buildPluralAttribute(AbstractManagedType<X> ownerType, Property property, AttributeContext attrContext, boolean getMember) {
AttributeImplementor<X, Y> attribute;
final Type<V> attrType = getType( ownerType, attrContext.getElementTypeStatus(), attrContext.getElementValue(), getMember );
- final Class<Y> collectionClass = (Class<Y>) attrContext.getCollectionClass();
+ final Member member = getMember ? determineStandardJavaMember( ownerType, property ) : null;
+ final Class<Y> collectionClass = (Class<Y>) ( member instanceof Field
+ ? ( ( Field ) member ).getType()
+ : ( ( Method ) member ).getReturnType() );
if ( java.util.Map.class.isAssignableFrom( collectionClass ) ) {
final Type<K> keyType = getType( ownerType, attrContext.getKeyTypeStatus(), attrContext.getKeyValue(), getMember );
attribute = PluralAttributeImpl.create( ownerType, attrType, collectionClass, keyType )
- .member( getMember ? determineStandardJavaMember( ownerType, property ) : null )
+ .member( member )
.property( property )
.persistentAttributeType( attrContext.getElementAttributeType() )
.build();
}
else {
attribute = PluralAttributeImpl.create( ownerType, attrType, collectionClass, null )
- .member( getMember ? determineStandardJavaMember( ownerType, property ) : null )
+ .member( member )
.property( property )
.persistentAttributeType( attrContext.getElementAttributeType() )
.build();
@@ -318,10 +323,6 @@
return collectionClass != null;
}
- public Class<?> getCollectionClass() {
- return collectionClass;
- }
-
public Attribute.PersistentAttributeType getElementAttributeType() {
return attrType;
}
@@ -357,7 +358,6 @@
final Attribute.PersistentAttributeType elementPAT;
final Class<?> collectionClass = collValue.getCollectionType().getReturnedClass();
-
final Value keyValue;
final org.hibernate.type.Type keyType;
final AttributeContext.TypeStatus keyTypeStatus;
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java 2009-11-03 14:55:47 UTC (rev 17900)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java 2009-11-03 17:19:57 UTC (rev 17901)
@@ -356,10 +356,9 @@
// most likely a mismatch in the type we are injecting and the defined field; this represents a
// mismatch in how the annotation processor interpretted the attribute and how our metamodel
// and/or annotation binder did.
-//
-// This does seem to be an issue currently for ListAttribute and CollectionAttribute for @OneToMany List
-// w/o the @Index definition (which is a bag in Hibernate-terms. So for the time being we simply
-// log an error
+
+// This is particularly the case as arrays are nto handled propery by the StaticMetamodel generator
+
// throw new AssertionFailure(
// "Illegal argument on static metamodel field injection : " + metamodelClass.getName() + '#' + name
// + "; expected type : " + attribute.getClass().getName()
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/PluralAttributeImpl.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/PluralAttributeImpl.java 2009-11-03 14:55:47 UTC (rev 17900)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/PluralAttributeImpl.java 2009-11-03 17:19:57 UTC (rev 17901)
@@ -91,6 +91,33 @@
@SuppressWarnings( "unchecked" )
public <K> PluralAttributeImpl<X,C,E> build() {
+ //apply strict spec rules first
+ if ( Map.class.equals( collectionClass ) ) {
+ final Builder<X,Map<K,E>,E,K> builder = (Builder<X,Map<K,E>,E,K>) this;
+ return ( PluralAttributeImpl<X, C, E> ) new MapAttributeImpl<X,K,E>(
+ builder
+ );
+ }
+ else if ( Set.class.equals( collectionClass ) ) {
+ final Builder<X,Set<E>, E,?> builder = (Builder<X, Set<E>, E,?>) this;
+ return ( PluralAttributeImpl<X, C, E> ) new SetAttributeImpl<X,E>(
+ builder
+ );
+ }
+ else if ( List.class.equals( collectionClass ) ) {
+ final Builder<X, List<E>, E,?> builder = (Builder<X, List<E>, E,?>) this;
+ return ( PluralAttributeImpl<X, C, E> ) new ListAttributeImpl<X,E>(
+ builder
+ );
+ }
+ else if ( Collection.class.equals( collectionClass ) ) {
+ final Builder<X, Collection<E>,E,?> builder = (Builder<X, Collection<E>, E,?>) this;
+ return ( PluralAttributeImpl<X, C, E> ) new CollectionAttributeImpl<X, E>(
+ builder
+ );
+ }
+
+ //apply loose rules
if ( Map.class.isAssignableFrom( collectionClass ) ) {
final Builder<X,Map<K,E>,E,K> builder = (Builder<X,Map<K,E>,E,K>) this;
return ( PluralAttributeImpl<X, C, E> ) new MapAttributeImpl<X,K,E>(
Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Flower.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Flower.java (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Flower.java 2009-11-03 17:19:57 UTC (rev 17901)
@@ -0,0 +1,31 @@
+package org.hibernate.ejb.test.metadata;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Flower {
+ private Long id;
+ private String name;
+
+ @Id @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Added: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Garden.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Garden.java (rev 0)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/Garden.java 2009-11-03 17:19:57 UTC (rev 17901)
@@ -0,0 +1,46 @@
+package org.hibernate.ejb.test.metadata;
+
+import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Garden {
+ private Long id;
+ private String name;
+ private List<Flower> flowers = new ArrayList<Flower>();
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @OneToMany
+ public List<Flower> getFlowers() {
+ return flowers;
+ }
+
+ public void setFlowers(List<Flower> flowers) {
+ this.flowers = flowers;
+ }
+}
Modified: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java 2009-11-03 14:55:47 UTC (rev 17900)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/MetadataTest.java 2009-11-03 17:19:57 UTC (rev 17901)
@@ -136,6 +136,14 @@
assertEquals( Type.PersistenceType.EMBEDDABLE, directType.getPersistenceType() );
}
+ public void testCollection() throws Exception {
+ final EntityType<Garden> entiytype = factory.getMetamodel().entity( Garden.class );
+ final Set<PluralAttribute<? super Garden, ?, ?>> attributes = entiytype.getPluralAttributes();
+ assertEquals( 1, attributes.size() );
+ PluralAttribute<? super Garden, ?, ?> flowers = attributes.iterator().next();
+ assertTrue( flowers instanceof ListAttribute );
+ }
+
public void testElementCollection() throws Exception {
final EntityType<House> entityType = factory.getMetamodel().entity( House.class );
final SetAttribute<House,Room> rooms = entityType.getDeclaredSet( "rooms", Room.class );
@@ -273,7 +281,9 @@
Dog.class,
Cat.class,
Cattish.class,
- Feline.class
+ Feline.class,
+ Garden.class,
+ Flower.class
};
}
Modified: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/StaticMetadataTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/StaticMetadataTest.java 2009-11-03 14:55:47 UTC (rev 17900)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/metadata/StaticMetadataTest.java 2009-11-03 17:19:57 UTC (rev 17901)
@@ -115,6 +115,9 @@
assertTrue( Person_.firstName.isId() );
assertTrue( Person_.lastName.isId() );
assertTrue( Person_.lastName.isId() );
+
+ //Garden List as bag
+ assertNotNull( Garden_.flowers );
}
@Override
@@ -127,7 +130,9 @@
Dog.class,
Cat.class,
Cattish.class,
- Feline.class
+ Feline.class,
+ Garden.class,
+ Flower.class
};
}
15 years, 4 months
Hibernate SVN: r17900 - in search/trunk/src: main/java/org/hibernate/search/backend and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: sannegrinovero
Date: 2009-11-03 09:55:47 -0500 (Tue, 03 Nov 2009)
New Revision: 17900
Modified:
search/trunk/src/main/docbook/en-US/modules/configuration.xml
search/trunk/src/main/java/org/hibernate/search/backend/LuceneIndexingParameters.java
search/trunk/src/test/java/org/hibernate/search/test/configuration/LuceneIndexingParametersTest.java
Log:
HSEARCH-201 IndexWriter settings meant for transactional operations won't be inherited by the settings meant for batch operations
Modified: search/trunk/src/main/docbook/en-US/modules/configuration.xml
===================================================================
--- search/trunk/src/main/docbook/en-US/modules/configuration.xml 2009-11-03 14:52:05 UTC (rev 17899)
+++ search/trunk/src/main/docbook/en-US/modules/configuration.xml 2009-11-03 14:55:47 UTC (rev 17900)
@@ -709,13 +709,10 @@
<xref linkend="search-batchindex" />), the used properties are those
grouped under the <literal>batch</literal> keyword: <programlisting>hibernate.search.[default|<indexname>].indexwriter.batch.<parameter_name></programlisting></para>
- <para>Unless the corresponding <literal>.batch</literal> property is
- explicitly set, the value will default to the
- <literal>.transaction</literal> property. If no value is set for a
+ <para>If no value is set for a
<literal>.batch</literal> value in a specific shard configuration,
Hibernate Search will look at the index section, then at the default
- section and after that it will look for a <literal>.transaction</literal>
- in the same order: <programlisting>hibernate.search.Animals.2.indexwriter.transaction.max_merge_docs 10
+ section: <programlisting>hibernate.search.Animals.2.indexwriter.transaction.max_merge_docs 10
hibernate.search.Animals.2.indexwriter.transaction.merge_factor 20
hibernate.search.default.indexwriter.batch.max_merge_docs 100</programlisting>
This configuration will result in these settings applied to the second
@@ -735,7 +732,7 @@
</listitem>
<listitem>
- <para><literal>batch.merge_factor</literal> = 20</para>
+ <para><literal>batch.merge_factor</literal> = Lucene default</para>
</listitem>
</itemizedlist>
@@ -746,6 +743,10 @@
of Lucene you are using; values shown are relative to version
<literal>2.4</literal>. For more information about Lucene indexing
performances, please refer to the Lucene documentation.</para>
+
+ <warning><para>Previous versions had the <literal>batch</literal>
+ parameters inherit from <literal>transaction</literal> properties.
+ This needs now to be explicitly set.</para></warning>
<table>
<title>List of indexing performance and behavior properties</title>
Modified: search/trunk/src/main/java/org/hibernate/search/backend/LuceneIndexingParameters.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/backend/LuceneIndexingParameters.java 2009-11-03 14:52:05 UTC (rev 17899)
+++ search/trunk/src/main/java/org/hibernate/search/backend/LuceneIndexingParameters.java 2009-11-03 14:55:47 UTC (rev 17900)
@@ -68,8 +68,8 @@
Properties indexingParameters = new MaskedProperty( sourceProps, PROP_GROUP, sourceProps );
//get keys for "transaction"
Properties transactionProps = new MaskedProperty( indexingParameters, TRANSACTION );
- //get keys for "batch" (defaulting to transaction)
- Properties batchProps = new MaskedProperty( indexingParameters, BATCH, transactionProps ); //TODO to close HSEARCH-201 just remove 3° parameter
+ //get keys for "batch"
+ Properties batchProps = new MaskedProperty( indexingParameters, BATCH );
transactionIndexParameters = new ParameterSet( transactionProps, TRANSACTION );
batchIndexParameters = new ParameterSet( batchProps, BATCH );
doSanityChecks( transactionIndexParameters, batchIndexParameters );
Modified: search/trunk/src/test/java/org/hibernate/search/test/configuration/LuceneIndexingParametersTest.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/configuration/LuceneIndexingParametersTest.java 2009-11-03 14:52:05 UTC (rev 17899)
+++ search/trunk/src/test/java/org/hibernate/search/test/configuration/LuceneIndexingParametersTest.java 2009-11-03 14:55:47 UTC (rev 17900)
@@ -80,7 +80,7 @@
cfg.setProperty( "hibernate.search.Documents.batch.max_field_length", "9" );
}
- public void testDefaultIndexProviderParameters() throws Exception {
+ public void testDefaultIndexProviderParameters() {
assertValueIsSet( Author.class, BATCH, USE_COMPOUND_FILE, 1 );
assertValueIsSet( Author.class, TRANSACTION, RAM_BUFFER_SIZE, 2 );
assertValueIsSet( Author.class, TRANSACTION, MAX_MERGE_DOCS, 9 );
@@ -88,43 +88,37 @@
assertValueIsSet( Author.class, TRANSACTION, MERGE_FACTOR, 100 );
}
- public void testBatchParametersGlobals() throws Exception {
+ public void testBatchParametersGlobals() {
assertValueIsSet( Author.class, BATCH, RAM_BUFFER_SIZE, 1 );
- assertValueIsSet( Author.class, BATCH, MAX_MERGE_DOCS, 9 );
+ assertValueIsDefault( Author.class, BATCH, MAX_MERGE_DOCS );
assertValueIsSet( Author.class, BATCH, MAX_BUFFERED_DOCS, 1000 );
- assertValueIsSet( Author.class, BATCH, MERGE_FACTOR, 100 );
}
- public void testUnsetBatchValueTakesTransaction() throws Exception {
- assertValueIsSet( Document.class, BATCH, MERGE_FACTOR, 6 );
- assertValueIsSet( Document.class, BATCH, MAX_BUFFERED_DOCS, 1000 );
- }
-
- public void testMaxFieldLength() throws Exception {
+ public void testMaxFieldLength() {
// there should also be logged a warning being logged about these:
assertValueIsSet( Document.class, TRANSACTION, MAX_FIELD_LENGTH, 7 );
assertValueIsSet( Document.class, BATCH, MAX_FIELD_LENGTH, 9 );
}
- public void testExplicitBatchParameters() throws Exception {
+ public void testExplicitBatchParameters() {
assertValueIsSet( Book.class, BATCH, MAX_MERGE_DOCS, 12 );
assertValueIsSet( Book.class, BATCH, MAX_BUFFERED_DOCS, 14 );
assertValueIsSet( Book.class, BATCH, MERGE_FACTOR, 13 );
assertValueIsSet( Book.class, TRANSACTION, USE_COMPOUND_FILE, 0 );
}
- public void testInheritedBatchParametersFromTranscation() throws Exception {
+ public void testInheritedBatchParameters() {
assertValueIsSet( Book.class, BATCH, RAM_BUFFER_SIZE, 1 );
}
- public void testTransactionParameters() throws Exception {
+ public void testTransactionParameters() {
assertValueIsSet( Book.class, TRANSACTION, RAM_BUFFER_SIZE, 4 );
assertValueIsSet( Book.class, TRANSACTION, MAX_MERGE_DOCS, 15 );
assertValueIsSet( Book.class, TRANSACTION, MAX_BUFFERED_DOCS, 17 );
assertValueIsSet( Book.class, TRANSACTION, MERGE_FACTOR, 16 );
}
- public void testDefaultKeywordOverwritesInherited() throws Exception {
+ public void testDefaultKeywordOverwritesInherited() {
assertValueIsDefault( Document.class, TRANSACTION, RAM_BUFFER_SIZE );
assertValueIsDefault( Document.class, TRANSACTION, RAM_BUFFER_SIZE );
}
@@ -137,7 +131,7 @@
assertEquals( param.getTransactionIndexParameters(), paramCopy.getTransactionIndexParameters() );
}
- protected Class[] getMappings() {
+ protected Class<?>[] getMappings() {
return new Class[] {
Book.class,
Author.class,
15 years, 4 months
Hibernate SVN: r17899 - in jpamodelgen/trunk/src: main/java/org/hibernate/jpamodelgen/annotation and 19 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-11-03 09:52:05 -0500 (Tue, 03 Nov 2009)
New Revision: 17899
Added:
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaMap.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java
jpamodelgen/trunk/src/test/java/org/
jpamodelgen/trunk/src/test/java/org/hibernate/
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/AccessTypeTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/InheritanceTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/QueryTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/XmlMappingTest.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Image.java
jpamodelgen/trunk/src/test/resources/org/
jpamodelgen/trunk/src/test/resources/org/hibernate/
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/address.xml
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/building.xml
jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/mammal.xml
Removed:
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaAttribute.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaCollection.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaEntity.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaSingleAttribute.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaAttribute.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaCollection.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaEntity.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaMap.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaSingleAttribute.java
jpamodelgen/trunk/src/test/java/model/
jpamodelgen/trunk/src/test/java/test/AccessTypeTest.java
jpamodelgen/trunk/src/test/java/test/InheritanceTest.java
jpamodelgen/trunk/src/test/java/test/QueryTest.java
jpamodelgen/trunk/src/test/java/test/XmlMappingTest.java
jpamodelgen/trunk/src/test/resources/model/xmlmapped/
Modified:
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Address.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Area.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Building.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Country.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Customer.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Detail.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Hominidae.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/House.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Human.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Inhabitant.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Item.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/LivingBeing.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Mammals.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Order.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Pet.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Product.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Shop.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/User.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Address.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Building.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/LivingBeing.java
jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Mammal.java
jpamodelgen/trunk/src/test/resources/META-INF/dummy.xml
jpamodelgen/trunk/src/test/resources/META-INF/jpa1-orm.xml
jpamodelgen/trunk/src/test/resources/META-INF/malformed-mapping-xml.xml
jpamodelgen/trunk/src/test/resources/META-INF/orm.xml
jpamodelgen/trunk/src/test/resources/META-INF/persistence.xml
jpamodelgen/trunk/src/test/suite/unit-tests.xml
Log:
METAGEN-3
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -24,7 +24,6 @@
import java.util.List;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.FilerException;
-import javax.annotation.Generated;
import javax.tools.FileObject;
import javax.tools.Diagnostic;
import javax.lang.model.type.TypeMirror;
@@ -38,7 +37,7 @@
*/
public class ClassWriter {
- public static void writeFile(IMetaEntity entity, ProcessingEnvironment processingEnv, Context context) {
+ public static void writeFile(MetaEntity entity, ProcessingEnvironment processingEnv, Context context) {
try {
String metaModelPackage = entity.getPackageName();
@@ -85,7 +84,7 @@
*
* @return body content
*/
- private static StringBuffer generateBody(IMetaEntity entity, Context context) {
+ private static StringBuffer generateBody(MetaEntity entity, Context context) {
StringWriter sw = new StringWriter();
PrintWriter pw = null;
@@ -103,9 +102,9 @@
pw.println();
- List<IMetaAttribute> members = entity.getMembers();
+ List<MetaAttribute> members = entity.getMembers();
- for ( IMetaAttribute metaMember : members ) {
+ for ( MetaAttribute metaMember : members ) {
pw.println( " " + metaMember.getDeclarationString() );
}
pw.println();
@@ -119,7 +118,7 @@
}
}
- private static void printClassDeclaration(IMetaEntity entity, PrintWriter pw, Context context) {
+ private static void printClassDeclaration(MetaEntity entity, PrintWriter pw, Context context) {
pw.print( "public abstract class " + entity.getSimpleName() + "_" );
final TypeMirror superClass = entity.getTypeElement().getSuperclass();
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/Context.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -26,7 +26,7 @@
import javax.annotation.processing.ProcessingEnvironment;
import javax.tools.Diagnostic;
-import org.hibernate.jpamodelgen.annotation.MetaEntity;
+import org.hibernate.jpamodelgen.annotation.AnnotationMetaEntity;
/**
* @author Max Andersen
@@ -38,8 +38,8 @@
private Map<TypeElement, AccessTypeHolder> accessTypes = new HashMap<TypeElement, AccessTypeHolder>();
private Set<String> elementsAlreadyProcessed = new HashSet<String>();
private ProcessingEnvironment pe;
- private final Map<String, IMetaEntity> metaEntitiesToProcess = new HashMap<String, IMetaEntity>();
- private final Map<String, IMetaEntity> metaSuperclassAndEmbeddableToProcess = new HashMap<String, IMetaEntity>();
+ private final Map<String, MetaEntity> metaEntitiesToProcess = new HashMap<String, MetaEntity>();
+ private final Map<String, MetaEntity> metaSuperclassAndEmbeddableToProcess = new HashMap<String, MetaEntity>();
private static class AccessTypeHolder {
public AccessType elementAccessType;
@@ -50,11 +50,11 @@
this.pe = pe;
}
- public Map<String, IMetaEntity> getMetaEntitiesToProcess() {
+ public Map<String, MetaEntity> getMetaEntitiesToProcess() {
return metaEntitiesToProcess;
}
- public Map<String, IMetaEntity> getMetaSuperclassAndEmbeddableToProcess() {
+ public Map<String, MetaEntity> getMetaSuperclassAndEmbeddableToProcess() {
return metaSuperclassAndEmbeddableToProcess;
}
@@ -98,7 +98,7 @@
return;
}
- ClassWriter.writeFile( new MetaEntity( pe, element, this, defaultAccessTypeForHierarchy ), pe, this );
+ ClassWriter.writeFile( new AnnotationMetaEntity( pe, element, this, defaultAccessTypeForHierarchy ), pe, this );
elementsAlreadyProcessed.add( element.getQualifiedName().toString() );
}
}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaAttribute.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,31 +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.jpamodelgen;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface IMetaAttribute {
- String getDeclarationString();
-
- String getMetaType();
-
- String getPropertyName();
-
- String getTypeDeclaration();
-}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaCollection.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaCollection.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaCollection.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,26 +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.jpamodelgen;
-
-import org.hibernate.jpamodelgen.IMetaAttribute;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface IMetaCollection extends IMetaAttribute {
-}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaEntity.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaEntity.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,45 +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.jpamodelgen;
-
-import javax.lang.model.element.Name;
-import javax.lang.model.element.TypeElement;
-import java.util.List;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface IMetaEntity extends ImportContext {
- String getSimpleName();
-
- String getQualifiedName();
-
- String getPackageName();
-
- List<IMetaAttribute> getMembers();
-
- String generateImports();
-
- String importType(String fqcn);
-
- String staticImport(String fqcn, String member);
-
- String importType(Name qualifiedName);
-
- TypeElement getTypeElement();
-}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaSingleAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaSingleAttribute.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaSingleAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,24 +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.jpamodelgen;
-
-/**
- * @author Hardy Ferentschik
- */
-public interface IMetaSingleAttribute extends IMetaAttribute {
-}
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/JPAMetaModelEntityProcessor.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -48,7 +48,7 @@
import org.xml.sax.SAXException;
-import org.hibernate.jpamodelgen.annotation.MetaEntity;
+import org.hibernate.jpamodelgen.annotation.AnnotationMetaEntity;
import org.hibernate.jpamodelgen.xml.XmlMetaEntity;
import org.hibernate.jpamodelgen.xml.jaxb.Entity;
import org.hibernate.jpamodelgen.xml.jaxb.EntityMappings;
@@ -125,7 +125,7 @@
}
private void createMetaModelClasses() {
- for ( IMetaEntity entity : context.getMetaEntitiesToProcess().values() ) {
+ for ( MetaEntity entity : context.getMetaEntitiesToProcess().values() ) {
processingEnv.getMessager()
.printMessage( Diagnostic.Kind.NOTE, "Writing meta model for " + entity );
ClassWriter.writeFile( entity, processingEnv, context );
@@ -136,7 +136,7 @@
context.getMetaSuperclassAndEmbeddableToProcess().remove( className );
}
- for ( IMetaEntity entity : context.getMetaSuperclassAndEmbeddableToProcess().values() ) {
+ for ( MetaEntity entity : context.getMetaSuperclassAndEmbeddableToProcess().values() ) {
processingEnv.getMessager()
.printMessage( Diagnostic.Kind.NOTE, "Writing meta model for " + entity );
ClassWriter.writeFile( entity, processingEnv, context );
@@ -325,13 +325,13 @@
if ( element.getKind() == ElementKind.CLASS ) {
if ( annotationType.equals( ENTITY_ANN ) ) {
- MetaEntity metaEntity = new MetaEntity( processingEnv, ( TypeElement ) element, context );
+ AnnotationMetaEntity metaEntity = new AnnotationMetaEntity( processingEnv, ( TypeElement ) element, context );
// TODO instead of just adding the entity we have to do some merging.
context.getMetaEntitiesToProcess().put( metaEntity.getQualifiedName(), metaEntity );
}
else if ( annotationType.equals( MAPPED_SUPERCLASS_ANN )
|| annotationType.equals( EMBEDDABLE_ANN ) ) {
- MetaEntity metaEntity = new MetaEntity( processingEnv, ( TypeElement ) element, context );
+ AnnotationMetaEntity metaEntity = new AnnotationMetaEntity( processingEnv, ( TypeElement ) element, context );
// TODO instead of just adding the entity we have to do some merging.
context.getMetaSuperclassAndEmbeddableToProcess().put( metaEntity.getQualifiedName(), metaEntity );
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaAttribute.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,31 @@
+// $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.jpamodelgen;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaAttribute {
+ String getDeclarationString();
+
+ String getMetaType();
+
+ String getPropertyName();
+
+ String getTypeDeclaration();
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaAttribute.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaCollection.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -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.jpamodelgen;
+
+import org.hibernate.jpamodelgen.MetaAttribute;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaCollection extends MetaAttribute {
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaCollection.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaEntity.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,45 @@
+// $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.jpamodelgen;
+
+import javax.lang.model.element.Name;
+import javax.lang.model.element.TypeElement;
+import java.util.List;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaEntity extends ImportContext {
+ String getSimpleName();
+
+ String getQualifiedName();
+
+ String getPackageName();
+
+ List<MetaAttribute> getMembers();
+
+ String generateImports();
+
+ String importType(String fqcn);
+
+ String staticImport(String fqcn, String member);
+
+ String importType(Name qualifiedName);
+
+ TypeElement getTypeElement();
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaEntity.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/IMetaSingleAttribute.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,24 @@
+// $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.jpamodelgen;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public interface MetaSingleAttribute extends MetaAttribute {
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/MetaSingleAttribute.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaAttribute.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,74 @@
+// $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.jpamodelgen.annotation;
+
+import org.hibernate.jpamodelgen.MetaAttribute;
+
+import java.beans.Introspector;
+
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+
+/**
+ *
+ * @author Max Andersen
+ * @author Hardy Ferentschik
+ * @author Emmanuel Bernard
+ */
+public abstract class AnnotationMetaAttribute implements MetaAttribute {
+
+ final protected Element element;
+ final protected AnnotationMetaEntity parent;
+ final protected ProcessingEnvironment pe;
+ private final String type;
+
+ public AnnotationMetaAttribute(AnnotationMetaEntity parent, Element element, String type) {
+ this.element = element;
+ this.parent = parent;
+ this.type = type;
+ this.pe = parent.pe;
+ }
+
+ public String getDeclarationString() {
+ return "public static volatile " + parent.importType(getMetaType()) + "<" + parent.importType(parent.getQualifiedName()) + ", " + parent.importType(getTypeDeclaration()) + "> " + getPropertyName() + ";";
+ }
+
+ public String getPropertyName() {
+ if(element.getKind()==ElementKind.FIELD) {
+ return element.getSimpleName().toString();
+ } else if (element.getKind()==ElementKind.METHOD) {
+
+ String name = element.getSimpleName().toString();
+ if(name.startsWith("get")) {
+ return pe.getElementUtils().getName(Introspector.decapitalize(name.substring("get".length()))).toString();
+ } else if(name.startsWith("is")) {
+ return (pe.getElementUtils().getName(Introspector.decapitalize(name.substring("is".length())))).toString();
+ }
+ return pe.getElementUtils().getName(Introspector.decapitalize(name)).toString();
+ } else {
+ return pe.getElementUtils().getName(element.getSimpleName() + "/* " + element.getKind() + " */").toString();
+ }
+ }
+
+ abstract public String getMetaType();
+
+ public String getTypeDeclaration() {
+ return type;
+ }
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaAttribute.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaCollection.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,46 @@
+// $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.jpamodelgen.annotation;
+
+import org.hibernate.jpamodelgen.MetaCollection;
+
+import javax.lang.model.element.Element;
+
+/**
+ *
+ * @author Max Andersen
+ * @author Hardy Ferentschik
+ * @author Emmanuel Bernard
+ */
+public class AnnotationMetaCollection extends AnnotationMetaAttribute implements MetaCollection {
+
+ private String collectionType;
+
+
+ public AnnotationMetaCollection(AnnotationMetaEntity parent, Element element, String collectionType, String elementType) {
+ super(parent, element, elementType);
+ this.collectionType = collectionType;
+ }
+
+ @Override
+ public String getMetaType() {
+ return collectionType;
+ }
+
+
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaCollection.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaEntity.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,433 @@
+// $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.jpamodelgen.annotation;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.Element;
+import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Name;
+import javax.lang.model.element.PackageElement;
+import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.Modifier;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.ExecutableType;
+import javax.lang.model.type.PrimitiveType;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.ElementFilter;
+import javax.lang.model.util.SimpleTypeVisitor6;
+import javax.persistence.EmbeddedId;
+import javax.persistence.Id;
+import javax.persistence.AccessType;
+import javax.persistence.Entity;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+import javax.persistence.Embedded;
+import javax.persistence.Embeddable;
+import javax.persistence.Access;
+import javax.persistence.ElementCollection;
+import javax.tools.Diagnostic.Kind;
+import javax.tools.Diagnostic;
+
+import org.hibernate.jpamodelgen.MetaEntity;
+import org.hibernate.jpamodelgen.MetaAttribute;
+import org.hibernate.jpamodelgen.ImportContext;
+import org.hibernate.jpamodelgen.ImportContextImpl;
+import org.hibernate.jpamodelgen.TypeUtils;
+import org.hibernate.jpamodelgen.Context;
+
+/**
+ *
+ * @author Max Andersen
+ * @author Hardy Ferentschik
+ * @author Emmanuel Bernard
+ */
+public class AnnotationMetaEntity implements MetaEntity {
+
+ final TypeElement element;
+ final protected ProcessingEnvironment pe;
+
+ final ImportContext importContext;
+ private Context context;
+ //used to propagate the access type of the root entity over to subclasses, superclasses and embeddable
+ private AccessType defaultAccessTypeForHierarchy;
+ private AccessType defaultAccessTypeForElement;
+
+ public AnnotationMetaEntity(ProcessingEnvironment pe, TypeElement element, Context context) {
+ this.element = element;
+ this.pe = pe;
+ importContext = new ImportContextImpl( getPackageName() );
+ this.context = context;
+ }
+
+ public AnnotationMetaEntity(ProcessingEnvironment pe, TypeElement element, Context context, AccessType accessType) {
+ this(pe, element, context);
+ this.defaultAccessTypeForHierarchy = accessType;
+ }
+
+ public String getSimpleName() {
+ return element.getSimpleName().toString();
+ }
+
+ public Element getOriginalElement() {
+ return element;
+ }
+
+ public String getQualifiedName() {
+ return element.getQualifiedName().toString();
+ }
+
+ public String getPackageName() {
+ PackageElement packageOf = pe.getElementUtils().getPackageOf( element );
+ return pe.getElementUtils().getName( packageOf.getQualifiedName() ).toString();
+ }
+
+ public List<MetaAttribute> getMembers() {
+ List<MetaAttribute> membersFound = new ArrayList<MetaAttribute>();
+ final AccessType elementAccessType = getAccessTypeForElement();
+
+ List<? extends Element> fieldsOfClass = ElementFilter.fieldsIn( element.getEnclosedElements() );
+ addPersistentMembers( membersFound, elementAccessType, fieldsOfClass, AccessType.FIELD );
+
+ List<? extends Element> methodsOfClass = ElementFilter.methodsIn( element.getEnclosedElements() );
+ addPersistentMembers( membersFound, elementAccessType, methodsOfClass, AccessType.PROPERTY );
+
+ //process superclasses
+ for(TypeElement superclass = TypeUtils.getSuperclass(element) ;
+ superclass != null ;
+ superclass = TypeUtils.getSuperclass( superclass ) ) {
+ if ( superclass.getAnnotation( Entity.class ) != null ) {
+ break; //will be handled or has been handled already
+ }
+ else if ( superclass.getAnnotation( MappedSuperclass.class ) != null ) {
+ //FIXME use the class defalut access type
+ context.processElement( superclass, defaultAccessTypeForHierarchy );
+ }
+ }
+
+ //this is valid to not have properties (ie subentities)
+// if ( membersFound.size() == 0 ) {
+// pe.getMessager().printMessage( Kind.WARNING, "No properties found on " + element, element );
+// }
+ return membersFound;
+ }
+
+ private void addPersistentMembers(
+ List<MetaAttribute> membersFound,
+ AccessType elementAccessType,
+ List<? extends Element> membersOfClass,
+ AccessType membersKind) {
+ pe.getMessager()
+ .printMessage( Kind.NOTE, "Scanning " + membersOfClass.size() + " " + membersKind + " for " + element.toString() );
+ AccessType explicitAccessType;
+ if (elementAccessType == membersKind) {
+ //all membersKind considered
+ explicitAccessType = null;
+ }
+ else {
+ //use membersKind only if marked with @Access(membersKind)
+ explicitAccessType = membersKind;
+ }
+ for ( Element memberOfClass : membersOfClass ) {
+
+ AnnotationMetaAttribute result = memberOfClass.asType().accept( new TypeVisitor( this, explicitAccessType ),
+ memberOfClass
+ );
+ if ( result != null ) {
+ membersFound.add( result );
+ }
+//EBE not sure why?
+// else {
+// pe.getMessager().printMessage( Kind.WARNING, "Could not find valid info for JPA property", mymember );
+// }
+ }
+ }
+
+ private AccessType getAccessTypeForElement() {
+
+ //get local strategy
+ AccessType accessType = getAccessTypeForClass(element);
+ if (accessType == null) {
+ accessType = this.defaultAccessTypeForHierarchy;
+ }
+ if (accessType == null) {
+ //we dont' know
+ //if an enity go up
+ //
+ //superclasses alre always treated after their entities
+ //and their access type are discovered
+ //FIXME is it really true if only the superclass is changed
+ TypeElement superClass = element;
+ do {
+ superClass = TypeUtils.getSuperclass( superClass );
+ if (superClass != null) {
+ if ( superClass.getAnnotation( Entity.class ) != null
+ || superClass.getAnnotation( MappedSuperclass.class ) != null ) {
+ //FIXME make it work for XML
+ AccessType superClassAccessType = getAccessTypeForClass(superClass);
+ //we've reach the root entity and resolved Ids
+ if ( superClassAccessType != null && defaultAccessTypeForHierarchy != null) {
+ break; //we've found it
+ }
+ }
+ else {
+ break; //neither @Entity nor @MappedSuperclass
+ }
+ }
+ }
+ while ( superClass != null );
+ }
+
+ if ( accessType == null ) {
+ accessType = AccessType.PROPERTY; //default to property
+ this.defaultAccessTypeForElement = accessType;
+ }
+ //this is a subclass so caching is OK
+ //this.defaultAccessTypeForHierarchy = accessType;
+ context.addAccessType( this.element, accessType );
+ this.defaultAccessTypeForElement = accessType;
+ return accessType;
+ }
+
+ private AccessType getAccessTypeForClass(TypeElement searchedElement) {
+ pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "check class" + searchedElement );
+ AccessType accessType = context.getAccessType( searchedElement );
+
+ if (defaultAccessTypeForHierarchy == null) {
+ this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy( searchedElement );
+ }
+ if ( accessType != null ) {
+ pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "Found in cache" + searchedElement + ":" + accessType );
+ return accessType;
+ }
+
+ /**
+ * when forcing access type, we can only override the defaultAccessTypeForHierarchy
+ * if we are the entity root (identified by having @Id or @EmbeddedId
+ */
+ final Access accessAnn = searchedElement.getAnnotation( Access.class );
+ AccessType forcedAccessType = accessAnn != null ? accessAnn.value() : null;
+ if ( forcedAccessType != null) {
+ pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + forcedAccessType );
+ context.addAccessType( searchedElement, forcedAccessType );
+ }
+
+ //continue nevertheless to check if we are root and if defaultAccessTypeForHierarchy
+ //should be overridden
+ if ( forcedAccessType == null || defaultAccessTypeForHierarchy == null) {
+ List<? extends Element> myMembers = searchedElement.getEnclosedElements();
+ for ( Element subElement : myMembers ) {
+ List<? extends AnnotationMirror> entityAnnotations =
+ pe.getElementUtils().getAllAnnotationMirrors( subElement );
+
+ for ( Object entityAnnotation : entityAnnotations ) {
+ AnnotationMirror annotationMirror = ( AnnotationMirror ) entityAnnotation;
+
+ final String annotationType = annotationMirror.getAnnotationType().toString();
+
+ //FIXME consider XML
+ if ( annotationType.equals( Id.class.getName() )
+ || annotationType.equals( EmbeddedId.class.getName() ) ) {
+ pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "Found id on" + searchedElement );
+ final ElementKind kind = subElement.getKind();
+ if ( kind == ElementKind.FIELD || kind == ElementKind.METHOD ) {
+ accessType = kind == ElementKind.FIELD ? AccessType.FIELD : AccessType.PROPERTY;
+ //FIXME enlever in niveau
+ if (defaultAccessTypeForHierarchy == null) {
+ this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy( searchedElement );
+ //we've discovered the class hierarchy, let's cache it
+ if ( defaultAccessTypeForHierarchy == null ) {
+ this.defaultAccessTypeForHierarchy = accessType;
+ context.addAccessTypeForHierarchy( searchedElement, defaultAccessTypeForHierarchy );
+ //FIXME should we add
+ //context.addAccessTypeForHierarchy( element, defaultAccessTypeForHierarchy );
+ }
+ }
+ if ( forcedAccessType == null) {
+ context.addAccessType( searchedElement, accessType );
+ pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + accessType );
+ return accessType;
+ }
+ else {
+ return forcedAccessType;
+ }
+ }
+ }
+ }
+ }
+ }
+ return forcedAccessType;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append( "MetaEntity" );
+ sb.append( "{element=" ).append( element );
+ sb.append( '}' );
+ return sb.toString();
+ }
+
+ static Map<String, String> COLLECTIONS = new HashMap<String, String>();
+
+ static {
+ COLLECTIONS.put( "java.util.Collection", "javax.persistence.metamodel.CollectionAttribute" );
+ COLLECTIONS.put( "java.util.Set", "javax.persistence.metamodel.SetAttribute" );
+ COLLECTIONS.put( "java.util.List", "javax.persistence.metamodel.ListAttribute" );
+ COLLECTIONS.put( "java.util.Map", "javax.persistence.metamodel.MapAttribute" );
+ }
+
+ class TypeVisitor extends SimpleTypeVisitor6<AnnotationMetaAttribute, Element> {
+
+ AnnotationMetaEntity parent;
+ //if null, process all members as implicit
+ //if not null, only process members marked as @Access(explicitAccessType)
+ private AccessType explicitAccessType;
+
+ TypeVisitor(AnnotationMetaEntity parent, AccessType explicitAccessType) {
+ this.parent = parent;
+ this.explicitAccessType = explicitAccessType;
+ }
+
+ @Override
+ protected AnnotationMetaAttribute defaultAction(TypeMirror e, Element p) {
+ return super.defaultAction( e, p );
+ }
+
+ @Override
+ public AnnotationMetaAttribute visitPrimitive(PrimitiveType t, Element element) {
+ if ( isPersistent( element ) ) {
+ return new AnnotationMetaSingleAttribute( parent, element, TypeUtils.toTypeString( t ) );
+ }
+ else {
+ return null;
+ }
+ }
+
+ private boolean isPersistent(Element element) {
+ //FIXME consider XML
+ boolean correctAccessType = false;
+ if (this.explicitAccessType == null) {
+ correctAccessType = true;
+ }
+ else {
+ final Access accessAnn = element.getAnnotation( Access.class );
+ if ( accessAnn != null && explicitAccessType.equals( accessAnn.value() ) ) {
+ correctAccessType = true;
+ }
+ }
+ return correctAccessType
+ && element.getAnnotation( Transient.class ) == null
+ && !element.getModifiers().contains( Modifier.TRANSIENT )
+ && !element.getModifiers().contains( Modifier.STATIC );
+
+ }
+
+
+ @Override
+ public AnnotationMetaAttribute visitDeclared(DeclaredType t, Element element) {
+ //FIXME consider XML
+ if ( isPersistent( element ) ) {
+ TypeElement returnedElement = ( TypeElement ) pe.getTypeUtils().asElement( t );
+ String collection = COLLECTIONS.get( returnedElement.getQualifiedName().toString() ); // WARNING: .toString() is necessary here since Name equals does not compare to String
+
+ if ( collection != null ) {
+ //collection of element
+ if ( element.getAnnotation( ElementCollection.class ) != null ) {
+ final TypeMirror collectionType = t.getTypeArguments().get( 0 );
+ final TypeElement collectionElement = ( TypeElement ) pe.getTypeUtils().asElement( collectionType );
+ this.parent.context.processElement( collectionElement,
+ this.parent.defaultAccessTypeForElement );
+ }
+ if ( collection.equals( "javax.persistence.metamodel.MapAttribute" ) ) {
+ return new AnnotationMetaMap( parent, element, collection, getKeyType( t ), getElementType( t ) );
+ }
+ else {
+ return new AnnotationMetaCollection( parent, element, collection, getElementType( t ) );
+ }
+ }
+ else {
+ //FIXME Consider XML
+ if ( element.getAnnotation( Embedded.class ) != null
+ || returnedElement.getAnnotation( Embeddable.class ) != null ) {
+ this.parent.context.processElement( returnedElement,
+ this.parent.defaultAccessTypeForElement );
+ }
+ return new AnnotationMetaSingleAttribute( parent, element, returnedElement.getQualifiedName().toString() );
+ }
+ }
+ else {
+ return null;
+ }
+ }
+
+
+ @Override
+ public AnnotationMetaAttribute visitExecutable(ExecutableType t, Element p) {
+ String string = p.getSimpleName().toString();
+
+ // TODO: implement proper property get/is/boolean detection
+ if ( string.startsWith( "get" ) || string.startsWith( "is" ) ) {
+ TypeMirror returnType = t.getReturnType();
+
+ return returnType.accept( this, p );
+ }
+ else {
+ return null;
+ }
+ }
+ }
+
+ public String generateImports() {
+ return importContext.generateImports();
+ }
+
+ public String importType(String fqcn) {
+ return importContext.importType( fqcn );
+ }
+
+ public String staticImport(String fqcn, String member) {
+ return importContext.staticImport( fqcn, member );
+ }
+
+ public String importType(Name qualifiedName) {
+ return importType( qualifiedName.toString() );
+ }
+
+ public TypeElement getTypeElement() {
+ return element;
+ }
+
+ private String getKeyType(DeclaredType t) {
+ return t.getTypeArguments().get( 0 ).toString();
+ }
+
+
+ private String getElementType(DeclaredType declaredType) {
+ if ( declaredType.getTypeArguments().size() == 1 ) {
+ return declaredType.getTypeArguments().get( 0 ).toString();
+ }
+ else {
+ return declaredType.getTypeArguments().get( 1 ).toString();
+ }
+ }
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaMap.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaMap.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaMap.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaMap.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,42 @@
+// $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.jpamodelgen.annotation;
+
+import javax.lang.model.element.Element;
+
+/**
+ *
+ * @author Max Andersen
+ * @author Hardy Ferentschik
+ * @author Emmanuel Bernard
+ */
+public class AnnotationMetaMap extends AnnotationMetaCollection {
+
+ private final String keyType;
+
+ public AnnotationMetaMap(AnnotationMetaEntity parent, Element element, String collectionType,
+ String keyType, String elementType) {
+ super(parent, element, collectionType, elementType);
+ this.keyType = keyType;
+ }
+
+ public String getDeclarationString() {
+ return "public static volatile " + parent.importType(getMetaType()) + "<" + parent.importType(parent.getQualifiedName()) + ", " + parent.importType(keyType) + ", " + parent.importType(getTypeDeclaration()) + "> " + getPropertyName() + ";";
+ }
+
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaMap.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java (from rev 17898, jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaSingleAttribute.java)
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java (rev 0)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,41 @@
+// $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.jpamodelgen.annotation;
+
+import org.hibernate.jpamodelgen.MetaSingleAttribute;
+
+import javax.lang.model.element.Element;
+
+/**
+ *
+ * @author Max Andersen
+ * @author Hardy Ferentschik
+ * @author Emmanuel Bernard
+ */
+public class AnnotationMetaSingleAttribute extends AnnotationMetaAttribute implements MetaSingleAttribute {
+
+ public AnnotationMetaSingleAttribute(AnnotationMetaEntity parent, Element element, String type) {
+ super(parent, element, type);
+ }
+
+ @Override
+ public String getMetaType() {
+ return "javax.persistence.metamodel.SingularAttribute";
+ }
+
+}
Property changes on: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java
___________________________________________________________________
Name: svn:keywords
+ Id
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaAttribute.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,74 +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.jpamodelgen.annotation;
-
-import org.hibernate.jpamodelgen.IMetaAttribute;
-
-import java.beans.Introspector;
-
-import javax.annotation.processing.ProcessingEnvironment;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
-
-/**
- *
- * @author Max Andersen
- * @author Hardy Ferentschik
- * @author Emmanuel Bernard
- */
-public abstract class MetaAttribute implements IMetaAttribute {
-
- final protected Element element;
- final protected MetaEntity parent;
- final protected ProcessingEnvironment pe;
- private final String type;
-
- public MetaAttribute(MetaEntity parent, Element element, String type) {
- this.element = element;
- this.parent = parent;
- this.type = type;
- this.pe = parent.pe;
- }
-
- public String getDeclarationString() {
- return "public static volatile " + parent.importType(getMetaType()) + "<" + parent.importType(parent.getQualifiedName()) + ", " + parent.importType(getTypeDeclaration()) + "> " + getPropertyName() + ";";
- }
-
- public String getPropertyName() {
- if(element.getKind()==ElementKind.FIELD) {
- return element.getSimpleName().toString();
- } else if (element.getKind()==ElementKind.METHOD) {
-
- String name = element.getSimpleName().toString();
- if(name.startsWith("get")) {
- return pe.getElementUtils().getName(Introspector.decapitalize(name.substring("get".length()))).toString();
- } else if(name.startsWith("is")) {
- return (pe.getElementUtils().getName(Introspector.decapitalize(name.substring("is".length())))).toString();
- }
- return pe.getElementUtils().getName(Introspector.decapitalize(name)).toString();
- } else {
- return pe.getElementUtils().getName(element.getSimpleName() + "/* " + element.getKind() + " */").toString();
- }
- }
-
- abstract public String getMetaType();
-
- public String getTypeDeclaration() {
- return type;
- }
-}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaCollection.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaCollection.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaCollection.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,46 +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.jpamodelgen.annotation;
-
-import org.hibernate.jpamodelgen.IMetaCollection;
-
-import javax.lang.model.element.Element;
-
-/**
- *
- * @author Max Andersen
- * @author Hardy Ferentschik
- * @author Emmanuel Bernard
- */
-public class MetaCollection extends MetaAttribute implements IMetaCollection {
-
- private String collectionType;
-
-
- public MetaCollection(MetaEntity parent, Element element, String collectionType, String elementType) {
- super(parent, element, elementType);
- this.collectionType = collectionType;
- }
-
- @Override
- public String getMetaType() {
- return collectionType;
- }
-
-
-}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaEntity.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaEntity.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,433 +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.jpamodelgen.annotation;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.processing.ProcessingEnvironment;
-import javax.lang.model.element.AnnotationMirror;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
-import javax.lang.model.element.Name;
-import javax.lang.model.element.PackageElement;
-import javax.lang.model.element.TypeElement;
-import javax.lang.model.element.Modifier;
-import javax.lang.model.type.DeclaredType;
-import javax.lang.model.type.ExecutableType;
-import javax.lang.model.type.PrimitiveType;
-import javax.lang.model.type.TypeMirror;
-import javax.lang.model.util.ElementFilter;
-import javax.lang.model.util.SimpleTypeVisitor6;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Id;
-import javax.persistence.AccessType;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
-import javax.persistence.Embedded;
-import javax.persistence.Embeddable;
-import javax.persistence.Access;
-import javax.persistence.ElementCollection;
-import javax.tools.Diagnostic.Kind;
-import javax.tools.Diagnostic;
-
-import org.hibernate.jpamodelgen.IMetaEntity;
-import org.hibernate.jpamodelgen.IMetaAttribute;
-import org.hibernate.jpamodelgen.ImportContext;
-import org.hibernate.jpamodelgen.ImportContextImpl;
-import org.hibernate.jpamodelgen.TypeUtils;
-import org.hibernate.jpamodelgen.Context;
-
-/**
- *
- * @author Max Andersen
- * @author Hardy Ferentschik
- * @author Emmanuel Bernard
- */
-public class MetaEntity implements IMetaEntity {
-
- final TypeElement element;
- final protected ProcessingEnvironment pe;
-
- final ImportContext importContext;
- private Context context;
- //used to propagate the access type of the root entity over to subclasses, superclasses and embeddable
- private AccessType defaultAccessTypeForHierarchy;
- private AccessType defaultAccessTypeForElement;
-
- public MetaEntity(ProcessingEnvironment pe, TypeElement element, Context context) {
- this.element = element;
- this.pe = pe;
- importContext = new ImportContextImpl( getPackageName() );
- this.context = context;
- }
-
- public MetaEntity(ProcessingEnvironment pe, TypeElement element, Context context, AccessType accessType) {
- this(pe, element, context);
- this.defaultAccessTypeForHierarchy = accessType;
- }
-
- public String getSimpleName() {
- return element.getSimpleName().toString();
- }
-
- public Element getOriginalElement() {
- return element;
- }
-
- public String getQualifiedName() {
- return element.getQualifiedName().toString();
- }
-
- public String getPackageName() {
- PackageElement packageOf = pe.getElementUtils().getPackageOf( element );
- return pe.getElementUtils().getName( packageOf.getQualifiedName() ).toString();
- }
-
- public List<IMetaAttribute> getMembers() {
- List<IMetaAttribute> membersFound = new ArrayList<IMetaAttribute>();
- final AccessType elementAccessType = getAccessTypeForElement();
-
- List<? extends Element> fieldsOfClass = ElementFilter.fieldsIn( element.getEnclosedElements() );
- addPersistentMembers( membersFound, elementAccessType, fieldsOfClass, AccessType.FIELD );
-
- List<? extends Element> methodsOfClass = ElementFilter.methodsIn( element.getEnclosedElements() );
- addPersistentMembers( membersFound, elementAccessType, methodsOfClass, AccessType.PROPERTY );
-
- //process superclasses
- for(TypeElement superclass = TypeUtils.getSuperclass(element) ;
- superclass != null ;
- superclass = TypeUtils.getSuperclass( superclass ) ) {
- if ( superclass.getAnnotation( Entity.class ) != null ) {
- break; //will be handled or has been handled already
- }
- else if ( superclass.getAnnotation( MappedSuperclass.class ) != null ) {
- //FIXME use the class defalut access type
- context.processElement( superclass, defaultAccessTypeForHierarchy );
- }
- }
-
- //this is valid to not have properties (ie subentities)
-// if ( membersFound.size() == 0 ) {
-// pe.getMessager().printMessage( Kind.WARNING, "No properties found on " + element, element );
-// }
- return membersFound;
- }
-
- private void addPersistentMembers(
- List<IMetaAttribute> membersFound,
- AccessType elementAccessType,
- List<? extends Element> membersOfClass,
- AccessType membersKind) {
- pe.getMessager()
- .printMessage( Kind.NOTE, "Scanning " + membersOfClass.size() + " " + membersKind + " for " + element.toString() );
- AccessType explicitAccessType;
- if (elementAccessType == membersKind) {
- //all membersKind considered
- explicitAccessType = null;
- }
- else {
- //use membersKind only if marked with @Access(membersKind)
- explicitAccessType = membersKind;
- }
- for ( Element memberOfClass : membersOfClass ) {
-
- MetaAttribute result = memberOfClass.asType().accept( new TypeVisitor( this, explicitAccessType ),
- memberOfClass
- );
- if ( result != null ) {
- membersFound.add( result );
- }
-//EBE not sure why?
-// else {
-// pe.getMessager().printMessage( Kind.WARNING, "Could not find valid info for JPA property", mymember );
-// }
- }
- }
-
- private AccessType getAccessTypeForElement() {
-
- //get local strategy
- AccessType accessType = getAccessTypeForClass(element);
- if (accessType == null) {
- accessType = this.defaultAccessTypeForHierarchy;
- }
- if (accessType == null) {
- //we dont' know
- //if an enity go up
- //
- //superclasses alre always treated after their entities
- //and their access type are discovered
- //FIXME is it really true if only the superclass is changed
- TypeElement superClass = element;
- do {
- superClass = TypeUtils.getSuperclass( superClass );
- if (superClass != null) {
- if ( superClass.getAnnotation( Entity.class ) != null
- || superClass.getAnnotation( MappedSuperclass.class ) != null ) {
- //FIXME make it work for XML
- AccessType superClassAccessType = getAccessTypeForClass(superClass);
- //we've reach the root entity and resolved Ids
- if ( superClassAccessType != null && defaultAccessTypeForHierarchy != null) {
- break; //we've found it
- }
- }
- else {
- break; //neither @Entity nor @MappedSuperclass
- }
- }
- }
- while ( superClass != null );
- }
-
- if ( accessType == null ) {
- accessType = AccessType.PROPERTY; //default to property
- this.defaultAccessTypeForElement = accessType;
- }
- //this is a subclass so caching is OK
- //this.defaultAccessTypeForHierarchy = accessType;
- context.addAccessType( this.element, accessType );
- this.defaultAccessTypeForElement = accessType;
- return accessType;
- }
-
- private AccessType getAccessTypeForClass(TypeElement searchedElement) {
- pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "check class" + searchedElement );
- AccessType accessType = context.getAccessType( searchedElement );
-
- if (defaultAccessTypeForHierarchy == null) {
- this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy( searchedElement );
- }
- if ( accessType != null ) {
- pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "Found in cache" + searchedElement + ":" + accessType );
- return accessType;
- }
-
- /**
- * when forcing access type, we can only override the defaultAccessTypeForHierarchy
- * if we are the entity root (identified by having @Id or @EmbeddedId
- */
- final Access accessAnn = searchedElement.getAnnotation( Access.class );
- AccessType forcedAccessType = accessAnn != null ? accessAnn.value() : null;
- if ( forcedAccessType != null) {
- pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + forcedAccessType );
- context.addAccessType( searchedElement, forcedAccessType );
- }
-
- //continue nevertheless to check if we are root and if defaultAccessTypeForHierarchy
- //should be overridden
- if ( forcedAccessType == null || defaultAccessTypeForHierarchy == null) {
- List<? extends Element> myMembers = searchedElement.getEnclosedElements();
- for ( Element subElement : myMembers ) {
- List<? extends AnnotationMirror> entityAnnotations =
- pe.getElementUtils().getAllAnnotationMirrors( subElement );
-
- for ( Object entityAnnotation : entityAnnotations ) {
- AnnotationMirror annotationMirror = ( AnnotationMirror ) entityAnnotation;
-
- final String annotationType = annotationMirror.getAnnotationType().toString();
-
- //FIXME consider XML
- if ( annotationType.equals( Id.class.getName() )
- || annotationType.equals( EmbeddedId.class.getName() ) ) {
- pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "Found id on" + searchedElement );
- final ElementKind kind = subElement.getKind();
- if ( kind == ElementKind.FIELD || kind == ElementKind.METHOD ) {
- accessType = kind == ElementKind.FIELD ? AccessType.FIELD : AccessType.PROPERTY;
- //FIXME enlever in niveau
- if (defaultAccessTypeForHierarchy == null) {
- this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy( searchedElement );
- //we've discovered the class hierarchy, let's cache it
- if ( defaultAccessTypeForHierarchy == null ) {
- this.defaultAccessTypeForHierarchy = accessType;
- context.addAccessTypeForHierarchy( searchedElement, defaultAccessTypeForHierarchy );
- //FIXME should we add
- //context.addAccessTypeForHierarchy( element, defaultAccessTypeForHierarchy );
- }
- }
- if ( forcedAccessType == null) {
- context.addAccessType( searchedElement, accessType );
- pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + accessType );
- return accessType;
- }
- else {
- return forcedAccessType;
- }
- }
- }
- }
- }
- }
- return forcedAccessType;
- }
-
- @Override
- public String toString() {
- final StringBuilder sb = new StringBuilder();
- sb.append( "MetaEntity" );
- sb.append( "{element=" ).append( element );
- sb.append( '}' );
- return sb.toString();
- }
-
- static Map<String, String> COLLECTIONS = new HashMap<String, String>();
-
- static {
- COLLECTIONS.put( "java.util.Collection", "javax.persistence.metamodel.CollectionAttribute" );
- COLLECTIONS.put( "java.util.Set", "javax.persistence.metamodel.SetAttribute" );
- COLLECTIONS.put( "java.util.List", "javax.persistence.metamodel.ListAttribute" );
- COLLECTIONS.put( "java.util.Map", "javax.persistence.metamodel.MapAttribute" );
- }
-
- class TypeVisitor extends SimpleTypeVisitor6<MetaAttribute, Element> {
-
- MetaEntity parent;
- //if null, process all members as implicit
- //if not null, only process members marked as @Access(explicitAccessType)
- private AccessType explicitAccessType;
-
- TypeVisitor(MetaEntity parent, AccessType explicitAccessType) {
- this.parent = parent;
- this.explicitAccessType = explicitAccessType;
- }
-
- @Override
- protected MetaAttribute defaultAction(TypeMirror e, Element p) {
- return super.defaultAction( e, p );
- }
-
- @Override
- public MetaAttribute visitPrimitive(PrimitiveType t, Element element) {
- if ( isPersistent( element ) ) {
- return new MetaSingleAttribute( parent, element, TypeUtils.toTypeString( t ) );
- }
- else {
- return null;
- }
- }
-
- private boolean isPersistent(Element element) {
- //FIXME consider XML
- boolean correctAccessType = false;
- if (this.explicitAccessType == null) {
- correctAccessType = true;
- }
- else {
- final Access accessAnn = element.getAnnotation( Access.class );
- if ( accessAnn != null && explicitAccessType.equals( accessAnn.value() ) ) {
- correctAccessType = true;
- }
- }
- return correctAccessType
- && element.getAnnotation( Transient.class ) == null
- && !element.getModifiers().contains( Modifier.TRANSIENT )
- && !element.getModifiers().contains( Modifier.STATIC );
-
- }
-
-
- @Override
- public MetaAttribute visitDeclared(DeclaredType t, Element element) {
- //FIXME consider XML
- if ( isPersistent( element ) ) {
- TypeElement returnedElement = ( TypeElement ) pe.getTypeUtils().asElement( t );
- String collection = COLLECTIONS.get( returnedElement.getQualifiedName().toString() ); // WARNING: .toString() is necessary here since Name equals does not compare to String
-
- if ( collection != null ) {
- //collection of element
- if ( element.getAnnotation( ElementCollection.class ) != null ) {
- final TypeMirror collectionType = t.getTypeArguments().get( 0 );
- final TypeElement collectionElement = ( TypeElement ) pe.getTypeUtils().asElement( collectionType );
- this.parent.context.processElement( collectionElement,
- this.parent.defaultAccessTypeForElement );
- }
- if ( collection.equals( "javax.persistence.metamodel.MapAttribute" ) ) {
- return new MetaMap( parent, element, collection, getKeyType( t ), getElementType( t ) );
- }
- else {
- return new MetaCollection( parent, element, collection, getElementType( t ) );
- }
- }
- else {
- //FIXME Consider XML
- if ( element.getAnnotation( Embedded.class ) != null
- || returnedElement.getAnnotation( Embeddable.class ) != null ) {
- this.parent.context.processElement( returnedElement,
- this.parent.defaultAccessTypeForElement );
- }
- return new MetaSingleAttribute( parent, element, returnedElement.getQualifiedName().toString() );
- }
- }
- else {
- return null;
- }
- }
-
-
- @Override
- public MetaAttribute visitExecutable(ExecutableType t, Element p) {
- String string = p.getSimpleName().toString();
-
- // TODO: implement proper property get/is/boolean detection
- if ( string.startsWith( "get" ) || string.startsWith( "is" ) ) {
- TypeMirror returnType = t.getReturnType();
-
- return returnType.accept( this, p );
- }
- else {
- return null;
- }
- }
- }
-
- public String generateImports() {
- return importContext.generateImports();
- }
-
- public String importType(String fqcn) {
- return importContext.importType( fqcn );
- }
-
- public String staticImport(String fqcn, String member) {
- return importContext.staticImport( fqcn, member );
- }
-
- public String importType(Name qualifiedName) {
- return importType( qualifiedName.toString() );
- }
-
- public TypeElement getTypeElement() {
- return element;
- }
-
- private String getKeyType(DeclaredType t) {
- return t.getTypeArguments().get( 0 ).toString();
- }
-
-
- private String getElementType(DeclaredType declaredType) {
- if ( declaredType.getTypeArguments().size() == 1 ) {
- return declaredType.getTypeArguments().get( 0 ).toString();
- }
- else {
- return declaredType.getTypeArguments().get( 1 ).toString();
- }
- }
-}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaMap.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaMap.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaMap.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,42 +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.jpamodelgen.annotation;
-
-import javax.lang.model.element.Element;
-
-/**
- *
- * @author Max Andersen
- * @author Hardy Ferentschik
- * @author Emmanuel Bernard
- */
-public class MetaMap extends MetaCollection {
-
- private final String keyType;
-
- public MetaMap(MetaEntity parent, Element element, String collectionType,
- String keyType, String elementType) {
- super(parent, element, collectionType, elementType);
- this.keyType = keyType;
- }
-
- public String getDeclarationString() {
- return "public static volatile " + parent.importType(getMetaType()) + "<" + parent.importType(parent.getQualifiedName()) + ", " + parent.importType(keyType) + ", " + parent.importType(getTypeDeclaration()) + "> " + getPropertyName() + ";";
- }
-
-}
Deleted: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaSingleAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaSingleAttribute.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/MetaSingleAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,41 +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.jpamodelgen.annotation;
-
-import org.hibernate.jpamodelgen.IMetaSingleAttribute;
-
-import javax.lang.model.element.Element;
-
-/**
- *
- * @author Max Andersen
- * @author Hardy Ferentschik
- * @author Emmanuel Bernard
- */
-public class MetaSingleAttribute extends MetaAttribute implements IMetaSingleAttribute {
-
- public MetaSingleAttribute(MetaEntity parent, Element element, String type) {
- super(parent, element, type);
- }
-
- @Override
- public String getMetaType() {
- return "javax.persistence.metamodel.SingularAttribute";
- }
-
-}
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -18,12 +18,12 @@
package org.hibernate.jpamodelgen.xml;
-import org.hibernate.jpamodelgen.IMetaAttribute;
+import org.hibernate.jpamodelgen.MetaAttribute;
/**
* @author Hardy Ferentschik
*/
-public abstract class XmlMetaAttribute implements IMetaAttribute {
+public abstract class XmlMetaAttribute implements MetaAttribute {
private XmlMetaEntity parentEntity;
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaCollection.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -17,12 +17,12 @@
*/
package org.hibernate.jpamodelgen.xml;
-import org.hibernate.jpamodelgen.IMetaCollection;
+import org.hibernate.jpamodelgen.MetaCollection;
/**
* @author Hardy Ferentschik
*/
-public class XmlMetaCollection extends XmlMetaAttribute implements IMetaCollection {
+public class XmlMetaCollection extends XmlMetaAttribute implements MetaCollection {
String collectionType;
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaEntity.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -26,9 +26,9 @@
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
-import org.hibernate.jpamodelgen.IMetaAttribute;
+import org.hibernate.jpamodelgen.MetaAttribute;
import org.hibernate.jpamodelgen.ImportContextImpl;
-import org.hibernate.jpamodelgen.IMetaEntity;
+import org.hibernate.jpamodelgen.MetaEntity;
import org.hibernate.jpamodelgen.ImportContext;
import org.hibernate.jpamodelgen.xml.jaxb.Attributes;
import org.hibernate.jpamodelgen.xml.jaxb.Basic;
@@ -45,7 +45,7 @@
/**
* @author Hardy Ferentschik
*/
-public class XmlMetaEntity implements IMetaEntity {
+public class XmlMetaEntity implements MetaEntity {
static Map<String, String> COLLECTIONS = new HashMap<String, String>();
@@ -62,7 +62,7 @@
final private ImportContext importContext;
- final private List<IMetaAttribute> members = new ArrayList<IMetaAttribute>();
+ final private List<MetaAttribute> members = new ArrayList<MetaAttribute>();
private TypeElement element;
@@ -135,7 +135,7 @@
return packageName;
}
- public List<IMetaAttribute> getMembers() {
+ public List<MetaAttribute> getMembers() {
return members;
}
Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/xml/XmlMetaSingleAttribute.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -17,12 +17,12 @@
*/
package org.hibernate.jpamodelgen.xml;
-import org.hibernate.jpamodelgen.IMetaSingleAttribute;
+import org.hibernate.jpamodelgen.MetaSingleAttribute;
/**
* @author Hardy Ferentschik
*/
-public class XmlMetaSingleAttribute extends XmlMetaAttribute implements IMetaSingleAttribute {
+public class XmlMetaSingleAttribute extends XmlMetaAttribute implements MetaSingleAttribute {
public XmlMetaSingleAttribute(XmlMetaEntity parent, String propertyName, String type) {
super(parent, propertyName, type);
Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/AccessTypeTest.java (from rev 17898, jpamodelgen/trunk/src/test/java/test/AccessTypeTest.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/AccessTypeTest.java (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/AccessTypeTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,93 @@
+// $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.jpamodelgen.test;
+
+import org.testng.annotations.Test;
+import org.testng.Assert;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class AccessTypeTest {
+
+ @Test
+ public void testExcludeTransientFieldAndStatic() throws Exception{
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Product_", "nonPersistent" );
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Product_", "nonPersistent2" );
+ }
+
+ @Test
+ public void testDefaultAccessTypeOnEntity() throws Exception{
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.User_", "nonPersistent" );
+ }
+
+ @Test
+ public void testDefaultAccessTypeForSubclassOfEntity() throws Exception{
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Customer_", "nonPersistent" );
+ }
+
+ @Test
+ public void testDefaultAccessTypeForEmbeddable() throws Exception{
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Detail_", "nonPersistent" );
+ }
+
+ @Test
+ public void testInheritedAccessTypeForEmbeddable() throws Exception{
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Country_", "nonPersistent" );
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Pet_", "nonPersistent", "Colleciton of membeddable not taken care of" );
+ }
+
+ @Test
+ public void testDefaultAccessTypeForMappedSuperclass() throws Exception{
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Detail_", "volume" );
+ }
+
+ @Test
+ public void testExplicitAccessTypeAndDefaultFromRootEntity() throws Exception{
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.LivingBeing_", "nonPersistent", "eplicit access type on mapped superclass" );
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Hominidae_", "nonPersistent", "eplicit access type on entity" );
+ absenceOfField( "org.hibernate.jpamodelgen.test.model.Human_", "nonPersistent", "proper inheritance from root entity access type" );
+ }
+
+ @Test
+ public void testMemberAccessType() throws Exception{
+ presenceOfField( "org.hibernate.jpamodelgen.test.model.Customer_", "goodPayer", "access type overriding" );
+ }
+
+ private void absenceOfField(String className, String fieldName) throws ClassNotFoundException {
+ absenceOfField( className, fieldName, "field should not be persistent" );
+ }
+ private void absenceOfField(String className, String fieldName, String errorString) throws ClassNotFoundException {
+ Assert.assertFalse( isFieldHere(className, fieldName), errorString );
+ }
+
+ private void presenceOfField(String className, String fieldName, String errorString) throws ClassNotFoundException {
+ Assert.assertTrue( isFieldHere(className, fieldName), errorString );
+ }
+
+ private boolean isFieldHere(String className, String fieldName) throws ClassNotFoundException {
+ Class<?> user_ = Class.forName( className );
+ try {
+ user_.getField( fieldName );
+ return true;
+ }
+ catch (NoSuchFieldException e) {
+ return false;
+ }
+ }
+}
Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/AccessTypeTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/InheritanceTest.java (from rev 17898, jpamodelgen/trunk/src/test/java/test/InheritanceTest.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/InheritanceTest.java (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/InheritanceTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,45 @@
+// $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.jpamodelgen.test;
+
+import org.testng.annotations.Test;
+import org.testng.Assert;
+import org.hibernate.jpamodelgen.test.model.Customer_;
+import org.hibernate.jpamodelgen.test.model.User_;
+import org.hibernate.jpamodelgen.test.model.House_;
+import org.hibernate.jpamodelgen.test.model.Building_;
+import org.hibernate.jpamodelgen.test.model.Area_;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InheritanceTest {
+ @Test
+ public void testSuperEntity() throws Exception {
+ Assert.assertEquals( Customer_.class.getSuperclass(), User_.class,
+ "Entity with super entity should inherit at the metamodel level");
+ }
+
+ @Test
+ public void testMappedSuperclass() throws Exception {
+ Assert.assertEquals( House_.class.getSuperclass(), Building_.class,
+ "Entity with mapped superclass should inherit at the metamodel level");
+ Assert.assertEquals( Building_.class.getSuperclass(), Area_.class,
+ "mapped superclass with mapped superclass should inherit at the metamodel level");
+ }
+}
Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/InheritanceTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/QueryTest.java (from rev 17898, jpamodelgen/trunk/src/test/java/test/QueryTest.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/QueryTest.java (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/QueryTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,166 @@
+// $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.jpamodelgen.test;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Set;
+import javax.persistence.Tuple;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Join;
+import static javax.persistence.criteria.JoinType.INNER;
+import javax.persistence.criteria.ListJoin;
+import javax.persistence.criteria.Path;
+import javax.persistence.criteria.Root;
+
+import org.hibernate.jpamodelgen.test.model.Item;
+import org.hibernate.jpamodelgen.test.model.Item_;
+import org.hibernate.jpamodelgen.test.model.Order;
+import org.hibernate.jpamodelgen.test.model.Order_;
+import org.hibernate.jpamodelgen.test.model.Product;
+import org.hibernate.jpamodelgen.test.model.Product_;
+import org.hibernate.jpamodelgen.test.model.Shop_;
+
+/**
+ * Writing queries involves passing typesafe, statically cached, metamodel
+ * objects to the query builder in order to create the various parts of
+ * the query. The typesafe metamodel objects were validated at init time,
+ * so it is impossible to build invalid queries in the application code.
+ *
+ * @author Max Andersen
+ * @author Hardy Ferentschik
+ * @author Emmanuel Bernard
+ */
+public class QueryTest {
+
+ CriteriaBuilder qb;
+
+ public void test() {
+ CriteriaQuery<Tuple> q = qb.createTupleQuery();
+
+ Root<Order> order = q.from( Order.class );
+ Join<Item, Product> product = order.join( Order_.items )
+ .join( Item_.product );
+
+ Path<BigDecimal> price = product.get( Product_.price );
+ Path<Boolean> filled = order.get( Order_.filled );
+ Path<Date> date = order.get( Order_.date );
+
+ q.select( qb.tuple( order, product ) )
+ .where( qb.and( qb.gt( price, 100.00 ), qb.not( filled ) ) )
+ .orderBy( qb.asc( price ), qb.desc( date ) );
+ }
+
+ public void testUntypesafe() {
+ CriteriaQuery<Tuple> q = qb.createTupleQuery();
+
+ Root<Order> order = q.from( Order.class );
+ Join<Item, Product> product = order.join( "items" )
+ .join( "product" );
+
+ Path<BigDecimal> price = product.get( "price" );
+ Path<Boolean> filled = order.get( "filled" );
+ Path<Date> date = order.get( "date" );
+
+ q.select( qb.tuple( order, product ) )
+ .where( qb.and( qb.gt( price, 100.00 ), qb.not( filled ) ) )
+ .orderBy( qb.asc( price ), qb.desc( date ) );
+ }
+
+ /**
+ * Navigation by joining
+ */
+ public void test2() {
+ CriteriaQuery<Product> q = qb.createQuery( Product.class );
+
+ Root<Product> product = q.from( Product.class );
+ Join<Item, Order> order = product.join( Product_.items )
+ .join( Item_.order );
+
+ q.select( product )
+ .where( qb.equal( order.get( Order_.id ), 12345l ) );
+ }
+
+ public void testMap() {
+ CriteriaQuery<Item> q = qb.createQuery( Item.class );
+
+ Root<Item> item = q.from( Item.class );
+ item.join( Item_.namedOrders );
+ }
+
+ /**
+ * Navigation by compound Path
+ */
+ public void test3() {
+ CriteriaQuery<Item> q = qb.createQuery( Item.class );
+
+ Root<Item> item = q.from( Item.class );
+ Path<String> shopName = item.get( Item_.order )
+ .get( Order_.shop )
+ .get( Shop_.name );
+ q.select( item )
+ .where( qb.equal( shopName, "amazon.com" ) );
+ }
+
+// public void test4() {
+// CriteriaQuery q = qb.create();
+//
+// Root<Order> order = q.from(Order.class);
+// ListJoin<Order, String> note = order.join(Order_.notes);
+// Expression<Set<Item>> items = order.get(Order_.items);
+// order.fetch(Order_.items, JoinType.INNER);
+//
+// q.select(note)
+// .where( qb.and( qb.lt(note.index(), 10), qb.isNotEmpty(items) ) );
+// }
+
+ public void test4Untypesafe() {
+ CriteriaQuery<String> q = qb.createQuery( String.class );
+
+ Root<Order> order = q.from( Order.class );
+ ListJoin<Order, String> note = order.joinList( "notes" );
+ Expression<Set<Item>> items = order.get( "items" );
+ order.fetch( "items", INNER );
+
+ q.select( note )
+ .where( qb.and( qb.lt( note.index(), 10 ), qb.isNotEmpty( items ) ) );
+ }
+
+ /*public void test5() {
+ Expression<Long> l= null;
+ Expression<Integer> i= null;
+ Expression<Float> x= null;
+ Expression<Float> y= null;
+
+ Expression<Number> n;
+ Expression<Float> f;
+ Expression<String> s = null;
+
+ n = qb.quot(l, i);
+
+ f = qb.sum(x, y);
+
+ n = qb.quot(x, y);
+
+ javax.jpamodelgen.criteria.Order o = qb.asc(n);
+ javax.jpamodelgen.criteria.Order p = qb.ascending(s);
+ }*/
+
+}
Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/QueryTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/XmlMappingTest.java (from rev 17898, jpamodelgen/trunk/src/test/java/test/XmlMappingTest.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/XmlMappingTest.java (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/XmlMappingTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,55 @@
+// $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.jpamodelgen.test;
+
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+import org.testng.annotations.Test;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class XmlMappingTest {
+ @Test
+ public void testXmlConfiguredEmbeddedClassGenerated() throws Exception {
+ assertNotNull( Class.forName( "org.hibernate.jpamodelgen.test.model.xmlmapped.Address_" ) );
+ }
+
+ @Test
+ public void testXmlConfiguredMappedSuperclassGenerated() throws Exception {
+ Class<?> building = Class.forName( "org.hibernate.jpamodelgen.test.model.xmlmapped.Building_" );
+ assertNotNull( building );
+ assertNotNull( building.getField( "address" ) );
+ }
+
+ @Test
+ public void testClassHierarchy() throws Exception {
+ Class<?> mammal = Class.forName( "org.hibernate.jpamodelgen.test.model.xmlmapped.Mammal_" );
+ assertNotNull( mammal );
+
+ Class<?> being = Class.forName( "org.hibernate.jpamodelgen.test.model.xmlmapped.LivingBeing_" );
+ assertNotNull( being );
+
+ assertTrue( mammal.getSuperclass().equals( being ) );
+ }
+
+ @Test(expectedExceptions = ClassNotFoundException.class)
+ public void testNonExistentMappedClassesGetIgnored() throws Exception {
+ Class.forName( "org.hibernate.jpamodelgen.test.model.Dummy_" );
+ }
+}
\ No newline at end of file
Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/XmlMappingTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model (from rev 17898, jpamodelgen/trunk/src/test/java/model)
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Address.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Address.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Address.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,12 +15,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import java.util.Set;
import javax.persistence.Embeddable;
import javax.persistence.Access;
-import javax.persistence.AccessType;
import javax.persistence.ElementCollection;
import javax.persistence.CollectionTable;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Area.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Area.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Area.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.MappedSuperclass;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Building.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Building.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Building.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.MappedSuperclass;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Country.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Country.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Country.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Embeddable;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Customer.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Customer.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Customer.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import java.util.Set;
import javax.persistence.Entity;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Detail.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Detail.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Detail.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Embeddable;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Hominidae.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Hominidae.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Hominidae.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,11 +15,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Entity;
import javax.persistence.Access;
-import javax.persistence.AccessType;
/**
* @author Emmanuel Bernard
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/House.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/House.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/House.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Id;
import javax.persistence.Entity;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Human.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Human.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Human.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Entity;
Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Image.java (from rev 17898, jpamodelgen/trunk/src/test/java/model/Human.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Image.java (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Image.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,46 @@
+// $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.jpamodelgen.test.model;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Image {
+ private String name;
+
+ private byte[] data;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public byte[] getData() {
+ return data;
+ }
+
+ public void setData(byte[] data) {
+ this.data = data;
+ }
+}
\ No newline at end of file
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Inhabitant.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Inhabitant.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Inhabitant.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,12 +15,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import java.util.Set;
import javax.persistence.Embeddable;
import javax.persistence.Access;
-import javax.persistence.AccessType;
import javax.persistence.ElementCollection;
/**
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Item.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Item.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Item.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,10 +15,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import java.util.Map;
-import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.Id;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/LivingBeing.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/LivingBeing.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/LivingBeing.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,11 +15,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.MappedSuperclass;
import javax.persistence.Access;
-import javax.persistence.AccessType;
/**
* @author Emmanuel Bernard
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Mammals.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Mammals.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Mammals.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Entity;
import javax.persistence.Id;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Order.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Order.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Order.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import java.util.Date;
import java.util.List;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Pet.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Pet.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Pet.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Embeddable;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Product.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Product.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Product.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import java.math.BigDecimal;
import java.util.Set;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Shop.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/Shop.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/Shop.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Entity;
import javax.persistence.Id;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/User.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/User.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/User.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model;
+package org.hibernate.jpamodelgen.test.model;
import javax.persistence.Entity;
import javax.persistence.Id;
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Address.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/xmlmapped/Address.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Address.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model.xmlmapped;
+package org.hibernate.jpamodelgen.test.model.xmlmapped;
/**
* @author Hardy Ferentschik
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Building.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/xmlmapped/Building.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Building.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,10 +15,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model.xmlmapped;
+package org.hibernate.jpamodelgen.test.model.xmlmapped;
-import model.Address;
-import model.Area;
+import org.hibernate.jpamodelgen.test.model.Address;
+import org.hibernate.jpamodelgen.test.model.Area;
/**
* @author Hardy Ferentschik
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/LivingBeing.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/xmlmapped/LivingBeing.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/LivingBeing.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model.xmlmapped;
+package org.hibernate.jpamodelgen.test.model.xmlmapped;
/**
* @author Hardy Ferentschik
Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Mammal.java
===================================================================
--- jpamodelgen/trunk/src/test/java/model/xmlmapped/Mammal.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/model/xmlmapped/Mammal.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -15,7 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package model.xmlmapped;
+package org.hibernate.jpamodelgen.test.model.xmlmapped;
/**
* @author Hardy Ferentschik
Deleted: jpamodelgen/trunk/src/test/java/test/AccessTypeTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/test/AccessTypeTest.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/test/AccessTypeTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,94 +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 test;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-
-/**
- * @author Emmanuel Bernard
- */
-@Test
-public class AccessTypeTest {
-
- @Test
- public void testExcludeTransientFieldAndStatic() throws Exception{
- absenceOfField( "model.Product_", "nonPersistent" );
- absenceOfField( "model.Product_", "nonPersistent2" );
- }
-
- @Test
- public void testDefaultAccessTypeOnEntity() throws Exception{
- absenceOfField( "model.User_", "nonPersistent" );
- }
-
- @Test
- public void testDefaultAccessTypeForSubclassOfEntity() throws Exception{
- absenceOfField( "model.Customer_", "nonPersistent" );
- }
-
- @Test
- public void testDefaultAccessTypeForEmbeddable() throws Exception{
- absenceOfField( "model.Detail_", "nonPersistent" );
- }
-
- @Test
- public void testInheritedAccessTypeForEmbeddable() throws Exception{
- absenceOfField( "model.Country_", "nonPersistent" );
- absenceOfField( "model.Pet_", "nonPersistent", "Colleciton of membeddable not taken care of" );
- }
-
- @Test
- public void testDefaultAccessTypeForMappedSuperclass() throws Exception{
- absenceOfField( "model.Detail_", "volume" );
- }
-
- @Test
- public void testExplicitAccessTypeAndDefaultFromRootEntity() throws Exception{
- absenceOfField( "model.LivingBeing_", "nonPersistent", "eplicit access type on mapped superclass" );
- absenceOfField( "model.Hominidae_", "nonPersistent", "eplicit access type on entity" );
- absenceOfField( "model.Human_", "nonPersistent", "proper inheritance from root entity access type" );
- }
-
- @Test
- public void testMemberAccessType() throws Exception{
- presenceOfField( "model.Customer_", "goodPayer", "access type overriding" );
- }
-
- private void absenceOfField(String className, String fieldName) throws ClassNotFoundException {
- absenceOfField( className, fieldName, "field should not be persistent" );
- }
- private void absenceOfField(String className, String fieldName, String errorString) throws ClassNotFoundException {
- Assert.assertFalse( isFieldHere(className, fieldName), errorString );
- }
-
- private void presenceOfField(String className, String fieldName, String errorString) throws ClassNotFoundException {
- Assert.assertTrue( isFieldHere(className, fieldName), errorString );
- }
-
- private boolean isFieldHere(String className, String fieldName) throws ClassNotFoundException {
- Class<?> user_ = Class.forName( className );
- try {
- user_.getField( fieldName );
- return true;
- }
- catch (NoSuchFieldException e) {
- return false;
- }
- }
-}
Deleted: jpamodelgen/trunk/src/test/java/test/InheritanceTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/test/InheritanceTest.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/test/InheritanceTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,46 +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 test;
-
-import org.testng.annotations.Test;
-import org.testng.Assert;
-import model.Customer_;
-import model.User_;
-import model.House_;
-import model.Building_;
-import model.Area_;
-
-/**
- * @author Emmanuel Bernard
- */
-@Test
-public class InheritanceTest {
- @Test
- public void testSuperEntity() throws Exception {
- Assert.assertEquals( Customer_.class.getSuperclass(), User_.class,
- "Entity with super entity should inherit at the metamodel level");
- }
-
- @Test
- public void testMappedSuperclass() throws Exception {
- Assert.assertEquals( House_.class.getSuperclass(), Building_.class,
- "Entity with mapped superclass should inherit at the metamodel level");
- Assert.assertEquals( Building_.class.getSuperclass(), Area_.class,
- "mapped superclass with mapped superclass should inherit at the metamodel level");
- }
-}
Deleted: jpamodelgen/trunk/src/test/java/test/QueryTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/test/QueryTest.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/test/QueryTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,166 +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 test;
-
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.Set;
-import javax.persistence.Tuple;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Expression;
-import javax.persistence.criteria.Join;
-import static javax.persistence.criteria.JoinType.INNER;
-import javax.persistence.criteria.ListJoin;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Root;
-
-import model.Item;
-import model.Item_;
-import model.Order;
-import model.Order_;
-import model.Product;
-import model.Product_;
-import model.Shop_;
-
-/**
- * Writing queries involves passing typesafe, statically cached, metamodel
- * objects to the query builder in order to create the various parts of
- * the query. The typesafe metamodel objects were validated at init time,
- * so it is impossible to build invalid queries in the application code.
- *
- * @author Max Andersen
- * @author Hardy Ferentschik
- * @author Emmanuel Bernard
- */
-public class QueryTest {
-
- CriteriaBuilder qb;
-
- public void test() {
- CriteriaQuery<Tuple> q = qb.createTupleQuery();
-
- Root<Order> order = q.from( Order.class );
- Join<Item, Product> product = order.join( Order_.items )
- .join( Item_.product );
-
- Path<BigDecimal> price = product.get( Product_.price );
- Path<Boolean> filled = order.get( Order_.filled );
- Path<Date> date = order.get( Order_.date );
-
- q.select( qb.tuple( order, product ) )
- .where( qb.and( qb.gt( price, 100.00 ), qb.not( filled ) ) )
- .orderBy( qb.asc( price ), qb.desc( date ) );
- }
-
- public void testUntypesafe() {
- CriteriaQuery<Tuple> q = qb.createTupleQuery();
-
- Root<Order> order = q.from( Order.class );
- Join<Item, Product> product = order.join( "items" )
- .join( "product" );
-
- Path<BigDecimal> price = product.get( "price" );
- Path<Boolean> filled = order.get( "filled" );
- Path<Date> date = order.get( "date" );
-
- q.select( qb.tuple( order, product ) )
- .where( qb.and( qb.gt( price, 100.00 ), qb.not( filled ) ) )
- .orderBy( qb.asc( price ), qb.desc( date ) );
- }
-
- /**
- * Navigation by joining
- */
- public void test2() {
- CriteriaQuery<Product> q = qb.createQuery( Product.class );
-
- Root<Product> product = q.from( Product.class );
- Join<Item, Order> order = product.join( Product_.items )
- .join( Item_.order );
-
- q.select( product )
- .where( qb.equal( order.get( Order_.id ), 12345l ) );
- }
-
- public void testMap() {
- CriteriaQuery<Item> q = qb.createQuery( Item.class );
-
- Root<Item> item = q.from( Item.class );
- item.join( Item_.namedOrders );
- }
-
- /**
- * Navigation by compound Path
- */
- public void test3() {
- CriteriaQuery<Item> q = qb.createQuery( Item.class );
-
- Root<Item> item = q.from( Item.class );
- Path<String> shopName = item.get( Item_.order )
- .get( Order_.shop )
- .get( Shop_.name );
- q.select( item )
- .where( qb.equal( shopName, "amazon.com" ) );
- }
-
-// public void test4() {
-// CriteriaQuery q = qb.create();
-//
-// Root<Order> order = q.from(Order.class);
-// ListJoin<Order, String> note = order.join(Order_.notes);
-// Expression<Set<Item>> items = order.get(Order_.items);
-// order.fetch(Order_.items, JoinType.INNER);
-//
-// q.select(note)
-// .where( qb.and( qb.lt(note.index(), 10), qb.isNotEmpty(items) ) );
-// }
-
- public void test4Untypesafe() {
- CriteriaQuery<String> q = qb.createQuery( String.class );
-
- Root<Order> order = q.from( Order.class );
- ListJoin<Order, String> note = order.joinList( "notes" );
- Expression<Set<Item>> items = order.get( "items" );
- order.fetch( "items", INNER );
-
- q.select( note )
- .where( qb.and( qb.lt( note.index(), 10 ), qb.isNotEmpty( items ) ) );
- }
-
- /*public void test5() {
- Expression<Long> l= null;
- Expression<Integer> i= null;
- Expression<Float> x= null;
- Expression<Float> y= null;
-
- Expression<Number> n;
- Expression<Float> f;
- Expression<String> s = null;
-
- n = qb.quot(l, i);
-
- f = qb.sum(x, y);
-
- n = qb.quot(x, y);
-
- javax.jpamodelgen.criteria.Order o = qb.asc(n);
- javax.jpamodelgen.criteria.Order p = qb.ascending(s);
- }*/
-
-}
Deleted: jpamodelgen/trunk/src/test/java/test/XmlMappingTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/test/XmlMappingTest.java 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/java/test/XmlMappingTest.java 2009-11-03 14:52:05 UTC (rev 17899)
@@ -1,55 +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 test;
-
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import org.testng.annotations.Test;
-
-/**
- * @author Hardy Ferentschik
- */
-public class XmlMappingTest {
- @Test
- public void testXmlConfiguredEmbeddedClassGenerated() throws Exception {
- assertNotNull( Class.forName( "model.xmlmapped.Address_" ) );
- }
-
- @Test
- public void testXmlConfiguredMappedSuperclassGenerated() throws Exception {
- Class<?> building = Class.forName( "model.xmlmapped.Building_" );
- assertNotNull( building );
- assertNotNull( building.getField( "address" ) );
- }
-
- @Test
- public void testClassHierarchy() throws Exception {
- Class<?> mammal = Class.forName( "model.xmlmapped.Mammal_" );
- assertNotNull( mammal );
-
- Class<?> being = Class.forName( "model.xmlmapped.LivingBeing_" );
- assertNotNull( being );
-
- assertTrue( mammal.getSuperclass().equals( being ) );
- }
-
- @Test(expectedExceptions = ClassNotFoundException.class)
- public void testNonExistentMappedClassesGetIgnored() throws Exception {
- Class.forName( "model.Dummy_" );
- }
-}
\ No newline at end of file
Modified: jpamodelgen/trunk/src/test/resources/META-INF/dummy.xml
===================================================================
--- jpamodelgen/trunk/src/test/resources/META-INF/dummy.xml 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/resources/META-INF/dummy.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -5,7 +5,7 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
version="2.0"
>
- <package>model</package>
+ <package>org.hibernate.jpamodelgen.test.model</package>
<entity class="Dummy" access="FIELD" metadata-complete="true"> <!-- Class does not exist -->
<attributes>
<id name="id"/>
Modified: jpamodelgen/trunk/src/test/resources/META-INF/jpa1-orm.xml
===================================================================
--- jpamodelgen/trunk/src/test/resources/META-INF/jpa1-orm.xml 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/resources/META-INF/jpa1-orm.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -5,7 +5,7 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
version="1.0"
>
- <package>model</package>
+ <package>org.hibernate.jpamodelgen.test.model</package>
<entity class="Airplane" metadata-complete="true" access="PROPERTY">
<attributes>
<id name="serialNumber"/>
Modified: jpamodelgen/trunk/src/test/resources/META-INF/malformed-mapping-xml.xml
===================================================================
--- jpamodelgen/trunk/src/test/resources/META-INF/malformed-mapping-xml.xml 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/resources/META-INF/malformed-mapping-xml.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -5,7 +5,7 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
version="2.0"
>
- <package>model</package>
+ <package>org.hibernate.jpamodelgen.test.model</package>
<entity class="Dummy" access="FIELD" metadata-complete="true"> <!-- Class does not exist -->
<attributes>
<id name="id"/>
Modified: jpamodelgen/trunk/src/test/resources/META-INF/orm.xml
===================================================================
--- jpamodelgen/trunk/src/test/resources/META-INF/orm.xml 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/resources/META-INF/orm.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -5,7 +5,7 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
version="2.0"
>
- <package>model</package>
+ <package>org.hibernate.jpamodelgen.test.model</package>
<!-- default package -->
<entity class="Order" access="FIELD" metadata-complete="true"> <!--means ignore annotations-->
<attributes>
Modified: jpamodelgen/trunk/src/test/resources/META-INF/persistence.xml
===================================================================
--- jpamodelgen/trunk/src/test/resources/META-INF/persistence.xml 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/resources/META-INF/persistence.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -7,8 +7,8 @@
<mapping-file>/META-INF/dummy.xml</mapping-file>
<mapping-file>/META-INF/malformed-mapping-xml.xml</mapping-file>
<mapping-file>/META-INF/jpa1-orm.xml</mapping-file>
- <mapping-file>/model/xmlmapped/address.xml</mapping-file>
- <mapping-file>/model/xmlmapped/building.xml</mapping-file>
- <mapping-file>/model/xmlmapped/mammal.xml</mapping-file>
+ <mapping-file>/org/hibernate/jpamodelgen/test/model/xmlmapped/address.xml</mapping-file>
+ <mapping-file>/org/hibernate/jpamodelgen/test/model/xmlmapped/building.xml</mapping-file>
+ <mapping-file>/org/hibernate/jpamodelgen/test/model/xmlmapped/mammal.xml</mapping-file>
</persistence-unit>
</persistence>
Copied: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/address.xml (from rev 17898, jpamodelgen/trunk/src/test/resources/model/xmlmapped/address.xml)
===================================================================
--- jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/address.xml (rev 0)
+++ jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/address.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
+ version="2.0"
+ >
+ <package>org.hibernate.jpamodelgen.test.model.xmlmapped</package> <!-- default package -->
+ <embeddable class="Address" access="FIELD" metadata-complete="true"> <!--means ignore annotations-->
+ <attributes>
+ <basic name="street1"/>
+ <basic name="city"/>
+ <basic name="country"/>
+ </attributes>
+ </embeddable>
+</entity-mappings>
+
Property changes on: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/address.xml
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/building.xml (from rev 17898, jpamodelgen/trunk/src/test/resources/model/xmlmapped/building.xml)
===================================================================
--- jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/building.xml (rev 0)
+++ jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/building.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
+ version="2.0"
+ >
+ <package>org.hibernate.jpamodelgen.test.model.xmlmapped</package>
+ <mapped-superclass class="Building" access="FIELD" metadata-complete="true"> <!--means ignore annotations-->
+ <attributes>
+ <one-to-one name="address" fetch="LAZY"/>
+ </attributes>
+ </mapped-superclass>
+</entity-mappings>
+
Property changes on: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/building.xml
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/mammal.xml (from rev 17898, jpamodelgen/trunk/src/test/resources/model/xmlmapped/mammal.xml)
===================================================================
--- jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/mammal.xml (rev 0)
+++ jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/mammal.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
+ version="2.0"
+ >
+ <package>org.hibernate.jpamodelgen.test.model.xmlmapped</package>
+ <entity class="LivingBeing" access="FIELD" metadata-complete="true">
+ <attributes>
+ <basic name="isReallyAlive"/>
+ </attributes>
+ </entity>
+ <entity class="Mammal" access="FIELD" metadata-complete="true">
+ <attributes>
+ <id name="id"/>
+ <basic name="subclass"/>
+ </attributes>
+ </entity>
+</entity-mappings>
Property changes on: jpamodelgen/trunk/src/test/resources/org/hibernate/jpamodelgen/test/model/xmlmapped/mammal.xml
___________________________________________________________________
Name: svn:keywords
+ Id
Modified: jpamodelgen/trunk/src/test/suite/unit-tests.xml
===================================================================
--- jpamodelgen/trunk/src/test/suite/unit-tests.xml 2009-11-03 05:13:23 UTC (rev 17898)
+++ jpamodelgen/trunk/src/test/suite/unit-tests.xml 2009-11-03 14:52:05 UTC (rev 17899)
@@ -3,7 +3,7 @@
<suite name="Hibernate Model Generator Tests" verbose="1">
<test name="Unit tests">
<packages>
- <package name="test"/>
+ <package name="org.hibernate.jpamodelgen.test"/>
</packages>
</test>
</suite>
\ No newline at end of file
15 years, 4 months
Hibernate SVN: r17898 - core/trunk/parent.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-11-03 00:13:23 -0500 (Tue, 03 Nov 2009)
New Revision: 17898
Modified:
core/trunk/parent/pom.xml
Log:
Generate and install/deploy source jars
Modified: core/trunk/parent/pom.xml
===================================================================
--- core/trunk/parent/pom.xml 2009-11-03 05:12:40 UTC (rev 17897)
+++ core/trunk/parent/pom.xml 2009-11-03 05:13:23 UTC (rev 17898)
@@ -174,6 +174,20 @@
<redirectTestOutputToFile>true</redirectTestOutputToFile>
</configuration>
</plugin>
+ <!-- Attach source jars -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
<pluginManagement>
<plugins>
@@ -281,6 +295,11 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.1.1</version>
+ </plugin>
</plugins>
</pluginManagement>
15 years, 4 months
Hibernate SVN: r17897 - core/trunk/distribution.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-11-03 00:12:40 -0500 (Tue, 03 Nov 2009)
New Revision: 17897
Modified:
core/trunk/distribution/pom.xml
Log:
Bind assembly building to deploy phase
Modified: core/trunk/distribution/pom.xml
===================================================================
--- core/trunk/distribution/pom.xml 2009-11-03 05:11:19 UTC (rev 17896)
+++ core/trunk/distribution/pom.xml 2009-11-03 05:12:40 UTC (rev 17897)
@@ -44,6 +44,20 @@
<description>Builds the complete Hibernate distribution bundles</description>
<build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>deploy</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
<pluginManagement>
<plugins>
<plugin>
15 years, 4 months
Hibernate SVN: r17896 - core/tags/hibernate-3.5.0-Beta-2/distribution.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-11-03 00:11:19 -0500 (Tue, 03 Nov 2009)
New Revision: 17896
Modified:
core/tags/hibernate-3.5.0-Beta-2/distribution/pom.xml
Log:
Bind assembly building to deploy phase
Modified: core/tags/hibernate-3.5.0-Beta-2/distribution/pom.xml
===================================================================
--- core/tags/hibernate-3.5.0-Beta-2/distribution/pom.xml 2009-11-03 02:03:08 UTC (rev 17895)
+++ core/tags/hibernate-3.5.0-Beta-2/distribution/pom.xml 2009-11-03 05:11:19 UTC (rev 17896)
@@ -44,6 +44,20 @@
<description>Builds the complete Hibernate distribution bundles</description>
<build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>deploy</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
<pluginManagement>
<plugins>
<plugin>
15 years, 4 months
Hibernate SVN: r17895 - core/tags/hibernate-3.5.0-Beta-2/parent.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-11-02 21:03:08 -0500 (Mon, 02 Nov 2009)
New Revision: 17895
Modified:
core/tags/hibernate-3.5.0-Beta-2/parent/pom.xml
Log:
Generate and install/deploy source jars
Modified: core/tags/hibernate-3.5.0-Beta-2/parent/pom.xml
===================================================================
--- core/tags/hibernate-3.5.0-Beta-2/parent/pom.xml 2009-11-02 22:09:31 UTC (rev 17894)
+++ core/tags/hibernate-3.5.0-Beta-2/parent/pom.xml 2009-11-03 02:03:08 UTC (rev 17895)
@@ -174,6 +174,20 @@
<redirectTestOutputToFile>true</redirectTestOutputToFile>
</configuration>
</plugin>
+ <!-- Attach source jars -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
<pluginManagement>
<plugins>
@@ -281,6 +295,11 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>2.1.1</version>
+ </plugin>
</plugins>
</pluginManagement>
15 years, 4 months
Hibernate SVN: r17894 - core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-11-02 17:09:31 -0500 (Mon, 02 Nov 2009)
New Revision: 17894
Modified:
core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
Log:
account for inconsistencies in the annotation processoer
Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java 2009-11-02 22:08:48 UTC (rev 17893)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java 2009-11-02 22:09:31 UTC (rev 17894)
@@ -34,10 +34,12 @@
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.IdentifiableType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.hibernate.mapping.MappedSuperclass;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Component;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.annotations.common.AssertionFailure;
@@ -55,6 +57,8 @@
* @author Emmanuel Bernard
*/
class MetadataContext {
+ private static final Logger log = LoggerFactory.getLogger( MetadataContext.class );
+
private final SessionFactoryImplementor sessionFactory;
private final AttributeFactory attributeFactory = new AttributeFactory( this );
@@ -334,22 +338,46 @@
final String name = attribute.getName();
try {
Field field = metamodelClass.getDeclaredField( name );
- field.setAccessible( true ); // should be public anyway, but to be sure...
- field.set( null, attribute );
+ try {
+ if ( ! field.isAccessible() ) {
+ // should be public anyway, but to be sure...
+ field.setAccessible( true );
+ }
+ field.set( null, attribute );
+ }
+ catch ( IllegalAccessException e ) {
+ // todo : exception type?
+ throw new AssertionFailure(
+ "Unable to inject static metamodel attribute : " + metamodelClass.getName() + '#' + name,
+ e
+ );
+ }
+ catch ( IllegalArgumentException e ) {
+ // most likely a mismatch in the type we are injecting and the defined field; this represents a
+ // mismatch in how the annotation processor interpretted the attribute and how our metamodel
+ // and/or annotation binder did.
+//
+// This does seem to be an issue currently for ListAttribute and CollectionAttribute for @OneToMany List
+// w/o the @Index definition (which is a bag in Hibernate-terms. So for the time being we simply
+// log an error
+// throw new AssertionFailure(
+// "Illegal argument on static metamodel field injection : " + metamodelClass.getName() + '#' + name
+// + "; expected type : " + attribute.getClass().getName()
+// + "; encountered type : " + field.getType().getName()
+// );
+ log.error(
+ "Illegal argument on static metamodel field injection : " + metamodelClass.getName() + '#' + name
+ + "; expected type : " + attribute.getClass().getName()
+ + "; encountered type : " + field.getType().getName()
+ );
+ }
}
catch ( NoSuchFieldException e ) {
- // todo : exception type?
- throw new AssertionFailure(
- "Unable to locate static metamodel field : " + metamodelClass.getName() + '#' + name
- );
+ log.error( "Unable to locate static metamodel field : " + metamodelClass.getName() + '#' + name );
+// throw new AssertionFailure(
+// "Unable to locate static metamodel field : " + metamodelClass.getName() + '#' + name
+// );
}
- catch ( IllegalAccessException e ) {
- // todo : exception type?
- throw new AssertionFailure(
- "Unable to inject static metamodel attribute : " + metamodelClass.getName() + '#' + name,
- e
- );
- }
}
public MappedSuperclassTypeImpl<?> locateMappedSuperclassType(MappedSuperclass mappedSuperclass) {
15 years, 4 months
Hibernate SVN: r17893 - core/tags/hibernate-3.5.0-Beta-2/entitymanager/src/main/java/org/hibernate/ejb/metamodel.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2009-11-02 17:08:48 -0500 (Mon, 02 Nov 2009)
New Revision: 17893
Modified:
core/tags/hibernate-3.5.0-Beta-2/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
Log:
ported change from trunk
Modified: core/tags/hibernate-3.5.0-Beta-2/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java
===================================================================
--- core/tags/hibernate-3.5.0-Beta-2/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java 2009-11-02 18:20:40 UTC (rev 17892)
+++ core/tags/hibernate-3.5.0-Beta-2/entitymanager/src/main/java/org/hibernate/ejb/metamodel/MetadataContext.java 2009-11-02 22:08:48 UTC (rev 17893)
@@ -34,10 +34,12 @@
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.IdentifiableType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.hibernate.mapping.MappedSuperclass;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;
-import org.hibernate.mapping.Component;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.annotations.common.AssertionFailure;
@@ -55,6 +57,8 @@
* @author Emmanuel Bernard
*/
class MetadataContext {
+ private static final Logger log = LoggerFactory.getLogger( MetadataContext.class );
+
private final SessionFactoryImplementor sessionFactory;
private final AttributeFactory attributeFactory = new AttributeFactory( this );
@@ -334,22 +338,46 @@
final String name = attribute.getName();
try {
Field field = metamodelClass.getDeclaredField( name );
- field.setAccessible( true ); // should be public anyway, but to be sure...
- field.set( null, attribute );
+ try {
+ if ( ! field.isAccessible() ) {
+ // should be public anyway, but to be sure...
+ field.setAccessible( true );
+ }
+ field.set( null, attribute );
+ }
+ catch ( IllegalAccessException e ) {
+ // todo : exception type?
+ throw new AssertionFailure(
+ "Unable to inject static metamodel attribute : " + metamodelClass.getName() + '#' + name,
+ e
+ );
+ }
+ catch ( IllegalArgumentException e ) {
+ // most likely a mismatch in the type we are injecting and the defined field; this represents a
+ // mismatch in how the annotation processor interpretted the attribute and how our metamodel
+ // and/or annotation binder did.
+//
+// This does seem to be an issue currently for ListAttribute and CollectionAttribute for @OneToMany List
+// w/o the @Index definition (which is a bag in Hibernate-terms. So for the time being we simply
+// log an error
+// throw new AssertionFailure(
+// "Illegal argument on static metamodel field injection : " + metamodelClass.getName() + '#' + name
+// + "; expected type : " + attribute.getClass().getName()
+// + "; encountered type : " + field.getType().getName()
+// );
+ log.error(
+ "Illegal argument on static metamodel field injection : " + metamodelClass.getName() + '#' + name
+ + "; expected type : " + attribute.getClass().getName()
+ + "; encountered type : " + field.getType().getName()
+ );
+ }
}
catch ( NoSuchFieldException e ) {
- // todo : exception type?
- throw new AssertionFailure(
- "Unable to locate static metamodel field : " + metamodelClass.getName() + '#' + name
- );
+ log.error( "Unable to locate static metamodel field : " + metamodelClass.getName() + '#' + name );
+// throw new AssertionFailure(
+// "Unable to locate static metamodel field : " + metamodelClass.getName() + '#' + name
+// );
}
- catch ( IllegalAccessException e ) {
- // todo : exception type?
- throw new AssertionFailure(
- "Unable to inject static metamodel attribute : " + metamodelClass.getName() + '#' + name,
- e
- );
- }
}
public MappedSuperclassTypeImpl<?> locateMappedSuperclassType(MappedSuperclass mappedSuperclass) {
@@ -385,3 +413,4 @@
return persistentClass;
}
}
+
15 years, 4 months