/******************************************************************************* * 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: * chodnick ******************************************************************************/ package org.eclipse.emf.emfstore.client.conflictdetection.test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.emf.emfstore.client.test.common.cases.ESTest; import org.eclipse.emf.emfstore.client.util.ESVoidCallable; import org.eclipse.emf.emfstore.client.util.RunESCommand; import org.eclipse.emf.emfstore.internal.client.model.util.EMFStoreCommandWithResult; import org.eclipse.emf.emfstore.internal.common.model.ModelFactory; import org.eclipse.emf.emfstore.internal.common.model.Project; import org.eclipse.emf.emfstore.internal.server.conflictDetection.ChangeConflictSet; import org.eclipse.emf.emfstore.internal.server.conflictDetection.ConflictBucket; import org.eclipse.emf.emfstore.internal.server.conflictDetection.ConflictDetector; import org.eclipse.emf.emfstore.internal.server.model.versioning.AbstractChangePackage; import org.eclipse.emf.emfstore.internal.server.model.versioning.VersioningFactory; import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation; /** * Abstract super class for operation tests, contains setup. * * @author chodnick */ public abstract class ConflictDetectionTest extends ESTest { /** * Convenience method for conflict detection. * * @param opA operation * @param opB operation * @return boolean */ protected boolean doConflict(AbstractOperation opA, AbstractOperation opB) { final ConflictDetector conflictDetector = new ConflictDetector(); final AbstractChangePackage changePackage1 = VersioningFactory.eINSTANCE.createChangePackage(); final AbstractChangePackage changePackage2 = VersioningFactory.eINSTANCE.createChangePackage(); changePackage1.add(opA); changePackage2.add(opB); final ChangeConflictSet conflictSet = conflictDetector.calculateConflicts( Arrays.asList(changePackage1), Arrays.asList(changePackage2), ModelFactory.eINSTANCE.createProject()); return conflictSet.getConflictBuckets().size() > 0; } public List<ConflictBucket> getConflicts(final List<AbstractOperation> ops1, final List<AbstractOperation> ops2, Project project) { final AbstractChangePackage changePackage1 = VersioningFactory.eINSTANCE.createChangePackage(); final AbstractChangePackage changePackage2 = VersioningFactory.eINSTANCE.createChangePackage(); RunESCommand.run(new ESVoidCallable() { @Override public void run() { changePackage1.addAll(ops1); changePackage2.addAll(ops2); } }); final ChangeConflictSet conflicts = new ConflictDetector().calculateConflicts( Arrays.asList(changePackage1), Arrays.asList(changePackage2), project); return new ArrayList<ConflictBucket>(conflicts.getConflictBuckets()); } public List<ConflictBucket> getConflicts(List<AbstractOperation> ops1, List<AbstractOperation> ops2) { return getConflicts(ops1, ops2, ModelFactory.eINSTANCE.createProject()); } public <T extends AbstractOperation> AbstractOperation myCheckAndGetOperation( final Class<? extends AbstractOperation> clazz) { return new EMFStoreCommandWithResult<AbstractOperation>() { @Override protected AbstractOperation doRun() { return checkAndGetOperation(clazz); } }.run(false); } }