/*******************************************************************************
* Copyright (c) 2012-2013 EclipseSource Muenchen GmbH 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:
* Otto von Wesendonk, Edgar Mueller - initial API and implementation
* Edgar Mueller - API annotations
******************************************************************************/
package org.eclipse.emf.emfstore.server.model.versionspec;
import org.eclipse.emf.emfstore.common.model.ESFactory;
/**
* A factory for creating version specifiers.
*
* @author wesendon
* @author emueller
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface ESVersionFactory extends ESFactory {
/**
* Creates a HEAD revision for the branch "trunk".
*
* @return head version
*/
ESHeadVersionSpec createHEAD();
/**
* Create {@link ESHeadVersionSpec}.
*
* @param branch
* name of branch
* @return version spec
*/
ESHeadVersionSpec createHEAD(String branch);
/**
* Create {@link ESHeadVersionSpec}.
*
* @param versionSpec
* copies branch name from
* @return version spec
*/
ESHeadVersionSpec createHEAD(ESVersionSpec versionSpec);
/**
* Create {@link ESPrimaryVersionSpec}.
*
* @param branch
* branch name
* @param index
* verison number
* @return version spec
*/
ESPrimaryVersionSpec createPRIMARY(String branch, int index);
/**
* Create {@link ESPrimaryVersionSpec}.
*
* @param versionSpec
* copy branch name from
* @param index
* version number
*
* @return version spec
*/
ESPrimaryVersionSpec createPRIMARY(ESVersionSpec versionSpec, int index);
/**
* Create {@link ESPrimaryVersionSpec}.
*
* @param i
* version number
* @return version spec
*/
ESPrimaryVersionSpec createPRIMARY(int i);
/**
* Create {@link ESBranchVersionSpec}.
*
* @param value
* branch name
* @return version spec
*/
ESBranchVersionSpec createBRANCH(String value);
/**
* Creates {@link ESBranchVersionSpec}.
*
* @param spec
* copies branch name from
* @return version spec
*/
ESBranchVersionSpec createBRANCH(ESVersionSpec spec);
/**
* Creates {@link ESAncestorVersionSpec}.
*
* @param source
* source
* @param target
* target
* @return version spec
*/
ESAncestorVersionSpec createANCESTOR(ESPrimaryVersionSpec source, ESPrimaryVersionSpec target);
/**
* Checks whether two versions spec target the same branch.
*
* @param spec1
* spec 1
* @param spec2
* spec 2
* @return true, if same branch
*/
boolean isSameBranch(ESVersionSpec spec1, ESVersionSpec spec2);
/**
* Creates {@link ESTagVersionSpec}.
*
* @param tag
* tag
* @param branch
* branch name
* @return version spec
*/
ESTagVersionSpec createTAG(String tag, String branch);
/**
* Creates an {@link ESPagedUpdateVersionSpec}.
*
* @param baseVersion
* the base version from which on to count the maximally allowed changes
* @param maxChanges
* the number of maximally allowed changes
* @return the created version spec
*/
ESPagedUpdateVersionSpec createPAGEDUPDATE(ESPrimaryVersionSpec baseVersion, int maxChanges);
}