diff options
author | Simon McDuff | 2008-10-07 20:09:01 +0000 |
---|---|---|
committer | Simon McDuff | 2008-10-07 20:09:01 +0000 |
commit | c992425c626f57a165d23e9f2c8b8c46df1305ef (patch) | |
tree | df3d4e6110336125e8cfcfd3d2b0748367fd7293 /plugins/org.eclipse.emf.cdo.server.hibernate | |
parent | f7159321e74cb919908959d554f9d6e312764438 (diff) | |
download | cdo-c992425c626f57a165d23e9f2c8b8c46df1305ef.tar.gz cdo-c992425c626f57a165d23e9f2c8b8c46df1305ef.tar.xz cdo-c992425c626f57a165d23e9f2c8b8c46df1305ef.zip |
[248052] [Hibernate] UnsupportedOperationException in HibernateStoreReader
https://bugs.eclipse.org/bugs/show_bug.cgi?id=248052
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.hibernate')
2 files changed, 34 insertions, 15 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java index 6987480051..858a75b80e 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDOManyReferenceGetter.java @@ -10,11 +10,9 @@ **************************************************************************/ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer; +import org.eclipse.emf.cdo.common.revision.CDOList; import org.eclipse.emf.cdo.spi.common.InternalCDORevision; -import org.eclipse.net4j.util.collection.MoveableArrayList; -import org.eclipse.net4j.util.collection.MoveableList; - import org.hibernate.HibernateException; import org.hibernate.collection.PersistentCollection; @@ -55,16 +53,8 @@ public class CDOManyReferenceGetter extends CDOPropertyGetter return collection; } - // Not yet, get the moveablearraylist - @SuppressWarnings("unchecked") - MoveableList<Object> list = (MoveableList<Object>)super.get(target); - if (list == null) - { - // TODO: what initial size? - list = new MoveableArrayList<Object>(10); - InternalCDORevision revision = (InternalCDORevision)target; - revision.setValue(getCDOFeature(), list); - } + InternalCDORevision revision = (InternalCDORevision)target; + CDOList list = revision.getList(getCDOFeature(), 10); // Wrap the moveablearraylist HibernateMoveableListWrapper wrapper = new HibernateMoveableListWrapper(); diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java index edebb51549..a15147667a 100644 --- a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/WrappedHibernateList.java @@ -11,9 +11,12 @@ package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer; import org.eclipse.emf.cdo.common.id.CDOID; -import org.eclipse.emf.cdo.common.revision.CDOList; +import org.eclipse.emf.cdo.common.model.CDOType; +import org.eclipse.emf.cdo.common.revision.CDOListFactory; +import org.eclipse.emf.cdo.common.revision.CDOReferenceAdjuster; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.server.internal.hibernate.HibernateUtil; +import org.eclipse.emf.cdo.spi.common.InternalCDOList; import java.util.ArrayList; import java.util.Collection; @@ -26,7 +29,7 @@ import java.util.ListIterator; * * @author Martin Taal */ -public class WrappedHibernateList implements CDOList +public class WrappedHibernateList implements InternalCDOList { private List<Object> delegate; @@ -82,6 +85,31 @@ public class WrappedHibernateList implements CDOList } } + public void adjustReferences(CDOReferenceAdjuster adjuster) + { + int size = size(); + for (int i = 0; i < size; i++) + { + Object element = get(i); + Object newID = adjuster.adjustReference(element); + if (newID != element) + { + set(i, newID); + } + } + } + + public InternalCDOList clone(CDOType type) + { + int size = size(); + InternalCDOList list = (InternalCDOList)CDOListFactory.DEFAULT.createList(size, 0, 0); + for (int i = 0; i < size; i++) + { + list.add(type.copyValue(get(i))); + } + return list; + } + /** * @return the delegate */ @@ -388,4 +416,5 @@ public class WrappedHibernateList implements CDOList delegate.set(((CDORevision)o).getID()); } } + } |