You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2007/10/29 11:23:41 UTC
svn commit: r589577 - in
/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker:
core/CollectionContainer.java util/BrokerHelper.java
Author: arminw
Date: Mon Oct 29 03:23:40 2007
New Revision: 589577
URL: http://svn.apache.org/viewvc?rev=589577&view=rev
Log:
improve handling of references on main object store
Added:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/CollectionContainer.java
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java
Added: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/CollectionContainer.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/CollectionContainer.java?rev=589577&view=auto
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/CollectionContainer.java (added)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/CollectionContainer.java Mon Oct 29 03:23:40 2007
@@ -0,0 +1,166 @@
+package org.apache.ojb.broker.core;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+import java.lang.Object;
+import java.util.Collection;
+
+import org.apache.ojb.broker.PersistenceBrokerInternal;
+import org.apache.ojb.broker.ManageableCollection;
+import org.apache.ojb.broker.core.proxy.CollectionProxy;
+import org.apache.ojb.broker.core.proxy.CollectionProxyDefaultImpl;
+import org.apache.ojb.broker.metadata.CollectionDescriptor;
+
+/**
+ * Helper class to handle a collection reference (1:n or m:n) object with it's
+ * {@link org.apache.ojb.broker.metadata.CollectionDescriptor} and the source object
+ * this reference belongs too.
+ *
+ * @version $Id$
+ */
+final public class CollectionContainer
+{
+ private final CollectionDescriptor descriptor;
+ private final CollectionProxy collectionProxy;
+ private final Object source;
+ private final Object reference;
+
+ public CollectionContainer(PersistenceBrokerInternal broker, CollectionDescriptor descriptor, Object source)
+ {
+ this.descriptor = descriptor;
+ this.source = source;
+ this.reference = descriptor.getPersistentField().get(source);
+ this.collectionProxy = reference != null ? broker.getProxyFactory().getCollectionProxy(reference) : null;
+ }
+
+ /**
+ * Returns the {@link org.apache.ojb.broker.metadata.CollectionDescriptor} of
+ * this reference.
+ * @return The {@link org.apache.ojb.broker.metadata.CollectionDescriptor} of this reference object.
+ */
+ public CollectionDescriptor getDescriptor()
+ {
+ return descriptor;
+ }
+
+ /**
+ * Returns <em>true</em> if this collection reference is <em>null</em>.
+ * @return Whether or not this collection reference is <em>null</em>.
+ */
+ public boolean isNullReference()
+ {
+ return reference == null;
+ }
+
+ /**
+ * Returns <em>true</em> if this collection reference is a materialized proxy.
+ * @return Whether or not this collection reference is a materialized proxy.
+ */
+ public boolean isLoadedProxy()
+ {
+ return collectionProxy != null && collectionProxy.isLoaded();
+ }
+
+ /**
+ * Returns <em>true</em> if this collection reference is a unmaterialized proxy.
+ * @return Whether or not this collection reference is a unmaterialized proxy.
+ */
+ public boolean isUnmaterializedProxy()
+ {
+ return collectionProxy != null && !collectionProxy.isLoaded();
+ }
+
+ /**
+ * Returns <em>true</em> if this collection reference is a proxy (use lazy loading).
+ * @return Whether or not this collection reference is a proxy.
+ */
+ public boolean isProxy()
+ {
+ return collectionProxy != null;
+ }
+
+ /**
+ * Returns the reference object.
+ * @return The reference object.
+ */
+ public Object getReference()
+ {
+ return reference;
+ }
+
+ /**
+ * Returns the <em>real</em> (none proxy) reference object. If lazy loading is used
+ * this collection reference is wrapped by a proxy, this method returns the materialized
+ * none proxy collection object instead of the proxy reference.
+ * @return The <em>real</em> (none proxy) collection instance.
+ */
+ public Object getMaterializedReference()
+ {
+ return isProxy() ? ((CollectionProxyDefaultImpl) collectionProxy).getData() : reference;
+ }
+
+ /**
+ * The source object this reference belongs too.
+ *
+ * @return The source object.
+ */
+ public Object getSource()
+ {
+ return source;
+ }
+
+ /**
+ * Returns <em>true</em> if this collection reference is a
+ * {@link org.apache.ojb.broker.ManageableCollection} instance.
+ * @return Whether or not this collection reference is a manageable collection.
+ */
+ public boolean isManageableCollection()
+ {
+ return reference instanceof ManageableCollection;
+ }
+
+ /**
+ * Returns <em>true</em> if this collection reference is a collection.
+ * @return Whether or not this collection reference is a collection.
+ */
+ public boolean isCollection()
+ {
+ return reference instanceof Collection;
+ }
+
+ /**
+ * Returns <em>true</em> if this collection reference is an array.
+ * @return Whether or not this collection reference is an array.
+ */
+ public boolean isArrayType()
+ {
+ return descriptor.isArrayType();
+ }
+
+// public boolean isTrackingCollection()
+// {
+// return reference instanceof TrackingCollection;
+// }
+//
+// public TrackingCollection getTrackingCollection()
+// {
+// return reference instanceof TrackingCollection ? (TrackingCollection) reference : null;
+// }
+}
Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java?rev=589577&r1=589576&r2=589577&view=diff
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/util/BrokerHelper.java Mon Oct 29 03:23:40 2007
@@ -45,6 +45,7 @@
import org.apache.ojb.broker.accesslayer.sql.SqlExistStatement;
import org.apache.ojb.broker.core.PersistenceBrokerImpl;
import org.apache.ojb.broker.core.ValueContainer;
+import org.apache.ojb.broker.core.CollectionContainer;
import org.apache.ojb.broker.core.proxy.IndirectionHandler;
import org.apache.ojb.broker.core.proxy.ProxyFactory;
import org.apache.ojb.broker.metadata.ClassDescriptor;
@@ -108,7 +109,7 @@
if(tok.hasMoreTokens())
{
user = tok.nextToken();
- if(user != null && user.trim().equals(""))
+ if(user != null && user.trim().length() == 0)
{
user = null;
}
@@ -999,16 +1000,19 @@
{
Object referencedObjects = cod.getPersistentField().get(realObject);
if (cod.isMtoNRelation())
+ {
+ if(referencedObjects == null)
{
- if(referencedObjects == null)
- {
- referencedObjects = Collections.EMPTY_LIST;
- }
+ referencedObjects = Collections.EMPTY_LIST;
+ }
m_broker.getMtoNBroker().storeMtoN(realObject, cod, referencedObjects, insert);
}
else
{
- if(referencedObjects != null) m_broker.storeAndLinkOneToMany(true, realObject, cod, referencedObjects, insert);
+ if(referencedObjects != null)
+ {
+ m_broker.storeAndLinkOneToMany(true, new CollectionContainer(m_broker, cod, realObject), insert);
+ }
}
}
else
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org