package org.archstudio.archipelago2.core.outline; import java.util.List; import org.archstudio.archipelago2.AbstractArchipelago2MenuContributor; import org.archstudio.archipelago2.Archipelago2Utils; import org.archstudio.archipelago2.IArchipelago2MenuContributor; import org.archstudio.archipelago2.IArchipelago2Outline; import org.archstudio.bna.ui.IBNAMenuListener2; import org.archstudio.utils.resources.Resources; import org.archstudio.utils.resources.swt.ImageUtils; import org.archstudio.xadl3.xadlcore_3_0.Xadlcore_3_0Package; import org.archstudio.xarchadt.IXArchADTFeature; import org.archstudio.xarchadt.IXArchADTTypeMetadata; import org.archstudio.xarchadt.ObjRef; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.widgets.Display; public class CopyPasteObjRefMenuContributor extends AbstractArchipelago2MenuContributor implements IArchipelago2MenuContributor { @Override public void fillMenu(IArchipelago2Outline outline, List<Object> element, IMenuManager menuManager) { final ObjRef objRef = Archipelago2Utils.getLastObjRef(element); if (objRef != null) { // Don't delete the XADLType. if (xarch.isInstanceOf(objRef, Xadlcore_3_0Package.eNS_URI, Xadlcore_3_0Package.Literals.XADL_TYPE.getName())) { return; } IXArchADTTypeMetadata type = xarch.getTypeMetadata(objRef); menuManager.appendToGroup(IBNAMenuListener2.PRIMARY_PROPERTIES_GROUP, new Action("Delete " + type.getTypeName()) { @Override public void run() { ObjRef parentRef = xarch.getParent(objRef); String featureName = xarch.getContainingFeatureName(objRef); IXArchADTTypeMetadata type = xarch.getTypeMetadata(parentRef); IXArchADTFeature feature = type.getFeatures().get(featureName); switch (feature.getType()) { case ELEMENT_SINGLE: xarch.clear(parentRef, featureName); break; case ELEMENT_MULTIPLE: xarch.remove(parentRef, featureName, objRef); break; default: // Do nothing. break; } } @Override public ImageDescriptor getImageDescriptor() { return ImageUtils.toImageDescriptor( ImageUtils.getImage(Display.getCurrent(), Resources.DELETE_ICON_16)); } }); } } }