gzz-commits
[Top][All Lists]
Advanced

[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)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]