/******************************************************************************* * Copyright 2017 Capital One Services, LLC and Bitwise, Inc. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package hydrograph.ui.graph.controller; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.DragTracker; import org.eclipse.gef.Request; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.gef.tools.ConnectionDragCreationTool; import org.eclipse.swt.graphics.Color; import hydrograph.ui.common.util.Constants; import hydrograph.ui.common.util.CustomColorRegistry; import hydrograph.ui.graph.figure.ComponentFigure; import hydrograph.ui.graph.figure.ELTColorConstants; import hydrograph.ui.graph.figure.PortFigure; import hydrograph.ui.graph.model.Component; import hydrograph.ui.graph.model.Port; import hydrograph.ui.graph.model.PortAlignmentEnum; /** * The Class PortEditPart. * * @author Bitwise */ public class PortEditPart extends AbstractGraphicalEditPart { public Port getCastedModel() { return (Port) getModel(); } @Override protected IFigure createFigure() { ComponentFigure componentFigure = ((ComponentEditPart) getParent()).getComponentFigure(); Component component = ((ComponentEditPart) getParent()).getCastedModel(); PortFigure port = null; Color borderColor = CustomColorRegistry.INSTANCE.getColorFromRegistry( ELTColorConstants.DARK_GREY_RGB[0], ELTColorConstants.DARK_GREY_RGB[1], ELTColorConstants.DARK_GREY_RGB[2]); Point portPoint = null; int height = component.getSize().height-componentFigure.getComponentLabelMargin(); int width = component.getSize().width; int margin = componentFigure.getComponentLabelMargin(); port = new PortFigure(borderColor, getCastedModel().getSequence(), getCastedModel().getNumberOfPortsOfThisType(),getCastedModel().getTerminal(), getCastedModel().getLabelOfPort(), getCastedModel().getPortAlignment()); portPoint = getPortLocation(getCastedModel().getNumberOfPortsOfThisType(), getCastedModel().getPortType(), getCastedModel().getSequence(), height, width, margin, getCastedModel().getPortAlignment()); Point tmpPoint = new Point(componentFigure.getLocation().x+portPoint.x , componentFigure.getLocation().y+portPoint.y); port.setLocation(tmpPoint); componentFigure.setAnchors(port.getAnchor()); return port; } private Point getPortLocation(int totalPortsOfThisType, String type, int sequence, int height, int width, int margin, PortAlignmentEnum portAlignment){ if (portAlignment == null) { if (StringUtils.equalsIgnoreCase(type,Constants.INPUT_SOCKET_TYPE)) portAlignment = PortAlignmentEnum.LEFT; else if (StringUtils.equalsIgnoreCase(type,Constants.OUTPUT_SOCKET_TYPE)) portAlignment = PortAlignmentEnum.RIGHT; else if (StringUtils.equalsIgnoreCase(type,Constants.UNUSED_SOCKET_TYPE)) portAlignment = PortAlignmentEnum.BOTTOM; } Point p = null ; int portOffsetFactor = totalPortsOfThisType+1; int portHeightOffset=height/portOffsetFactor; int portWidthOffset=width/portOffsetFactor; int xLocation=0, yLocation=0; if(PortAlignmentEnum.LEFT.equals(portAlignment)){ xLocation=0; yLocation=portHeightOffset*(sequence+1) - 4 + margin; }else if(PortAlignmentEnum.RIGHT.equals(portAlignment)){ xLocation=width-27; yLocation=portHeightOffset*(sequence+1) - 4 + margin; }else if (PortAlignmentEnum.BOTTOM.equals(portAlignment)){ if(totalPortsOfThisType == 1){ xLocation = 43; }else if(totalPortsOfThisType > 1){ xLocation = portWidthOffset*(sequence+1) - 6; } yLocation=height + margin - 8 - 8; } p=new Point(xLocation, yLocation); return p; } @Override protected void createEditPolicies() { // TODO Auto-generated method stub } @Override public DragTracker getDragTracker(Request request) { getViewer().select(this); return new ConnectionDragCreationTool(); } public void adjustPortFigure(Point componentLocation) { ComponentFigure componentFigure = ((ComponentEditPart) getParent()).getComponentFigure(); Component component = ((ComponentEditPart) getParent()).getCastedModel(); int height = component.getSize().height-componentFigure.getComponentLabelMargin(); int width = component.getSize().width; int margin = componentFigure.getComponentLabelMargin(); Point portPoint = getPortLocation(getCastedModel().getNumberOfPortsOfThisType(), getCastedModel().getPortType(), getCastedModel().getSequence(), height, width, margin, getCastedModel().getPortAlignment()); Point newPortLoc = new Point(portPoint.x+componentLocation.x, portPoint.y+componentLocation.y); getFigure().setLocation(newPortLoc); } public PortFigure getPortFigure() { return (PortFigure) getFigure(); } @Override protected void refreshVisuals() { super.refreshVisuals(); ((PortFigure)getFigure()).setLabelOfPort(getCastedModel().getLabelOfPort()); for(Entry<String,Long> entry : getCastedModel().getParent().getWatcherTerminals().entrySet()) { if(StringUtils.equals(getCastedModel().getTerminal(),entry.getKey())) { getCastedModel().setWatched(true); getPortFigure().setWatched(true); getPortFigure().repaint(); } } getFigure().repaint(); } @Override public void deactivate() { if (isActive()) { getPortFigure().disposeFont(); super.deactivate(); } } }