/*******************************************************************************
 * Copyright (c) 2003, 2005 IBM Corporation and others.
 * 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
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.j2ee.internal.command;


import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jst.j2ee.internal.provider.J2EEUIEditingDomain;
import org.eclipse.wst.common.internal.emf.utilities.CopyGroup;
import org.eclipse.wst.common.internal.emf.utilities.EtoolsCopyUtility;


/**
 * Insert the type's description here. Creation date: (06/11/01 8:45:21 AM)
 * 
 * @author: Administrator
 */
public class J2EECopyFromClipboardCommand extends AbstractCommand {
	private J2EEUIEditingDomain domain;
	private J2EEClipboard result;
	private EtoolsCopyUtility copyUtil;

	public J2EECopyFromClipboardCommand(J2EEUIEditingDomain editingDomain) {
		domain = editingDomain;

	}

	/**
	 * This will perform the command activity required for the effect. The effect of calling execute
	 * when canExecute returns false, or when canExecute hasn't been called, is undefined.
	 */
	public void execute() {
		if (copyUtil != null)
			return;
		copyUtil = new EtoolsCopyUtility();
		J2EEClipboard clipboard = domain.getJ2EEClipboard();
		result = new J2EEClipboard(new ArrayList(0));
		for (int i = 0; i < clipboard.size(); i++) {
			CopyGroup group = new CopyGroup();
			EObject o = (EObject) clipboard.get(i);
			group.add(o);
			EObject bnd = clipboard.getBinding(o);
			if (bnd != null)
				group.add(bnd);
			EObject ext = clipboard.getExtension(o);
			if (ext != null)
				group.add(ext);
			copyUtil.copy(group);
			EObject copy = copyUtil.getCopy(o);
			result.add(copy);
			if (bnd != null)
				result.addBinding(copy, copyUtil.getCopy(bnd));
			if (ext != null)
				result.addExtension(copy, copyUtil.getCopy(ext));
		}
		//Reset the util so redo will actuall redo
		copyUtil = null;
	}

	@Override
	public Collection getAffectedObjects() {
		return result;
	}

	@Override
	public Collection getResult() {
		return result;
	}

	@Override
	protected boolean prepare() {
		return true;
	}

	/**
	 * This will again perform the command activity required to redo the effect after undoing the
	 * effect. The effect, if any, of calling redo before undo is called is undefined. Note that if
	 * you implement redo to call execute then any derived class will be restricted to by that
	 * decision also.
	 */
	public void redo() {
		execute();
	}

	@Override
	public void undo() {
		result = null;
	}
}
