/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* 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:
* wesendon
******************************************************************************/
package org.eclipse.emf.emfstore.internal.server.model.versioning;
import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
import org.eclipse.emf.emfstore.server.model.versionspec.ESVersionSpec;
/**
* Helper class for creating version specifier.
*
* @author wesendon
*/
public final class Versions {
private Versions() {
}
/**
* Creates a HEAD revision for the branch "trunk".
*
* @return head version
*/
public static HeadVersionSpec createHEAD() {
return VersioningFactory.eINSTANCE.createHeadVersionSpec();
}
/**
* Create {@link HeadVersionSpec}.
*
* @param branch name of branch
* @return version spec
*/
public static HeadVersionSpec createHEAD(String branch) {
final HeadVersionSpec headVersionSpec = VersioningFactory.eINSTANCE.createHeadVersionSpec();
headVersionSpec.setBranch(branch);
return headVersionSpec;
}
/**
* Create {@link HeadVersionSpec}.
*
* @param versionSpec copies branch name from
* @return version spec
*/
public static HeadVersionSpec createHEAD(VersionSpec versionSpec) {
if (versionSpec == null) {
return createHEAD();
}
return createHEAD(versionSpec.getBranch());
}
/**
* Create {@link PrimaryVersionSpec}.
*
* @param branch branch name
* @param index verison number
* @return version spec
*/
public static PrimaryVersionSpec createPRIMARY(String branch, int index) {
final PrimaryVersionSpec spec = VersioningFactory.eINSTANCE.createPrimaryVersionSpec();
spec.setIdentifier(index);
spec.setBranch(branch);
return spec;
}
/**
* Create {@link PrimaryVersionSpec}.
*
* @param versionSpec copy branch name from
* @param index version number
*
* @return version spec
*/
public static PrimaryVersionSpec createPRIMARY(VersionSpec versionSpec, int index) {
return createPRIMARY(versionSpec.getBranch(), index);
}
/**
* Create {@link PrimaryVersionSpec}.
*
* @param i version number
* @return version spec
*/
public static PrimaryVersionSpec createPRIMARY(int i) {
// TODO: remove dependency to ESVersionSpec
return createPRIMARY(ESVersionSpec.BRANCH_DEFAULT_NAME, i);
}
/**
* Create {@link BranchVersionSpec}.
*
* @param value branch name
* @return version spec
*/
public static BranchVersionSpec createBRANCH(String value) {
final BranchVersionSpec branchSpec = VersioningFactory.eINSTANCE.createBranchVersionSpec();
branchSpec.setBranch(value);
return branchSpec;
}
/**
* Creates {@link BranchVersionSpec}.
*
* @param spec copies branch name from
* @return version spec
*/
public static BranchVersionSpec createBRANCH(VersionSpec spec) {
return createBRANCH(spec.getBranch());
}
/**
* Creates {@link AncestorVersionSpec}.
*
* @param source source
* @param target target
* @return version spec
*/
public static AncestorVersionSpec createANCESTOR(PrimaryVersionSpec source, PrimaryVersionSpec target) {
final AncestorVersionSpec ancestor = VersioningFactory.eINSTANCE.createAncestorVersionSpec();
ancestor.setBranch(source.getBranch());
ancestor.setSource(ModelUtil.clone(source));
ancestor.setTarget(ModelUtil.clone(target));
return ancestor;
}
/**
* Checks whether two versions spec target the same branch.
*
* @param spec1
* spec 1
* @param spec2
* spec 2
* @return true, if same branch
*/
public static boolean isSameBranch(VersionSpec spec1, VersionSpec spec2) {
if (spec1 == null || spec2 == null) {
return false;
}
if (spec1.getBranch() != null && spec1.getBranch().equals(spec2.getBranch())) {
return true;
}
return false;
}
/**
* Creates {@link TagVersionSpec}.
*
* @param tag tag
* @param branch branch name
* @return version spec
*/
public static TagVersionSpec createTAG(String tag, String branch) {
final TagVersionSpec tagSpec = VersioningFactory.eINSTANCE.createTagVersionSpec();
tagSpec.setBranch(branch);
tagSpec.setName(tag);
return tagSpec;
}
/**
* Creates a {@link PagedUpdateVersionSpec}.
*
* @param baseVersion
* the base version from which on to count the changes
* @param maxChanges
* the maximally allowed changes
* @return the created version specification
*/
public static PagedUpdateVersionSpec createPAGEDUPDATE(PrimaryVersionSpec baseVersion, int maxChanges) {
final PagedUpdateVersionSpec versionSpec = VersioningFactory.eINSTANCE.createPagedUpdateVersionSpec();
versionSpec.setBaseVersionSpec(baseVersion);
versionSpec.setMaxChanges(maxChanges);
return versionSpec;
}
}