/*******************************************************************************
 * Copyright (c) 2001, 2007 Oracle 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
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Oracle Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.itemcreation.internal;

import java.util.Collection;
import java.util.Collections;

import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.emf.common.command.Command;

/**
 * Internal super-class of all tag creation commands.
 * 
 * @author cbateman
 *
 */
public abstract class AbstractCreationCommand extends AbstractCommand implements
        ICreationCommand 
{
    public abstract void execute(); 

    public final void redo() 
    {
        throw new UnsupportedOperationException("don't use");
    }

    @Override
    public final boolean canExecute() 
    {
        return super.canExecute();
    }

    @Override
    public final boolean canUndo() {
        return super.canUndo();
    }

    @Override
    public Command chain(Command command) {
        if (command instanceof ICreationCommand)
        {
            return super.chain(command);
        }
        throw new IllegalArgumentException("command must an ICreationCommand");
    }

    @Override
    public final void dispose() 
    {
        throw new UnsupportedOperationException("don't use");
    }

    @Override
    public final Collection<?> getAffectedObjects() {
        return super.getAffectedObjects();
    }

    @Override
    public final String getDescription() 
    {
        return super.getDescription();
    }

    @Override
    public final String getLabel() 
    {
        return super.getLabel();
    }

    @Override
    public Collection<?> getResult() 
    {
        return Collections.EMPTY_LIST;
    }

    @Override
    protected abstract boolean prepare(); 

    @Override
    public final void setDescription(String description) 
    {
        super.setDescription(description);
    }

    @Override
    public final void setLabel(String label) 
    {
        super.setLabel(label);
    }

    @Override
    public final void undo() 
    {
        // for now, there is no undo
        super.undo();
    }


}
