$Id: README,v 1.44 2006/12/07 19:06:08 rconner Exp $ LEGAL STUFF ============================================================ Copyright (C) 1994-2006 by Phoenix Software Technologists, Inc. and others. All rights reserved. THIS PROGRAM AND DOCUMENTATION IS PROVIDED UNDER THE TERMS OF THE COMMON PUBLIC LICENSE ("AGREEMENT") WHICH ACCOMPANIES IT. ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THE AGREEMENT. The license text can also be found at http://opensource.org/licenses/cpl.php INTRODUCTION ============================================================ The Plexus Graph Library is a Java library with specifications and implementations for generic graph data structures. Like the Java Collections Framework, vertices and edges are containers for arbitrary user-defined objects. Plexus is maintained on SourceForge at the following URL. Please look there for the latest release and other information. http://sourceforge.net/projects/plexus/ INSTALL/BUILD ============================================================ To use Plexus, you need to download just plexus-<version>.jar and put it in your classpath. The other jars contain various portions of the plexus library, if you only need part of it. The dependencies are: plexus-core-<version>.jar - no dependencies plexus-algorithms-<version>.jar - plexus-core plexus-operations-<version>.jar - plexus-core plexus-examples-<version>.jar - plexus-core, plexus-operations Plexus requires JDK 1.5 to use. Plexus also requires Jakarta-Commons Collections (currently using version 2.1.1) and log4j (currently using version 1.2.9), which can be found at http://jakarta.apache.org/commons/collections/ http://logging.apache.org/log4j/docs/ To build Plexus, you need Ant, the excellent build tool which can be found at http://ant.apache.org/index.html Install ant and run "ant" from this directory. To build the test suite, run "ant build". To do this, you will need JUnit, which can be found at http://www.junit.org/index.htm TO DO ============================================================ - Migrate the collections sub-package implementations to be consistent with Jakarta Commons-Collections 3.2. ? Predicate tree traversal - Other views - undir of dir is easy - dir of undir is not so easy, how is the direction picked consistently? ? Make all Graphs observable - nuke Obs wrapper ? Edge.setUserObject() should fire an event when Observable Some Edge impls need to know if they've been deleted. Particularly if they send events. - An XML specification for reading/writing graphs. - More operations - complement(G): same nodes, edge set complement - transpose(G): same nodes, invert edge directions - edge diff(G,H): V(G)=V(H); E = E(G) \ E(H) - edge sum(G,H): V(G)=V(H); E = E(G) union E(H) - (disjoint) union(G,H): V(G), V(H) disjoint; V = V(G) union V(H), E = E(G) union E(H) - composition(G,H): V = V(G) x V(H); E = {(u,v),(u,w)}: u in V(G) & {v,w} in E(H) {(t,u),(v,w)}: {t,v} in E(G) & {u,w} in E(H) - conjunction(G,H): V = V(G) x V(H); E = {(t,u),(v,w)}: {t,v} in E(G) & {u,w} in E(H) ? Hyperedges - Incorporate hierarchy. This will require a fair amount of design to do it right. The simple solution of allowing nodes (or edges) to contain graphs is not the general solution I want. I want a single graph to have many possible hierarchies defined upon it at the same time. - tests!