/*******************************************************************************
 * Copyright (c) 2006 Sybase, Inc. 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
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.dnd.internal;

import java.util.Map;

import org.eclipse.gef.commands.Command;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jst.jsf.common.ui.internal.dialogs.CommonWizardDialog;
import org.eclipse.jst.pagedesigner.dnd.ILocalDropHandler;
import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
import org.eclipse.swt.widgets.Shell;
import org.w3c.dom.Node;

/**
 * This is the command that performs the drop operation. There is no need for
 * this command to go into command stack, it simply open wizards, and let
 * wizards to handle the remaining things.
 * 
 * @author mengbo
 */
public class LocalDropCommand extends Command {
	/**
	 * the map from feedback to ILocalDropHandler
	 */
	private Map _feedbackToHandlers;

	private IHTMLGraphicalViewer _viewer;

	private Object _localObject;

	private Node _widget;

	private IDOMPosition _position;

	/**
	 * constructor
	 */
	public LocalDropCommand(IHTMLGraphicalViewer viewer, Object localObject,
			Map feedbackHandlers) {
		_viewer = viewer;
		_localObject = localObject;
		_feedbackToHandlers = feedbackHandlers;
	}

	public void setWidget(Node widget) {
		_widget = widget;
	}

	public void setDOMPosition(IDOMPosition position) {
		_position = position;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.gef.commands.Command#execute()
	 */
	public void execute() {
		if (_feedbackToHandlers.size() == 1) {
			// only have one choice.
			ILocalDropHandler handler = (ILocalDropHandler) _feedbackToHandlers
					.values().toArray()[0];
			if (handler.useWizard(_localObject, _viewer)) {
				IWizard wizard;
				if (_widget != null) {
					wizard = handler.getWizard(_localObject, _widget, _viewer);
				} else {
					wizard = handler
							.getWizard(_localObject, _position, _viewer);
				}
				CommonWizardDialog wizardDialog = new CommonWizardDialog(
						getShell(), wizard);
				wizardDialog.setTitle(Messages
						.getString("LocalDropCommand.DropHandler"));
				wizardDialog.create();
				wizardDialog.open();
			} else {
				if (_widget != null) {
					handler.doUpdateWidget(_localObject, _widget, _viewer);
				} else {
					handler.doInsertElements(_localObject, _position, _viewer);
				}
			}
		} else {
			CommonWizardDialog wizardDialog = new CommonWizardDialog(
					getShell(), getWizard());
			wizardDialog.setTitle(Messages
					.getString("LocalDropCommand.DropHandler"));
			wizardDialog.setBlockOnOpen(false);
			wizardDialog.create();
			wizardDialog.open();
		}
	}

	/**
	 * @return
	 */
	private IWizard getWizard() {
		if (_widget != null) {
			return new DropSelectionWizard(_viewer, _localObject,
					_feedbackToHandlers, _widget);
		}
        return new DropSelectionWizard(_viewer, _localObject,
        		_feedbackToHandlers, _position);
	}

	/**
	 * @return
	 */
	private Shell getShell() {
		return _viewer.getControl().getShell();
	}
}
