You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/05/03 02:44:55 UTC
svn commit: r399102 - in /incubator/cayenne/jpa/trunk/cayenne-jpa/src:
main/java/org/apache/cayenne/jpa/bridge/
main/java/org/apache/cayenne/jpa/cspi/
main/java/org/apache/cayenne/jpa/enhancer/
main/java/org/apache/cayenne/jpa/map/ main/java/org/object...
Author: aadamchik
Date: Tue May 2 17:44:54 2006
New Revision: 399102
URL: http://svn.apache.org/viewcvs?rev=399102&view=rev
Log:
implementing enhanced DataObject delegate methods
Added:
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaClassDescriptorFactory.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionFieldAccessor.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionProperty.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityDescriptor.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/objectstyle/
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/objectstyle/cayenne/
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/objectstyle/cayenne/map/
Modified:
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/enhancer/DataObjectDelegate.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToOne.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToMany.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToOne.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaRelationship.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java Tue May 2 17:44:54 2006
@@ -365,6 +365,7 @@
DbRelationship dbRelationship = new DbRelationship(cayenneRelationship
.getName());
dbRelationship.setTargetEntity(cayenneTargetDbEntity);
+ dbRelationship.setToMany(relationship.isToMany());
cayenneSrcDbEntity.addRelationship(dbRelationship);
cayenneRelationship.addDbRelationship(dbRelationship);
Added: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaClassDescriptorFactory.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaClassDescriptorFactory.java?rev=399102&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaClassDescriptorFactory.java (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaClassDescriptorFactory.java Tue May 2 17:44:54 2006
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * 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.apache.cayenne.jpa.cspi;
+
+import org.objectstyle.cayenne.map.EntityDescriptor;
+import org.objectstyle.cayenne.map.EntityDescriptorFactory;
+import org.objectstyle.cayenne.map.EntityResolver;
+import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.property.ClassDescriptor;
+
+public class CjpaClassDescriptorFactory extends EntityDescriptorFactory {
+
+ public CjpaClassDescriptorFactory(EntityResolver resolver) {
+ super(resolver);
+ }
+
+ @Override
+ protected EntityDescriptor createDescriptor(String entityName) {
+ ObjEntity entity = resolver.getObjEntity(entityName);
+ if (entity == null) {
+ return null;
+ }
+
+ String superEntityName = entity.getSuperEntityName();
+
+ ClassDescriptor superDescriptor = (superEntityName != null) ? resolver
+ .getClassDescriptor(superEntityName) : null;
+
+ // return uncompiled
+ return new CjpaEntityDescriptor(entity, superDescriptor);
+ }
+
+}
Added: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionFieldAccessor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionFieldAccessor.java?rev=399102&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionFieldAccessor.java (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionFieldAccessor.java Tue May 2 17:44:54 2006
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * 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.apache.cayenne.jpa.cspi;
+
+import org.objectstyle.cayenne.Fault;
+import org.objectstyle.cayenne.Persistent;
+import org.objectstyle.cayenne.property.FieldAccessor;
+import org.objectstyle.cayenne.property.PropertyAccessException;
+
+class CjpaCollectionFieldAccessor extends FieldAccessor {
+
+ public CjpaCollectionFieldAccessor(Class objectClass, String propertyName,
+ Class propertyType) {
+ super(objectClass, propertyName, propertyType);
+
+ if (!Persistent.class.isAssignableFrom(objectClass)) {
+ throw new IllegalArgumentException("Only supports persistent classes. Got: "
+ + objectClass);
+ }
+ }
+
+ /**
+ * Resolves a fault before setting the field.
+ */
+ @Override
+ public void writePropertyDirectly(Object object, Object oldValue, Object newValue)
+ throws PropertyAccessException {
+
+ if (newValue instanceof Fault) {
+ newValue = ((Fault) newValue).resolveFault((Persistent) object, getName());
+ }
+
+ super.writePropertyDirectly(object, oldValue, newValue);
+ }
+}
Added: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionProperty.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionProperty.java?rev=399102&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionProperty.java (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaCollectionProperty.java Tue May 2 17:44:54 2006
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * 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.apache.cayenne.jpa.cspi;
+
+import org.objectstyle.cayenne.property.ClassDescriptor;
+import org.objectstyle.cayenne.property.PropertyAccessException;
+import org.objectstyle.cayenne.property.PropertyAccessor;
+import org.objectstyle.cayenne.property.ToManyListProperty;
+
+class CjpaCollectionProperty extends ToManyListProperty {
+
+ public CjpaCollectionProperty(ClassDescriptor owner, ClassDescriptor targetDescriptor,
+ PropertyAccessor accessor, String reverseName) {
+ super(owner, targetDescriptor, accessor, reverseName);
+ }
+
+ @Override
+ public void writePropertyDirectly(Object object, Object oldValue, Object newValue)
+ throws PropertyAccessException {
+ accessor.writePropertyDirectly(object, oldValue, newValue);
+ }
+}
Added: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityDescriptor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityDescriptor.java?rev=399102&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityDescriptor.java (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaEntityDescriptor.java Tue May 2 17:44:54 2006
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * 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.apache.cayenne.jpa.cspi;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.objectstyle.cayenne.map.EntityDescriptor;
+import org.objectstyle.cayenne.map.EntityResolver;
+import org.objectstyle.cayenne.map.ObjEntity;
+import org.objectstyle.cayenne.map.ObjRelationship;
+import org.objectstyle.cayenne.property.ClassDescriptor;
+import org.objectstyle.cayenne.property.ListProperty;
+import org.objectstyle.cayenne.property.PropertyAccessor;
+
+class CjpaEntityDescriptor extends EntityDescriptor {
+
+ public CjpaEntityDescriptor(ObjEntity entity, ClassDescriptor superclassDescriptor) {
+ super(entity, superclassDescriptor);
+ }
+
+ @Override
+ protected void compileRelationships(EntityResolver resolver, Map allDescriptors) {
+ super.compileRelationships(resolver, allDescriptors);
+
+ // override all ListProperties with a customized version...
+
+ Iterator it = allDescriptors.entrySet().iterator();
+ while (it.hasNext()) {
+ Map.Entry entry = (Map.Entry) it.next();
+ if (entry.getValue() instanceof ListProperty) {
+
+ String name = entry.getKey().toString();
+ ListProperty overridenProperty = (ListProperty) entry.getValue();
+
+ PropertyAccessor accessor = new CjpaCollectionFieldAccessor(
+ objectClass,
+ name,
+ null);
+
+ ObjRelationship relationship = (ObjRelationship) entity
+ .getRelationship(name);
+
+ entry.setValue(new CjpaCollectionProperty(this, overridenProperty
+ .getTargetDescriptor(), accessor, relationship
+ .getReverseRelationshipName()));
+ }
+ }
+ }
+}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java Tue May 2 17:44:54 2006
@@ -97,7 +97,8 @@
* {@link CjpaEntityManagerFactory} which is a DataDomain wrapper.
*/
@Override
- public EntityManagerFactory createContainerManagerFactory(PersistenceUnitInfo info) {
+ public synchronized EntityManagerFactory createContainerManagerFactory(
+ PersistenceUnitInfo info) {
String name = info.getPersistenceUnitName();
DataDomain domain = configuration.getDomain(name);
@@ -107,6 +108,8 @@
// configure Cayenne domain
domain = new DataDomain(name);
+ domain.getEntityResolver().setClassDescriptorFactory(
+ new CjpaClassDescriptorFactory(domain.getEntityResolver()));
configuration.addDomain(domain);
EntityMapLoader loader = new EntityMapLoader(info);
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/enhancer/DataObjectDelegate.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/enhancer/DataObjectDelegate.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/enhancer/DataObjectDelegate.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/enhancer/DataObjectDelegate.java Tue May 2 17:44:54 2006
@@ -23,6 +23,7 @@
import org.objectstyle.cayenne.CayenneRuntimeException;
import org.objectstyle.cayenne.DataObject;
import org.objectstyle.cayenne.ObjectContext;
+import org.objectstyle.cayenne.ObjectId;
import org.objectstyle.cayenne.access.DataContext;
import org.objectstyle.cayenne.access.DataNode;
import org.objectstyle.cayenne.access.types.ExtendedTypeMap;
@@ -34,17 +35,22 @@
import org.objectstyle.cayenne.map.ObjEntity;
import org.objectstyle.cayenne.map.ObjRelationship;
import org.objectstyle.cayenne.property.ClassDescriptor;
+import org.objectstyle.cayenne.property.Property;
+import org.objectstyle.cayenne.property.PropertyUtils;
import org.objectstyle.cayenne.validation.BeanValidationFailure;
import org.objectstyle.cayenne.validation.ValidationFailure;
import org.objectstyle.cayenne.validation.ValidationResult;
/**
- * A static delegate for DataObject callbacks. It only implements DataContext retrieval
- * and validation methods. Remaining methods should not be called by Cayenne runtime
- * anymore.
+ * A static delegate for DataObject callbacks. To obtain class descriptors,
+ * DataObjectDelegate will use a DataObject context first, and then fall back to the
+ * DataContext bound to the current thread. If none of these methods work, and exception
+ * is thrown.
*
* @author Andrus Adamchik
*/
+// TODO: andrus, 5/2/2006 - going ahead, the delegate should only impement the validation
+// methods, as property access by the framework should be done via ClassDescriptor.
public final class DataObjectDelegate {
public static DataContext getDataContext(DataObject object) {
@@ -62,7 +68,7 @@
}
public static Object readNestedProperty(DataObject object, String path) {
- throw new UnsupportedOperationException("Not supported");
+ return PropertyUtils.getProperty(object, path);
}
/**
@@ -73,23 +79,26 @@
throw new UnsupportedOperationException("Not supported");
}
- public static Object readProperty(DataObject object, String propertyName) {
- throw new UnsupportedOperationException("Not supported");
+ public static Object readProperty(DataObject object, String property) {
+ return getPropertyDescriptor(object, property).readProperty(object);
}
- public static Object readPropertyDirectly(DataObject object, String propName) {
- throw new UnsupportedOperationException("Not supported");
+ public static Object readPropertyDirectly(DataObject object, String property) {
+ return getPropertyDescriptor(object, property).readPropertyDirectly(object);
}
- public static void writeProperty(DataObject object, String propName, Object val) {
- throw new UnsupportedOperationException("Not supported");
+ public static void writeProperty(DataObject object, String property, Object newValue) {
+ Property p = getPropertyDescriptor(object, property);
+ p.writeProperty(object, p.readPropertyDirectly(object), newValue);
}
public static void writePropertyDirectly(
DataObject object,
- String propName,
- Object val) {
- throw new UnsupportedOperationException("Not supported");
+ String property,
+ Object newValue) {
+
+ Property p = getPropertyDescriptor(object, property);
+ p.writePropertyDirectly(object, p.readPropertyDirectly(object), newValue);
}
public static void removeToManyTarget(
@@ -130,6 +139,87 @@
throw new UnsupportedOperationException("Not supported");
}
+ public static void validateForInsert(
+ DataObject object,
+ ValidationResult validationResult) {
+ validateForSave(object, validationResult);
+ }
+
+ /**
+ * Returns a Cayenne ClassDescriptor for the enhanced DataObject class. To obtain
+ * class descriptors, uses a DataObject context first, and then falls back to the
+ * DataContext bound to the current thread. If none of these methods work, and
+ * exception is thrown.
+ */
+ protected static ClassDescriptor getDescriptor(DataObject enhancedObject)
+ throws IllegalStateException, IllegalArgumentException {
+ ObjectContext context = enhancedObject.getObjectContext();
+
+ if (context == null) {
+
+ try {
+ context = DataContext.getThreadDataContext();
+ }
+ catch (IllegalStateException e) {
+ // catch a generic exception trown by DataContext and rethrow a more
+ // informative one
+ throw new IllegalStateException("Object is not registered, and no "
+ + "DataContext is bound to the current thread. Object: "
+ + enhancedObject);
+ }
+ }
+
+ String entityName;
+
+ ObjectId oid = enhancedObject.getObjectId();
+ if (oid != null) {
+ entityName = oid.getEntityName();
+ }
+ else {
+ ObjEntity entity = context.getEntityResolver().lookupObjEntity(
+ enhancedObject.getClass());
+ entityName = entity.getName();
+ }
+
+ ClassDescriptor descriptor = context.getEntityResolver().getClassDescriptor(
+ entityName);
+
+ if (descriptor == null) {
+ throw new IllegalArgumentException("No descriptor found for object "
+ + enhancedObject);
+ }
+
+ return descriptor;
+ }
+
+ protected static Property getPropertyDescriptor(
+ DataObject enhancedObject,
+ String property) {
+
+ Property p = getDescriptor(enhancedObject).getProperty(property);
+
+ if (p == null) {
+ throw new IllegalArgumentException("No property descriptor '"
+ + property
+ + "' for object "
+ + enhancedObject);
+ }
+
+ return p;
+ }
+
+ public static void validateForUpdate(
+ DataObject object,
+ ValidationResult validationResult) {
+ validateForSave(object, validationResult);
+ }
+
+ public static void validateForDelete(
+ DataObject object,
+ ValidationResult validationResult) {
+ // does nothing
+ }
+
protected static void validateForSave(
DataObject object,
ValidationResult validationResult) {
@@ -270,21 +360,4 @@
}
}
- public static void validateForInsert(
- DataObject object,
- ValidationResult validationResult) {
- validateForSave(object, validationResult);
- }
-
- public static void validateForUpdate(
- DataObject object,
- ValidationResult validationResult) {
- validateForSave(object, validationResult);
- }
-
- public static void validateForDelete(
- DataObject object,
- ValidationResult validationResult) {
- // does nothing
- }
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java Tue May 2 17:44:54 2006
@@ -40,6 +40,11 @@
mappedBy = annotation.mappedBy();
}
+ @Override
+ public boolean isToMany() {
+ return true;
+ }
+
@TreeNodeChild
public JpaJoinTable getJoinTable() {
return parent != null ? parent.getJoinTable() : null;
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToOne.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToOne.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToOne.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToOne.java Tue May 2 17:44:54 2006
@@ -43,6 +43,11 @@
fetch = annotation.fetch();
optional = annotation.optional();
}
+
+ @Override
+ public boolean isToMany() {
+ return false;
+ }
/**
* Always returns null as Many-To-One is always a relationship owner.
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToMany.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToMany.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToMany.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToMany.java Tue May 2 17:44:54 2006
@@ -41,6 +41,11 @@
fetch = annotation.fetch();
mappedBy = annotation.mappedBy();
}
+
+ @Override
+ public boolean isToMany() {
+ return true;
+ }
@TreeNodeChild(type = JpaJoinColumn.class)
public Collection<JpaJoinColumn> getJoinColumns() {
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToOne.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToOne.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToOne.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaOneToOne.java Tue May 2 17:44:54 2006
@@ -44,6 +44,11 @@
optional = annotation.optional();
mappedBy = annotation.mappedBy();
}
+
+ @Override
+ public boolean isToMany() {
+ return false;
+ }
public boolean isOptional() {
return optional;
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaRelationship.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaRelationship.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaRelationship.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaRelationship.java Tue May 2 17:44:54 2006
@@ -27,6 +27,8 @@
protected String mappedBy;
protected Collection<CascadeType> cascades;
+ public abstract boolean isToMany();
+
public boolean isOwner() {
return getMappedBy() == null;
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java?rev=399102&r1=399101&r2=399102&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java Tue May 2 17:44:54 2006
@@ -113,6 +113,13 @@
protected void assertObjRelationships(ObjEntity entity1) {
assertEquals(4, entity1.getRelationshipMap().size());
+ ObjRelationship attribute4 = (ObjRelationship) entity1
+ .getRelationship("attribute4");
+ assertNotNull(attribute4);
+ assertTrue(attribute4.isToMany());
+ assertEquals("attribute4", attribute4.getDbRelationshipPath());
+ assertEquals("MockCayenneTargetEntity2", attribute4.getTargetEntityName());
+
ObjRelationship attribute5 = (ObjRelationship) entity1
.getRelationship("attribute5");
assertNotNull(attribute5);