| /***************************************************************************** |
| * Copyright (c) 2015 CEA LIST. |
| * |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Benoit Maggi (CEA LIST) benoit.maggi@cea.fr - Initial API and implementation |
| * |
| *****************************************************************************/ |
| package org.eclipse.papyrus.sysml14.deprecatedelements; |
| |
| import java.util.Map; |
| |
| import org.eclipse.papyrus.sysml14.deprecatedelements.internal.impl.FlowPortImpl; |
| import org.eclipse.papyrus.sysml14.internal.util.IconUtil; |
| import org.eclipse.papyrus.sysml14.portsandflows.FlowDirection; |
| import org.eclipse.uml2.uml.Image; |
| import org.eclipse.uml2.uml.Interface; |
| import org.eclipse.uml2.uml.Stereotype; |
| import org.eclipse.uml2.uml.Type; |
| import org.eclipse.uml2.uml.util.UMLUtil; |
| |
| /** |
| * this class has been implemented in order to calculate derived properties of "FlowPort" stereotype see Requirement DerivedProperties Req0010 |
| * |
| */ |
| public class FlowPortCustomImpl extends FlowPortImpl implements FlowPort { |
| |
| /** |
| * Icons for displaying port orientation, |
| */ |
| private static Map<String,Image> icons; |
| |
| /** |
| * @return the icons for port orientation |
| */ |
| public static Map<String,Image> getIcons(FlowPort flowPort) { |
| if (icons == null){// for PERFORMANCE we call UMLUtil.getStereotype only once |
| Stereotype stereotype = UMLUtil.getStereotype(flowPort); |
| icons = IconUtil.getImages(stereotype); |
| } |
| return icons; |
| } |
| |
| |
| /** |
| * C.3.2.2 FlowPort : /isAtomic : Boolean (derived) This is a derived attribute (derived from the flow port’s type). |
| * For a flow port typed by a flow specification the value of this attribute is False, otherwise the value is True. |
| * |
| * @see org.eclipse.papyrus.sysml14.deprecatedelements.internal.impl.FlowPortImpl#isAtomic() |
| * |
| * @return true if atomic |
| */ |
| @Override |
| public boolean isAtomic() { |
| // The FlowPort is Atomic if it is not typed by a FlowSpecification |
| boolean isAtomic = true; |
| if (getBase_Port() != null) { |
| // Find FlowPort type |
| Type type = getBase_Port().getType(); |
| if ((type != null) && (type instanceof Interface)) { |
| FlowSpecification flowSpec = UMLUtil.getStereotypeApplication(type, FlowSpecification.class); |
| if (flowSpec != null) { |
| isAtomic = false; |
| } |
| } |
| } |
| return isAtomic; |
| } |
| |
| |
| /** |
| * Images registered in Profile are : |
| * 0 - FlowPort IN |
| * 1 - FlowPort OUT |
| * 2 - FlowPort INOUT |
| * 3 - FlowPort NA (Non Atomic) |
| * 4 (Other) - FlowPort (default, similar to INOUT) |
| * @see org.eclipse.papyrus.sysml14.deprecatedelements.internal.impl.FlowPortImpl#getIcon() |
| * |
| * @return the icon depending on the orientation of the FlowPort |
| */ |
| @Override |
| public Image getIcon() { |
| Image image = null; |
| if (getBase_Port() != null) { |
| Map<String,Image> iconList = getIcons(this); |
| switch (getDirection()) { |
| case IN: |
| image = iconList.get(getImageKey(FlowDirection.IN)); |
| break; |
| case OUT: |
| image = iconList.get(getImageKey(FlowDirection.OUT)); |
| break; |
| case INOUT: |
| image = iconList.get(getImageKey(FlowDirection.INOUT)); |
| break; |
| default: |
| image = iconList.get(getImageKey(FlowDirection.INOUT)); |
| break; |
| } |
| } |
| return image; |
| } |
| |
| private String getImageKey(FlowDirection flowDirection) { |
| return FlowPort.class.getSimpleName()+"_"+flowDirection.getName().toUpperCase();//$NON-NLS-1$ |
| } |
| |
| } |