blob: 50085c069082ff85a6196a8254ad1824a6990d64 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 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 implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.ui.actions;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.UnexecutableCommand;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.command.CommandParameter;
import org.eclipse.emf.edit.command.CreateChildCommand;
import org.eclipse.emf.edit.command.CreateChildCommand.Helper;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.ui.action.StaticSelectionCommandAction;
import org.eclipse.epf.authoring.ui.AuthoringUIPlugin;
import org.eclipse.epf.library.edit.process.command.CreateProcessComponentCommand;
import org.eclipse.epf.library.edit.util.PracticePropUtil;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.library.ui.actions.LibraryLockingOperationRunner;
import org.eclipse.epf.uma.Practice;
import org.eclipse.epf.uma.ProcessComponent;
import org.eclipse.epf.uma.util.UserDefinedTypeMeta;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
/**
* Method Create Child action.
*
* @author Phong Nguyen Le
* @since 1.0
*/
public final class MethodCreateChildAction extends StaticSelectionCommandAction {
/**
* This describes the child to be created.
*/
protected Object descriptor;
/**
* This constructs an instance of an action that creates a child specified
* by <code>descriptor</code> for the single object in the
* <code>selection</code>.
*/
public MethodCreateChildAction(EditingDomain editingDomain,
ISelection selection, Object descriptor) {
super();
this.editingDomain = editingDomain;
this.descriptor = descriptor;
configureAction(selection);
}
/**
* This creates the command for {@link
* StaticSelectionCommandAction#createActionCommand}.
*/
protected Command createActionCommand(EditingDomain editingDomain,
Collection collection) {
if (collection.size() == 1) {
Object owner = collection.iterator().next();
Command cmd = null;
if (descriptor instanceof CommandParameter
&& ((CommandParameter) descriptor).getValue() instanceof ProcessComponent) {
CommandParameter newChildParameter = (CommandParameter) descriptor;
CreateChildCommand.Helper helper = (Helper) ((AdapterFactoryEditingDomain)editingDomain).getAdapterFactory().adapt(owner, IEditingDomainItemProvider.class);
// for (Iterator iter = ((EObject) owner).eAdapters().iterator(); iter
// .hasNext();) {
// Object o = iter.next();
// if (o instanceof ProcessPackageItemProvider) {
// helper = (ProcessPackageItemProvider) o;
// break;
// }
// }
cmd = new CreateProcessComponentCommand(editingDomain,
(EObject) owner, newChildParameter
.getEStructuralFeature(), newChildParameter
.getValue(), newChildParameter.getIndex(),
collection, helper) {
};
} else {
cmd = CreateChildCommand.create(editingDomain, owner,
descriptor, collection);
}
if (isUserDefinedType()) {
return new CreateMethodElementCommand(cmd) {
public String getText() {
String name = getNameForUserDefinedType();
if (name != null) {
return name;
} else {
return super.getText();
}
}
public Object getImage() {
ImageDescriptor img = getImageForUserDefinedType();
if (img != null) {
return img;
} else {
return super.getImage();
}
}
};
} else {
return new CreateMethodElementCommand(cmd);
}
}
return UnexecutableCommand.INSTANCE;
}
private void superRun() {
super.run();
}
/**
* @see org.eclipse.emf.edit.ui.action.StaticSelectionCommandAction#run()
*/
public void run() {
LibraryLockingOperationRunner runner = new LibraryLockingOperationRunner();
runner.run(new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
superRun();
}
});
}
private boolean isUserDefinedType() {
try {
if (descriptor instanceof CommandParameter
&& ((CommandParameter) descriptor).getValue() instanceof Practice) {
Practice prac = (Practice)((CommandParameter) descriptor).getValue();
UserDefinedTypeMeta udtMeta = PracticePropUtil.getPracticePropUtil().getUtdData(prac);
if (udtMeta != null) {
return true;
}
}
} catch (Exception e) {
AuthoringUIPlugin.getDefault().getLogger().logError(e);
}
return false;
}
private String getNameForUserDefinedType() {
try {
if (isUserDefinedType()) {
Practice prac = (Practice)((CommandParameter) descriptor).getValue();
UserDefinedTypeMeta udtMeta = PracticePropUtil.getPracticePropUtil().getUtdData(prac);
return udtMeta.getRteNameMap().get(UserDefinedTypeMeta._typeName);
}
} catch (Exception e) {
AuthoringUIPlugin.getDefault().getLogger().logError(e);
}
return null;
}
private ImageDescriptor getImageForUserDefinedType() {
if (isUserDefinedType()) {
Practice prac = (Practice) ((CommandParameter) descriptor).getValue();
return TngUtil.getImageForUdt(prac);
}
return null;
}
}