[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] fenfire/org/fenfire/loom Cursor.java Cursor.tes...
From: |
Benja Fallenstein |
Subject: |
[Gzz-commits] fenfire/org/fenfire/loom Cursor.java Cursor.tes... |
Date: |
Fri, 07 Mar 2003 15:48:21 -0500 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Changes by: Benja Fallenstein <address@hidden> 03/03/07 15:48:14
Modified files:
org/fenfire/loom: Cursor.java Cursor.test Loom.java
SimpleView.test WheelView.test
Added files:
org/fenfire/loom: StatementSelector.java
Log message:
refactor
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/loom/StatementSelector.java?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/loom/Cursor.java.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/loom/Cursor.test.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/loom/Loom.java.diff?tr1=1.11&tr2=1.12&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/loom/SimpleView.test.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/loom/WheelView.test.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/loom/Cursor.java
diff -u fenfire/org/fenfire/loom/Cursor.java:1.5
fenfire/org/fenfire/loom/Cursor.java:1.6
--- fenfire/org/fenfire/loom/Cursor.java:1.5 Wed Mar 5 12:12:40 2003
+++ fenfire/org/fenfire/loom/Cursor.java Fri Mar 7 15:48:08 2003
@@ -30,7 +30,7 @@
import com.hp.hpl.mesa.rdf.jena.model.*;
/** A Loom cursor position in an RDF graph.
- * Currently a focus and a rotation, as handed to a view.
+ * Currently a focus and a rotation. The rotation is a number.
* Not stored in the structure.
*/
public class Cursor {
@@ -46,51 +46,99 @@
public int rotation;
/** The comparator used to order statements by subject.
- * The vertical order of object nodes
+ * The vertical order of subject nodes
* is determined by this Comparator.
*/
protected Comparator subjOrder;
/** The comparator used to order statements by object.
- * The vertical order of subject nodes
+ * The vertical order of object nodes
* is determined by this Comparator.
*/
protected Comparator objOrder;
+ /** The statement selector used to choose which connections
+ * of a node to show.
+ */
+ protected StatementSelector statementSelector;
+
/** Create a new cursor without giving it a position yet.
*/
- public Cursor(Comparator subjOrder, Comparator objOrder) {
+ public Cursor(Comparator subjOrder, Comparator objOrder,
+ StatementSelector statementSelector) {
this.subjOrder = subjOrder;
this.objOrder = objOrder;
+ this.statementSelector = statementSelector;
}
- /** Create a new cursor and give it a position.
+ /** Create a new cursor and give it a focus.
*/
public Cursor(Comparator subjOrder, Comparator objOrder,
- Resource focus, int dir,
- RDFNode rotation) {
- this(subjOrder, objOrder);
+ StatementSelector statementSelector,
+ Resource focus) {
+ this(subjOrder, objOrder, statementSelector);
+ set(focus);
+ }
+
+ /** Create a new cursor and give it a focus and a rotation.
+ */
+ public Cursor(Comparator subjOrder, Comparator objOrder,
+ StatementSelector statementSelector,
+ Resource focus, int dir, RDFNode rotation) {
+ this(subjOrder, objOrder, statementSelector);
set(focus, dir, rotation);
}
+ public Comparator getSubjectOrder() { return subjOrder; }
+ public Comparator getObjectOrder() { return objOrder; }
+ public StatementSelector getStatementSelector() {
+ return statementSelector;
+ }
+
/** Set the position of the cursor without setting a rotation.
+ * The rotation is set to the default, zero (the 'middle').
*/
public void set(Resource focus) {
this.focus = focus;
this.rotation = 0;
}
+ /** If there <code>n</code> connections, get the index of the
+ * 'middle' connection.
+ * If there is an odd number of connections, the 'middle' one is
+ * clear. If there is an even number, the 'middle' is defined
+ * as being the one above the actual middle (which lies between
+ * two connections).
+ * <p>
+ * As usual, indices are counted starting with zero.
+ */
+ static protected int getMiddle(int n) {
+ return (n-1)/2;
+ }
+
+ /** If <code>i</code> is an index in a list of <code>n</code>
+ * connections, return the distance of <code>i</code> from
+ * the middle.
+ * A negative number is returned when <code>i</code> is below
+ * the middle. This number is used as the value of
+ * <code>rotation</code> when <code>i</code> is selected
+ * by the cursor.
+ */
+ static protected int getOffsetFromMiddle(int i, int n) {
+ return i - getMiddle(n);
+ }
+
/** Set the position of the cursor.
*/
public void set(Resource focus, int dir, RDFNode rotation) {
this.focus = focus;
SortedSet set = getConnections(dir);
- Iterator iter=set.iterator();
+ Iterator iter = set.iterator();
for(int i=0; iter.hasNext(); i++) {
Statement stmt = (Statement)iter.next();
RDFNode node = (dir<0) ? stmt.getSubject() : stmt.getObject();
if(node.equals(rotation)) {
- this.rotation = i-(set.size()-1)/2;
+ this.rotation = getOffsetFromMiddle(i, set.size());
return;
}
}
@@ -98,41 +146,19 @@
throw new NoSuchElementException("Rotation: "+rotation);
}
- /** Get <code>rotation</code> from the middle connection.
- * E.g., when there are 6 connections and the second one is selected,
+ /** Get the <code>rotation</code> from the middle connection.
+ * E.g., when there are 5 connections and the second one is selected,
* <code>rotation</code> is -1.
*/
public int getRotation() {
return rotation;
}
- /** The posward or negward connections of <code>focus</code> to show,
- * in order. XXX refactor-- we need only a subset of all properties,
- * and recursion... currently slow because we iterate though
- * ALL triples in the graph.
- * <p>
- * Returns a set of <em>statements</em>, not a set of nodes.
- */
public SortedSet getConnections(int dir) {
- try {
- SortedSet nodes = new TreeSet(dir<0 ? subjOrder : objOrder);
- StmtIterator i = focus.getModel().listStatements();
- for(; i.hasNext();) {
- Statement stmt = i.next();
- if(dir < 0) {
- if(stmt.getObject().equals(focus))
- nodes.add(stmt);
- } else {
- if(stmt.getSubject().equals(focus))
- nodes.add(stmt);
- }
- }
- i.close();
-
- return nodes;
- } catch(RDFException e) {
- throw new Error("RDFException: "+e);
- }
+ Collection c = statementSelector.getConnections(focus, dir);
+ SortedSet s = new TreeSet(dir<0 ? subjOrder : objOrder);
+ s.addAll(c);
+ return s;
}
/** Rotate the view up or down.
Index: fenfire/org/fenfire/loom/Cursor.test
diff -u fenfire/org/fenfire/loom/Cursor.test:1.6
fenfire/org/fenfire/loom/Cursor.test:1.7
--- fenfire/org/fenfire/loom/Cursor.test:1.6 Wed Mar 5 12:12:40 2003
+++ fenfire/org/fenfire/loom/Cursor.test Fri Mar 7 15:48:09 2003
@@ -38,6 +38,7 @@
subjectCmp = Cmp(lambda stmt: stmt.getSubject())
objectCmp = Cmp(lambda stmt: stmt.getObject())
+selector = gzz.loom.StatementSelector.SimpleSelector()
def list(set):
l = []; i = set.iterator()
@@ -62,8 +63,36 @@
for i in range(3,10):
n[2].addProperty(p, n[i])
- c = gzz.loom.Cursor(subjectCmp, objectCmp)
+ c = gzz.loom.Cursor(subjectCmp, objectCmp, selector)
+
+def testConstructors():
+ sc, oc, sel = subjectCmp, objectCmp, selector
+
+ c = gzz.loom.Cursor(sc,oc,sel)
+ assert (c.getSubjectOrder(), c.getObjectOrder(),
+ c.getStatementSelector()) == (sc, oc, sel)
+ assert c.focus is None
+ assert c.rotation == 0
+
+ c = gzz.loom.Cursor(sc,oc,sel,n[2])
+ assert (c.getSubjectOrder(), c.getObjectOrder(),
+ c.getStatementSelector()) == (sc, oc, sel)
+ assert c.focus == n[2]
+ assert c.rotation == 0
+
+ c = gzz.loom.Cursor(sc,oc,sel,n[2],1,n[8])
+ assert (c.getSubjectOrder(), c.getObjectOrder(),
+ c.getStatementSelector()) == (sc, oc, sel)
+ assert c.focus == n[2]
+ assert c.rotation == 2
+
+ c = gzz.loom.Cursor(sc,oc,sel,n[2],-1,n[1])
+ assert (c.getSubjectOrder(), c.getObjectOrder(),
+ c.getStatementSelector()) == (sc, oc, sel)
+ assert c.focus == n[2]
+ assert c.rotation == 0
+
def testGetConnections():
n[6].addProperty(p, n[1])
Index: fenfire/org/fenfire/loom/Loom.java
diff -u fenfire/org/fenfire/loom/Loom.java:1.11
fenfire/org/fenfire/loom/Loom.java:1.12
--- fenfire/org/fenfire/loom/Loom.java:1.11 Wed Mar 5 12:12:40 2003
+++ fenfire/org/fenfire/loom/Loom.java Fri Mar 7 15:48:09 2003
@@ -108,6 +108,7 @@
final Cursor cursor =
new Cursor(subjOrder, objOrder,
+ new StatementSelector.SimpleSelector(),
stmt.getSubject(), 1, stmt.getObject());
final TextStyle style = api.getTextStyle("Serif", 0, 12);
@@ -182,11 +183,11 @@
public void keystroke(String s) {
System.out.println("Keystroke: "+s);
- if(s.equals("Up"))
+ if(s.equals("m") || s.equals("n") || s.equals("o"))
cursor.rotate(-1);
- else if(s.equals("Down"))
+ else if(s.equals(".") || s.equals("u"))
cursor.rotate(1);
- else if(s.equals("Left")) {
+ else if(s.equals("j")) {
RDFNode node = cursor.getRotationNode(-1);
if(node == null || !(node instanceof Resource)) return;
lastFocus = new NodeView.Nodespec(cursor.focus);
@@ -197,7 +198,7 @@
new NodeView.Nodespec(stmt.getSubject(),
stmt.getPredicate(), -1);
cursor.move(-1);
- } else if(s.equals("Right")) {
+ } else if(s.equals("l")) {
RDFNode node = cursor.getRotationNode(1);
if(node == null || !(node instanceof Resource)) return;
lastFocus = new NodeView.Nodespec(cursor.focus);
Index: fenfire/org/fenfire/loom/SimpleView.test
diff -u fenfire/org/fenfire/loom/SimpleView.test:1.7
fenfire/org/fenfire/loom/SimpleView.test:1.8
--- fenfire/org/fenfire/loom/SimpleView.test:1.7 Tue Mar 4 11:49:25 2003
+++ fenfire/org/fenfire/loom/SimpleView.test Fri Mar 7 15:48:10 2003
@@ -67,7 +67,8 @@
vs = getvs()
cursor = gzz.loom.Cursor(Cmp(lambda stmt: stmt.getSubject()),
- Cmp(lambda stmt: stmt.getObject()))
+ Cmp(lambda stmt: stmt.getObject()),
+ gzz.loom.StatementSelector.SimpleSelector())
cursor.set(r)
view.render(vs, 0, cursor)
@@ -98,6 +99,7 @@
vs = getvs()
cursor = gzz.loom.Cursor(Cmp(lambda stmt: stmt.getSubject()),
Cmp(lambda stmt: stmt.getObject()),
+ gzz.loom.StatementSelector.SimpleSelector(),
r, 1, s)
assert cursor.rotation == 0
view.render(vs, 0, cursor)
Index: fenfire/org/fenfire/loom/WheelView.test
diff -u fenfire/org/fenfire/loom/WheelView.test:1.7
fenfire/org/fenfire/loom/WheelView.test:1.8
--- fenfire/org/fenfire/loom/WheelView.test:1.7 Tue Mar 4 11:49:25 2003
+++ fenfire/org/fenfire/loom/WheelView.test Fri Mar 7 15:48:11 2003
@@ -105,6 +105,7 @@
vs = getvs()
cursor = gzz.loom.Cursor(Cmp(lambda stmt: stmt.getSubject()),
Cmp(lambda stmt: stmt.getObject()),
+ gzz.loom.StatementSelector.SimpleSelector(),
r, 1, s)
assert cursor.rotation == 0
view.render(vs, 0, cursor)