/*******************************************************************************
 * Copyright (c) 2004-2008 Istvan Rath 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:
 *    Istvan Rath - initial API and implementation
 *******************************************************************************/

 package org.eclipse.viatra2.treeeditor.commands;

import org.eclipse.viatra2.core.IModelElement;
import org.eclipse.viatra2.errors.VPMCoreException;

public class ChangeElementNameCommand extends ViatraEditorCommand
{
	private IModelElement targetElem;
	private String targetElem_name, newElemName;
	
	public void setTargetElem(IModelElement e)
	{
		targetElem = e;
		targetElem_name = e.getFullyQualifiedName();
	}
	
	public void setNewElemName(String n)
	{
		newElemName = n;
	}

	@Override
	public void execute() throws VPMCoreException
	{
		targetElem = Lookup(targetElem, targetElem_name);
		if (targetElem != null)
		{
			iTransactionID = targetElem.getModelSpace().getTransactionManager().beginUndoableTransaction();
			//targetElem.getModelSpace().getUndoManager().nextUndoBlock("vte_chn");
			targetElem.getModelSpace().getModelManager().setName(targetElem, newElemName);
			targetElem_name = targetElem.getFullyQualifiedName();
			targetElem.getModelSpace().getTransactionManager().commitTransaction();
		}
	}

	@Override
	public void undo() throws VPMCoreException
	{
		targetElem = Lookup(targetElem, targetElem_name);
		if (targetElem != null)
		{
			targetElem.getModelSpace().getTransactionManager().undoTransaction(iTransactionID);
			//targetElem.getModelSpace().getUndoManager().undo("vte_chn");
			targetElem_name = targetElem.getFullyQualifiedName();
		}
	}
}
