| /* |
| * Copyright (c) 2009-2013, 2015, 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.spi.cdo; |
| |
| import org.eclipse.emf.cdo.common.CDOCommonRepository; |
| import org.eclipse.emf.cdo.common.branch.CDOBranch; |
| import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; |
| import org.eclipse.emf.cdo.common.commit.CDOChangeSet; |
| import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; |
| import org.eclipse.emf.cdo.common.id.CDOID; |
| import org.eclipse.emf.cdo.common.id.CDOIDGenerator; |
| import org.eclipse.emf.cdo.common.lob.CDOLobStore; |
| import org.eclipse.emf.cdo.common.lock.CDOLockChangeInfo; |
| import org.eclipse.emf.cdo.common.protocol.CDOProtocol.CommitNotificationInfo; |
| import org.eclipse.emf.cdo.common.revision.CDORevision; |
| import org.eclipse.emf.cdo.common.security.CDOPermission; |
| import org.eclipse.emf.cdo.session.CDORepositoryInfo; |
| import org.eclipse.emf.cdo.session.CDOSession; |
| import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch; |
| import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager; |
| import org.eclipse.emf.cdo.spi.common.commit.CDORevisionAvailabilityInfo; |
| import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager; |
| import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry; |
| import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.PackageLoader; |
| import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry.PackageProcessor; |
| import org.eclipse.emf.cdo.spi.common.revision.CDORevisionUnchunker; |
| import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; |
| import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager; |
| import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionManager.RevisionLocker; |
| import org.eclipse.emf.cdo.view.CDOFetchRuleManager; |
| |
| import org.eclipse.net4j.util.lifecycle.ILifecycle; |
| import org.eclipse.net4j.util.security.IPasswordCredentialsProvider; |
| |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.emf.spi.cdo.CDOSessionProtocol.RefreshSessionResult; |
| |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| /** |
| * If the meaning of this type isn't clear, there really should be more of a description here... |
| * |
| * @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. |
| */ |
| public interface InternalCDOSession |
| extends CDOSession, PackageProcessor, PackageLoader, RevisionLocker, CDORevisionUnchunker, ILifecycle |
| { |
| public CDOSessionProtocol getSessionProtocol(); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void setSessionProtocol(CDOSessionProtocol sessionProtocol); |
| |
| /** |
| * @since 4.0 |
| * @deprecated As of 4.2 use {@link #getCredentialsProvider()} |
| */ |
| @Deprecated |
| public org.eclipse.emf.cdo.common.protocol.CDOAuthenticator getAuthenticator(); |
| |
| /** |
| * @since 4.0 |
| * @deprecated As of 4.2 use {@link #setCredentialsProvider(IPasswordCredentialsProvider)} |
| */ |
| @Deprecated |
| public void setAuthenticator(org.eclipse.emf.cdo.common.protocol.CDOAuthenticator authenticator); |
| |
| /** |
| * @since 4.2 |
| */ |
| public void setCredentialsProvider(IPasswordCredentialsProvider credentialsProvider); |
| |
| public InternalCDOPackageRegistry getPackageRegistry(); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void setPackageRegistry(InternalCDOPackageRegistry packageRegistry); |
| |
| /** |
| * @since 3.0 |
| */ |
| public InternalCDOBranchManager getBranchManager(); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void setBranchManager(InternalCDOBranchManager branchManager); |
| |
| /** |
| * @since 3.0 |
| */ |
| public InternalCDORevisionManager getRevisionManager(); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void setRevisionManager(InternalCDORevisionManager revisionManager); |
| |
| /** |
| * @since 3.0 |
| */ |
| public InternalCDOCommitInfoManager getCommitInfoManager(); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void setCommitInfoManager(InternalCDOCommitInfoManager commitInfoManager); |
| |
| /** |
| * @since 3.0 |
| */ |
| public InternalCDORemoteSessionManager getRemoteSessionManager(); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void setRemoteSessionManager(InternalCDORemoteSessionManager remoteSessionManager); |
| |
| /** |
| * @since 4.0 |
| */ |
| public CDOLobStore getLobStore(); |
| |
| public void setExceptionHandler(CDOSession.ExceptionHandler exceptionHandler); |
| |
| /** |
| * @since 4.1 |
| */ |
| public void setIDGenerator(CDOIDGenerator idGenerator); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void setFetchRuleManager(CDOFetchRuleManager fetchRuleManager); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void setRepositoryInfo(CDORepositoryInfo repositoryInfo); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void setSessionID(int sessionID); |
| |
| public void setUserID(String userID); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void setLastUpdateTime(long lastUpdateTime); |
| |
| /** |
| * Initiates (possibly interactive) reset of credentials for the specified user. |
| * This is an optional operation of the session and only available for administrators. |
| * |
| * @param userID the ID of the user for which to reset credentials |
| * @throws UnsupportedOperationException if the session implementation does not permit resetting user credentials |
| * |
| * @since 4.3 |
| * @see #getCredentialsProvider() |
| */ |
| public void resetCredentials(String userID); |
| |
| public void viewDetached(InternalCDOView view); |
| |
| /** |
| * @since 3.0 |
| */ |
| public Object resolveElementProxy(CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void resolveAllElementProxies(CDORevision revision); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void handleRepositoryTypeChanged(CDOCommonRepository.Type oldType, CDOCommonRepository.Type newType); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void handleRepositoryStateChanged(CDOCommonRepository.State oldState, CDOCommonRepository.State newState); |
| |
| /** |
| * @since 3.0 |
| * @deprecated As of 4.3 no longer supported. |
| */ |
| @Deprecated |
| public void handleBranchNotification(InternalCDOBranch branch); |
| |
| /** |
| * @since 3.0 |
| * @deprecated As of 4.2 use {@link #handleCommitNotification(CDOCommitInfo, boolean)}. |
| */ |
| @Deprecated |
| public void handleCommitNotification(CDOCommitInfo commitInfo); |
| |
| /** |
| * @since 4.2 |
| * @deprecated As of 4.3 use {@link #handleCommitNotification(CommitNotificationInfo)}. |
| */ |
| @Deprecated |
| public void handleCommitNotification(CDOCommitInfo commitInfo, boolean clearResourcePathCache); |
| |
| /** |
| * @since 4.3 |
| */ |
| public void handleCommitNotification(CommitNotificationInfo info); |
| |
| /** |
| * @since 4.1 |
| */ |
| public void handleLockNotification(CDOLockChangeInfo lockChangeInfo, InternalCDOView sender); |
| |
| /** |
| * @since 4.3 |
| */ |
| public Object startLocalCommit(); |
| |
| /** |
| * @since 4.3 |
| */ |
| public void endLocalCommit(Object token); |
| |
| /** |
| * @since 3.0 |
| * @deprecated As of 4.2 use {@link #invalidate(CDOCommitInfo, InternalCDOTransaction, boolean)}. |
| */ |
| @Deprecated |
| public void invalidate(CDOCommitInfo commitInfo, InternalCDOTransaction sender); |
| |
| /** |
| * @since 4.2 |
| * @deprecated As of 4.3 use {@link #invalidate(CDOCommitInfo, InternalCDOTransaction, boolean, byte, Map)}. |
| */ |
| @Deprecated |
| public void invalidate(CDOCommitInfo commitInfo, InternalCDOTransaction sender, boolean clearResourcePathCache); |
| |
| /** |
| * @since 4.3 |
| * @deprecated As of 4.6 use {@link #invalidate(InvalidationData)}. |
| */ |
| @Deprecated |
| public void invalidate(CDOCommitInfo commitInfo, InternalCDOTransaction sender, boolean clearResourcePathCache, |
| byte securityImpact, Map<CDOID, CDOPermission> newPermissions); |
| |
| /** |
| * @since 4.6 |
| */ |
| public void invalidate(InvalidationData invalidationData); |
| |
| /** |
| * @since 3.0 |
| */ |
| public void processRefreshSessionResult(RefreshSessionResult result, CDOBranch branch, |
| List<InternalCDOView> branchViews, Map<CDOBranch, Map<CDOID, InternalCDORevision>> viewedRevisions); |
| |
| /** |
| * @since 4.0 |
| */ |
| public boolean isSticky(); |
| |
| /** |
| * @since 4.0 |
| */ |
| public CDOBranchPoint getCommittedSinceLastRefresh(CDOID id); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void setCommittedSinceLastRefresh(CDOID id, CDOBranchPoint branchPoint); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void clearCommittedSinceLastRefresh(); |
| |
| /** |
| * @since 4.0 |
| */ |
| public void setMainBranchLocal(boolean mainBranchLocal); |
| |
| /** |
| * @since 4.0 |
| * @deprecated As of 4.2 not used anymore. |
| */ |
| @Deprecated |
| public CDORevisionAvailabilityInfo createRevisionAvailabilityInfo(CDOBranchPoint branchPoint); |
| |
| /** |
| * @since 4.0 |
| * @deprecated As of 4.2 not used anymore. |
| */ |
| @Deprecated |
| public void cacheRevisions(CDORevisionAvailabilityInfo info); |
| |
| /** |
| * @since 4.2 |
| */ |
| public MergeData getMergeData(CDOBranchPoint target, CDOBranchPoint source, CDOBranchPoint sourceBase, |
| boolean computeChangeSets); |
| |
| /** |
| * @since 4.6 |
| */ |
| public MergeData getMergeData(CDOBranchPoint target, CDOBranchPoint source, CDOBranchPoint targetBase, |
| CDOBranchPoint sourceBase, boolean computeChangeSets); |
| |
| /** |
| * @author Eike Stepper |
| * @since 4.5 |
| */ |
| public static final class CommitToken |
| { |
| private final int commitNumber; |
| |
| private final String threadName; |
| |
| public CommitToken(int commitNumber, String threadName) |
| { |
| this.commitNumber = commitNumber; |
| this.threadName = threadName; |
| } |
| |
| public int getCommitNumber() |
| { |
| return commitNumber; |
| } |
| |
| @Override |
| public boolean equals(Object obj) |
| { |
| return commitNumber == ((CommitToken)obj).commitNumber; |
| } |
| |
| @Override |
| public int hashCode() |
| { |
| return commitNumber; |
| } |
| |
| @Override |
| public String toString() |
| { |
| return "LocalCommit[" + getCommitNumber() + (threadName == null ? "" : ", " + threadName) + "]"; |
| } |
| } |
| |
| /** |
| * A data structure that holds all input values of {@link InternalCDOSession#invalidate(InvalidationData) InternalCDOSession#invalidate()}. |
| * |
| * @author Eike Stepper |
| * @since 4.6 |
| */ |
| public static final class InvalidationData |
| { |
| private CDOCommitInfo commitInfo; |
| |
| private InternalCDOTransaction sender; |
| |
| private boolean clearResourcePathCache; |
| |
| private byte securityImpact; |
| |
| private Map<CDOID, CDOPermission> newPermissions; |
| |
| private CDOLockChangeInfo lockChangeInfo; |
| |
| public InvalidationData() |
| { |
| } |
| |
| public CDOCommitInfo getCommitInfo() |
| { |
| return commitInfo; |
| } |
| |
| public void setCommitInfo(CDOCommitInfo commitInfo) |
| { |
| this.commitInfo = commitInfo; |
| } |
| |
| public InternalCDOTransaction getSender() |
| { |
| return sender; |
| } |
| |
| public void setSender(InternalCDOTransaction sender) |
| { |
| this.sender = sender; |
| } |
| |
| public boolean isClearResourcePathCache() |
| { |
| return clearResourcePathCache; |
| } |
| |
| public void setClearResourcePathCache(boolean clearResourcePathCache) |
| { |
| this.clearResourcePathCache = clearResourcePathCache; |
| } |
| |
| public byte getSecurityImpact() |
| { |
| return securityImpact; |
| } |
| |
| public void setSecurityImpact(byte securityImpact) |
| { |
| this.securityImpact = securityImpact; |
| } |
| |
| public Map<CDOID, CDOPermission> getNewPermissions() |
| { |
| return newPermissions; |
| } |
| |
| public void setNewPermissions(Map<CDOID, CDOPermission> newPermissions) |
| { |
| this.newPermissions = newPermissions; |
| } |
| |
| public CDOLockChangeInfo getLockChangeInfo() |
| { |
| return lockChangeInfo; |
| } |
| |
| public void setLockChangeInfo(CDOLockChangeInfo lockChangeInfo) |
| { |
| this.lockChangeInfo = lockChangeInfo; |
| } |
| |
| @Override |
| public String toString() |
| { |
| StringBuilder builder = new StringBuilder(); |
| builder.append("InvalidationData[commitInfo="); |
| builder.append(commitInfo); |
| builder.append(", sender="); |
| builder.append(sender); |
| builder.append(", clearResourcePathCache="); |
| builder.append(clearResourcePathCache); |
| builder.append(", securityImpact="); |
| builder.append(securityImpact); |
| builder.append(", newPermissions="); |
| builder.append(newPermissions); |
| builder.append(", lockChangeInfo="); |
| builder.append(lockChangeInfo); |
| builder.append("]"); |
| return builder.toString(); |
| } |
| } |
| |
| /** |
| * A data structure that holds all input and output values of {@link InternalCDOSession#getMergeData(CDOBranchPoint, CDOBranchPoint, CDOBranchPoint, boolean) InternalCDOSession.getMergeData()}. |
| * |
| * @author Eike Stepper |
| * @since 4.2 |
| */ |
| public static final class MergeData |
| { |
| private final CDOBranchPoint target; |
| |
| private final CDORevisionAvailabilityInfo targetInfo; |
| |
| private final CDOBranchPoint targetBase; |
| |
| private final CDORevisionAvailabilityInfo targetBaseInfo; |
| |
| private final Set<CDOID> targetIDs; |
| |
| private final CDOChangeSet targetChanges; |
| |
| private final CDOBranchPoint source; |
| |
| private final CDORevisionAvailabilityInfo sourceInfo; |
| |
| private final CDOBranchPoint sourceBase; |
| |
| private final CDORevisionAvailabilityInfo sourceBaseInfo; |
| |
| private final Set<CDOID> sourceIDs; |
| |
| private final CDOChangeSet sourceChanges; |
| |
| private final CDOBranchPoint resultBase; |
| |
| /** |
| * @deprecated As of 4.6 use {@link #MergeData(CDOBranchPoint, CDORevisionAvailabilityInfo, CDOBranchPoint, CDORevisionAvailabilityInfo, Set, CDOChangeSet, CDOBranchPoint, CDORevisionAvailabilityInfo, CDOBranchPoint, CDORevisionAvailabilityInfo, Set, CDOChangeSet, CDOBranchPoint)}. |
| */ |
| @Deprecated |
| public MergeData(CDOBranchPoint target, CDOBranchPoint source, CDOBranchPoint sourceBase, CDOBranchPoint targetBase, |
| CDORevisionAvailabilityInfo targetInfo, CDORevisionAvailabilityInfo sourceInfo, |
| CDORevisionAvailabilityInfo sourceBaseInfo, CDORevisionAvailabilityInfo targetBaseInfo, Set<CDOID> ids, |
| CDOChangeSet targetChanges, CDOChangeSet sourceChanges) |
| { |
| this(target, targetInfo, targetBase, targetBaseInfo, ids, targetChanges, source, sourceInfo, sourceBase, |
| sourceBaseInfo, ids, sourceChanges, null); |
| } |
| |
| /** |
| * @since 4.6 |
| */ |
| public MergeData(CDOBranchPoint target, CDORevisionAvailabilityInfo targetInfo, CDOBranchPoint targetBase, |
| CDORevisionAvailabilityInfo targetBaseInfo, Set<CDOID> targetIDs, CDOChangeSet targetChanges, |
| CDOBranchPoint source, CDORevisionAvailabilityInfo sourceInfo, CDOBranchPoint sourceBase, |
| CDORevisionAvailabilityInfo sourceBaseInfo, Set<CDOID> sourceIDs, CDOChangeSet sourceChanges, |
| CDOBranchPoint resultBase) |
| { |
| this.target = target; |
| this.targetInfo = targetInfo; |
| this.targetBase = targetBase; |
| this.targetBaseInfo = targetBaseInfo; |
| this.targetIDs = targetIDs; |
| this.targetChanges = targetChanges; |
| this.source = source; |
| this.sourceInfo = sourceInfo; |
| this.sourceBase = sourceBase; |
| this.sourceBaseInfo = sourceBaseInfo; |
| this.sourceIDs = sourceIDs; |
| this.sourceChanges = sourceChanges; |
| this.resultBase = resultBase; |
| } |
| |
| public CDOBranchPoint getTarget() |
| { |
| return target; |
| } |
| |
| public CDORevisionAvailabilityInfo getTargetInfo() |
| { |
| return targetInfo; |
| } |
| |
| /** |
| * @since 4.6 |
| */ |
| public CDOBranchPoint getTargetBase() |
| { |
| return targetBase; |
| } |
| |
| /** |
| * @since 4.6 |
| */ |
| public CDORevisionAvailabilityInfo getTargetBaseInfo() |
| { |
| return targetBaseInfo; |
| } |
| |
| /** |
| * @since 4.6 |
| */ |
| public Set<CDOID> getTargetIDs() |
| { |
| return targetIDs; |
| } |
| |
| public CDOChangeSet getTargetChanges() |
| { |
| return targetChanges; |
| } |
| |
| public CDOBranchPoint getSource() |
| { |
| return source; |
| } |
| |
| public CDORevisionAvailabilityInfo getSourceInfo() |
| { |
| return sourceInfo; |
| } |
| |
| public CDOBranchPoint getSourceBase() |
| { |
| return sourceBase; |
| } |
| |
| /** |
| * @since 4.6 |
| */ |
| public CDORevisionAvailabilityInfo getSourceBaseInfo() |
| { |
| return sourceBaseInfo; |
| } |
| |
| /** |
| * @since 4.6 |
| */ |
| public Set<CDOID> getSourceIDs() |
| { |
| return sourceIDs; |
| } |
| |
| public CDOChangeSet getSourceChanges() |
| { |
| return sourceChanges; |
| } |
| |
| /** |
| * @since 4.6 |
| */ |
| public CDOBranchPoint getResultBase() |
| { |
| return resultBase; |
| } |
| |
| public Set<CDOID> getIDs() |
| { |
| if (targetIDs == sourceIDs) |
| { |
| return targetIDs; |
| } |
| |
| Set<CDOID> ids = new HashSet<CDOID>(); |
| ids.addAll(targetIDs); |
| ids.addAll(sourceIDs); |
| return ids; |
| } |
| |
| /** |
| * @deprecated As of 4.6 use {@link #getTargetBase()}. |
| */ |
| @Deprecated |
| public CDOBranchPoint getAncestor() |
| { |
| return getTargetBase(); |
| } |
| |
| /** |
| * @deprecated As of 4.6 use {@link #getSourceBaseInfo()}. |
| */ |
| @Deprecated |
| public CDORevisionAvailabilityInfo getBaseInfo() |
| { |
| return getSourceBaseInfo(); |
| } |
| |
| /** |
| * @deprecated As of 4.6 use {@link #getTargetBaseInfo()}. |
| */ |
| @Deprecated |
| public CDORevisionAvailabilityInfo getAncestorInfo() |
| { |
| return getTargetBaseInfo(); |
| } |
| } |
| } |