/******************************************************************************* * 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.features; import java.util.ArrayList; import java.util.List; import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.context.ICustomContext; import org.eclipse.graphiti.features.custom.AbstractCustomFeature; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import com.cisco.yangide.ext.model.Module; import com.cisco.yangide.ext.model.Node; import com.cisco.yangide.ext.model.editor.editors.ISourceModelManager; /** * @author Konstantin Zaitsev * @date Aug 19, 2014 */ public class ExtractGroupingCustomFeature extends AbstractCustomFeature { private ISourceModelManager sourceModelManager; public ExtractGroupingCustomFeature(IFeatureProvider fp, ISourceModelManager sourceModelManager) { super(fp); this.sourceModelManager = sourceModelManager; } @Override public void execute(ICustomContext context) { List<Node> nodes = new ArrayList<>(); PictogramElement[] elements = context.getPictogramElements(); for (PictogramElement element : elements) { nodes.add((Node) getBusinessObjectForPictogramElement(element)); } sourceModelManager.extractGrouping(nodes); } @Override public boolean canExecute(ICustomContext context) { PictogramElement[] elements = context.getPictogramElements(); if (elements.length == 0) { return false; } Node parent = null; for (PictogramElement element : elements) { Object obj = getBusinessObjectForPictogramElement(element); if (!(obj instanceof Node) || obj instanceof Module) { return false; } if (parent != null && ((Node) obj).getParent() != parent) { return false; } parent = ((Node) obj).getParent(); } return true; } @Override public String getName() { return "Extract Grouping..."; } }