blob: 110b7c6a7357aa8f711933616821bf3a7981c956 [file] [log] [blame]
/*
* Copyright (c) 2009, 2011-2014, 2016 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.common.protocol;
import org.eclipse.emf.cdo.common.CDOCommonSession;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDUtil;
import org.eclipse.emf.cdo.common.lock.CDOLockChangeInfo;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
import org.eclipse.emf.cdo.common.security.CDOPermission;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
/**
* The communications protocol associated with a CDO {@link CDOCommonSession session}.
*
* @author Eike Stepper
* @since 2.0
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
* @apiviz.uses {@link CDODataInput}
* @apiviz.uses {@link CDODataOutput}
*/
public interface CDOProtocol extends CDOProtocolConstants
{
public CDOCommonSession getSession();
/**
* A data transfer object for commit notifications.
*
* @author Eike Stepper
* @since 4.3
*/
/**
* @author Eike Stepper
*/
public static final class CommitNotificationInfo
{
public static final byte IMPACT_NONE = 0;
public static final byte IMPACT_PERMISSIONS = 1;
public static final byte IMPACT_REALM = 2;
private int senderID;
private CDOCommonSession sender;
private CDORevisionProvider revisionProvider;
private CDOCommitInfo commitInfo;
private Map<CDOID, CDOPermission> newPermissions;
private Set<? extends Object> impactedRules;
private byte securityImpact = IMPACT_NONE;
private boolean clearResourcePathCache;
private CDOLockChangeInfo lockChangeInfo;
public CommitNotificationInfo()
{
}
public CommitNotificationInfo(CDODataInput in) throws IOException
{
senderID = in.readInt();
commitInfo = in.readCDOCommitInfo();
clearResourcePathCache = in.readBoolean();
securityImpact = in.readByte();
int size = in.readInt();
if (size != 0)
{
newPermissions = CDOIDUtil.createMap();
for (int i = 0; i < size; i++)
{
CDOID id = in.readCDOID();
byte bits = in.readByte();
CDOPermission permission = CDOPermission.get(bits);
newPermissions.put(id, permission);
}
}
if (in.readBoolean())
{
lockChangeInfo = in.readCDOLockChangeInfo();
}
}
public void write(CDODataOutput out) throws IOException
{
out.writeInt(senderID);
out.writeCDOCommitInfo(commitInfo);
out.writeBoolean(clearResourcePathCache);
out.writeByte(securityImpact); // Must come after writeCDOCommitInfo()
// Must come after writeCDOCommitInfo()
if (newPermissions == null)
{
out.writeInt(0);
}
else
{
int size = newPermissions.size();
out.writeInt(size);
for (Map.Entry<CDOID, CDOPermission> entry : newPermissions.entrySet())
{
CDOID id = entry.getKey();
byte bits = entry.getValue().getBits();
out.writeCDOID(id);
out.writeByte(bits);
}
}
if (lockChangeInfo != null)
{
out.writeBoolean(true);
out.writeCDOLockChangeInfo(lockChangeInfo);
}
else
{
out.writeBoolean(false);
}
}
public int getSenderID()
{
return senderID;
}
public CDOCommonSession getSender()
{
return sender;
}
public void setSender(CDOCommonSession sender)
{
this.sender = sender;
senderID = sender.getSessionID();
}
public CDORevisionProvider getRevisionProvider()
{
return revisionProvider;
}
public void setRevisionProvider(CDORevisionProvider revisionProvider)
{
this.revisionProvider = revisionProvider;
}
public CDOCommitInfo getCommitInfo()
{
return commitInfo;
}
public void setCommitInfo(CDOCommitInfo commitInfo)
{
this.commitInfo = commitInfo;
}
public Map<CDOID, CDOPermission> getNewPermissions()
{
return newPermissions;
}
public void setNewPermissions(Map<CDOID, CDOPermission> newPermissions)
{
this.newPermissions = newPermissions;
}
public Set<? extends Object> getImpactedRules()
{
return impactedRules;
}
public void setImpactedRules(Set<? extends Object> impactedRules)
{
this.impactedRules = impactedRules;
}
public byte getSecurityImpact()
{
return securityImpact;
}
public void setSecurityImpact(byte securityImpact)
{
this.securityImpact = securityImpact;
}
public boolean isClearResourcePathCache()
{
return clearResourcePathCache;
}
public void setClearResourcePathCache(boolean clearResourcePathCache)
{
this.clearResourcePathCache = clearResourcePathCache;
}
/**
* @since 4.6
*/
public CDOLockChangeInfo getLockChangeInfo()
{
return lockChangeInfo;
}
/**
* @since 4.6
*/
public void setLockChangeInfo(CDOLockChangeInfo lockChangeInfo)
{
this.lockChangeInfo = lockChangeInfo;
}
}
}