| Line | Hits | Source |
|---|---|---|
| 1 | /* | |
| 2 | * Created on Apr 3, 2004 | |
| 3 | * | |
| 4 | * Copyright (c) 2004, the JUNG Project and the Regents of the University | |
| 5 | * of California | |
| 6 | * All rights reserved. | |
| 7 | * | |
| 8 | * This software is open-source under the BSD license; see either | |
| 9 | * "license.txt" or | |
| 10 | * http://jung.sourceforge.net/license.txt for a description. | |
| 11 | */ | |
| 12 | package edu.uci.ics.jung.utils; | |
| 13 | ||
| 14 | import java.util.Collection; | |
| 15 | ||
| 16 | import edu.uci.ics.jung.exceptions.FatalException; | |
| 17 | import edu.uci.ics.jung.graph.ArchetypeGraph; | |
| 18 | import edu.uci.ics.jung.graph.Graph; | |
| 19 | import edu.uci.ics.jung.graph.Vertex; | |
| 20 | import edu.uci.ics.jung.graph.impl.DirectedSparseVertex; | |
| 21 | import edu.uci.ics.jung.graph.impl.SimpleDirectedSparseVertex; | |
| 22 | import edu.uci.ics.jung.graph.impl.SimpleSparseVertex; | |
| 23 | import edu.uci.ics.jung.graph.impl.SimpleUndirectedSparseVertex; | |
| 24 | import edu.uci.ics.jung.graph.impl.SparseVertex; | |
| 25 | import edu.uci.ics.jung.graph.impl.UndirectedSparseVertex; | |
| 26 | ||
| 27 | ||
| 28 | /** | |
| 29 | * Generates vertices according to the edge requirements | |
| 30 | * submitted to the constructor. This implementation | |
| 31 | * respects edge direction (directed, undirected, mixed) | |
| 32 | * as well as edge multiplicity (parallel edges). See the | |
| 33 | * constructor for a list of the vertex types. | |
| 34 | * | |
| 35 | * @author Joshua O'Madadhain | |
| 36 | */ | |
| 37 | public class TypedVertexGenerator implements VertexGenerator | |
| 38 | { | |
| 39 | protected Object type; | |
| 40 | ||
| 41 | /** | |
| 42 | * if true, generated vertices won't support parallel edges | |
| 43 | */ | |
| 44 | protected boolean simple; | |
| 45 | ||
| 46 | 7 | protected final static Object UNDIRECTED = "UNDIRECTED"; |
| 47 | 7 | protected final static Object DIRECTED = "DIRECTED"; |
| 48 | 7 | protected final static Object MIXED = "MIXED"; |
| 49 | // protected final static Object TREE = "TREE"; | |
| 50 | ||
| 51 | /** | |
| 52 | * Determines the type of vertices that this generator will | |
| 53 | * create, according to the edge requirements specified | |
| 54 | * in the constructor: | |
| 55 | * | |
| 56 | * <ol> | |
| 57 | * <li/>undirected, no parallel edges - creates @link{SimpleUndirectedSparseVertex} | |
| 58 | * <li/>directed, no parallel edges - creates @link{SimpleDirectedSparseVertex} | |
| 59 | * <li/>mixed (directed and undirected), no parallel edges - creates @link{SimpleSparseVertex} | |
| 60 | * <li/>undirected, parallel edges allowed - creates @link{UndirectedSparseVertex} | |
| 61 | * <li/>directed, parallel edges allowed - creates @link{DirectedSparseVertex} | |
| 62 | * <li/>mixed, parallel edges allowed - creates @link{SparseVertex} | |
| 63 | * </ol> | |
| 64 | * | |
| 65 | */ | |
| 66 | public TypedVertexGenerator(Collection edge_requirements) | |
| 67 | 26 | { |
| 68 | 26 | if (edge_requirements.contains(Graph.UNDIRECTED_EDGE)) |
| 69 | 9 | type = UNDIRECTED; |
| 70 | 17 | else if (edge_requirements.contains(Graph.DIRECTED_EDGE)) |
| 71 | 6 | type = DIRECTED; |
| 72 | else // mixed directed/undirected graph | |
| 73 | 11 | type = MIXED; |
| 74 | ||
| 75 | 26 | simple = edge_requirements.contains(Graph.NOT_PARALLEL_EDGE); |
| 76 | ||
| 77 | // if (edge_requirements.contains(TreePredicate.getInstance())) | |
| 78 | // type = TREE; | |
| 79 | 26 | } |
| 80 | ||
| 81 | public TypedVertexGenerator(ArchetypeGraph g) | |
| 82 | { | |
| 83 | 13 | this(g.getEdgeConstraints()); |
| 84 | 13 | } |
| 85 | ||
| 86 | /** | |
| 87 | * Creates a vertex whose type is determined by the requirements | |
| 88 | * specified in the constructor. | |
| 89 | * | |
| 90 | * @see edu.uci.ics.jung.utils.VertexGenerator#create() | |
| 91 | */ | |
| 92 | public Vertex create() | |
| 93 | { | |
| 94 | 75 | if (type == UNDIRECTED) |
| 95 | { | |
| 96 | 20 | if (simple) |
| 97 | 17 | return new SimpleUndirectedSparseVertex(); |
| 98 | else | |
| 99 | 3 | return new UndirectedSparseVertex(); |
| 100 | } | |
| 101 | 55 | else if (type == DIRECTED) |
| 102 | { | |
| 103 | 6 | if (simple) |
| 104 | 5 | return new SimpleDirectedSparseVertex(); |
| 105 | else | |
| 106 | 1 | return new DirectedSparseVertex(); |
| 107 | } | |
| 108 | 49 | else if (type == MIXED) |
| 109 | { | |
| 110 | 49 | if (simple) |
| 111 | 1 | return new SimpleSparseVertex(); |
| 112 | else | |
| 113 | 48 | return new SparseVertex(); |
| 114 | } | |
| 115 | // else if (type == TREE) | |
| 116 | // { | |
| 117 | // return new SimpleSparseTreeVertex(); | |
| 118 | // } | |
| 119 | else | |
| 120 | { | |
| 121 | 0 | throw new FatalException("Internal error: unrecognized vertex type"); |
| 122 | } | |
| 123 | } | |
| 124 | } |
|
this report was generated by version 1.0.5 of jcoverage. |
copyright © 2003, jcoverage ltd. all rights reserved. |