All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ch.epfl.gsn.others.visualization.svg.SVGEdge Maven / Gradle / Ivy

The newest version!
/**
* Global Sensor Networks (GSN) Source Code
* Copyright (c) 2006-2016, Ecole Polytechnique Federale de Lausanne (EPFL)
* 
* This file is part of GSN.
* 
* GSN is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* 
* GSN is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with GSN.  If not, see .
* 
* File: src/ch/epfl/gsn/others/visualization/svg/SVGEdge.java
*
* @author Ali Salehi
*
*/

package ch.epfl.gsn.others.visualization.svg;

import java.awt.Color;
import java.util.HashMap;
import java.util.Map;

import org.antlr.stringtemplate.StringTemplate;
import org.eclipse.mylar.zest.layout.LayoutEntity;
import org.eclipse.mylar.zest.layout.LayoutRelationship;

public class SVGEdge extends AbstractSVGElement implements LayoutRelationship {
   
   private boolean              directed       = false;
   
   private double               opaque         = 1;
   
   private int                  linewidth      = 1;
   
   private Color                color          = Color.BLACK;
   
   private final StringTemplate stringTemplate = new StringTemplate(
                                                  "\n\n" );
   
   /**
    * A list of layout dependent attributes
    */
   private Map                  attributes;
   
   /**
    * The sourceEntity of this SimpleRelation.
    */
   protected LayoutEntity       sourceEntity;
   
   /**
    * The object of this SimpleRelation.
    */
   protected LayoutEntity       destinationEntity;
   
   /**
    * The weight given to this relation.
    */
   private double               weight;
   
   private Object               internalRelationshipForLayout;
   
   private Object               internalObject;
   
   /**
    * Constructor.
    * 
    * @param sourceEntity The sourceEntity of this SimpleRelation.
    * @param destinationEntity The object of this SimpleRelation.
    * @param bidirectional Determines if the sourceEntity and
    * destinationEntity are equal(exchangeable).
    * @throws NullPointerException If either sourceEntity
    *                               or
    * destinationEntity is null.
    */
   public SVGEdge ( Object o , LayoutEntity sourceEntity , LayoutEntity destinationEntity , boolean bidirectional ) {
      this( o , sourceEntity , destinationEntity , bidirectional , 1 );
   }
   
   public SVGEdge ( LayoutEntity sourceEntity , LayoutEntity destinationEntity , boolean bidirectional ) {
      this( null , sourceEntity , destinationEntity , bidirectional , 1 );
   }
   
   /**
    * Constructor.
    * 
    * @param sourceEntity The sourceEntity of this SimpleRelation.
    * @param destinationEntity The destinationEntity of this SimpleRelation.
    * destinationEntity are equal(exchangeable).
    * @throws NullPointerException If either sourceEntity
    *                               or
    * destinationEntity is null.
    */
   public SVGEdge ( Object o , LayoutEntity sourceEntity , LayoutEntity destinationEntity , boolean directed , double weight ) {
      this.destinationEntity = destinationEntity;
      this.sourceEntity = sourceEntity;
      this.weight = weight;
      this.attributes = new HashMap( );
      this.internalObject = o;
   }
   
   public void setDirected ( boolean directed ) {
      this.directed = directed;
   }
   
   public void setOpacity ( double opaqeVal ) {
      this.opaque = opaqeVal;
   }
   
   public void setWidth ( int width ) {
      this.linewidth = width;
   }
   
   public void setColor ( Color color ) {
      this.color = color;
   }
   
   public boolean isDirected ( ) {
      return directed;
   }
   
   public int getWidth ( ) {
      return linewidth;
   }
   
   public Color getColor ( ) {
      return color;
   }
   
