/*******************************************************************************
 * Copyright (c) 2004-2011 Abel Hegedus and Daniel Varro
 * 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:
 *    Abel Hegedus - initial API and implementation
 *******************************************************************************/
package org.eclipse.viatra2.core.tracebased;

import org.eclipse.viatra2.core.simple.SimpleEntity;
import org.eclipse.viatra2.core.simple.SimpleModelElement;
import org.eclipse.viatra2.core.simple.SimpleModelManager;
import org.eclipse.viatra2.core.simple.SimpleRelation;
import org.eclipse.viatra2.errors.VPMCoreException;

/**
 * @author Abel Hegedus
 *
 */
public class TraceModelManager extends SimpleModelManager {

	@Override
	protected void undoCreateContainment(SimpleEntity container, SimpleEntity me)
			throws VPMCoreException {
		super.undoCreateContainment(container, me);
	}
	
	@Override
	protected SimpleEntity undoCreateEntity(SimpleEntity entity,
			SimpleEntity parent) throws VPMCoreException {
		return super.undoCreateEntity(entity, parent);
	}
	
	@Override
	protected SimpleRelation undoCreateRelation(SimpleRelation rel,
			SimpleModelElement from, SimpleModelElement to)
			throws VPMCoreException {
		return super.undoCreateRelation(rel, from, to);
	}
	
}
