From 38c637a620383d02f89a3c81b9c6e077bd4138d0 Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Thu, 13 Dec 2007 12:55:14 +0000 Subject: [212344] Problem using EMAP with EStore https://bugs.eclipse.org/bugs/show_bug.cgi?id=212344 --- .../eclipse/emf/internal/cdo/CDOObjectImpl.java | 55 ++++++++++++++++++++-- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java index 5527d7b21e..ecca2a49c9 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOObjectImpl.java @@ -240,13 +240,60 @@ public class CDOObjectImpl extends EStoreEObjectImpl implements InternalCDOObjec } @Override - protected EList createList(EStructuralFeature eStructuralFeature) + protected EList createList(final EStructuralFeature eStructuralFeature) { - EClassifier eType = eStructuralFeature.getEType(); + final EClassifier eType = eStructuralFeature.getEType(); if (eType.getInstanceClassName() == "java.util.Map$Entry") { - return new EcoreEMap((EClass)eType, eType.getInstanceClass(), - new CDOStoreEList>(eStructuralFeature)); + class EStoreEcoreEMap extends EcoreEMap + { + private static final long serialVersionUID = 1L; + + public EStoreEcoreEMap() + { + super((EClass)eType, eType.getInstanceClass(), null); + delegateEList = new CDOStoreEList>(eStructuralFeature) + { + private static final long serialVersionUID = 1L; + + @Override + protected void didAdd(int index, BasicEMap.Entry newObject) + { + EStoreEcoreEMap.this.doPut(newObject); + } + + @Override + protected void didSet(int index, BasicEMap.Entry newObject, + BasicEMap.Entry oldObject) + { + didRemove(index, oldObject); + didAdd(index, newObject); + } + + @Override + protected void didRemove(int index, BasicEMap.Entry oldObject) + { + EStoreEcoreEMap.this.doRemove(oldObject); + } + + @Override + protected void didClear(int size, Object[] oldObjects) + { + EStoreEcoreEMap.this.doClear(); + } + + @Override + protected void didMove(int index, BasicEMap.Entry movedObject, int oldIndex) + { + EStoreEcoreEMap.this.doMove(movedObject); + } + }; + + size = delegateEList.size(); + } + } + + return new EStoreEcoreEMap(); } return new CDOStoreEList(eStructuralFeature); -- cgit v1.2.3