/******************************************************************************* * 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.patterns.objects; import org.eclipse.emf.ecore.EClass; import org.eclipse.graphiti.features.context.IAddContext; import org.eclipse.graphiti.features.context.ICreateContext; import org.eclipse.graphiti.features.context.IMoveShapeContext; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import com.cisco.yangide.ext.model.Node; import com.cisco.yangide.ext.model.Rpc; import com.cisco.yangide.ext.model.RpcIO; import com.cisco.yangide.ext.model.editor.util.YangDiagramImageProvider; import com.cisco.yangide.ext.model.editor.util.YangModelUIUtil; import com.cisco.yangide.ext.model.editor.util.YangModelUtil; public class RpcIOPattern extends DomainObjectPattern { private boolean input; public RpcIOPattern(boolean input) { super(); this.input = input; } @Override public boolean canCreate(ICreateContext context) { Object obj = getBusinessObjectForPictogramElement(context.getTargetContainer()); return super.canCreate(context) && null != obj && YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getRpc(), obj) && check((Rpc) obj); } @Override public String getCreateImageId() { if (input) { return YangDiagramImageProvider.IMG_RPC_INPUT_PROPOSAL; } else { return YangDiagramImageProvider.IMG_RPC_OUTPUT_PROPOSAL; } } @Override public String getCreateName() { if (input) { return "input"; } else { return "output"; } } @Override public boolean isMainBusinessObjectApplicable(Object mainBusinessObject) { return super.isMainBusinessObjectApplicable(mainBusinessObject) && input == ((RpcIO) mainBusinessObject).isInput(); } @Override public EClass getObjectEClass() { return YangModelUtil.MODEL_PACKAGE.getRpcIO(); } @Override public boolean canAdd(IAddContext context) { Object obj = getBusinessObjectForPictogramElement(context.getTargetContainer()); return super.canAdd(context) && null != obj && YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getRpc(), obj) && check((Rpc) obj, context.getNewObject()); } private boolean check(Rpc rpc, Object obj) { if (YangModelUtil.checkType(YangModelUtil.MODEL_PACKAGE.getRpcIO(), obj)) { RpcIO cur = (RpcIO) obj; for (Node n : YangModelUtil.filter(rpc.getChildren(), YangModelUtil.MODEL_PACKAGE.getRpcIO())) { if (cur != n && cur.isInput() == ((RpcIO) n).isInput()) { return false; } } return true; } return false; } private boolean check(Rpc rpc) { for (Node n : YangModelUtil.filter(rpc.getChildren(), YangModelUtil.MODEL_PACKAGE.getRpcIO())) { if (input == ((RpcIO) n).isInput()) { return false; } } return true; } @Override public boolean canMoveShape(IMoveShapeContext context) { return context.getTargetContainer() == context.getSourceContainer(); } @Override public PictogramElement add(IAddContext context) { return YangModelUIUtil.drawPictogramElement(context, getFeatureProvider(), getCreateImageId(), getCreateName()); } }