Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.net4j/src')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java22
-rw-r--r--plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java37
3 files changed, 68 insertions, 3 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java
index 56295c029c..3317903a30 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CDOServerProtocol.java
@@ -34,6 +34,8 @@ import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.security.DiffieHellman.Client.Response;
import org.eclipse.net4j.util.security.DiffieHellman.Server.Challenge;
+import java.util.Set;
+
/**
* @author Eike Stepper
*/
@@ -147,11 +149,19 @@ public class CDOServerProtocol extends SignalProtocol<InternalSession> implement
sendCommitNotification(commitInfo, true);
}
+ @Deprecated
public void sendCommitNotification(CDOCommitInfo commitInfo, boolean clearResourcePathCache) throws Exception
{
+ sendCommitNotification(commitInfo, true, null);
+
+ }
+
+ public void sendCommitNotification(CDOCommitInfo commitInfo, boolean clearResourcePathCache, Set<CDOID> readOnly)
+ throws Exception
+ {
if (LifecycleUtil.isActive(getChannel()))
{
- new CommitNotificationRequest(this, commitInfo, clearResourcePathCache).sendAsync();
+ new CommitNotificationRequest(this, commitInfo, clearResourcePathCache, readOnly).sendAsync();
}
else
{
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java
index 32e1d0f762..166c8963ff 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitNotificationRequest.java
@@ -13,10 +13,12 @@
package org.eclipse.emf.cdo.server.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
import java.io.IOException;
+import java.util.Set;
/**
* @author Eike Stepper
@@ -27,18 +29,34 @@ public class CommitNotificationRequest extends CDOServerRequest
private boolean clearResourcePathCache;
+ private Set<CDOID> readOnly;
+
public CommitNotificationRequest(CDOServerProtocol serverProtocol, CDOCommitInfo commitInfo,
- boolean clearResourcePathCache)
+ boolean clearResourcePathCache, Set<CDOID> readOnly)
{
super(serverProtocol, CDOProtocolConstants.SIGNAL_COMMIT_NOTIFICATION);
this.commitInfo = commitInfo;
this.clearResourcePathCache = clearResourcePathCache;
+ this.readOnly = readOnly;
}
@Override
protected void requesting(CDODataOutput out) throws IOException
{
- out.writeCDOCommitInfo(commitInfo); // Exposes revision to client side
+ out.writeCDOCommitInfo(commitInfo);
out.writeBoolean(clearResourcePathCache);
+
+ if (readOnly != null)
+ {
+ out.writeInt(readOnly.size());
+ for (CDOID id : readOnly)
+ {
+ out.writeCDOID(id);
+ }
+ }
+ else
+ {
+ out.writeInt(0);
+ }
}
}
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
index b54ce5e022..863607b836 100644
--- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
+++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/internal/net4j/protocol/CommitTransactionIndication.java
@@ -14,6 +14,7 @@
package org.eclipse.emf.cdo.server.internal.net4j.protocol;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDReference;
@@ -24,7 +25,9 @@ import org.eclipse.emf.cdo.common.model.EMFUtil;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.common.security.CDOPermission;
import org.eclipse.emf.cdo.etypes.EtypesPackage;
+import org.eclipse.emf.cdo.server.IPermissionManager;
import org.eclipse.emf.cdo.server.IView;
import org.eclipse.emf.cdo.server.internal.net4j.bundle.OM;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
@@ -32,6 +35,7 @@ import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionDelta;
import org.eclipse.emf.cdo.spi.server.InternalCommitContext;
+import org.eclipse.emf.cdo.spi.server.InternalSession;
import org.eclipse.emf.cdo.spi.server.InternalTransaction;
import org.eclipse.emf.cdo.spi.server.InternalView;
@@ -332,6 +336,7 @@ public class CommitTransactionIndication extends CDOServerIndicationWithMonitori
respondingResult(out);
respondingMappingNewObjects(out);
respondingNewLockStates(out);
+ respondingNewPermissions(out);
}
}
finally
@@ -407,6 +412,38 @@ public class CommitTransactionIndication extends CDOServerIndicationWithMonitori
}
}
+ protected void respondingNewPermissions(CDODataOutput out) throws Exception
+ {
+ InternalSession session = getSession();
+ IPermissionManager permissionManager = session.getManager().getPermissionManager();
+ if (permissionManager != null)
+ {
+ out.writeBoolean(true);
+ respondingNewPermissions(out, permissionManager, session, commitContext.getNewObjects());
+ respondingNewPermissions(out, permissionManager, session, commitContext.getDirtyObjects());
+ }
+ else
+ {
+ out.writeBoolean(false);
+ }
+ }
+
+ protected void respondingNewPermissions(CDODataOutput out, IPermissionManager permissionManager,
+ InternalSession session, InternalCDORevision[] revisions) throws Exception
+ {
+ CDOBranchPoint securityContext = commitContext.getBranchPoint();
+
+ out.writeInt(revisions.length);
+ for (int i = 0; i < revisions.length; i++)
+ {
+ InternalCDORevision revision = revisions[i];
+ CDOPermission permission = permissionManager.getPermission(revision, securityContext, session);
+
+ out.writeCDOID(revision.getID());
+ out.writeEnum(permission);
+ }
+ }
+
protected InternalTransaction getTransaction(int viewID)
{
InternalView view = getSession().getView(viewID);

Back to the top