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

net.sf.javagimmicks.graph.DefaultEdgeFactory Maven / Gradle / Ivy

package net.sf.javagimmicks.graph;

import java.util.Arrays;
import java.util.Collection;

import net.sf.javagimmicks.lang.LangUtils;

public class DefaultEdgeFactory implements EdgeFactory>
{
   public DefaultEdge createEdge(Graph> graph, V source, V target)
   {
      return new DefaultEdge(graph, source, target);
   }

   public static abstract class AbstractDefaultEdge> implements Edge, DirectedEdge, WeightedEdge
   {
      protected final Graph _graph;
      protected final V _source;
      protected final V _target;

      protected double _cost = 1.0;

      public AbstractDefaultEdge(Graph graph, V source, V target)
      {
         _graph = graph;
         _source = source;
         _target = target;
      }

      public double getCost()
      {
         return _cost;
      }
      
      public void setCost(double cost)
      {
         _cost = cost;
      }
      
      public Graph getGraph()
      {
         return _graph;
      }

      public V getSourceVertex()
      {
         return _source;
      }

      public V getTargetVertex()
      {
         return _target;
      }
      
      public V getOutgoingVertex(V incoming)
      {
         if(LangUtils.equalsNullSafe(incoming, _source))
         {
            return _target;
         }
         else if(LangUtils.equalsNullSafe(incoming, _target))
         {
            return _source;
         }
         else
         {
            return null;
         }
      }
      
      public boolean connectsTo(V vertex)
      {
         return
            LangUtils.equalsNullSafe(vertex, _source) ||
            LangUtils.equalsNullSafe(vertex, _target);
      }

      @SuppressWarnings("unchecked")
      public Collection getVerteces()
      {
         return Arrays.asList(_source, _target);
      }

      public String toString(V incoming)
      {
         return new StringBuilder()
            .append(incoming)
            .append("->")
            .append(getOutgoingVertex(incoming))
            .toString();
      }

      @Override
      public String toString()
      {
         return toString(_source);
      }
   }
   
   public static class DefaultEdge extends AbstractDefaultEdge>
   {
      public DefaultEdge(Graph> graph, V source, V target)
      {
         super(graph, source, target);
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy