/*******************************************************************************
 * Copyright (c) 2004-2010 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.tracetree;

import org.eclipse.viatra2.core.tracebased.TraceException;
import org.eclipse.viatra2.framework.IFramework;

/**
 * @author Abel Hegedus
 *
 */
public class EmptyTraceTreeNode extends AbstractTraceTreeNode {

	/**
	 * @param parent
	 * @param id
	 */
	public EmptyTraceTreeNode(ITraceTreeNode parent, String id) {
		super(parent, id);
		setTerminated(true);
	}

	/* (non-Javadoc)
	 * @see org.eclipse.viatra2.trace.trace.ITraceTreeNode#doExecute(org.eclipse.viatra2.framework.IFramework)
	 */
	@Override
	public void doExecute(IFramework framework) throws TraceException {
		throw new TraceException("Empty Trace Tree Nodes are not executable");
	}

	/* (non-Javadoc)
	 * @see org.eclipse.viatra2.trace.trace.ITraceTreeNode#undo(org.eclipse.viatra2.framework.IFramework)
	 */
	@Override
	public void undo(IFramework framework) throws TraceException {
		throw new TraceException("Empty Trace Tree Nodes are not undoable");
	}

}
