blob: d70eed4756c5edcf0df9ecd7506b6383e162b3e7 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2010 SAP AG.
* 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:
* Stefan Dimov - initial API, implementation and documentation
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.jpt.jpadiagrameditor.ui.internal.provider;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.graphiti.dt.IDiagramTypeProvider;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.ICustomContext;
import org.eclipse.graphiti.features.context.IDoubleClickContext;
import org.eclipse.graphiti.features.context.IPictogramElementContext;
import org.eclipse.graphiti.features.context.impl.CreateContext;
import org.eclipse.graphiti.features.context.impl.CustomContext;
import org.eclipse.graphiti.features.context.impl.DeleteContext;
import org.eclipse.graphiti.features.context.impl.RemoveContext;
import org.eclipse.graphiti.features.custom.ICustomFeature;
import org.eclipse.graphiti.internal.features.context.impl.base.PictogramElementContext;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.algorithms.Rectangle;
import org.eclipse.graphiti.mm.algorithms.Text;
import org.eclipse.graphiti.mm.algorithms.styles.Font;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.Shape;
import org.eclipse.graphiti.palette.IPaletteCompartmentEntry;
import org.eclipse.graphiti.palette.IToolEntry;
import org.eclipse.graphiti.palette.impl.PaletteCompartmentEntry;
import org.eclipse.graphiti.platform.IPlatformImageConstants;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.tb.ContextButtonEntry;
import org.eclipse.graphiti.tb.ContextEntryHelper;
import org.eclipse.graphiti.tb.ContextMenuEntry;
import org.eclipse.graphiti.tb.DefaultToolBehaviorProvider;
import org.eclipse.graphiti.tb.IContextButtonEntry;
import org.eclipse.graphiti.tb.IContextButtonPadData;
import org.eclipse.graphiti.tb.IContextMenuEntry;
import org.eclipse.graphiti.tb.IDecorator;
import org.eclipse.graphiti.tb.ImageDecorator;
import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;
import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.JPADiagramEditorPlugin;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.facade.EclipseFacade;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.AddAllEntitiesFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickAddAttributeButtonFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ClickRemoveAttributeButtonFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.CollapseAllEntitiesFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.CollapseCompartmentShapeFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.CollapseEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.DeleteJPAEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.DiscardAndRemoveAllEntitiesFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ExpandAllEntitiesFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ExpandCompartmentShapeFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.ExpandEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.MoveEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.OpenJPADetailsViewFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.OpenMiniatureViewFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.RefactorAttributeTypeFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.RemoveAndSaveEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.RemoveJPAEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.RenameEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.RestoreEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.SaveAndRemoveAllEntitiesFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.feature.SaveEntityFeature;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.i18n.JPAEditorMessages;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.modelintegration.ui.JPAEditorMatchingStrategy;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.GraphicsUpdater;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.IEclipseFacade;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorConstants;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorUtil;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.JPAEditorConstants.ShapeType;
import org.eclipse.ui.PartInitException;
@SuppressWarnings("restriction")
public class JPAEditorToolBehaviorProvider extends DefaultToolBehaviorProvider {
private IEclipseFacade facade;
public JPAEditorToolBehaviorProvider(IDiagramTypeProvider dtp) {
this(dtp, EclipseFacade.INSTANCE);
}
public JPAEditorToolBehaviorProvider(IDiagramTypeProvider dtp, IEclipseFacade eclipseFacade) {
super(dtp);
this.facade = eclipseFacade;
}
@Override
public IContextButtonPadData getContextButtonPad(IPictogramElementContext context) {
IContextButtonPadData data = super.getContextButtonPad(context);
ContainerShape cs = null;
PictogramElement pe = ((PictogramElementContext) context).getPictogramElement();
Object ob = getFeatureProvider().getBusinessObjectForPictogramElement(pe);
if (ob == null){
return null;
}
if (pe instanceof ContainerShape) {
cs = (ContainerShape)pe;
GraphicsAlgorithm ga = cs.getGraphicsAlgorithm();
if (ga instanceof Rectangle) {
List<GraphicsAlgorithm> gas = ((Rectangle)ga).getGraphicsAlgorithmChildren();
if ((gas.size() > 0) && (gas.get(0) instanceof Text)) {
setGenericContextButtons(data, pe, 0);
ClickRemoveAttributeButtonFeature feat = getConcreteFeatureProvider()
.getClickRemoveAttributeButtonFeature();
DeleteContext delCtx = new DeleteContext(cs);
ContextButtonEntry btn = new ContextButtonEntry(feat, delCtx);
btn.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteAttributeButtonlabel);
btn.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteAttributeButtonDescription);
btn.setIconId(IPlatformImageConstants.IMG_EDIT_DELETE);
data.getDomainSpecificContextButtons().add(btn);
return data;
}
}
} else {
return data;
}
setGenericContextButtons(data, pe, CONTEXT_BUTTON_DELETE
| CONTEXT_BUTTON_REMOVE);
List<IContextButtonEntry> buttons = data.getGenericContextButtons();
Iterator<IContextButtonEntry> btnsIt = buttons.iterator();
while (btnsIt.hasNext()) {
IContextButtonEntry button = btnsIt.next();
if (button.getFeature() instanceof RemoveJPAEntityFeature) {
button.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeEntityFromDiagramButtonLabel);
button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeEntityFromDiagramButtonDescription);
} else if (button.getFeature() instanceof DeleteJPAEntityFeature) {
button.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteEntityFromModelButtonLabel);
button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_deleteEntityFromModelButtonDescription);
}
}
ContextButtonEntry button = null;
if (context instanceof PictogramElementContext) {
ClickAddAttributeButtonFeature feature = getConcreteFeatureProvider().getClickAddAttributeButtonFeature();
CreateContext createCtx = new CreateContext();
createCtx.setTargetContainer(cs);
button = new ContextButtonEntry(feature, createCtx);
button.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_createAttributeButtonlabel);
button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_createAttributeButtonDescription);
button.setIconId(JPAEditorImageProvider.ADD_ATTRIBUTE);
data.getDomainSpecificContextButtons().add(button);
PictogramElementContext c = (PictogramElementContext) context;
RemoveAndSaveEntityFeature ft2 = new RemoveAndSaveEntityFeature(getFeatureProvider());
RemoveContext remCtx = new RemoveContext(c.getPictogramElement());
button = new ContextButtonEntry(ft2, remCtx);
button.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAndSaveButtonText);
button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAndSaveButtonDescription);
button.setIconId(JPAEditorImageProvider.ICON_SAVE_AND_REMOVE);
data.getDomainSpecificContextButtons().add(button);
SaveEntityFeature ft = new SaveEntityFeature(getConcreteFeatureProvider());
CustomContext ctx = new CustomContext();
ctx.setPictogramElements(new PictogramElement[] { c.getPictogramElement() });
button = new ContextButtonEntry(ft, ctx);
button.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_saveButtonText);
button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_saveButtonDescription);
button.setIconId(JPAEditorImageProvider.ICON_SAVE);
data.getDomainSpecificContextButtons().add(button);
RestoreEntityFeature ft1 = new RestoreEntityFeature(getConcreteFeatureProvider());
ctx = new CustomContext();
ctx.setPictogramElements(new PictogramElement[] { c.getPictogramElement() });
button = new ContextButtonEntry(ft1, ctx);
button.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_restoreButtonText);
button.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_restoreButtonDescription);
button.setIconId(JPAEditorImageProvider.ICON_RESTORE);
data.getDomainSpecificContextButtons().add(button);
ctx = new CustomContext(new PictogramElement[] { pe });
IFeatureProvider featureProvider = getFeatureProvider();
ICustomFeature[] customFeatures = featureProvider.getCustomFeatures(ctx);
int featureCount = customFeatures.length;
for (int i = 0; i < featureCount; i++) {
ICustomFeature customFeature = customFeatures[i];
if (customFeature.isAvailable(ctx)) {
if ((customFeature instanceof CollapseEntityFeature)) {
IContextButtonEntry contextButton = ContextEntryHelper
.createCollapseContextButton(true, customFeature, ctx);
data.setCollapseContextButton(contextButton);
} else if ((customFeature instanceof ExpandEntityFeature)) {
IContextButtonEntry contextButton = ContextEntryHelper
.createCollapseContextButton(false, customFeature, ctx);
data.setCollapseContextButton(contextButton);
}
}
}
}
return data;
}
@Override
public IPaletteCompartmentEntry[] getPalette() {
List<IPaletteCompartmentEntry> ret =
new ArrayList<IPaletteCompartmentEntry>();
IPaletteCompartmentEntry[] superCompartments =
super.getPalette();
for (int i = 0; i < superCompartments.length; i++) {
String newLabel = (superCompartments[i].getLabel().equals("Objects") ? //$NON-NLS-1$
JPAEditorMessages.PaletteCompartment_Objects :
JPAEditorMessages.PaletteCompartment_Connections);
PaletteCompartmentEntry entry = new PaletteCompartmentEntry(newLabel, superCompartments[i].getIconId());
List<IToolEntry> lst = superCompartments[i].getToolEntries();
Iterator<IToolEntry> it = lst.iterator();
while(it.hasNext()) {
entry.addToolEntry(it.next());
}
ret.add(entry);
}
IPaletteCompartmentEntry en = ret.get(0);
ret.set(0, ret.get(1));
ret.set(1, en);
return ret.toArray(new IPaletteCompartmentEntry[ret.size()]);
}
@Override
public IDecorator[] getDecorators(PictogramElement pe) {
IFeatureProvider featureProvider = getFeatureProvider();
Object bo = featureProvider.getBusinessObjectForPictogramElement(pe);
if (bo instanceof JavaPersistentType) {
JavaPersistentType persistentType = (JavaPersistentType) bo;
IFile file = (IFile) persistentType.getResource();
if(!file.exists()){
return new IDecorator[0];
}
IMarker[] markers = new IMarker[0];
try {
markers = file.findMarkers(null, true, IResource.DEPTH_INFINITE);
IDecorator[] result = new IDecorator[1];
if (markers.length == 0)
return super.getDecorators(pe);
IMarker marker = getHighestPrioMarker(markers);
ImageDecorator imageRenderingDecorator = createDecoratorFromMarker(marker);
if (imageRenderingDecorator != null) {
imageRenderingDecorator.setX(5 * (pe.getGraphicsAlgorithm().getWidth() / 6));
imageRenderingDecorator.setY(5 * (pe.getGraphicsAlgorithm().getHeight() / 6));
result[0] = imageRenderingDecorator;
}
if (result[0] != null)
return result;
} catch (CoreException e) {
JPADiagramEditorPlugin.getDefault().getLog().log(e.getStatus());
}
}
return super.getDecorators(pe);
}
private IMarker getHighestPrioMarker(IMarker[] markers) {
IMarker result = markers[0];
for (IMarker marker : markers) {
try {
final Integer resultSeverity = (Integer) result.getAttribute(IMarker.SEVERITY);
if (resultSeverity == null)
continue;
if (IMarker.SEVERITY_ERROR == resultSeverity)
// return the first error marker
break;
Integer markerSeverity = (Integer) marker.getAttribute(IMarker.SEVERITY);
if ((markerSeverity != null) && (markerSeverity > resultSeverity))
result = marker;
} catch (CoreException e) {
JPADiagramEditorPlugin.getDefault().getLog().log(e.getStatus());
continue;
}
}
return result;
}
private ImageDecorator createDecoratorFromMarker(IMarker marker) {
try {
Integer severity = (Integer) marker.getAttribute(IMarker.SEVERITY);
String decoratorType = IPlatformImageConstants.IMG_ECLIPSE_INFORMATION_TSK;
if (severity != null) {
switch (severity) {
case 0:
decoratorType = IPlatformImageConstants.IMG_ECLIPSE_INFORMATION_TSK;
case 1:
decoratorType = IPlatformImageConstants.IMG_ECLIPSE_WARNING_TSK;
break;
case 2:
decoratorType = IPlatformImageConstants.IMG_ECLIPSE_ERROR_TSK;
break;
}
ImageDecorator imageRenderingDecorator = new ImageDecorator(decoratorType);
imageRenderingDecorator.setMessage((String) marker.getAttribute(IMarker.MESSAGE));
return imageRenderingDecorator;
}
return null;
} catch (CoreException e) {
JPADiagramEditorPlugin.getDefault().getLog().log(e.getStatus());
return null;
}
}
public String getToolTip(GraphicsAlgorithm ga) {
PictogramElement pe = ga.getPictogramElement();
if (!(ga instanceof Rectangle))
return null;
List<GraphicsAlgorithm> ch = ga.getGraphicsAlgorithmChildren();
if ((ch == null) || (ch.size() == 0))
return null;
ga = ch.get(0);
if (!(ga instanceof Text))
return null;
Font f = ((Text)ga).getFont();
if (f == null)
return ""; //$NON-NLS-1$
if(f.isItalic()){
return getToolTipForCompartmentShape(ga);
}
Object bo = getFeatureProvider().getBusinessObjectForPictogramElement(pe);
if (bo != null) {
if (bo instanceof JavaPersistentType) {
String superPersistentTypeName = null;
if (((JavaPersistentType) bo).getSuperPersistentType() != null) {
superPersistentTypeName = ((JavaPersistentType) bo).getSuperPersistentType().getName();
}
return JPAEditorUtil.getTooltipText((JavaPersistentType)bo, superPersistentTypeName);
} else {
if (bo instanceof JavaPersistentAttribute) {
return JPAEditorUtil.getTooltipText((JavaPersistentAttribute)bo);
}
}
}
if (!(pe instanceof Shape))
return null;
Shape sh = (Shape)pe;
ContainerShape csh = sh.getContainer();
if (csh == null)
return null;
bo = getFeatureProvider().getBusinessObjectForPictogramElement(csh);
if (bo instanceof JavaPersistentType) {
String superPersistentTypeName = null;
if (((JavaPersistentType) bo).getSuperPersistentType() != null) {
superPersistentTypeName = ((JavaPersistentType) bo)
.getSuperPersistentType().getName();
}
return JPAEditorUtil.getTooltipText((JavaPersistentType) bo,
superPersistentTypeName);
}
return null;
}
private String getToolTipForCompartmentShape(GraphicsAlgorithm ga) {
Text txt = (Text) ga;
ContainerShape shape = (ContainerShape) Graphiti.getPeService().getActiveContainerPe(ga);
if(GraphicsUpdater.isCollapsed(shape))
return MessageFormat.format(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandCompartToolTip, txt.getValue());
return MessageFormat.format(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseCompartToolTip, txt.getValue());
}
protected JPAEditorFeatureProvider getConcreteFeatureProvider() {
return (JPAEditorFeatureProvider)super.getFeatureProvider();
}
@Override
public IContextMenuEntry[] getContextMenu(ICustomContext context) {
ICustomContext customContext = (ICustomContext)context;
PictogramElement[] pictEls = customContext.getPictogramElements();
ICustomFeature saveEntityFeature = new SaveEntityFeature(getFeatureProvider());
ContextMenuEntry saveEntityMenuItem = new ContextMenuEntry(saveEntityFeature, context);
saveEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_saveMenuItem);
saveEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_saveMenuItemDescr);
saveEntityMenuItem.setSubmenu(false);
ICustomFeature restoreEntityFeature = new RestoreEntityFeature(getFeatureProvider());
ContextMenuEntry restoreEntityMenuItem = new ContextMenuEntry(restoreEntityFeature, context);
restoreEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_discardChangesMenuItem);
restoreEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_discardChangesMenuItemDescr);
restoreEntityMenuItem.setSubmenu(false);
ICustomFeature collapseFeature = new CollapseEntityFeature(getFeatureProvider());
ContextMenuEntry collapseEntityMenuItem = new ContextMenuEntry(collapseFeature, context);
collapseEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseEntityMenuItem);
collapseEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseEntityMenuItemDescr);
collapseEntityMenuItem.setSubmenu(false);
ICustomFeature collapseAllFeature = new CollapseAllEntitiesFeature(getFeatureProvider());
ContextMenuEntry collapseAllMenuItem = new ContextMenuEntry(collapseAllFeature, context);
collapseAllMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseAllEntitiesMenuItem);
collapseAllMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseAllEntitiesMenuItemDescr);
collapseAllMenuItem.setSubmenu(false);
ICustomFeature expandFeature = new ExpandEntityFeature(getFeatureProvider());
ContextMenuEntry expandEntityMenuItem= new ContextMenuEntry(expandFeature, context);
expandEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandEntityMenuItem);
expandEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandEntitymenuItemDescr);
expandEntityMenuItem.setSubmenu(false);
ICustomFeature expandAllFeature = new ExpandAllEntitiesFeature(getFeatureProvider());
ContextMenuEntry expandAllMenuItem= new ContextMenuEntry(expandAllFeature, context);
expandAllMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandAllEntitiesMenuItem);
expandAllMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandAllEntitiesMenuItemDescr);
expandAllMenuItem.setSubmenu(false);
ICustomFeature openJPADetailsViewFeature = new OpenJPADetailsViewFeature(getFeatureProvider());
ContextMenuEntry openJPADetailsViewMenuItem = new ContextMenuEntry(openJPADetailsViewFeature, context);
openJPADetailsViewMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_openJPADetailsView);
openJPADetailsViewMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_openJPADetailsViewDesc);
openJPADetailsViewMenuItem.setSubmenu(false);
ICustomFeature openMiniatureViewFeature = new OpenMiniatureViewFeature(getFeatureProvider());
ContextMenuEntry openMiniatureViewMenuItem = new ContextMenuEntry(openMiniatureViewFeature, context);
openMiniatureViewMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_openMiniatureView);
openMiniatureViewMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_openMiniatureViewDesc);
openMiniatureViewMenuItem.setSubmenu(false);
boolean isEmpty = true;
ContextMenuEntry removeAllEntitiesSubmenu = null;
if(getDiagramTypeProvider().getDiagram().getChildren().size()!=0){
isEmpty = false;
removeAllEntitiesSubmenu = new ContextMenuEntry(null, null);
removeAllEntitiesSubmenu.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAllEntitiesMenu);
removeAllEntitiesSubmenu.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAllEntitiesMenu);
removeAllEntitiesSubmenu.setSubmenu(true);
ICustomFeature customFeature = new SaveAndRemoveAllEntitiesFeature(getFeatureProvider());
ContextMenuEntry saveAndRemovEntityMenuItem = new ContextMenuEntry(customFeature, context);
saveAndRemovEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAndSaveAllEntitiesAction);
saveAndRemovEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAndSaveAllEntitiesAction);
saveAndRemovEntityMenuItem.setSubmenu(false);
customFeature = new DiscardAndRemoveAllEntitiesFeature(getFeatureProvider());
ContextMenuEntry discardAndRemovEntityMenuItem = new ContextMenuEntry(customFeature, context);
discardAndRemovEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAndDiscardAllEntitiesAction);
discardAndRemovEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_removeAndDiscardAllEntitiesAction);
discardAndRemovEntityMenuItem.setSubmenu(false);
removeAllEntitiesSubmenu.add(saveAndRemovEntityMenuItem);
removeAllEntitiesSubmenu.add(discardAndRemovEntityMenuItem);
}
if ((pictEls == null) || (pictEls.length == 0))
return new IContextMenuEntry[] { openJPADetailsViewMenuItem };
if (pictEls[0] instanceof ContainerShape) {
Object ob = getFeatureProvider().getBusinessObjectForPictogramElement(pictEls[0]);
if (pictEls[0] instanceof Diagram) {
ICustomFeature customFeature = new AddAllEntitiesFeature(getFeatureProvider());
ContextMenuEntry showAllEntsMenuItem = new ContextMenuEntry(customFeature, context);
showAllEntsMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_showAllTheEntities);
showAllEntsMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_showAllTheEntitiesDesc);
showAllEntsMenuItem.setSubmenu(false);
if(isEmpty){
return new IContextMenuEntry[] { showAllEntsMenuItem,
collapseAllMenuItem,
expandAllMenuItem,
openJPADetailsViewMenuItem,
openMiniatureViewMenuItem};
} else {
return new IContextMenuEntry[] { showAllEntsMenuItem,
removeAllEntitiesSubmenu,
collapseAllMenuItem,
expandAllMenuItem,
openJPADetailsViewMenuItem,
openMiniatureViewMenuItem};
}
}
if((ob == null) && (pictEls[0].getGraphicsAlgorithm() instanceof Rectangle)){
ICustomFeature collapseCompartmentFeature = new CollapseCompartmentShapeFeature(getFeatureProvider());
ContextMenuEntry collapseCompartmentMenuItem = new ContextMenuEntry(collapseCompartmentFeature, context);
collapseCompartmentMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseAttrGroupMenuItem);
collapseCompartmentMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_collapseAttrGroupMenuItemDescr);
collapseCompartmentMenuItem.setSubmenu(false);
ICustomFeature expandCompartmentFeature = new ExpandCompartmentShapeFeature(getFeatureProvider());
ContextMenuEntry expandCompartmentMenuItem= new ContextMenuEntry(expandCompartmentFeature, context);
expandCompartmentMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandAttrMenuItem);
expandCompartmentMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_expandAttrMenuItemDescr);
expandCompartmentMenuItem.setSubmenu(false);
return new IContextMenuEntry[] {collapseCompartmentMenuItem, expandCompartmentMenuItem};
}
/*
//Apply Pattern menu
ICustomFeature applyPatternFeature = new ApplyPatternFeature(getFeatureProvider());
ContextMenuEntry applyPatternMenuItem = new ContextMenuEntry(applyPatternFeature, context);
applyPatternMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_applyPattern);
applyPatternMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_applyPatternDesc);
applyPatternMenuItem.setSubmenu(false);
//Apply Pattern menu
*/
ContextMenuEntry refactorClassSubmenu = new ContextMenuEntry(null, null);
refactorClassSubmenu.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorSubMenu);
refactorClassSubmenu.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorSubMenu);
refactorClassSubmenu.setSubmenu(true);
ICustomFeature customFeature = new RenameEntityFeature(getFeatureProvider());
ContextMenuEntry renameEntityMenuItem = new ContextMenuEntry(customFeature, context);
renameEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_renameEntityClass);
renameEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_renameEntityClass);
renameEntityMenuItem.setSubmenu(false);
customFeature = new MoveEntityFeature(getFeatureProvider());
ContextMenuEntry moveEntityMenuItem = new ContextMenuEntry(customFeature, context);
moveEntityMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_moveEntityClass);
moveEntityMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_moveEntityClass);
moveEntityMenuItem.setSubmenu(false);
refactorClassSubmenu.add(renameEntityMenuItem);
refactorClassSubmenu.add(moveEntityMenuItem);
String shapeType = Graphiti.getPeService().getPropertyValue(pictEls[0], JPAEditorConstants.PROP_SHAPE_TYPE);
if ((shapeType == null) || !shapeType.equals(ShapeType.ATTRIBUTE.toString()))
return new IContextMenuEntry[] { saveEntityMenuItem,
refactorClassSubmenu,
collapseEntityMenuItem,
collapseAllMenuItem,
expandEntityMenuItem,
expandAllMenuItem,
restoreEntityMenuItem,
//applyPatternMenuItem,
removeAllEntitiesSubmenu,
openJPADetailsViewMenuItem,
openMiniatureViewMenuItem};
customFeature = new RefactorAttributeTypeFeature(getFeatureProvider());
ContextMenuEntry refactorAttributeTypeMenuItem = new ContextMenuEntry(customFeature, context);
refactorAttributeTypeMenuItem.setText(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorAttributeType);
refactorAttributeTypeMenuItem.setDescription(JPAEditorMessages.JPAEditorToolBehaviorProvider_refactorAttributeTypeDesc);
refactorAttributeTypeMenuItem.setSubmenu(false);
return new IContextMenuEntry[] { refactorClassSubmenu,
refactorAttributeTypeMenuItem,
collapseAllMenuItem,
expandAllMenuItem,
//applyPatternMenuItem,
openJPADetailsViewMenuItem,
openMiniatureViewMenuItem};
}
return new IContextMenuEntry[] { removeAllEntitiesSubmenu,
collapseAllMenuItem,
expandAllMenuItem,
openJPADetailsViewMenuItem,
openMiniatureViewMenuItem};
}
@Override
public ICustomFeature getDoubleClickFeature(IDoubleClickContext context) {
PictogramElement pe = context.getPictogramElements()[0];
Object bo = getFeatureProvider().getBusinessObjectForPictogramElement(
pe);
if (bo instanceof JavaPersistentAttribute) {
JavaPersistentAttribute jpa = (JavaPersistentAttribute) bo;
IFile file = (IFile) jpa.getResource();
try {
file.setSessionProperty(new QualifiedName(null, JPAEditorMatchingStrategy.DOUBLE_CLICK), "true"); //$NON-NLS-1$
facade.getIDE().openEditor(file);
} catch (PartInitException e) {
JPADiagramEditorPlugin.logError("Cannot open editor", e); //$NON-NLS-1$
} catch (CoreException e) {
JPADiagramEditorPlugin.logError("Cannot open editor", e); //$NON-NLS-1$
}
}
if (bo instanceof JavaPersistentType) {
JavaPersistentType jpt = (JavaPersistentType) bo;
IFile file = (IFile) jpt.getResource();
try {
file.setSessionProperty(new QualifiedName(null, JPAEditorMatchingStrategy.DOUBLE_CLICK), "true"); //$NON-NLS-1$
facade.getIDE().openEditor(file);
} catch (PartInitException e) {
JPADiagramEditorPlugin.logError("Cannot open editor", e); //$NON-NLS-1$
} catch (CoreException e) {
JPADiagramEditorPlugin.logError("Cannot open editor", e); //$NON-NLS-1$
}
}
if ((bo == null) && (pe.getGraphicsAlgorithm() instanceof Rectangle)) {
ICustomContext cont = new CustomContext(
new PictogramElement[] { pe });
ContainerShape containerShape = (ContainerShape) pe;
if (GraphicsUpdater.isCollapsed(containerShape)) {
ExpandCompartmentShapeFeature feature = new ExpandCompartmentShapeFeature(
getFeatureProvider());
feature.execute(cont);
} else {
CollapseCompartmentShapeFeature feature = new CollapseCompartmentShapeFeature(
getFeatureProvider());
feature.execute(cont);
}
}
return super.getDoubleClickFeature(context);
}
}