/**
 * 
 */
package org.eclipse.epf.diagramming.base.commands;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.epf.diagram.core.part.DiagramEditorInput;
import org.eclipse.epf.diagramming.base.util.UmaUmlUtil;
import org.eclipse.epf.diagramming.part.EPFDiagramEditorPlugin;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.gmf.runtime.common.core.command.CommandResult;
import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.ui.IEditorInput;
import org.eclipse.uml2.uml.Activity;
import org.eclipse.uml2.uml.UMLFactory;

/**
 * @author Shashidhar Kannoori
 *
 */
public class CreateDiagramCommand extends AbstractTransactionalCommand {

	public static String COMMAND_LABEL = "Creating diagram and model"; 
	private IEditorInput input;
	private Resource diagramResource;
	private String kindParam;
	//private TransactionalEditingDomain domain;
	/**
	 * @param domain
	 * @param label
	 * @param affectedFiles
	 */
	public CreateDiagramCommand(TransactionalEditingDomain domain,
			String label, List affectedFiles, 
			IEditorInput input, Resource diagramResouce,
			String kindParam) {
		super(domain, label, affectedFiles);
		this.input = input;
		this.diagramResource = diagramResouce;
		this.kindParam = kindParam;
	}

	/**
	 * @param domain
	 * @param label
	 * @param options
	 * @param affectedFiles
	 */
	public CreateDiagramCommand(TransactionalEditingDomain domain,
			String label, Map options, List affectedFiles) {
		super(domain, label, options, affectedFiles);
		///this.domain = domain;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
	 */
	protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
			IAdaptable info) throws ExecutionException {
		Activity model = createInitialModel();
		diagramResource.getContents().add(model);
		Diagram diagram = ViewService.createDiagram(model, kindParam,
				EPFDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
		if (diagram != null) {
			
			MethodElement methodElement = ((DiagramEditorInput)input).getMethodElement();
			if(methodElement != null && methodElement instanceof org.eclipse.epf.uma.Activity){
				UmaUmlUtil.createEAnnotationForUml(model, methodElement.getGuid());
			}
			
			diagramResource.getContents().add(diagram);
			diagram.setName(methodElement.getName());
			diagram.setElement(model);
		}
		try {
			diagramResource.save(Collections.EMPTY_MAP);
		} catch (IOException e) {

			EPFDiagramEditorPlugin.getInstance().logError(
					"Unable to store model and diagram resources", e); //$NON-NLS-1$
		}
		return CommandResult.newOKCommandResult();	
	}
	
	/**
	 * Create a new instance of domain element associated with canvas.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static Activity createInitialModel() {
		return UMLFactory.eINSTANCE.createActivity();
	}
}
