Release Planner v1.0

Package rp.util.dom

This package implements a framework for storing objects and their relationships.

See:
          Description

Interface Summary
DOMObject.Iterator Used to iterate across DOMObjects.
DOMRelation.Endpoint.Iterator Used to iterate across the endpoints of a relationship.
DOMRelation.Instance.Iterator Used to iterate across the instances of a relationship.
 

Class Summary
DOMObject The common baseclass for all DOM objects and relations.
DOMRelation This class represents meta-information about DOM relations.
DOMRelation.Endpoint The end-point (left or right) of a relationship.
DOMRelation.Instance Baseclass for relationship instances.
DOMRelation.Left The left endpoint of a relationship.
DOMRelation.Right The right endpoint of a relationship.
 

Package rp.util.dom Description

This package implements a framework for storing objects and their relationships.

There are two main baseclasses, DOMObject and DOMRelation. DOMObject is a baseclass for any type of domain object, e.g.,

package rp.util.dom.test;
import rp.util.dom.*;
class Person extends DOMObject {
    private String name;
    public Person(String name) { this.name = name; }
    public String getName() { return name; }
}

DOMRelation is not a baseclass. Instances of DOMRelation contain meta-information about relationships, e.g.,

private static DOMRelation metainfo = new DOMRelation("IsBossOf");
static {
    metainfo.setLeftClassName("rp.util.dom.test.Manager");
    metainfo.setRightClassName("rp.util.dom.test.Employee");

    metainfo.setLeftName("manages");
    metainfo.setRightName("is managed by");

    metainfo.setLeftNumericity(1,1);  // sets min and max numericty on the left side
    metainfo.setRightNumericity(2,MANY);  // sets min and max numericty on the right side
}

DOMRelation nests a set of related classes used to implements relationship instances. These are:

In addition, various iterators classes are defined. By convention, a class 'Iterator' defined as a static contained class of a class X will iterate over objects of type X. Therefore a DOMObject.Iterator iterates over DOMObjects, a DOMRelation.Iterator iterates over DOMRelation meta-objects, a DOMRelation.Instance.Iterator iterates over instances of relations, and a DOMRelation.Endpoint.Iterator iterates over Endpoints (left or right).

Below is an example that shows how to define and establish a relationship.

package rp.util.dom.test;

import rp.util.dom.*;

class Person extends DOMObject {
    private String name;
    public Person(String name) { this.name = name; }
    public String getName() { return name; }
}

class Manager extends Person {
    public IsBossOf.Left employees = new IsBossOf.Left(this);
    public Manager(String name) { super(name); }
}

class Employee extends Person {
    public IsBossOf.Right manager = new IsBossOf.Right(this);
    public Employee(String name) { super(name); }
}

class IsBossOf extends DOMRelation.Instance {
    private static DOMRelation metainfo = new DOMRelation("IsBossOf");
    static {
	metainfo.setLeftClassName("rp.util.dom.test.Manager");
	metainfo.setRightClassName("rp.util.dom.test.Employee");

	metainfo.setLeftName("manages");
	metainfo.setRightName("is managed by");

	metainfo.setLeftNumericity(1,1);  // sets min and max numericty on the left side
	metainfo.setRightNumericity(2,MANY);  // sets min and max numericty on the right side
    }
    public static DOMRelation get() { return metainfo; }
    public        DOMRelation getRelation() { return metainfo; }

    // an example of an attribute on a relation. DOMRelation.Instance extends DOMObject.
    public java.util.Date whenStartedManaging;

    // Establish a relationship between m and e
    public IsBossOf(Manager m, Employee e) {
	super(m.employees, e.manager);
    }

    static class Left extends DOMRelation.Left {
	public Left(DOMObject o) { super(o); }
	public DOMRelation getRelation() { return metainfo; }
    }

    static class Right extends DOMRelation.Right {
	public Right(DOMObject o) { super(o); }
	public DOMRelation getRelation() { return metainfo; }
    }
}

public class Test {
    public static void main(String args[]) {
	Manager sally = new Manager("Sally");
	Employee jack = new Employee("Jack");
	Employee jill = new Employee("Jill");

	new IsBossOf(sally,jack);
	new IsBossOf(sally,jill);

	for(DOMObject.Iterator i = sally.employees.iterator(); i.hasNext(); )
	    System.out.println( ((Employee)i.next()).getName() );
    }
}


Release Planner v1.0