Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_267050_Test.java76
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionInvalidationEvent.java7
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/CommitNotificationIndication.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/SyncRevisionsRequest.java6
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java40
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java9
8 files changed, 125 insertions, 21 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java
index 83e6a887c6..a905b65fa9 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java
@@ -42,6 +42,7 @@ import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_260764_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_261218_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_265114_Test;
import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_266857_Test;
+import org.eclipse.emf.cdo.tests.bugzilla.Bugzilla_267050_Test;
import org.eclipse.emf.cdo.tests.config.impl.ConfigTest;
import org.eclipse.emf.cdo.tests.config.impl.ConfigTestSuite;
@@ -130,6 +131,7 @@ public abstract class AllTestsAllConfigs extends ConfigTestSuite
testClasses.add(Bugzilla_261218_Test.class);
testClasses.add(Bugzilla_265114_Test.class);
testClasses.add(Bugzilla_266857_Test.class);
+ testClasses.add(Bugzilla_267050_Test.class);
// TODO testClasses.add(NonCDOResourceTest.class);
// TODO testClasses.add(GeneratedEcoreTest.class);
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_267050_Test.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_267050_Test.java
new file mode 100644
index 0000000000..f51c1c69d7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/bugzilla/Bugzilla_267050_Test.java
@@ -0,0 +1,76 @@
+/**
+ * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon McDuff - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests.bugzilla;
+
+import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.session.CDOSessionInvalidationEvent;
+import org.eclipse.emf.cdo.tests.AbstractCDOTest;
+import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+
+import java.util.Collection;
+
+/**
+ * Add new packages infos in the Notifications process at the client side
+ *
+ * @see https://bugs.eclipse.org/267050
+ * @author Simon McDuff
+ */
+public class Bugzilla_267050_Test extends AbstractCDOTest
+{
+ @SuppressWarnings("unchecked")
+ public void testBugzilla_267050() throws InterruptedException
+ {
+ final Collection<CDOPackageUnit> newPackagesUnits[] = new Collection[1];
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+
+ CDOSession session2 = openSession();
+ session2.addListener(new IListener()
+ {
+ public void notifyEvent(IEvent event)
+ {
+ if (event instanceof CDOSessionInvalidationEvent)
+ {
+ CDOSessionInvalidationEvent e = (CDOSessionInvalidationEvent)event;
+ newPackagesUnits[0] = e.getNewPackageUnits();
+ }
+ }
+ });
+
+ session.getPackageRegistry().putEPackage(getModel1Package());
+
+ CDOResource res = transaction.createResource("/res");
+ Company specialPurchaseOrder = getModel1Factory().createCompany();
+ res.getContents().add(specialPurchaseOrder);
+ transaction.commit();
+
+ boolean timedOut = new PollingTimeOuter(10, 100)
+ {
+ @Override
+ protected boolean successful()
+ {
+ return newPackagesUnits[0] != null;
+ }
+ }.timedOut();
+
+ assertEquals(false, timedOut);
+
+ assertEquals(1, newPackagesUnits[0].size());
+ assertEquals(getModel1Package().getNsURI(), newPackagesUnits[0].iterator().next().getTopLevelPackageInfo()
+ .getPackageURI());
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionInvalidationEvent.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionInvalidationEvent.java
index 34dabae819..c49029c18c 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionInvalidationEvent.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionInvalidationEvent.java
@@ -14,6 +14,7 @@ package org.eclipse.emf.cdo.session;
import org.eclipse.emf.cdo.CDOInvalidationNotification;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
+import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.view.CDOAdapterPolicy;
import org.eclipse.emf.cdo.view.CDOView;
@@ -58,4 +59,10 @@ public interface CDOSessionInvalidationEvent extends CDOSessionEvent
* Returns a collection of the {@link CDOID CDOIDs} of the removed objects.
*/
public Collection<CDOID> getDetachedObjects();
+
+ /**
+ * Returns a collection of the new {@link CDOPackageUnit package units}.
+ */
+ public Collection<CDOPackageUnit> getNewPackageUnits();
+
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/CommitNotificationIndication.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/CommitNotificationIndication.java
index 1d503bb412..a47030a1e3 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/CommitNotificationIndication.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/CommitNotificationIndication.java
@@ -28,6 +28,7 @@ import org.eclipse.emf.spi.cdo.InternalCDOSession;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -104,6 +105,6 @@ public class CommitNotificationIndication extends CDOClientIndication
detachedObjects.add(in.readCDOID());
}
- session.handleCommitNotification(timeStamp, dirtyOIDs, detachedObjects, deltas, null);
+ session.handleCommitNotification(timeStamp, Arrays.asList(packageUnits), dirtyOIDs, detachedObjects, deltas, null);
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/SyncRevisionsRequest.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/SyncRevisionsRequest.java
index 065eda635a..314dfb6e9b 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/SyncRevisionsRequest.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/net4j/protocol/SyncRevisionsRequest.java
@@ -16,6 +16,7 @@ import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.io.CDODataInput;
import org.eclipse.emf.cdo.common.io.CDODataOutput;
+import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
@@ -113,7 +114,8 @@ public class SyncRevisionsRequest extends CDOClientRequest<Collection<CDOTimeSta
Collection<CDOID> detachedObjects = getMap(mapofContext, revised).getDetachedObjects();
detachedObjects.add(id);
}
-
+
+ Collection<CDOPackageUnit> emptyNewPackageUnits = Collections.emptyList();
for (CDOTimeStampContext timestampContext : mapofContext.values())
{
Set<CDOIDAndVersion> dirtyObjects = timestampContext.getDirtyObjects();
@@ -125,7 +127,7 @@ public class SyncRevisionsRequest extends CDOClientRequest<Collection<CDOTimeSta
((CDOTimeStampContextImpl)timestampContext).setDirtyObjects(dirtyObjects);
((CDOTimeStampContextImpl)timestampContext).setDetachedObjects(detachedObjects);
- getSession().handleSyncResponse(timestampContext.getTimeStamp(), dirtyObjects, detachedObjects);
+ getSession().handleSyncResponse(timestampContext.getTimeStamp(), emptyNewPackageUnits, dirtyObjects, detachedObjects);
}
return Collections.unmodifiableCollection(mapofContext.values());
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
index 9a8838b44b..5ee1eb8b70 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java
@@ -385,24 +385,27 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
/**
* @since 2.0
*/
- public void handleSyncResponse(long timestamp, Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects)
+ public void handleSyncResponse(long timestamp, Collection<CDOPackageUnit> newPackageUnits,
+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects)
{
- handleCommitNotification(timestamp, dirtyOIDs, detachedObjects, null, null, true, false);
+ handleCommitNotification(timestamp, newPackageUnits, dirtyOIDs, detachedObjects, null, null, true, false);
}
/**
* @since 2.0
*/
- public void handleCommitNotification(final long timeStamp, Set<CDOIDAndVersion> dirtyOIDs,
- final Collection<CDOID> detachedObjects, final Collection<CDORevisionDelta> deltas, InternalCDOView excludedView)
+ public void handleCommitNotification(final long timeStamp, final Collection<CDOPackageUnit> newPackageUnits,
+ Set<CDOIDAndVersion> dirtyOIDs, final Collection<CDOID> detachedObjects,
+ final Collection<CDORevisionDelta> deltas, InternalCDOView excludedView)
{
- handleCommitNotification(timeStamp, dirtyOIDs, detachedObjects, deltas, excludedView, options()
+ handleCommitNotification(timeStamp, newPackageUnits, dirtyOIDs, detachedObjects, deltas, excludedView, options()
.isPassiveUpdateEnabled(), true);
}
- private void handleCommitNotification(final long timeStamp, Set<CDOIDAndVersion> dirtyOIDs,
- final Collection<CDOID> detachedObjects, final Collection<CDORevisionDelta> deltas, InternalCDOView excludedView,
- final boolean passiveUpdate, boolean async)
+ private void handleCommitNotification(final long timeStamp, final Collection<CDOPackageUnit> newPackageUnits,
+ Set<CDOIDAndVersion> dirtyOIDs, final Collection<CDOID> detachedObjects,
+ final Collection<CDORevisionDelta> deltas, InternalCDOView excludedView, final boolean passiveUpdate,
+ boolean async)
{
if (passiveUpdate)
{
@@ -459,7 +462,7 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
}
- fireInvalidationEvent(timeStamp, dirtyOIDs, detachedObjects, excludedView);
+ fireInvalidationEvent(timeStamp, newPackageUnits, dirtyOIDs, detachedObjects, excludedView);
}
private void updateRevisionForRemoteChanges(final long timeStamp, Set<CDOIDAndVersion> dirtyOIDs,
@@ -514,12 +517,13 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
}
/**
+ * @param packageUnits
* @since 2.0
*/
- public void fireInvalidationEvent(long timeStamp, Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects,
- InternalCDOView excludedView)
+ public void fireInvalidationEvent(long timeStamp, Collection<CDOPackageUnit> packageUnits,
+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, InternalCDOView excludedView)
{
- fireEvent(new InvalidationEvent(excludedView, timeStamp, dirtyOIDs, detachedObjects));
+ fireEvent(new InvalidationEvent(excludedView, timeStamp, packageUnits, dirtyOIDs, detachedObjects));
}
@Override
@@ -1090,12 +1094,15 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
private Collection<CDOID> detachedObjects;
- public InvalidationEvent(InternalCDOView view, long timeStamp, Set<CDOIDAndVersion> dirtyOIDs,
- Collection<CDOID> detachedObjects)
+ private Collection<CDOPackageUnit> newPackageUnits;
+
+ public InvalidationEvent(InternalCDOView view, long timeStamp, Collection<CDOPackageUnit> packageUnits,
+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects)
{
super(CDOSessionImpl.this);
this.view = view;
this.timeStamp = timeStamp;
+ newPackageUnits = packageUnits;
this.dirtyOIDs = dirtyOIDs;
this.detachedObjects = detachedObjects;
}
@@ -1125,6 +1132,11 @@ public abstract class CDOSessionImpl extends Container<CDOView> implements Inter
return detachedObjects;
}
+ public Collection<CDOPackageUnit> getNewPackageUnits()
+ {
+ return newPackageUnits;
+ }
+
@Override
public String toString()
{
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
index 9c6e9bd542..0dfe45740a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java
@@ -1305,7 +1305,8 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa
((InternalCDORevisionDelta)dirtyObjectDelta).adjustReferences(result.getReferenceAdjuster());
}
- session.handleCommitNotification(timeStamp, dirtyIDs, detachedIDs, deltasCopy, getTransaction());
+ session.handleCommitNotification(timeStamp, newPackageUnits, dirtyIDs, detachedIDs, deltasCopy,
+ getTransaction());
}
lastCommitTime = timeStamp;
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java
index 50a4de0be3..fcf1618ae7 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java
@@ -14,6 +14,7 @@ import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDAndVersion;
import org.eclipse.emf.cdo.common.id.CDOIDObjectFactory;
import org.eclipse.emf.cdo.common.model.CDOPackageRegistry;
+import org.eclipse.emf.cdo.common.model.CDOPackageUnit;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
@@ -38,8 +39,10 @@ public interface InternalCDOSession extends CDOSession, CDOIDObjectFactory,
public void viewDetached(InternalCDOView view);
- public void handleCommitNotification(long timeStamp, Set<CDOIDAndVersion> dirtyOIDs,
- Collection<CDOID> detachedObjects, Collection<CDORevisionDelta> deltas, InternalCDOView excludedView);
+ public void handleCommitNotification(long timeStamp, Collection<CDOPackageUnit> newPackageUnits,
+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects, Collection<CDORevisionDelta> deltas,
+ InternalCDOView excludedView);
- public void handleSyncResponse(long timestamp, Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects);
+ public void handleSyncResponse(long timestamp, Collection<CDOPackageUnit> newPackageUnits,
+ Set<CDOIDAndVersion> dirtyOIDs, Collection<CDOID> detachedObjects);
}

Back to the top