   public void drawOn ( StringBuilder input ) {
      if ( !isEnable( ) ) return;
      printLinkStartElement( input );
      stringTemplate.reset( );
      double x1 , x2 , y1 , y2;
      x1 = sourceEntity.getXInLayout( ) + sourceEntity.getWidthInLayout( ) / 2.0;
      y1 = sourceEntity.getYInLayout( ) + sourceEntity.getHeightInLayout( ) / 2.0;
      x2 = destinationEntity.getXInLayout( ) + destinationEntity.getWidthInLayout( ) / 2.0;
      y2 = destinationEntity.getYInLayout( ) + destinationEntity.getHeightInLayout( ) / 2.0;
      stringTemplate.setAttribute( "X1" , x1 );
      stringTemplate.setAttribute( "X2" , x2 );
      stringTemplate.setAttribute( "Y1" , y1 );
      stringTemplate.setAttribute( "Y2" , y2 );
      double midX = ( x1 + x2 ) / 2.0;
      double midY = ( y1 + y2 ) / 2.0;
      stringTemplate.setAttribute( "M1" , midX );
      stringTemplate.setAttribute( "M2" , midY );
      stringTemplate.setAttribute( "WIDTH" , linewidth );
      stringTemplate.setAttribute( "COLOR" , SVGUtils.formatToHex( color.getRGB( ) ) );
      stringTemplate.setAttribute( "OPAQUE" , opaque );
      input.append( stringTemplate.toString( ) );
      printLinkEndElement( input );
   }
   
   public double getOpaqeAlpha ( ) {
      return opaque;
   }
   
   /**
    * -----------------------------------------------------------------------
    */
   
   /**
    * Gets the sourceEntity of this SimpleRelation whether the relation is
    * exchangeable or not.
    * 
    * @return The sourceEntity.
    */
   public LayoutEntity getSourceInLayout ( ) {
      return sourceEntity;
   }
   
   /**
    * Gets the destinationEntity of this SimpleRelation whether the relation is
    * exchangeable or not.
    * 
    * @return The destinationEntity of this SimpleRelation.
    */
   public LayoutEntity getDestinationInLayout ( ) {
      return destinationEntity;
   }
   
   public void setWeightInLayout ( double weight ) {
      this.weight = weight;
   }
   
   public double getWeightInLayout ( ) {
      return weight;
   }
   
   /**
    * An algorithm may require a place to store information. Use this structure
    * for that purpose.
    */
   public void setAttributeInLayout ( String attribute , Object value ) {
      attributes.put( attribute , value );
   }
   
   /**
    * An algorithm may require a place to store information. Use this structure
    * for that purpose.
    */
   public Object getAttributeInLayout ( String attribute ) {
      return attributes.get( attribute );
   }
   
   public String toString ( ) {
      String arrow = ( isBidirectionalInLayout( ) ? " <-> " : " -> " );
      return "(" + sourceEntity + arrow + destinationEntity + ")";
   }
   
   public Object getLayoutInformation ( ) {
      return internalRelationshipForLayout;
   }
   
   public void setLayoutInformation ( Object layoutInformation ) {
      this.internalRelationshipForLayout = layoutInformation;
   }
   
   public Object getObject ( ) {
      return internalObject;
   }
   
   public String getName ( ) {
      if ( internalObject != null ) return internalObject.toString( );
      return null;
   }
   
   public void setObject ( Object internalObject ) {
      this.internalObject = internalObject;
   }
   
   public void setLinewidth ( int linewidth ) {
      this.linewidth = linewidth;
   }
   
   public boolean isBidirectionalInLayout ( ) {
      return !directed;
   }
   
   public Map getAttributes ( ) {
      return attributes;
   }
   
   public void setAttributes ( Map attributes ) {
      this.attributes = attributes;
   }
   
   public LayoutEntity getSourceEntity ( ) {
      return sourceEntity;
   }
   
   public void setSourceEntity ( LayoutEntity sourceEntity ) {
      this.sourceEntity = sourceEntity;
   }
   
   public LayoutEntity getDestinationEntity ( ) {
      return destinationEntity;
   }
   
   public void setDestinationEntity ( LayoutEntity destinationEntity ) {
      this.destinationEntity = destinationEntity;
   }
   
   public Object getInternalObject ( ) {
      return internalObject;
   }
   
   public void setInternalObject ( Object internalObject ) {
      this.internalObject = internalObject;
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy