blob: a1f94fd2b0a5f2c20bebf1e3c71c4e0fdd62ac08 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.j2ee.internal.application.common;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CommandWrapper;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.CommandActionDelegate;
import org.eclipse.emf.edit.command.CommandParameter;
import org.eclipse.emf.edit.domain.EditingDomain;
/**
* This is used to generate a command that will add a new child of appropriate type to an object.
* The implementation specifies an owner, a feature, and a helper to which the implementation is
* delegated,
*/
public class CreateChildCommand extends CommandWrapper implements CommandActionDelegate {
/**
* This is the helper interface to which child creation is delegated.
*/
public static interface Helper {
/**
* This implements the default command behavior
*/
public Object createChild(Object object);
/**
* This returns the default label
*/
public String getCreateChildText(Object object);
/**
* This returns the default help text
*/
public String getCreateChildToolTipText(Object object);
/**
* This returns the default image
*/
public Object getCreateChildImage(Object object);
}
/**
* This is the editing doman in which this command operates.
*/
protected EditingDomain domain;
/**
* This is the owner to which children will be added.
*/
protected EObject owner;
/**
* This is the feature of the owner to which children will be added.
*/
protected EReference feature;
/**
* This is the helper object to which child creation is delegated.
*/
protected CreateChildCommand.Helper helper;
/**
* This creates an instances that will add something to the owner's feature based on the
* delegate helper.
*/
public CreateChildCommand(EditingDomain domain, EObject owner, EReference feature, CreateChildCommand.Helper helper) {
super();
this.domain = domain;
this.owner = owner;
this.feature = feature;
this.helper = helper;
}
/**
* This returns a command that creates a new child of some appropriate type.
*/
public static Command create(EditingDomain domain, Object object) {
return domain.createCommand(CreateChildCommand.class, new CommandParameter(object));
}
/**
* This creates the add command that will implement this action and specifies the collection by
* delegating to {@link CreateChildCommand.Helper#getCreateChildImage}.
*/
protected Command createCommand() {
if (feature == null) {
return AddCommand.create(domain, owner, null, helper.createChild(owner));
}
return new AddCommand(domain, owner, feature, helper.createChild(owner));
}
/**
* This delegates to {@link CreateChildCommand.Helper#getCreateChildToolTipText}.
*/
public String getDescription() {
return helper.getCreateChildToolTipText(owner);
}
/**
* This delegates to {@link CreateChildCommand.Helper#getCreateChildImage}.
*/
public Object getImage() {
return helper.getCreateChildImage(owner);
}
/**
* This delegates to {@link CreateChildCommand.Helper#getCreateChildText}.
*/
public String getText() {
return helper.getCreateChildText(owner);
}
/**
* This delegates to {@link CreateChildCommand.Helper#getCreateChildToolTipText}.
*/
public String getToolTipText() {
return helper.getCreateChildToolTipText(owner);
}
}