Package org.eclipse.zest.layouts.exampleStructures

Source Code of org.eclipse.zest.layouts.exampleStructures.SimpleRelationship

/*******************************************************************************
* Copyright 2005, CHISEL Group, University of Victoria, Victoria, BC, Canada.
* 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
*
* Contributors:
*     The Chisel Group, University of Victoria
*******************************************************************************/
package org.eclipse.zest.layouts.exampleStructures;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.zest.layouts.LayoutBendPoint;
import org.eclipse.zest.layouts.LayoutEntity;
import org.eclipse.zest.layouts.LayoutRelationship;
import org.eclipse.zest.layouts.constraints.BasicEdgeConstraints;
import org.eclipse.zest.layouts.constraints.LabelLayoutConstraint;
import org.eclipse.zest.layouts.constraints.LayoutConstraint;
import org.eclipse.zest.layouts.dataStructures.BendPoint;


/**
* The SimpleRelation class describes the relationship between
* two objects: source and destination.  Each relationship
* has a weight and direction associated with it.
* Note: The source object is at the beginning of the relationship.
* Note: The destination object is at the end of the relationship.
*
* @version  2.0
* @author   Casey Best (version 1.0 by Jingwei Wu)
* @author Chris Bennett
*/
public class SimpleRelationship implements LayoutRelationship {
 
  private static int DEFAULT_REL_LINE_WIDTH = 1;
  private static int DEFAULT_REL_LINE_WIDTH_SELECTED = DEFAULT_REL_LINE_WIDTH + 2;
  private static Object DEFAULT_RELATIONSHIP_COLOR;
  private static Object DEFAULT_RELATIONSHIP_HIGHLIGHT_COLOR; 
 
  /** The line width for this relationship. */
  private int lineWidth  = DEFAULT_REL_LINE_WIDTH;
 
  /** The color for this relationship. */
  private Object color = DEFAULT_RELATIONSHIP_COLOR;
 
  /**
   * 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;

  /**
   * If directional, algorithms must note the direction of the relationship.
   * If not directional, algorithms are to ignore which direction the relationship is going.
   * Switching the source and destination should make no difference.
   */
  protected boolean bidirectional;

  /**
   * The weight given to this relation.
   */
  private double weight;
 
  private Object internalRelationship;
 
  private LayoutBendPoint[] bendPoints;
 
  private String label;
 
  /**
   * Constructor.
   * @param sourceEntity The sourceEntity of this SimpleRelation.
   * @param destinationEntity The object of this SimpleRelation.
   * @param bidirectional Determines if the <code>sourceEntity</code> and
   * <code>destinationEntity</code> are equal(exchangeable).
   * @throws java.lang.NullPointerException If either <code>sourceEntity
   * </code> or <code>destinationEntity</code> is <code>null</code>.
   */
  public SimpleRelationship(LayoutEntity sourceEntity, LayoutEntity destinationEntity, boolean bidirectional) {
    this (sourceEntity, destinationEntity, bidirectional, 1);
  }
 
  /**
   * Constructor.
   * @param sourceEntity The sourceEntity of this SimpleRelation.
   * @param destinationEntity The destinationEntity of this SimpleRelation.
   * @param exchangeable Determines if the <code>sourceEntity</code> and
   * <code>destinationEntity</code> are equal(exchangeable).
   * @throws java.lang.NullPointerException If either <code>sourceEntity
   * </code> or <code>destinationEntity</code> is <code>null</code>.
   */
  public SimpleRelationship(LayoutEntity sourceEntity, LayoutEntity destinationEntity, boolean bidirectional, double weight) {
    this.destinationEntity = destinationEntity;
    this.sourceEntity = sourceEntity;
    this.bidirectional = bidirectional;
    this.weight = weight;
    this.attributes = new HashMap();
    this.lineWidth = DEFAULT_REL_LINE_WIDTH;
    this.color = DEFAULT_RELATIONSHIP_COLOR;
  }

  /**
   * 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;
  }

  /**
   * If bidirectional, the direction of the relationship doesn't matter.  Switching the source and destination should make no difference.
   * If not bidirectional, layout algorithms need to take into account the direction of the relationship.  The direction is based on the
   * source and destination entities.
   */
  public boolean isBidirectionalInLayout() {
    return bidirectional;
  }

  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 int getLineWidth() {
    return this.lineWidth;
  }
 
  public void setLineWidth( int lineWidth ) {
    this.lineWidth = lineWidth;
  }
 
  public void resetLineWidth() {
    this.lineWidth = DEFAULT_REL_LINE_WIDTH;
  }
 
  public static void setDefaultSize(int i) {
    DEFAULT_REL_LINE_WIDTH = i;
    DEFAULT_REL_LINE_WIDTH_SELECTED = DEFAULT_REL_LINE_WIDTH + 2;
  }
 
  public void setSelected() {
    this.color = DEFAULT_RELATIONSHIP_HIGHLIGHT_COLOR;
    this.lineWidth = DEFAULT_REL_LINE_WIDTH_SELECTED;
  }
 
  public void setUnSelected() {
    this.color = DEFAULT_RELATIONSHIP_COLOR;
    this.lineWidth = DEFAULT_REL_LINE_WIDTH;
  }
 
  public Object getColor() {
    return color;
  }
 
  public void setColor(Object c) {
    this.color = c;
  }
 
  public static void setDefaultColor(Object c) {
    DEFAULT_RELATIONSHIP_COLOR = c;
  }
 
  public static void setDefaultHighlightColor(Object c) {
    DEFAULT_RELATIONSHIP_HIGHLIGHT_COLOR = c;
  }

  /* (non-Javadoc)
   * @see ca.uvic.cs.chisel.layouts.LayoutRelationship#getInternalRelationship()
   */
  public Object getLayoutInformation() {
    return internalRelationship;
  }

  /* (non-Javadoc)
   * @see ca.uvic.cs.chisel.layouts.LayoutRelationship#setInternalRelationship(java.lang.Object)
   */
  public void setLayoutInformation(Object layoutInformation) {
    this.internalRelationship = layoutInformation;
  }


  public void setBendPoints(LayoutBendPoint[] bendPoints) {
    this.bendPoints = bendPoints;
  }
 
  public LayoutBendPoint[] getBendPoints() {
    return this.bendPoints;
  }
 
  public void clearBendPoints() {
    this.bendPoints = new BendPoint[0];
  }
 
 
  public void setDestinationInLayout(LayoutEntity destination) {
    this.destinationEntity = destination;
  }
 
  /**
   * Set the label for this edge (available in the label layout constraint).
   */ 
  public void setLabel(String label) {
    this.label = label;
  }

  /**
   * Populate the specified layout constraint
   */ 
  public void populateLayoutConstraint(LayoutConstraint constraint) {
    if ( constraint instanceof LabelLayoutConstraint ) {
      LabelLayoutConstraint labelConstraint = (LabelLayoutConstraint) constraint;
      labelConstraint.label = this.label;
      labelConstraint.pointSize = 18;
    }     
    else if ( constraint instanceof BasicEdgeConstraints ) {
      // noop
     
    }
  }

 
}
TOP

Related Classes of org.eclipse.zest.layouts.exampleStructures.SimpleRelationship

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.