blob: 4de94fb33eebfb53c00b9d8690a3fa138ad1d1aa [file] [log] [blame]
/*
* Copyright (c) 2010-2013, 2015 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.spi.common.branch;
import org.eclipse.emf.cdo.common.CDOCommonRepository;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchChangedEvent.ChangeKind;
import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.util.CDOTimeProvider;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader.BranchInfo;
import org.eclipse.net4j.util.collection.Pair;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import java.io.IOException;
/**
* If the meaning of this type isn't clear, there really should be more of a description here...
*
* @author Eike Stepper
* @since 3.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 InternalCDOBranchManager extends CDOBranchManager, ILifecycle
{
/**
* @since 4.2
*/
public void setRepository(CDOCommonRepository repository);
public BranchLoader getBranchLoader();
public void setBranchLoader(BranchLoader branchLoader);
public CDOTimeProvider getTimeProvider();
/**
* @deprecated As of 4.2 replaced by {@link #setRepository(CDOCommonRepository)}
*/
@Deprecated
public void setTimeProvider(CDOTimeProvider timeProvider);
/**
* @since 4.0
*/
public void initMainBranch(boolean local, long timestamp);
public InternalCDOBranch getMainBranch();
public InternalCDOBranch getBranch(int branchID);
public InternalCDOBranch getBranch(int id, String name, InternalCDOBranch baseBranch, long baseTimeStamp);
public InternalCDOBranch getBranch(int id, BranchInfo branchInfo);
public InternalCDOBranch getBranch(String path);
public InternalCDOBranch createBranch(int id, String name, InternalCDOBranch baseBranch, long baseTimeStamp);
/**
* @since 4.3
* @deprecated as of 4.4 use {@link CDOBranch#setName(String)}.
*/
@Deprecated
public void renameBranch(CDOBranch branch, String newName);
/**
* @deprecated As of 4.3 use {@link #handleBranchChanged(InternalCDOBranch, ChangeKind)}.
*/
@Deprecated
public void handleBranchCreated(InternalCDOBranch branch);
/**
* @since 4.3
*/
public void handleBranchChanged(InternalCDOBranch branch, ChangeKind changeKind);
/**
* If the meaning of this type isn't clear, there really should be more of a description here...
*
* @author Eike Stepper
* @since 3.0
*/
public interface BranchLoader
{
/**
* Passed as the branchID in {@link #createBranch(int, BranchInfo)} causes a new non-local branch to be created.
*/
public static final int NEW_BRANCH = Integer.MAX_VALUE;
/**
* Passed as the branchID in {@link #createBranch(int, BranchInfo)} causes a new local branch to be created.
*/
public static final int NEW_LOCAL_BRANCH = Integer.MIN_VALUE;
/**
* Creates a new branch with the given id and branch info. If the id is equal to {@link #NEW_BRANCH} the implementor
* of this method will determine a new positive unique branch id. If the id is equal to {@link #NEW_LOCAL_BRANCH}
* the implementor of this method will determine a new negative unique branch id, so that the new branch becomes a
* local branch. In either case the used branch id is returned to the caller.
*
* @since 4.0
*/
public Pair<Integer, Long> createBranch(int branchID, BranchInfo branchInfo);
public BranchInfo loadBranch(int branchID);
public SubBranchInfo[] loadSubBranches(int branchID);
public int loadBranches(int startID, int endID, CDOBranchHandler branchHandler);
/**
* If the meaning of this type isn't clear, there really should be more of a description here...
*
* @author Eike Stepper
* @since 3.0
*/
public static final class BranchInfo
{
private String name;
private int baseBranchID;
private long baseTimeStamp;
public BranchInfo(String name, int baseBranchID, long baseTimeStamp)
{
this.name = name;
this.baseBranchID = baseBranchID;
this.baseTimeStamp = baseTimeStamp;
}
public BranchInfo(CDODataInput in) throws IOException
{
name = in.readString();
baseBranchID = in.readInt();
baseTimeStamp = in.readLong();
}
public void write(CDODataOutput out) throws IOException
{
out.writeString(name);
out.writeInt(baseBranchID);
out.writeLong(baseTimeStamp);
}
public String getName()
{
return name;
}
/**
* @since 4.4
*/
public void setName(String name)
{
this.name = name;
}
public int getBaseBranchID()
{
return baseBranchID;
}
public long getBaseTimeStamp()
{
return baseTimeStamp;
}
@Override
public String toString()
{
return "BranchInfo[name=" + name + ", baseBranchID=" + baseBranchID + ", baseTimeStamp=" + baseTimeStamp + "]";
}
}
/**
* If the meaning of this type isn't clear, there really should be more of a description here...
* @author Eike Stepper
* @since 3.0
*/
public static final class SubBranchInfo
{
private int id;
private String name;
private long baseTimeStamp;
public SubBranchInfo(int id, String name, long baseTimeStamp)
{
this.id = id;
this.name = name;
this.baseTimeStamp = baseTimeStamp;
}
public SubBranchInfo(CDODataInput in) throws IOException
{
id = in.readInt();
name = in.readString();
baseTimeStamp = in.readLong();
}
public void write(CDODataOutput out) throws IOException
{
out.writeInt(id);
out.writeString(name);
out.writeLong(baseTimeStamp);
}
public int getID()
{
return id;
}
public String getName()
{
return name;
}
public long getBaseTimeStamp()
{
return baseTimeStamp;
}
}
}
/**
* If the meaning of this type isn't clear, there really should be more of a description here...
*
* @author Mathieu Velten
* @since 4.3
*/
public interface BranchLoader2 extends BranchLoader
{
/**
* @deprecated Not yet implemented.
*/
@Deprecated
public void deleteBranch(int branchID);
/**
* @deprecated as of 4.4. use {@link BranchLoader3#renameBranch(int, String, String)}.
*/
@Deprecated
public void renameBranch(int branchID, String newName);
}
/**
* If the meaning of this type isn't clear, there really should be more of a description here...
*
* @author Eike Stepper
* @since 4.4
*/
public interface BranchLoader3 extends BranchLoader2
{
public void renameBranch(int branchID, String oldName, String newName);
}
}