/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. 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 * *******************************************************************************/ package com.cisco.yangide.ext.model.editor.diagram; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.graphiti.dt.IDiagramTypeProvider; import org.eclipse.graphiti.features.ICreateFeature; import org.eclipse.graphiti.features.context.IDoubleClickContext; import org.eclipse.graphiti.features.context.IPictogramElementContext; import org.eclipse.graphiti.features.custom.ICustomFeature; import org.eclipse.graphiti.palette.IPaletteCompartmentEntry; import org.eclipse.graphiti.palette.impl.ObjectCreationToolEntry; import org.eclipse.graphiti.palette.impl.PaletteCompartmentEntry; import org.eclipse.graphiti.pattern.CreateFeatureForPattern; import org.eclipse.graphiti.tb.DefaultToolBehaviorProvider; import org.eclipse.graphiti.tb.IContextButtonPadData; import com.cisco.yangide.ext.model.editor.features.DirectEditingOnDoubleClickFeature; import com.cisco.yangide.ext.model.editor.patterns.objects.DomainObjectPattern; import com.cisco.yangide.ext.model.editor.util.PropertyUtil; import com.cisco.yangide.ext.model.editor.util.YangModelUtil; public class YangDiagramToolBehaviorProvider extends DefaultToolBehaviorProvider { private List<EClass> excludeFromPalette = Arrays.asList(YangModelUtil.MODEL_PACKAGE.getListKey()); private IPaletteCompartmentEntry[] result; public YangDiagramToolBehaviorProvider(IDiagramTypeProvider diagramTypeProvider) { super(diagramTypeProvider); } @Override public IContextButtonPadData getContextButtonPad(IPictogramElementContext context) { // remove button pads over diagram elements return null; } @Override public IPaletteCompartmentEntry[] getPalette() { if (null == result) { List<IPaletteCompartmentEntry> resultList = new ArrayList<IPaletteCompartmentEntry>(); PaletteCompartmentEntry containers = new PaletteCompartmentEntry("Container", null); PaletteCompartmentEntry data = new PaletteCompartmentEntry("Data node", null); for (ICreateFeature cf : getFeatureProvider().getCreateFeatures()) { if (cf instanceof CreateFeatureForPattern && ((CreateFeatureForPattern) cf).getPattern() instanceof DomainObjectPattern) { DomainObjectPattern pattern = (DomainObjectPattern) ((CreateFeatureForPattern) cf).getPattern(); if (!excludeFromPalette.contains(pattern.getObjectEClass())) { ObjectCreationToolEntry objectCreationToolEntry = new ObjectCreationToolEntry( cf.getCreateName(), cf.getCreateDescription(), cf.getCreateImageId(), cf.getCreateLargeImageId(), cf); if (YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getContainingNode(), pattern.getObjectEClass())) { containers.getToolEntries().add(objectCreationToolEntry); } else { data.getToolEntries().add(objectCreationToolEntry); } } } } resultList.add(containers); resultList.add(data); result = resultList.toArray(new IPaletteCompartmentEntry[resultList.size()]); } return result; } @Override public ICustomFeature getDoubleClickFeature(IDoubleClickContext context) { if (PropertyUtil.isObjectShapeProp(context.getInnerPictogramElement(), PropertyUtil.EDITABLE_SHAPE)) { return new DirectEditingOnDoubleClickFeature(getFeatureProvider()); } return super.getDoubleClickFeature(context); } }