nodal-cvs Mailing List for NODAL (Page 8)
Status: Pre-Alpha
Brought to you by:
leei
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(69) |
Jun
(153) |
Jul
(129) |
Aug
(70) |
Sep
(94) |
Oct
(105) |
Nov
(31) |
Dec
(34) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(7) |
Feb
(40) |
Mar
(68) |
Apr
(27) |
May
(107) |
Jun
(202) |
Jul
(74) |
Aug
(5) |
Sep
(25) |
Oct
(40) |
Nov
(43) |
Dec
(73) |
2004 |
Jan
(63) |
Feb
(40) |
Mar
(104) |
Apr
(34) |
May
(33) |
Jun
(18) |
Jul
(12) |
Aug
(2) |
Sep
(24) |
Oct
(52) |
Nov
(44) |
Dec
(4) |
2005 |
Jan
(42) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(5) |
Jun
|
Jul
|
Aug
(6) |
Sep
(3) |
Oct
|
Nov
|
Dec
(1) |
2014 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
(1) |
May
|
Jun
(1) |
Jul
|
Aug
(1) |
Sep
(6) |
Oct
(5) |
Nov
(8) |
Dec
(3) |
2015 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
|
2017 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Lee I. <le...@us...> - 2004-07-17 18:02:44
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1779/org/nodal/util Modified Files: Names.java Log Message: Slightly change the way NS-specific names are printed. Index: Names.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/Names.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Names.java 28 Jun 2004 19:09:22 -0000 1.5 --- Names.java 17 Jul 2004 18:02:34 -0000 1.6 *************** *** 294,298 **** public String toString() { ! return ns.nsPath.toURLString() + "{" + str + "}"; } --- 294,298 ---- public String toString() { ! return str + "{" + ns.nsPath.toURLString() + "}"; } |
From: Lee I. <le...@us...> - 2004-07-17 18:02:07
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/nav In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1693/org/nodal/nav Modified Files: FragmentRootOp.java DirElementOp.java Link.java Log Message: Correct issues with binding Paths: o Fragment root operator refers to documentPath() o Don't try to walk up Document path at all (??) Index: DirElementOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/DirElementOp.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** DirElementOp.java 30 Mar 2004 00:56:06 -0000 1.13 --- DirElementOp.java 17 Jul 2004 18:01:58 -0000 1.14 *************** *** 8,16 **** * */ - package org.nodal.nav; import java.util.WeakHashMap; - import org.nodal.Nodal; import org.nodal.filesystem.Document; --- 8,14 ---- *************** *** 22,30 **** /** * A PathOperator that selects a subdirectory. * @author Lee Iverson <le...@ec...> */ final class DirElementOp extends PathOp { private final String name; - /** * A Map for caching property->DirElementOp bindings so that we reuse --- 20,28 ---- /** * A PathOperator that selects a subdirectory. + * * @author Lee Iverson <le...@ec...> */ final class DirElementOp extends PathOp { private final String name; /** * A Map for caching property->DirElementOp bindings so that we reuse *************** *** 59,62 **** --- 57,61 ---- return true; } + public boolean isFragmentOp() { return false; *************** *** 68,75 **** return NAME; } public String[] args() { ! return new String[] { name }; } ! public Object arg (int i) { return (i != 0 ? null : name); } --- 67,76 ---- return NAME; } + public String[] args() { ! return new String[]{name}; } ! ! public Object arg(int i) { return (i != 0 ? null : name); } *************** *** 102,106 **** return Link.create(this, DocLink.CREATOR); } - // Walk up until you find a directory... Path p1 = findDir(path); --- 103,106 ---- *************** *** 113,127 **** public Getter bindFrom(Path pg) throws Path.Failure { // Try using the Document Node structures from above... ! Getter getter = pg.parent().bind(); ! if (getter != null) { ! Node docNode = getter.getNode(); ! if (docNode != null) { ! // This is necessarily a "Document" Node. ! RecordNode record = docNode.content().asRecordNode(); ! MapNode map = record.field("root").getNode().asMapNode(); ! return map.value(name); } } - // If that doesn't work, then go directly to the Document. Document doc = Nodal.openDocument(pg); --- 113,129 ---- public Getter bindFrom(Path pg) throws Path.Failure { // Try using the Document Node structures from above... ! // No! Just open it... ! if (false) { ! Getter getter = pg.parent().bind(); ! if (getter != null) { ! Node docNode = getter.getNode(); ! if (docNode != null) { ! // This is necessarily a "Document" Node. ! RecordNode record = docNode.content().asRecordNode(); ! MapNode map = record.field("root").getNode().asMapNode(); ! return map.value(name); ! } } } // If that doesn't work, then go directly to the Document. Document doc = Nodal.openDocument(pg); *************** *** 132,135 **** } } - } \ No newline at end of file --- 134,136 ---- Index: FragmentRootOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/FragmentRootOp.java,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** FragmentRootOp.java 21 Jun 2004 20:06:20 -0000 1.24 --- FragmentRootOp.java 17 Jul 2004 18:01:58 -0000 1.25 *************** *** 42,46 **** public Getter bindFrom(Path path) throws Path.Failure { ! Getter pg = path.parent().bind(); Node docNode = pg.getNode(); if (docNode == null) { --- 42,46 ---- public Getter bindFrom(Path path) throws Path.Failure { ! Getter pg = path.documentPath().bind(); Node docNode = pg.getNode(); if (docNode == null) { Index: Link.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/Link.java,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** Link.java 21 Jun 2004 20:06:20 -0000 1.28 --- Link.java 17 Jul 2004 18:01:58 -0000 1.29 *************** *** 145,149 **** } if (!isAbsolute) { ! throw new Failure("unable to bind relative Path"); } --- 145,149 ---- } if (!isAbsolute) { ! throw new Path.Failure("unable to bind relative Path"); } *************** *** 197,201 **** * the Getter that returns our value */ ! void setBinding(Getter getter) throws Failure { if (binding != null) { throw new Path.Failure("Cannot rebind a Path to a different value."); --- 197,201 ---- * the Getter that returns our value */ ! void setBinding(Getter getter) throws Path.Failure { if (binding != null) { throw new Path.Failure("Cannot rebind a Path to a different value."); *************** *** 227,231 **** } else { Path parent = path.parent(); ! if (parent == Paths.EMPTY_PATH) { return this.apply(path.operator()); } else { --- 227,232 ---- } else { Path parent = path.parent(); ! // NEXT Fix this, parent should never be null ! if (parent == Paths.EMPTY_PATH || parent == null) { return this.apply(path.operator()); } else { |
From: Lee I. <le...@us...> - 2004-07-17 18:00:33
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/nav In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1447/org/nodal/nav Modified Files: PropertyOp.java Log Message: Have a Node property be written as its id() name. Index: PropertyOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/PropertyOp.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** PropertyOp.java 25 Mar 2004 21:52:34 -0000 1.18 --- PropertyOp.java 17 Jul 2004 18:00:25 -0000 1.19 *************** *** 53,56 **** --- 53,60 ---- public String toString() { + if (property instanceof Node) { + Node node = (Node) property; + return node.id().string(); + } return property.toString(); } |
From: Lee I. <le...@us...> - 2004-07-15 04:48:08
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19384/org/nodal/util Modified Files: FloatSeqUtil.java IntSeqUtil.java DoubleSeqUtil.java CharSeqUtil.java SeqUtil.java ShortSeqUtil.java ByteSeqUtil.java LongSeqUtil.java BooleanSeqUtil.java Log Message: Update Seq interfaces and implementations for more consistency. Have memFooSequence classes use Seq values better. Index: ShortSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/ShortSeqUtil.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** ShortSeqUtil.java 18 Mar 2004 22:51:44 -0000 1.9 --- ShortSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.10 *************** *** 43,52 **** return new ArraySeq (a); } /** * Class implementing the conversion of charAt output to Object. */ ! private abstract static ! class BaseSeq implements ShortSeq { public final SeqType type() { return SeqType.SHORT; } --- 43,67 ---- return new ArraySeq (a); } + public static final ShortSeq create (short[] a, int start) { + return new ArraySeq (a, start); + } + public static final ShortSeq create (short[] a, int start, int end) { + return new ArraySeq (a, start, end); + } + + abstract static class NumSeq extends IntSeqUtil.NumSeq implements ShortSeq { + public final short[] asShortArray() { + short[] arr = new short[size()]; + for (int i = 0; i < size(); ++i) { + arr[i] = shortAt(i); + } + return arr; + } + } /** * Class implementing the conversion of charAt output to Object. */ ! private abstract static class BaseSeq extends NumSeq { public final SeqType type() { return SeqType.SHORT; } *************** *** 55,73 **** } public final int intAt (int i) { return shortAt(i); } public final long longAt (int i) { return shortAt(i); } public final float floatAt (int i) { return shortAt(i); } public final double doubleAt (int i) { return shortAt(i); } - - public final String toString () { - StringBuffer str = new StringBuffer (); - str.append ("["); - for (int i = 0; i < size(); ++i) { - if (i > 0) { str.append (", "); } - str.append (shortAt (i)); - } - str.append ("]"); - return str.toString (); - } }; --- 70,80 ---- } + public final void appendElementAt (StringBuffer str, int i) { + str.append (shortAt (i)); + } public final int intAt (int i) { return shortAt(i); } public final long longAt (int i) { return shortAt(i); } public final float floatAt (int i) { return shortAt(i); } public final double doubleAt (int i) { return shortAt(i); } }; *************** *** 76,83 **** */ private static final class ArraySeq extends BaseSeq implements ShortSeq { private final short[] arr; ! ArraySeq (short[] a) { arr = a; } ! public final int size () { return arr.length; } ! public final short shortAt (int i) { return arr[i]; } } --- 83,94 ---- */ private static final class ArraySeq extends BaseSeq implements ShortSeq { + private final int st; + private final int len; private final short[] arr; ! ArraySeq (short[] a) { arr = a; st = 0; len = a.length; } ! ArraySeq (short[] a, int start) { arr = a; st = start; len = a.length-st; } ! ArraySeq (short[] a, int start, int end) { arr = a; st = start; len = end-st+1; } ! public final int size () { return len; } ! public final short shortAt (int i) { return arr[st+i]; } } Index: CharSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/CharSeqUtil.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** CharSeqUtil.java 18 Mar 2004 22:51:44 -0000 1.10 --- CharSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.11 *************** *** 22,26 **** public final class CharSeqUtil { /** ! * Create an CharSeq interface for an arbitrary Object. */ public static final CharSeq create (Object v) throws ConstraintFailure { --- 22,26 ---- public final class CharSeqUtil { /** ! * Create a CharSeq interface for an arbitrary Object. */ public static final CharSeq create (Object v) throws ConstraintFailure { *************** *** 49,52 **** --- 49,62 ---- /** + * Create a BooleanSeq interface for an char[] array. + * @param a an array of characters + * @param start the start index of the subarray referenced + * @param end the end index of the subarray referenced + * @return a new CharSeq representing this subarray + */ + public static final CharSeq create (char[] a, int start, int end) { + return new ArraySeq (a, start, end); + } + /** * Class implementing the conversion of charAt output to Object. */ *************** *** 58,61 **** --- 68,78 ---- return new Character (charAt (i)); } + public char[] asCharArray () { + char[] arr = new char[size()]; + for (int i = 0; i < size(); ++i) { + arr[i] = charAt(i); + } + return arr; + } public String toString () { int len = size(); *************** *** 74,81 **** class ArraySeq extends BaseSeq implements CharSeq { private final char[] arr; ! ArraySeq (char[] a) { arr = a; } ! public final int size () { return arr.length; } ! public final char charAt (int i) { return arr[i]; } ! public final String toString () { return new String(arr); } } --- 91,103 ---- class ArraySeq extends BaseSeq implements CharSeq { private final char[] arr; ! private final int st; ! private final int len; ! ArraySeq (char[] a) { arr = a; len = a.length; st = 0; } ! ArraySeq (char[] a, int start, int end) { ! arr = a; st = start; len = end-st+1; ! } ! public final int size () { return len; } ! public final char charAt (int i) { return arr[st+i]; } ! public final String toString () { return new String(arr, st, len); } } Index: DoubleSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/DoubleSeqUtil.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** DoubleSeqUtil.java 18 Mar 2004 22:51:44 -0000 1.9 --- DoubleSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.10 *************** *** 38,42 **** /** ! * Create an DoubleSeq interface for an double[] array. */ public static final DoubleSeq create (double[] a) { --- 38,42 ---- /** ! * Create a DoubleSeq interface for an double[] array. */ public static final DoubleSeq create (double[] a) { *************** *** 44,68 **** } ! /** ! * Class implementing the conversion of doubleAt output to Object. ! */ ! private abstract static ! class BaseSeq implements DoubleSeq { ! public final SeqType type() { return SeqType.DOUBLE; } ! public Object elementAt (int i) { ! return new Double (doubleAt (i)); ! } ! public final String toString () { StringBuffer str = new StringBuffer (); str.append ("["); for (int i = 0; i < size(); ++i) { if (i > 0) { str.append (", "); } ! str.append (doubleAt (i)); } str.append ("]"); return str.toString (); } }; --- 44,91 ---- } ! public static final DoubleSeq create (double[] a, int offset) { ! return new ArraySeq (a, offset); ! } ! public static final DoubleSeq create (double[] a, int start, int end) { ! return new ArraySeq (a, start, end); ! } ! abstract static class NumSeq implements DoubleSeq { ! public final double[] asDoubleArray () { ! double[] arr = new double[size()]; ! for (int i = 0; i < size(); ++i) { ! arr[i] = doubleAt(i); ! } ! return arr; ! } ! ! protected abstract void appendElementAt (StringBuffer str, int i); ! ! public String toString () { StringBuffer str = new StringBuffer (); str.append ("["); for (int i = 0; i < size(); ++i) { if (i > 0) { str.append (", "); } ! appendElementAt (str, i); } str.append ("]"); return str.toString (); } + } + + /** + * Class implementing the conversion of doubleAt output to Object. + */ + private abstract static class BaseSeq extends NumSeq { + public final SeqType type() { return SeqType.DOUBLE; } + + public Object elementAt (int i) { + return new Double (doubleAt (i)); + } + + protected final void appendElementAt (StringBuffer str, int i) { + str.append (doubleAt (i)); + } }; *************** *** 72,79 **** private static final class ArraySeq extends BaseSeq { private final double[] arr; ! ArraySeq (double[] a) { arr = a; } ! public final int size () { return arr.length; } ! public final double doubleAt (int i) { return arr[i]; } } --- 95,106 ---- private static final class ArraySeq extends BaseSeq { + private final int st; + private final int len; private final double[] arr; ! ArraySeq (double[] a) { arr = a; st = 0; len = a.length; } ! ArraySeq (double[] a, int start) { arr = a; st = start; len = a.length-start; } ! ArraySeq (double[] a, int start, int end) { arr = a; st = start; len = end-start+1; } ! public final int size () { return len; } ! public final double doubleAt (int i) { return arr[st+i]; } } Index: LongSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/LongSeqUtil.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** LongSeqUtil.java 18 Mar 2004 22:51:44 -0000 1.5 --- LongSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.6 *************** *** 7,21 **** * */ - package org.nodal.util; import java.util.Vector; - import org.nodal.Types; import org.nodal.model.*; /** ! * A utility class for providing the LongSeq interface to a variety of ! * sources. * @author Lee Iverson <le...@ec...> */ --- 7,19 ---- * */ package org.nodal.util; import java.util.Vector; import org.nodal.Types; import org.nodal.model.*; /** ! * A utility class for providing the LongSeq interface to a variety of sources. ! * * @author Lee Iverson <le...@ec...> */ *************** *** 24,38 **** * Create an LongSeq interface for an arbitrary Object. */ ! public static final LongSeq create (Object v) throws ConstraintFailure { if (v == null || v instanceof LongSeq) { return (LongSeq) v; } else if (v instanceof long[]) { ! return create ((long[]) v); } else if (v instanceof Vector) { ! return create ((Vector) v); } else if (v instanceof Number) { ! return create ((Number) v); } ! throw new ConstraintFailure ("not usable as LongSeq"); } --- 22,36 ---- * Create an LongSeq interface for an arbitrary Object. */ ! public static final LongSeq create(Object v) throws ConstraintFailure { if (v == null || v instanceof LongSeq) { return (LongSeq) v; } else if (v instanceof long[]) { ! return create((long[]) v); } else if (v instanceof Vector) { ! return create((Vector) v); } else if (v instanceof Number) { ! return create((Number) v); } ! throw new ConstraintFailure("not usable as LongSeq"); } *************** *** 40,45 **** * Create an LongSeq interface for an long[] array. */ ! public static final LongSeq create (long[] a) { ! return new ArraySeq (a); } --- 38,84 ---- * Create an LongSeq interface for an long[] array. */ ! public static final LongSeq create(long[] a) { ! return new ArraySeq(a); ! } ! ! public static final LongSeq create(long[] a, int start) { ! return new ArraySeq(a, start); ! } ! ! public static final LongSeq create(long[] a, int start, int end) { ! return new ArraySeq(a, start, end); ! } ! ! abstract static class NumSeq implements LongSeq { ! public final long[] asLongArray() { ! long[] arr = new long[size()]; ! for (int i = 0; i < size(); ++i) { ! arr[i] = longAt(i); ! } ! return arr; ! } ! ! public final double[] asDoubleArray() { ! double[] arr = new double[size()]; ! for (int i = 0; i < size(); ++i) { ! arr[i] = doubleAt(i); ! } ! return arr; ! } ! ! protected abstract void appendElementAt(StringBuffer str, int i); ! ! public String toString() { ! StringBuffer str = new StringBuffer(); ! str.append("["); ! for (int i = 0; i < size(); ++i) { ! if (i > 0) { ! str.append(", "); ! } ! appendElementAt(str, i); ! } ! str.append("]"); ! return str.toString(); ! } } *************** *** 47,67 **** * Class implementing the conversion of longAt output to Object. */ ! private abstract static ! class BaseSeq implements LongSeq { ! public final SeqType type() { return SeqType.LONG; } ! public Object elementAt (int i) { ! return new Long (longAt (i)); } ! public final String toString () { ! StringBuffer str = new StringBuffer (); ! str.append ("["); ! for (int i = 0; i < size(); ++i) { ! if (i > 0) { str.append (", "); } ! str.append (longAt (i)); ! } ! str.append ("]"); ! return str.toString (); } }; --- 86,104 ---- * Class implementing the conversion of longAt output to Object. */ ! private abstract static class BaseSeq extends NumSeq { ! public final SeqType type() { ! return SeqType.LONG; ! } ! public final double doubleAt (int i) { ! return longAt(i); ! } ! ! public Object elementAt(int i) { ! return new Long(longAt(i)); } ! public final void appendElementAt(StringBuffer str, int i) { ! str.append(longAt(i)); } }; *************** *** 71,90 **** */ private static final class ArraySeq extends BaseSeq implements LongSeq { private final long[] arr; ! ArraySeq (long[] a) { arr = a; } ! public final int size () { return arr.length; } ! public final long longAt (int i) { return arr[i]; } } /** * Create an LongSeq interface for a Vector. ! * <p>Tested on creation for validity.</p> */ ! public static final LongSeq create (Vector v) throws TypeConstraintFailure { ! for (int i = 0; i < v.size (); ++i) { ! Object ch = v.elementAt (i); ! checkType (ch); } ! return new VectorSeq (v); } --- 108,154 ---- */ private static final class ArraySeq extends BaseSeq implements LongSeq { + private final int st; + private final int len; private final long[] arr; ! ! ArraySeq(long[] a) { ! arr = a; ! st = 0; ! len = a.length; ! } ! ! ArraySeq(long[] a, int start) { ! arr = a; ! st = start; ! len = a.length - start; ! } ! ! ArraySeq(long[] a, int start, int end) { ! arr = a; ! st = start; ! len = end - start + 1; ! } ! ! public final int size() { ! return len; ! } ! ! public final long longAt(int i) { ! return arr[st + i]; ! } } /** * Create an LongSeq interface for a Vector. ! * <p> ! * Tested on creation for validity. ! * </p> */ ! public static final LongSeq create(Vector v) throws TypeConstraintFailure { ! for (int i = 0; i < v.size(); ++i) { ! Object ch = v.elementAt(i); ! checkType(ch); } ! return new VectorSeq(v); } *************** *** 94,102 **** private static final class VectorSeq extends BaseSeq implements LongSeq { private final Vector vec; ! VectorSeq (Vector v) { vec = v; } ! public final int size () { return vec.size (); } ! public final long longAt (int i) { ! Object ch = vec.elementAt (i); ! return ((Number) ch).longValue (); } } --- 158,173 ---- private static final class VectorSeq extends BaseSeq implements LongSeq { private final Vector vec; ! ! VectorSeq(Vector v) { ! vec = v; ! } ! ! public final int size() { ! return vec.size(); ! } ! ! public final long longAt(int i) { ! Object ch = vec.elementAt(i); ! return ((Number) ch).longValue(); } } *************** *** 105,110 **** * Create a LongSeq interface for a single int.. */ ! public static final LongSeq create (long i) { ! return new BareLongSeq (i); } --- 176,181 ---- * Create a LongSeq interface for a single int.. */ ! public static final LongSeq create(long i) { ! return new BareLongSeq(i); } *************** *** 114,122 **** private static final class BareLongSeq extends BaseSeq implements LongSeq { private final long val; ! BareLongSeq (long a) { val = a; } ! public final int size () { return 1; } ! public final long longAt (int i) { if (i != 0) { ! throw new ArrayIndexOutOfBoundsException (i); } return val; --- 185,200 ---- private static final class BareLongSeq extends BaseSeq implements LongSeq { private final long val; ! ! BareLongSeq(long a) { ! val = a; ! } ! ! public final int size() { ! return 1; ! } ! ! public final long longAt(int i) { if (i != 0) { ! throw new ArrayIndexOutOfBoundsException(i); } return val; *************** *** 127,133 **** * Create an LongSeq interface wrapper around Number (sequence of one). */ ! public static final LongSeq create (Number n) throws TypeConstraintFailure { ! checkType (n); ! return new BareLongSeq (n.longValue ()); } --- 205,211 ---- * Create an LongSeq interface wrapper around Number (sequence of one). */ ! public static final LongSeq create(Number n) throws TypeConstraintFailure { ! checkType(n); ! return new BareLongSeq(n.longValue()); } *************** *** 135,143 **** * Test whether Object can be used as an Integer. */ ! private static final void checkType (Object v) throws TypeConstraintFailure { ! if (Types.LONG.accepts (v)) { return; } ! throw new TypeConstraintFailure (v, Types.LONG, "not usable as long"); } }; --- 213,221 ---- * Test whether Object can be used as an Integer. */ ! private static final void checkType(Object v) throws TypeConstraintFailure { ! if (Types.LONG.accepts(v)) { return; } ! throw new TypeConstraintFailure(v, Types.LONG, "not usable as long"); } }; Index: SeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/SeqUtil.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** SeqUtil.java 18 Mar 2004 22:51:44 -0000 1.7 --- SeqUtil.java 15 Jul 2004 04:47:57 -0000 1.8 *************** *** 58,61 **** --- 58,138 ---- return new ArraySeq (a); } + public static final Seq create (Object[] a, int start) { + return new ArraySeq (a, start); + } + public static final Seq create (Object[] a, int start, int end) { + return new ArraySeq (a, start, end); + } + + public static final BooleanSeq create (boolean[] a) { + return BooleanSeqUtil.create(a); + } + public static final BooleanSeq create (boolean[] a, int start) { + return BooleanSeqUtil.create(a, start); + } + public static final BooleanSeq create (boolean[] a, int start, int end) { + return BooleanSeqUtil.create(a, start, end); + } + + public static final ByteSeq create (byte[] a) { + return ByteSeqUtil.create(a); + } + public static final ByteSeq create (byte[] a, int start) { + return ByteSeqUtil.create(a, start); + } + public static final ByteSeq create (byte[] a, int start, int end) { + return ByteSeqUtil.create(a, start, end); + } + + public static final ShortSeq create (short[] a) { + return ShortSeqUtil.create(a); + } + public static final ShortSeq create (short[] a, int start) { + return ShortSeqUtil.create(a, start); + } + public static final ShortSeq create (short[] a, int start, int end) { + return ShortSeqUtil.create(a, start, end); + } + + public static final IntSeq create (int[] a) { + return IntSeqUtil.create(a); + } + public static final IntSeq create (int[] a, int start) { + return IntSeqUtil.create(a, start); + } + public static final IntSeq create (int[] a, int start, int end) { + return IntSeqUtil.create(a, start, end); + } + + public static final LongSeq create (long[] a) { + return LongSeqUtil.create(a); + } + public static final LongSeq create (long[] a, int start) { + return LongSeqUtil.create(a, start); + } + public static final LongSeq create (long[] a, int start, int end) { + return LongSeqUtil.create(a, start, end); + } + + public static final FloatSeq create (float[] a) { + return FloatSeqUtil.create(a); + } + public static final FloatSeq create (float[] a, int start) { + return FloatSeqUtil.create(a, start); + } + public static final FloatSeq create (float[] a, int start, int end) { + return FloatSeqUtil.create(a, start, end); + } + + public static final DoubleSeq create (double[] a) { + return DoubleSeqUtil.create(a); + } + public static final DoubleSeq create (double[] a, int start) { + return DoubleSeqUtil.create(a, start); + } + public static final DoubleSeq create (double[] a, int start, int end) { + return DoubleSeqUtil.create(a, start, end); + } + /** *************** *** 63,71 **** */ private static final class ArraySeq implements Seq { private final Object[] arr; ! ArraySeq (Object[] a) { arr = a; } public final SeqType type() { return SeqType.OBJECT; } ! public final int size () { return arr.length; } ! public final Object elementAt (int i) { return arr[i]; } } --- 140,152 ---- */ private static final class ArraySeq implements Seq { + private final int st; + private final int len; private final Object[] arr; ! ArraySeq (Object[] a) { arr = a; st = 0; len = a.length-st; } ! ArraySeq (Object[] a, int start) { arr = a; st = start; len = a.length-st; } ! ArraySeq (Object[] a, int start, int end) { arr = a; st = start; len = end-start+1; } public final SeqType type() { return SeqType.OBJECT; } ! public final int size () { return len; } ! public final Object elementAt (int i) { return arr[st+i]; } } *************** *** 77,89 **** } /** * Class implementing Seq wrapper around Vector. */ private static final class VectorSeq implements Seq { private final Vector vec; ! VectorSeq (Vector v) { vec = v; } public final SeqType type() { return SeqType.OBJECT; } ! public final int size () { return vec.size (); } ! public final Object elementAt (int i) { return vec.elementAt (i); } } --- 158,182 ---- } + public static final Seq create (Vector v, int start) { + return new VectorSeq (v, start); + } + + public static final Seq create (Vector v, int start, int end) { + return new VectorSeq (v, start, end); + } + /** * Class implementing Seq wrapper around Vector. */ private static final class VectorSeq implements Seq { + private final int st; + private final int len; private final Vector vec; ! VectorSeq (Vector v) { vec = v; st = 0; len = vec.size(); } ! VectorSeq (Vector v, int start) { vec = v; st = start; len = vec.size()-st; } ! VectorSeq (Vector v, int start, int end) { vec = v; st = start; len = end-start+1; } public final SeqType type() { return SeqType.OBJECT; } ! public final int size () { return len; } ! public final Object elementAt (int i) { return vec.elementAt (st+i); } } Index: FloatSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/FloatSeqUtil.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** FloatSeqUtil.java 18 Mar 2004 22:51:44 -0000 1.9 --- FloatSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.10 *************** *** 43,52 **** return new ArraySeq (a); } /** * Class implementing the conversion of floatAt output to Object. */ ! private abstract static ! class BaseSeq implements FloatSeq { public final SeqType type() { return SeqType.FLOAT; } --- 43,67 ---- return new ArraySeq (a); } + public static final FloatSeq create (float[] a, int start) { + return new ArraySeq (a, start); + } + public static final FloatSeq create (float[] a, int start, int end) { + return new ArraySeq (a, start, end); + } + abstract static class NumSeq extends DoubleSeqUtil.NumSeq implements FloatSeq { + public final float[] asFloatArray () { + float[] arr = new float[size()]; + for (int i = 0; i < size(); ++i) { + arr[i] = floatAt(i); + } + return arr; + } + } + /** * Class implementing the conversion of floatAt output to Object. */ ! private abstract static class BaseSeq extends NumSeq { public final SeqType type() { return SeqType.FLOAT; } *************** *** 56,69 **** public final double doubleAt (int i) { return floatAt(i); } ! ! public final String toString () { ! StringBuffer str = new StringBuffer (); ! str.append ("["); ! for (int i = 0; i < size(); ++i) { ! if (i > 0) { str.append (", "); } ! str.append (floatAt (i)); ! } ! str.append ("]"); ! return str.toString (); } }; --- 71,77 ---- public final double doubleAt (int i) { return floatAt(i); } ! ! protected void appendElementAt (StringBuffer str, int i) { ! str.append (floatAt (i)); } }; *************** *** 74,80 **** private static final class ArraySeq extends BaseSeq { private final float[] arr; ! ArraySeq (float[] a) { arr = a; } ! public final int size () { return arr.length; } ! public final float floatAt (int i) { return arr[i]; } } --- 82,92 ---- private static final class ArraySeq extends BaseSeq { private final float[] arr; ! private final int st; ! private final int len; ! ArraySeq (float[] a) { arr = a; st = 0; len = a.length; } ! ArraySeq (float[] a, int start) { arr = a; st = start; len = a.length-start; } ! ArraySeq (float[] a, int start, int end) { arr = a; st = start; len = end-start+1; } ! public final int size () { return len; } ! public final float floatAt (int i) { return arr[st+i]; } } Index: ByteSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/ByteSeqUtil.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ByteSeqUtil.java 19 Mar 2004 00:24:42 -0000 1.11 --- ByteSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.12 *************** *** 38,42 **** /** ! * Create an ByteSeq interface for a subsequence of a byte[] array. */ public static final ByteSeq create(byte[] a, int len) { --- 38,42 ---- /** ! * Create an ByteSeq interface for a subsequence of a byte[] array. */ public static final ByteSeq create(byte[] a, int len) { *************** *** 45,48 **** --- 45,55 ---- /** + * Create an ByteSeq interface for a subsequence of a byte[] array. + */ + public static final ByteSeq create(byte[] a, int start, int end) { + return new ArraySeq(a, start, end); + } + + /** * Create an ByteSeq interface for an byte[] array. */ *************** *** 51,58 **** } /** * Class implementing the conversion of charAt output to Object. */ ! private abstract static class BaseSeq implements ByteSeq { public final SeqType type() { return SeqType.BYTE; } --- 58,76 ---- } + + abstract static class NumSeq extends ShortSeqUtil.NumSeq implements ByteSeq { + public final byte[] asByteArray() { + byte[] arr = new byte[size()]; + for (int i = 0; i < size(); ++i) { + arr[i] = byteAt(i); + } + return arr; + } + } + /** * Class implementing the conversion of charAt output to Object. */ ! private abstract static class BaseSeq extends NumSeq { public final SeqType type() { return SeqType.BYTE; } *************** *** 61,64 **** --- 79,85 ---- } + public void appendElementAt (StringBuffer str, int i) { + str.append(byteAt(i)); + } public final short shortAt(int i) { return byteAt(i); *************** *** 76,101 **** return byteAt(i); } - - public final String toString() { - StringBuffer str = new StringBuffer(); - str.append("["); - for (int i = 0; i < size(); ++i) { - if (i > 0) { - str.append(", "); - } - str.append(byteAt(i)); - } - str.append("]"); - return str.toString(); - } - - public byte[] asByteArray() { - int len = size(); - byte[] arr = new byte[len]; - for (int i = 0; i < len; ++i) { - arr[i] = byteAt(i); - } - return arr; - } }; --- 97,100 ---- *************** *** 104,125 **** */ private static final class ArraySeq extends BaseSeq implements ByteSeq { private int len; private final byte[] arr; ArraySeq(byte[] a) { arr = a; len = a.length; } ArraySeq(byte[] a, int length) { arr = a; len = length; } public final int size() { return len; } public final byte byteAt(int i) { ! return arr[i]; ! } ! public byte[] asByteArray() { ! return arr; } } --- 103,129 ---- */ private static final class ArraySeq extends BaseSeq implements ByteSeq { + private int st; private int len; private final byte[] arr; ArraySeq(byte[] a) { arr = a; + st = 0; len = a.length; } ArraySeq(byte[] a, int length) { arr = a; + st = 0; len = length; } + ArraySeq(byte[] a, int start, int end) { + arr = a; + st = start; + len = end-start+1; + } public final int size() { return len; } public final byte byteAt(int i) { ! return arr[st+i]; } } Index: IntSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/IntSeqUtil.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** IntSeqUtil.java 18 Mar 2004 22:51:44 -0000 1.10 --- IntSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.11 *************** *** 7,21 **** * */ - package org.nodal.util; import java.util.Vector; - import org.nodal.Types; import org.nodal.model.*; /** ! * A utility class for providing the IntSeq interface to a variety of ! * sources. * @author Lee Iverson <le...@ec...> */ --- 7,19 ---- * */ package org.nodal.util; import java.util.Vector; import org.nodal.Types; import org.nodal.model.*; /** ! * A utility class for providing the IntSeq interface to a variety of sources. ! * * @author Lee Iverson <le...@ec...> */ *************** *** 24,38 **** * Create an IntSeq interface for an arbitrary Object. */ ! public static final IntSeq create (Object v) throws ConstraintFailure { if (v == null || v instanceof IntSeq) { return (IntSeq) v; } else if (v instanceof int[]) { ! return create ((int[]) v); } else if (v instanceof Vector) { ! return create ((Vector) v); } else if (v instanceof Number) { ! return create ((Number) v); } ! throw new ConstraintFailure ("not usable as IntSeq"); } --- 22,36 ---- * Create an IntSeq interface for an arbitrary Object. */ ! public static final IntSeq create(Object v) throws ConstraintFailure { if (v == null || v instanceof IntSeq) { return (IntSeq) v; } else if (v instanceof int[]) { ! return create((int[]) v); } else if (v instanceof Vector) { ! return create((Vector) v); } else if (v instanceof Number) { ! return create((Number) v); } ! throw new ConstraintFailure("not usable as IntSeq"); } *************** *** 40,45 **** * Create an IntSeq interface for an int[] array. */ ! public static final IntSeq create (int[] a) { ! return new ArraySeq (a); } --- 38,68 ---- * Create an IntSeq interface for an int[] array. */ ! public static final IntSeq create(int[] a) { ! return new ArraySeq(a); ! } ! ! public static final IntSeq create(int[] a, int start) { ! return new ArraySeq(a, start); ! } ! ! public static final IntSeq create(int[] a, int start, int end) { ! return new ArraySeq(a, start, end); ! } ! ! abstract static class NumSeq extends FloatSeqUtil.NumSeq implements IntSeq { ! public final int[] asIntArray() { ! int[] arr = new int[size()]; ! for (int i = 0; i < size(); ++i) { ! arr[i] = intAt(i); ! } ! return arr; ! } ! public final long[] asLongArray() { ! long[] arr = new long[size()]; ! for (int i = 0; i < size(); ++i) { ! arr[i] = longAt(i); ! } ! return arr; ! } } *************** *** 47,71 **** * Class implementing the conversion of intAt output to Object. */ ! private abstract static ! class BaseSeq implements IntSeq { ! public final SeqType type() { return SeqType.INT; } ! public final Object elementAt (int i) { ! return new Integer (intAt (i)); } ! public final long longAt (int i) { return intAt(i); } ! public final float floatAt (int i) { return intAt(i); } ! public final double doubleAt (int i) { return intAt(i); } ! public final String toString () { ! StringBuffer str = new StringBuffer (); ! str.append ("["); ! for (int i = 0; i < size(); ++i) { ! if (i > 0) { str.append (", "); } ! str.append (intAt (i)); ! } ! str.append ("]"); ! return str.toString (); } }; --- 70,96 ---- * Class implementing the conversion of intAt output to Object. */ ! private abstract static class BaseSeq extends NumSeq { ! public final SeqType type() { ! return SeqType.INT; ! } ! public final Object elementAt(int i) { ! return new Integer(intAt(i)); } ! public final long longAt(int i) { ! return intAt(i); ! } ! public final float floatAt(int i) { ! return intAt(i); ! } ! ! public final double doubleAt(int i) { ! return intAt(i); ! } ! ! public final void appendElementAt(StringBuffer str, int i) { ! str.append(intAt(i)); } }; *************** *** 75,94 **** */ private static final class ArraySeq extends BaseSeq implements IntSeq { private final int[] arr; ! ArraySeq (int[] a) { arr = a; } ! public final int size () { return arr.length; } ! public final int intAt (int i) { return arr[i]; } } /** * Create an IntSeq interface for a Vector. ! * <p>Tested on creation for validity.</p> */ ! public static final IntSeq create (Vector v) throws TypeConstraintFailure { ! for (int i = 0; i < v.size (); ++i) { ! Object ch = v.elementAt (i); ! checkType (ch); } ! return new VectorSeq (v); } --- 100,146 ---- */ private static final class ArraySeq extends BaseSeq implements IntSeq { + private final int st; + private final int len; private final int[] arr; ! ! ArraySeq(int[] a) { ! arr = a; ! st = 0; ! len = a.length; ! } ! ! ArraySeq(int[] a, int start) { ! arr = a; ! st = start; ! len = a.length - start; ! } ! ! ArraySeq(int[] a, int start, int end) { ! arr = a; ! st = start; ! len = end - start + 1; ! } ! ! public final int size() { ! return len; ! } ! ! public final int intAt(int i) { ! return arr[st + i]; ! } } /** * Create an IntSeq interface for a Vector. ! * <p> ! * Tested on creation for validity. ! * </p> */ ! public static final IntSeq create(Vector v) throws TypeConstraintFailure { ! for (int i = 0; i < v.size(); ++i) { ! Object ch = v.elementAt(i); ! checkType(ch); } ! return new VectorSeq(v); } *************** *** 98,106 **** private static final class VectorSeq extends BaseSeq implements IntSeq { private final Vector vec; ! VectorSeq (Vector v) { vec = v; } ! public final int size () { return vec.size (); } ! public final int intAt (int i) { ! Object ch = vec.elementAt (i); ! return ((Number) ch).intValue (); } } --- 150,165 ---- private static final class VectorSeq extends BaseSeq implements IntSeq { private final Vector vec; ! ! VectorSeq(Vector v) { ! vec = v; ! } ! ! public final int size() { ! return vec.size(); ! } ! ! public final int intAt(int i) { ! Object ch = vec.elementAt(i); ! return ((Number) ch).intValue(); } } *************** *** 109,114 **** * Create a IntSeq interface for a single int.. */ ! public static final IntSeq create (int i) { ! return new BareIntSeq (i); } --- 168,173 ---- * Create a IntSeq interface for a single int.. */ ! public static final IntSeq create(int i) { ! return new BareIntSeq(i); } *************** *** 118,126 **** private static final class BareIntSeq extends BaseSeq implements IntSeq { private final int val; ! BareIntSeq (int a) { val = a; } ! public final int size () { return 1; } ! public final int intAt (int i) { if (i != 0) { ! throw new ArrayIndexOutOfBoundsException (i); } return val; --- 177,192 ---- private static final class BareIntSeq extends BaseSeq implements IntSeq { private final int val; ! ! BareIntSeq(int a) { ! val = a; ! } ! ! public final int size() { ! return 1; ! } ! ! public final int intAt(int i) { if (i != 0) { ! throw new ArrayIndexOutOfBoundsException(i); } return val; *************** *** 131,137 **** * Create an IntSeq interface wrapper around Number (sequence of one). */ ! public static final IntSeq create (Number n) throws TypeConstraintFailure { ! checkType (n); ! return new BareIntSeq (n.intValue ()); } --- 197,203 ---- * Create an IntSeq interface wrapper around Number (sequence of one). */ ! public static final IntSeq create(Number n) throws TypeConstraintFailure { ! checkType(n); ! return new BareIntSeq(n.intValue()); } *************** *** 139,147 **** * Test whether Object can be used as an Integer. */ ! private static final void checkType (Object v) throws TypeConstraintFailure { ! if (Types.INTEGER.accepts (v)) { return; } ! throw new TypeConstraintFailure (v, Types.INTEGER, "not usable as int"); } }; --- 205,213 ---- * Test whether Object can be used as an Integer. */ ! private static final void checkType(Object v) throws TypeConstraintFailure { ! if (Types.INTEGER.accepts(v)) { return; } ! throw new TypeConstraintFailure(v, Types.INTEGER, "not usable as int"); } }; Index: BooleanSeqUtil.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/BooleanSeqUtil.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** BooleanSeqUtil.java 18 Mar 2004 22:51:44 -0000 1.10 --- BooleanSeqUtil.java 15 Jul 2004 04:47:57 -0000 1.11 *************** *** 60,72 **** return str.toString (); } }; /** * Create a BooleanSeq interface for an boolean[] array. ! */ public static final BooleanSeq create (boolean[] a) { return new ArraySeq (a); } /** * Class implementing BooleanSeq wrapper around boolean[] array. --- 60,104 ---- return str.toString (); } + + public boolean[] asBooleanArray () { + boolean[] arr = new boolean[size()]; + for (int i = 0; i < size(); ++i) { + arr[i] = booleanAt(i); + } + return arr; + } }; /** * Create a BooleanSeq interface for an boolean[] array. ! * @param a an array of booleans ! * @return a new BooleanSeq representing this subarray ! */ public static final BooleanSeq create (boolean[] a) { return new ArraySeq (a); } + + /** + * Create a BooleanSeq interface for an boolean[] array. + * @param a an array of booleans + * @param start the start index of the subarray referenced + * @return a new BooleanSeq representing this subarray + */ + public static final BooleanSeq create (boolean[] a, int start) { + return new ArraySeq (a, start); + } + + /** + * Create a BooleanSeq interface for an boolean[] array. + * @param a an array of booleans + * @param start the start index of the subarray referenced + * @param end the end index of the subarray referenced + * @return a new BooleanSeq representing this subarray + */ + public static final BooleanSeq create (boolean[] a, int start, int end) { + return new ArraySeq (a, start, end); + } + /** * Class implementing BooleanSeq wrapper around boolean[] array. *************** *** 75,81 **** class ArraySeq extends BaseSeq implements BooleanSeq { private final boolean[] arr; ! ArraySeq (boolean[] a) { arr = a; } ! public final int size () { return arr.length; } ! public final boolean booleanAt (int i) { return arr[i]; } } --- 107,119 ---- class ArraySeq extends BaseSeq implements BooleanSeq { private final boolean[] arr; ! private final int st; ! private final int len; ! ArraySeq (boolean[] a) { arr = a; len = a.length; st = 0; } ! ArraySeq (boolean[] a, int start) { arr = a; len = a.length-start; st = start; } ! ArraySeq (boolean[] a, int start, int end) { ! arr = a; st = start; len = end-start+1; ! } ! public int size () { return len; } ! public boolean booleanAt (int i) { return arr[i+st]; } } |
Update of /cvsroot/nodal/nodal/j-src/storage/memory In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19384/storage/memory Modified Files: memBoolSequenceContent.java memStringContent.java memByteSequenceContent.java memFloatSequenceContent.java memSequenceContent.java memLongSequenceContent.java memIntSequenceContent.java memDoubleSequenceContent.java memShortSequenceContent.java BareSequence.java memGenericSequenceContent.java Log Message: Update Seq interfaces and implementations for more consistency. Have memFooSequence classes use Seq values better. Index: memIntSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memIntSequenceContent.java,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** memIntSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.45 --- memIntSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.46 *************** *** 48,56 **** } ! public int indexOf(Object obj) { if (Types.INTEGER.accepts(obj)) { Integer bt = (Integer) Types.INTEGER.from(obj); int b = bt.intValue(); ! for (int i = 0; i < arr.length; ++i) { if (arr[i] == b) { return i; --- 48,58 ---- } ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.INTEGER.accepts(obj)) { Integer bt = (Integer) Types.INTEGER.from(obj); int b = bt.intValue(); ! for (int i = start; i <= end; ++i) { if (arr[i] == b) { return i; *************** *** 89,112 **** }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! int[] r = new int[arr.length]; ! for (int i = 0; i < arr.length; ++i) { ! r[i] = arr[i]; ! } ! return r; ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! int[] r = new int[end - start + 1]; ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r[j] = arr[i]; } ! return r; } --- 91,103 ---- }; ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return IntSeqUtil.create (arr); } ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return IntSeqUtil.create(arr, start, end); } Index: memFloatSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memFloatSequenceContent.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** memFloatSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.18 --- memFloatSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.19 *************** *** 50,58 **** // Implementation of memSequenceContent methods ! public int indexOf(Object obj) { if (Types.FLOAT.accepts(obj)) { Float bt = (Float) Types.FLOAT.from(obj); float b = bt.floatValue(); ! for (int i = 0; i < arr.length; ++i) { if (arr[i] == b) { return i; --- 50,60 ---- // Implementation of memSequenceContent methods ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.FLOAT.accepts(obj)) { Float bt = (Float) Types.FLOAT.from(obj); float b = bt.floatValue(); ! for (int i = start; i <= end; ++i) { if (arr[i] == b) { return i; *************** *** 90,113 **** }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! float[] r = new float[arr.length]; ! for (int i = 0; i < arr.length; ++i) { ! r[i] = arr[i]; ! } ! return r; ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! float[] r = new float[end - start + 1]; ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r[j] = arr[i]; } ! return r; } --- 92,105 ---- }; ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return FloatSeqUtil.create (arr); } ! ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return FloatSeqUtil.create (arr, start, end); } Index: memDoubleSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memDoubleSequenceContent.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** memDoubleSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.18 --- memDoubleSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.19 *************** *** 50,58 **** // Implementation of memSequenceContent methods ! public int indexOf(Object obj) { if (Types.DOUBLE.accepts(obj)) { Double bt = (Double) Types.DOUBLE.from(obj); double b = bt.doubleValue(); ! for (int i = 0; i < arr.length; ++i) { if (arr[i] == b) { return i; --- 50,60 ---- // Implementation of memSequenceContent methods ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.DOUBLE.accepts(obj)) { Double bt = (Double) Types.DOUBLE.from(obj); double b = bt.doubleValue(); ! for (int i = start; i <= end; ++i) { if (arr[i] == b) { return i; *************** *** 90,113 **** }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! double[] r = new double[arr.length]; ! for (int i = 0; i < arr.length; ++i) { ! r[i] = arr[i]; ! } ! return r; ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! double[] r = new double[end - start + 1]; ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r[j] = arr[i]; } ! return r; } --- 92,105 ---- }; ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return DoubleSeqUtil.create(arr); } ! ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return DoubleSeqUtil.create(arr, start, end); } Index: BareSequence.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/BareSequence.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** BareSequence.java 16 Apr 2004 22:03:45 -0000 1.21 --- BareSequence.java 15 Jul 2004 04:47:57 -0000 1.22 *************** *** 1,11 **** /* ! * ! * Distributed under the Apache Software License, Version 1.1 ! * (see below, or the file LICENSE for terms and conditions) ! * ! * Copyright (c) 2002 University of British Columbia. All rights reserved. ! * */ - package storage.memory; --- 1,10 ---- /* ! * ! * Distributed under the Apache Software License, Version 1.1 (see below, or the ! * file LICENSE for terms and conditions) ! * ! * Copyright (c) 2002 University of British Columbia. All rights reserved. ! * */ package storage.memory; *************** *** 18,29 **** import org.nodal.util.IndexBoundsException; import org.nodal.util.PropertyConstraintFailure; - import storage.framework.*; //import java.util.Enumeration; ! ! public abstract class BareSequence ! extends BareContent ! implements SequenceNode { protected final MemSequenceContentI seq; --- 17,24 ---- import org.nodal.util.IndexBoundsException; import org.nodal.util.PropertyConstraintFailure; import storage.framework.*; //import java.util.Enumeration; ! public abstract class BareSequence extends BareContent implements SequenceNode { protected final MemSequenceContentI seq; *************** *** 38,57 **** } ! public boolean isValidProperty (Object prop) { if (prop instanceof Number) { ! Number n = (Number) prop; ! if (n instanceof Float || n instanceof Double) { ! return false; ! } ! return indexIsValid (n.intValue()); } return false; } ! // Methods from org.nodal.model.SequenceContent ! public Seq asSeq () { return seq.asSeq(); } ! public Getter item(int index) throws IndexBoundsException { return seq.item(index, this); --- 33,52 ---- } ! public boolean isValidProperty(Object prop) { if (prop instanceof Number) { ! Number n = (Number) prop; ! if (n instanceof Float || n instanceof Double) { ! return false; ! } ! return indexIsValid(n.intValue()); } return false; } ! // Methods from org.nodal.model.SequenceContent ! public Seq asSeq() { return seq.asSeq(); } ! public Getter item(int index) throws IndexBoundsException { return seq.item(index, this); *************** *** 66,85 **** } ! public boolean indexIsValid (int index) { ! return seq.indexIsValid (index); } ! public Getter range(int start, int end) throws IndexBoundsException { return seq.range(start, end, this); } ! public boolean contains (Object obj) { ! return seq.contains (obj); } ! ! public int indexOf (Object obj) { ! return seq.indexOf (obj); } ! // Methods from org.nodal.model.Sequence public final NodeContent.Editor edit() { --- 61,80 ---- } ! public boolean indexIsValid(int index) { ! return seq.indexIsValid(index); } ! public Getter range(int start, int end) throws IndexBoundsException { return seq.range(start, end, this); } ! public boolean contains(Object obj) { ! return seq.contains(obj); } ! ! public int indexOf(Object obj) { ! return seq.indexOf(obj); } ! // Methods from org.nodal.model.Sequence public final NodeContent.Editor edit() { Index: memBoolSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memBoolSequenceContent.java,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** memBoolSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.20 --- memBoolSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.21 *************** *** 50,58 **** // Implementation of memSequenceContent methods ! public int indexOf(Object obj) { if (Types.BOOLEAN.accepts(obj)) { Boolean bt = (Boolean) Types.BOOLEAN.from(obj); boolean b = bt.booleanValue(); ! for (int i = 0; i < arr.length; ++i) { if (arr[i] == b) { return i; --- 50,60 ---- // Implementation of memSequenceContent methods ! protected int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.BOOLEAN.accepts(obj)) { Boolean bt = (Boolean) Types.BOOLEAN.from(obj); boolean b = bt.booleanValue(); ! for (int i = start; i <= end; ++i) { if (arr[i] == b) { return i; *************** *** 90,113 **** }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! boolean[] r = new boolean[arr.length]; ! for (int i = 0; i < arr.length; ++i) { ! r[i] = arr[i]; ! } ! return r; ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! boolean[] r = new boolean[end - start + 1]; ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r[j] = arr[i]; } ! return r; } --- 92,104 ---- }; ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return BooleanSeqUtil.create(arr); } ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return BooleanSeqUtil.create(arr, start, end); } Index: memSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memSequenceContent.java,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -d -r1.67 -r1.68 *** memSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.67 --- memSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.68 *************** *** 13,18 **** --- 13,20 ---- import org.nodal.Types; import org.nodal.model.Getter; + import org.nodal.model.InvalidOperator; import org.nodal.model.Node; import org.nodal.model.NodeContent; + import org.nodal.model.Operator; import org.nodal.model.Seq; import org.nodal.model.SequenceContent; *************** *** 80,84 **** --- 82,102 ---- } } + + public boolean contains(Object obj) { + int index = indexOf (obj); + return index >= 0; + } + public boolean contains (Object v, int st, int en) { + int idx = indexOf (v, st, en); + return idx != -1; + } + + public final int indexOf (Object v) { + return indexOf (v, 0, -1); + } + + protected abstract int indexOf (Object v, int st, int en); + /** * Called by BareNode to create a NodeContent object. *************** *** 188,196 **** } - public boolean contains(Object obj) { - int index = indexOf(obj); - return index >= 0; - } - // Common implementation methods /** --- 206,209 ---- *************** *** 211,219 **** * Check an index value for validity and raise IndexBoundsException if fails. */ ! protected void checkIndex(int i) throws IndexBoundsException { int sz = size(); if (i < -sz || i >= sz) { throw new IndexBoundsException(i, -sz, sz - 1, "index out of range"); } } --- 224,233 ---- * Check an index value for validity and raise IndexBoundsException if fails. */ ! protected int checkIndex(int i) throws IndexBoundsException { int sz = size(); if (i < -sz || i >= sz) { throw new IndexBoundsException(i, -sz, sz - 1, "index out of range"); } + return normalizeIndex (i); } *************** *** 567,571 **** } ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) throws IndexBoundsException { checkRange(s, e); return new RangeGetter(s, e, c); --- 581,586 ---- } ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { checkRange(s, e); return new RangeGetter(s, e, c); *************** *** 573,589 **** /** ! * Create the object representing the subrange (start, end). ! * @param start the start index of the subrange ! * @param end the end index of the subrange * @return an Object that shares content with this subrange */ ! protected abstract Object rangeCopy(int start, int end); /** * Compare for equality between the Object v and the subrange (start,end) of * this sequence ! * @param start the start index of the subrange ! * @param end the end index of the subrange ! * @param v the Object to be compared against * @return true if v is equal to the subrange defined */ --- 588,611 ---- /** ! * Create a Seq representing the subrange (start, end). ! * ! * @param start ! * the start index of the subrange ! * @param end ! * the end index of the subrange * @return an Object that shares content with this subrange */ ! protected abstract Seq rangeCopy(int start, int end); /** * Compare for equality between the Object v and the subrange (start,end) of * this sequence ! * ! * @param start ! * the start index of the subrange ! * @param end ! * the end index of the subrange ! * @param v ! * the Object to be compared against * @return true if v is equal to the subrange defined */ *************** *** 594,598 **** private int end; private NodeContent content; ! RangeGetter(int s, int e, NodeContent c) { super(type); --- 616,620 ---- private int end; private NodeContent content; ! RangeGetter(int s, int e, NodeContent c) { super(type); *************** *** 601,605 **** content = c; } ! public Object get() throws PropertyConstraintFailure { return rangeCopy(start, end); --- 623,627 ---- content = c; } ! public Object get() throws PropertyConstraintFailure { return rangeCopy(start, end); *************** *** 609,613 **** return rangeEquals(start, end, v); } ! public Path createPath() throws Path.Failure { PathOperator op = Paths.createRangeOp(start, end); --- 631,635 ---- return rangeEquals(start, end, v); } ! public Path createPath() throws Path.Failure { PathOperator op = Paths.createRangeOp(start, end); *************** *** 615,617 **** --- 637,742 ---- } } + + private class SubRange implements MemSequenceContentI { + private memSequenceContent seq; + private int start; + private int end; + + SubRange(memSequenceContent seq, int start, int end) { + this.seq = seq; + this.start = start; + this.end = end; + } + + private int relIndex(int i) { + return (i >= 0 ? start + i : end + i + 1); + } + + public Seq asSeq() { + return seq.rangeCopy(start, end); + } + + public boolean indexIsValid(int i) { + return seq.indexIsValid (relIndex(i)); + } + + public Getter item(int i, NodeContent c) throws IndexBoundsException { + return seq.item(relIndex(i), c); + } + + public Object getItem(int i, NodeContent c) throws IndexBoundsException { + return seq.getItem(relIndex(i), c); + } + + public Getter range(int start2, int end2, NodeContent c) + throws IndexBoundsException { + int st2 = relIndex(start2); + int en2 = relIndex(end2); + return seq.range (st2, en2, c); + } + + public boolean contains(Object obj) { + return seq.contains(obj, start, end); + } + + public int indexOf(Object obj) { + int idx = seq.indexOf(obj, start, end); + if (idx >= 0) { + return idx-seq.normalizeIndex(start); + } + return idx; + } + + public NodeType type() { + return seq.type(); + } + + public int size() { + int st = seq.normalizeIndex(start); + int en = seq.normalizeIndex(end); + return en - st + 1; + } + + public Iterator properties() { + return new IndexIterator(size()); + } + + public boolean isValidProperty(Object prop) { + if (prop instanceof Number) { + Number n = (Number) prop; + if (n instanceof Float || n instanceof Double) { + return false; + } + return indexIsValid(n.intValue()); + } + return false; + } + + public Getter value(Object obj, NodeContent c) { + if (Types.INTEGER.accepts(obj)) { + obj = Types.INTEGER.from(obj); + return item(((Number) obj).intValue(), c); + } + return null; + } + + public Object getValue(Object obj, NodeContent c) { + if (Types.INTEGER.accepts(obj)) { + obj = Types.INTEGER.from(obj); + return getItem(((Number) obj).intValue(), c); + } + return null; + } + + public Operator invert(Operator op, NodeContent c) throws InvalidOperator, + ConstraintFailure { + // NEXT Hmmm... This is troublesome. Do I have to pull these apart? + return null; + } + + public void modify(MemOperator op, NodeContent c) throws InvalidOperator, + ConstraintFailure { + // NEXT Hmmm... This is troublesome. Do I have to pull these apart? + } + } } \ No newline at end of file Index: memStringContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memStringContent.java,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** memStringContent.java 12 Jul 2004 22:57:25 -0000 1.38 --- memStringContent.java 15 Jul 2004 04:47:57 -0000 1.39 *************** *** 50,58 **** } ! public int indexOf(Object obj) { if (Types.CHARACTER.accepts(obj)) { Character bt = (Character) Types.CHARACTER.from(obj); char b = bt.charValue(); ! for (int i = 0; i < str.length(); ++i) { if (str.charAt(i) == b) { return i; --- 50,60 ---- } ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.CHARACTER.accepts(obj)) { Character bt = (Character) Types.CHARACTER.from(obj); char b = bt.charValue(); ! for (int i = start; i <= end; ++i) { if (str.charAt(i) == b) { return i; *************** *** 94,105 **** } ! protected Object rangeCopy(int start, int end) { checkRange(start, end); if (start == 0 && end == -1) { ! return str.toString(); } start = normalizeIndex(start); end = normalizeIndex(end); ! return str.substring(start, end); } --- 96,107 ---- } ! protected Seq rangeCopy(int start, int end) { checkRange(start, end); if (start == 0 && end == -1) { ! return CharSeqUtil.create(str.toString()); } start = normalizeIndex(start); end = normalizeIndex(end); ! return CharSeqUtil.create(str.substring(start, end)); } Index: memShortSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memShortSequenceContent.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** memShortSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.19 --- memShortSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.20 *************** *** 48,56 **** } ! public int indexOf(Object obj) { if (Types.SHORT.accepts(obj)) { Short bt = (Short) Types.SHORT.from(obj); short b = bt.shortValue(); ! for (int i = 0; i < arr.length; ++i) { if (arr[i] == b) { return i; --- 48,58 ---- } ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.SHORT.accepts(obj)) { Short bt = (Short) Types.SHORT.from(obj); short b = bt.shortValue(); ! for (int i = start; i <= end; ++i) { if (arr[i] == b) { return i; *************** *** 89,112 **** }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! short[] r = new short[arr.length]; ! for (int i = 0; i < arr.length; ++i) { ! r[i] = arr[i]; ! } ! return r; ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! short[] r = new short[end - start + 1]; ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r[j] = arr[i]; } ! return r; } --- 91,103 ---- }; ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return ShortSeqUtil.create (arr); } ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return ShortSeqUtil.create (arr, start, end); } Index: memByteSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memByteSequenceContent.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** memByteSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.18 --- memByteSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.19 *************** *** 50,58 **** // Implementation of memSequenceContent methods ! public int indexOf(Object obj) { if (Types.OCTET.accepts(obj)) { Byte bt = (Byte) Types.OCTET.from(obj); byte b = bt.byteValue(); ! for (int i = 0; i < arr.length; ++i) { if (arr[i] == b) { return i; --- 50,60 ---- // Implementation of memSequenceContent methods ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.OCTET.accepts(obj)) { Byte bt = (Byte) Types.OCTET.from(obj); byte b = bt.byteValue(); ! for (int i = start; i <= end; ++i) { if (arr[i] == b) { return i; *************** *** 91,114 **** }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! byte[] r = new byte[arr.length]; ! for (int i = 0; i < arr.length; ++i) { ! r[i] = arr[i]; ! } ! return r; ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! byte[] r = new byte[end - start + 1]; ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r[j] = arr[i]; } ! return r; } --- 93,106 ---- }; ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return ByteSeqUtil.create(arr); } ! ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return ByteSeqUtil.create(arr, start, end); } Index: memGenericSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memGenericSequenceContent.java,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** memGenericSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.57 --- memGenericSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.58 *************** *** 47,54 **** } ! public int indexOf(Object obj) { if (type.itemType().accepts(obj)) { Object b = type.itemType().from(obj); ! for (int i = 0; i < vec.size(); ++i) { if (vec.elementAt(i).equals(b)) { return i; --- 47,56 ---- } ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (type.itemType().accepts(obj)) { Object b = type.itemType().from(obj); ! for (int i = start; i <= end; ++i) { if (vec.elementAt(i).equals(b)) { return i; *************** *** 94,113 **** } ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return (Vector) vec.clone(); ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! Vector r = new Vector(end - start + 1); ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r.setElementAt(vec.elementAt(i), j); } ! return r; } --- 96,109 ---- } ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return SeqUtil.create(vec); } ! ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return SeqUtil.create (vec, start, end); } Index: memLongSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memLongSequenceContent.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** memLongSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.18 --- memLongSequenceContent.java 15 Jul 2004 04:47:57 -0000 1.19 *************** *** 48,56 **** } ! public int indexOf(Object obj) { if (Types.LONG.accepts(obj)) { Long bt = (Long) Types.LONG.from(obj); long b = bt.longValue(); ! for (int i = 0; i < arr.length; ++i) { if (arr[i] == b) { return i; --- 48,58 ---- } ! public int indexOf(Object obj, int start, int end) { ! start = checkIndex (start); ! end = checkIndex (end); if (Types.LONG.accepts(obj)) { Long bt = (Long) Types.LONG.from(obj); long b = bt.longValue(); ! for (int i = start; i <= end; ++i) { if (arr[i] == b) { return i; *************** *** 89,112 **** }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! long[] r = new long[arr.length]; ! for (int i = 0; i < arr.length; ++i) { ! r[i] = arr[i]; ! } ! return r; ! } ! if (start < 0) { ! start = normalizeIndex(start); ! } ! if (end < 0) { ! end = normalizeIndex(end); ! } ! long[] r = new long[end - start + 1]; ! for (int i = start, j = 0; i <= end; ++i, ++j) { ! r[j] = arr[i]; } ! return r; } --- 91,103 ---- }; ! protected Seq rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { ! return LongSeqUtil.create (arr); } ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! ! return LongSeqUtil.create (arr, start, end); } |
Update of /cvsroot/nodal/nodal/j-src/org/nodal/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19384/org/nodal/model Modified Files: ByteSeq.java IntSeq.java DoubleSeq.java LongSeq.java BooleanSeq.java ShortSeq.java FloatSeq.java CharSeq.java Log Message: Update Seq interfaces and implementations for more consistency. Have memFooSequence classes use Seq values better. Index: FloatSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/FloatSeq.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FloatSeq.java 18 Mar 2004 22:51:47 -0000 1.1 --- FloatSeq.java 15 Jul 2004 04:47:58 -0000 1.2 *************** *** 16,18 **** --- 16,24 ---- public interface FloatSeq extends DoubleSeq { float floatAt (int i); + + /** + * Returns a copy of the float array equivalent to this Seq + * @return the array of floats + */ + float[] asFloatArray (); }; Index: ByteSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/ByteSeq.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ByteSeq.java 19 Mar 2004 00:24:43 -0000 1.2 --- ByteSeq.java 15 Jul 2004 04:47:58 -0000 1.3 *************** *** 23,27 **** /** ! * Return the byte array equivalent to this Seq * @return the array of bytes */ --- 23,27 ---- /** ! * Returns a copy of the byte array equivalent to this Seq * @return the array of bytes */ Index: BooleanSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/BooleanSeq.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** BooleanSeq.java 18 Mar 2004 22:51:47 -0000 1.1 --- BooleanSeq.java 15 Jul 2004 04:47:58 -0000 1.2 *************** *** 16,18 **** --- 16,24 ---- public interface BooleanSeq extends Seq { boolean booleanAt (int i); + + /** + * Creates a boolean[] holding a copy of the contents of this sequence. + * @return a new boolean array + */ + boolean[] asBooleanArray (); }; Index: CharSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/CharSeq.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CharSeq.java 18 Mar 2004 22:51:47 -0000 1.1 --- CharSeq.java 15 Jul 2004 04:47:58 -0000 1.2 *************** *** 16,18 **** --- 16,24 ---- public interface CharSeq extends Seq { char charAt (int i); + + /** + * Returns a copy of the char array equivalent to this Seq + * @return the array of chars + */ + char[] asCharArray (); }; Index: ShortSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/ShortSeq.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ShortSeq.java 18 Mar 2004 22:51:47 -0000 1.1 --- ShortSeq.java 15 Jul 2004 04:47:58 -0000 1.2 *************** *** 21,23 **** --- 21,29 ---- */ short shortAt (int i); + + /** + * Returns a copy of the short array equivalent to this Seq + * @return the array of shorts + */ + short[] asShortArray (); }; Index: DoubleSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/DoubleSeq.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** DoubleSeq.java 18 Mar 2004 22:51:47 -0000 1.1 --- DoubleSeq.java 15 Jul 2004 04:47:58 -0000 1.2 *************** *** 16,18 **** --- 16,24 ---- public interface DoubleSeq extends Seq { double doubleAt (int i); + + /** + * Returns a copy of the float array equivalent to this Seq + * @return the array of floats + */ + double[] asDoubleArray (); }; Index: IntSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/IntSeq.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** IntSeq.java 18 Mar 2004 22:51:47 -0000 1.1 --- IntSeq.java 15 Jul 2004 04:47:58 -0000 1.2 *************** *** 16,18 **** --- 16,24 ---- public interface IntSeq extends LongSeq, FloatSeq { int intAt (int i); + + /** + * Returns a copy of the int array equivalent to this Seq + * @return the array of ints + */ + int[] asIntArray (); }; Index: LongSeq.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/LongSeq.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** LongSeq.java 18 Mar 2004 22:51:47 -0000 1.1 --- LongSeq.java 15 Jul 2004 04:47:58 -0000 1.2 *************** *** 14,18 **** * @author leei */ ! public interface LongSeq extends Seq { long longAt (int i); }; --- 14,24 ---- * @author leei */ ! public interface LongSeq extends DoubleSeq { long longAt (int i); + + /** + * Returns a copy of the long array equivalent to this Seq + * @return the array of longs + */ + long[] asLongArray (); }; |
From: Lee I. <le...@us...> - 2004-07-15 04:48:06
|
Update of /cvsroot/nodal/nodal/j-src/test/storage/memory In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19384/test/storage/memory Modified Files: TestBareSequence.java TestmemStringContent.java Log Message: Update Seq interfaces and implementations for more consistency. Have memFooSequence classes use Seq values better. Index: TestmemStringContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/test/storage/memory/TestmemStringContent.java,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** TestmemStringContent.java 19 Mar 2004 00:24:42 -0000 1.20 --- TestmemStringContent.java 15 Jul 2004 04:47:58 -0000 1.21 *************** *** 7,10 **** --- 7,11 ---- import org.nodal.Nodal; import org.nodal.Types; + import org.nodal.model.CharSeq; import org.nodal.model.Getter; import org.nodal.model.Node; *************** *** 90,94 **** private StringBuffer cloneContent() { try { ! return new StringBuffer((String) cseqAll.get()); } catch (PropertyConstraintFailure f) { fail("cseqAll.get() failed"); --- 91,95 ---- private StringBuffer cloneContent() { try { ! return new StringBuffer (((CharSeq) cseqAll.get()).toString()); } catch (PropertyConstraintFailure f) { fail("cseqAll.get() failed"); *************** *** 272,276 **** //begins with the inserted val try { ! originStr.append((String) cseqAll.get()); } catch (PropertyConstraintFailure e) { fail("cseqAll.get() failed"); --- 273,277 ---- //begins with the inserted val try { ! originStr.append(((CharSeq) cseqAll.get()).toString()); } catch (PropertyConstraintFailure e) { fail("cseqAll.get() failed"); Index: TestBareSequence.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/test/storage/memory/TestBareSequence.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** TestBareSequence.java 19 Mar 2004 00:24:42 -0000 1.17 --- TestBareSequence.java 15 Jul 2004 04:47:58 -0000 1.18 *************** *** 20,23 **** --- 20,24 ---- import org.nodal.model.SequenceNode; import org.nodal.model.Setter; + import org.nodal.model.ShortSeq; import org.nodal.nav.Path.Failure; import org.nodal.type.SequenceType; *************** *** 101,105 **** private short[] cloneContent() { try { ! return (short[]) sseqAll.get(); } catch (PropertyConstraintFailure p) { fail("sseqAll.get() cannot fail"); --- 102,111 ---- private short[] cloneContent() { try { ! ShortSeq seq = (ShortSeq) sseqAll.get(); ! short[] arr = new short[seq.size()]; ! for (int i = 0; i < seq.size(); ++i) { ! arr[i] = seq.shortAt(i); ! } ! return arr; } catch (PropertyConstraintFailure p) { fail("sseqAll.get() cannot fail"); *************** *** 222,226 **** public void testInsertAfter_case4() { - Vector testVec22 = new Vector(3); testVec22.add(0, new Short((short) 20)); --- 228,231 ---- |
From: Lee I. <le...@us...> - 2004-07-12 22:57:36
|
Update of /cvsroot/nodal/nodal/j-src/storage/memory In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5145/storage/memory Modified Files: memBoolSequenceContent.java memByteSequenceContent.java memFloatSequenceContent.java memStringContent.java BareContent.java memSequenceContent.java memShortSequenceContent.java memLongSequenceContent.java memIntSequenceContent.java memGenericSequenceContent.java memDoubleSequenceContent.java Log Message: Lift RangeGetter class and call into memSequenceContent. Index: memIntSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memIntSequenceContent.java,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** memIntSequenceContent.java 13 May 2004 19:39:16 -0000 1.44 --- memIntSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.45 *************** *** 25,29 **** import org.nodal.util.IntSeqUtil; import org.nodal.util.IntSetterUtil; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.TypeConstraintFailure; --- 25,28 ---- *************** *** 90,126 **** }; ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { ! checkRange(s, e); ! return new RangeGetter(s, e, c); ! } ! ! private final class RangeGetter extends GetterUtil { ! private final int start; ! private final int end; ! private final NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! public Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private int[] rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 89,93 ---- }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 148,152 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { --- 115,119 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { Index: memFloatSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memFloatSequenceContent.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** memFloatSequenceContent.java 13 May 2004 19:39:17 -0000 1.17 --- memFloatSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.18 *************** *** 26,30 **** import org.nodal.util.GetterUtil; import org.nodal.util.IndexBoundsException; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.TypeConstraintFailure; --- 26,29 ---- *************** *** 91,127 **** }; ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { ! checkRange(s, e); ! return new RangeGetter(s, e, c); ! } ! ! private final class RangeGetter extends GetterUtil { ! private final int start; ! private final int end; ! private final NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! public Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private float[] rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 90,94 ---- }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 149,153 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { --- 116,120 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { Index: BareContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/BareContent.java,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** BareContent.java 2 Jun 2004 19:02:06 -0000 1.27 --- BareContent.java 12 Jul 2004 22:57:25 -0000 1.28 *************** *** 51,59 **** memContent c, Capability cap, ! RepoServices nodeFactory) { super(n); this.c = c; this.cap = cap; ! this.services = nodeFactory; } --- 51,59 ---- memContent c, Capability cap, ! RepoServices repoServices) { super(n); this.c = c; this.cap = cap; ! this.services = repoServices; } Index: memDoubleSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memDoubleSequenceContent.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** memDoubleSequenceContent.java 13 May 2004 19:39:16 -0000 1.17 --- memDoubleSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.18 *************** *** 26,30 **** import org.nodal.util.GetterUtil; import org.nodal.util.IndexBoundsException; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.TypeConstraintFailure; --- 26,29 ---- *************** *** 91,127 **** }; ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { ! checkRange(s, e); ! return new RangeGetter(s, e, c); ! } ! ! private class RangeGetter extends GetterUtil { ! private int start; ! private int end; ! private final NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! public Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private double[] rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 90,94 ---- }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 149,153 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { --- 116,120 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { Index: memBoolSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memBoolSequenceContent.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** memBoolSequenceContent.java 13 May 2004 19:39:16 -0000 1.19 --- memBoolSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.20 *************** *** 26,30 **** import org.nodal.util.GetterUtil; import org.nodal.util.IndexBoundsException; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.TypeConstraintFailure; --- 26,29 ---- *************** *** 91,127 **** }; ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { ! checkRange(s, e); ! return new RangeGetter(s, e, c); ! } ! ! private class RangeGetter extends GetterUtil { ! private int start; ! private int end; ! private NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! public Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private boolean[] rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 90,94 ---- }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 149,153 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { --- 116,120 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { Index: memSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memSequenceContent.java,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -d -r1.66 -r1.67 *** memSequenceContent.java 13 May 2004 19:39:17 -0000 1.66 --- memSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.67 *************** *** 21,24 **** --- 21,26 ---- import org.nodal.model.TxnOp; import org.nodal.nav.Path; + import org.nodal.nav.PathOperator; + import org.nodal.nav.Paths; import org.nodal.security.Capability; import org.nodal.type.NodeType; *************** *** 249,255 **** throws IndexBoundsException; - protected abstract GetterUtil rangeGetter(int s, int e, NodeContent c) - throws IndexBoundsException; - protected abstract Setter itemSetter(int i, NodeContent.Editor c, NodeManager mgr) throws IndexBoundsException; --- 251,254 ---- *************** *** 567,569 **** --- 566,617 ---- } } + + protected GetterUtil rangeGetter(int s, int e, NodeContent c) throws IndexBoundsException { + checkRange(s, e); + return new RangeGetter(s, e, c); + } + + /** + * Create the object representing the subrange (start, end). + * @param start the start index of the subrange + * @param end the end index of the subrange + * @return an Object that shares content with this subrange + */ + protected abstract Object rangeCopy(int start, int end); + + /** + * Compare for equality between the Object v and the subrange (start,end) of + * this sequence + * @param start the start index of the subrange + * @param end the end index of the subrange + * @param v the Object to be compared against + * @return true if v is equal to the subrange defined + */ + protected abstract boolean rangeEquals(int start, int end, Object v); + + private class RangeGetter extends GetterUtil { + private int start; + private int end; + private NodeContent content; + + RangeGetter(int s, int e, NodeContent c) { + super(type); + start = s; + end = e; + content = c; + } + + public Object get() throws PropertyConstraintFailure { + return rangeCopy(start, end); + } + + public boolean valueEquals(Object v) throws IndexBoundsException { + return rangeEquals(start, end, v); + } + + public Path createPath() throws Path.Failure { + PathOperator op = Paths.createRangeOp(start, end); + return op.applyTo(content.path()); + } + } } \ No newline at end of file Index: memStringContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memStringContent.java,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** memStringContent.java 13 May 2004 19:39:17 -0000 1.37 --- memStringContent.java 12 Jul 2004 22:57:25 -0000 1.38 *************** *** 25,29 **** import org.nodal.util.GetterUtil; import org.nodal.util.IndexBoundsException; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.SetterUtil; import org.nodal.util.TypeConstraintFailure; --- 25,28 ---- *************** *** 91,139 **** } - private class RangeGetter extends GetterUtil { - private int start; - private int end; - private final NodeContent content; - - RangeGetter(int s, int e, NodeContent c) { - super(type); - start = s; - end = e; - content = c; - } - - public Object get() throws PropertyConstraintFailure { - checkRange(start, end); - if (start == 0 && end == -1) { - return str.toString(); - } - start = normalizeIndex(start); - end = normalizeIndex(end); - return str.substring(start, end); - } - - public boolean valueEquals(Object v) throws IndexBoundsException { - return rangeEquals(start, end, v); - } - - public Path createPath() throws Path.Failure { - PathOperator op = Paths.createRangeOp(start, end); - return op.applyTo(content.path()); - } - }; - - protected GetterUtil rangeGetter(int s, int e, NodeContent c) - throws IndexBoundsException { - checkRange(s, e); - return new RangeGetter(s, e, c); - } - protected Seq valueAsSeq(Object value) throws ConstraintFailure { return CharSeqUtil.create(value); } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { - // FIXME: Let's assume that all ranges are positive. if (v == null) { return false; --- 90,109 ---- } protected Seq valueAsSeq(Object value) throws ConstraintFailure { return CharSeqUtil.create(value); } ! protected Object rangeCopy(int start, int end) { ! checkRange(start, end); ! if (start == 0 && end == -1) { ! return str.toString(); ! } ! start = normalizeIndex(start); ! end = normalizeIndex(end); ! return str.substring(start, end); ! } ! ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { return false; *************** *** 428,430 **** --- 398,401 ---- return CharSeqUtil.create(str); } + } \ No newline at end of file Index: memShortSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memShortSequenceContent.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** memShortSequenceContent.java 13 May 2004 19:39:16 -0000 1.18 --- memShortSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.19 *************** *** 22,26 **** import org.nodal.util.GetterUtil; import org.nodal.util.IndexBoundsException; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.ShortGetterUtil; import org.nodal.util.ShortSeqUtil; --- 22,25 ---- *************** *** 90,126 **** }; ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { ! checkRange(s, e); ! return new RangeGetter(s, e, c); ! } ! ! private final class RangeGetter extends GetterUtil { ! private int start; ! private int end; ! private final NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! public Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private short[] rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 89,93 ---- }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 148,152 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { --- 115,119 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { Index: memByteSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memByteSequenceContent.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** memByteSequenceContent.java 13 May 2004 19:39:16 -0000 1.17 --- memByteSequenceContent.java 12 Jul 2004 22:57:25 -0000 1.18 *************** *** 26,30 **** import org.nodal.util.GetterUtil; import org.nodal.util.IndexBoundsException; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.TypeConstraintFailure; --- 26,29 ---- *************** *** 92,128 **** }; ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { ! checkRange(s, e); ! return new RangeGetter(s, e, c); ! } ! ! private class RangeGetter extends GetterUtil { ! private int start; ! private int end; ! private final NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! protected Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private byte[] rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 91,95 ---- }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 150,154 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { --- 117,121 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { Index: memGenericSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memGenericSequenceContent.java,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** memGenericSequenceContent.java 13 May 2004 19:39:16 -0000 1.56 --- memGenericSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.57 *************** *** 94,124 **** } ! private final class RangeGetter extends GetterUtil { ! private final int start; ! private final int end; ! private final NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! public Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private Vector rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 94,98 ---- } ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 142,146 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { checkRange(start, end); --- 116,120 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { checkRange(start, end); *************** *** 176,185 **** } - protected GetterUtil rangeGetter(int s, int e, NodeContent c) - throws IndexBoundsException { - checkRange(s, e); - return new RangeGetter(s, e, c); - } - // Implementation of StContentEditor methods protected Setter itemSetter(int i, NodeContent.Editor c, NodeManager mgr) --- 150,153 ---- Index: memLongSequenceContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memLongSequenceContent.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** memLongSequenceContent.java 13 May 2004 19:39:17 -0000 1.17 --- memLongSequenceContent.java 12 Jul 2004 22:57:26 -0000 1.18 *************** *** 25,29 **** import org.nodal.util.LongSeqUtil; import org.nodal.util.LongSetterUtil; - import org.nodal.util.PropertyConstraintFailure; import org.nodal.util.TypeConstraintFailure; --- 25,28 ---- *************** *** 90,126 **** }; ! protected GetterUtil rangeGetter(int s, int e, NodeContent c) ! throws IndexBoundsException { ! checkRange(s, e); ! return new RangeGetter(s, e, c); ! } ! ! private final class RangeGetter extends GetterUtil { ! private final int start; ! private final int end; ! private final NodeContent content; ! ! RangeGetter(int s, int e, NodeContent c) { ! super(type); ! start = s; ! end = e; ! content = c; ! } ! ! public Object get() throws PropertyConstraintFailure { ! return rangeCopy(start, end); ! } ! ! public boolean valueEquals(Object v) throws IndexBoundsException { ! return rangeEquals(start, end, v); ! } ! ! public Path createPath() throws Path.Failure { ! PathOperator op = Paths.createRangeOp(start, end); ! return op.applyTo(content.path()); ! } ! }; ! ! private long[] rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { --- 89,93 ---- }; ! protected Object rangeCopy(int start, int end) throws IndexBoundsException { checkRange(start, end); if (start == 0 && end == -1) { *************** *** 148,152 **** } ! private boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { --- 115,119 ---- } ! protected boolean rangeEquals(int start, int end, Object v) throws IndexBoundsException { if (v == null) { |
From: Lee I. <le...@us...> - 2004-06-28 19:14:40
|
Update of /cvsroot/nodal/nodal/j-src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14896 Modified Files: build.xml .classpath Log Message: Use JDBM framework for saving/restoring node IDs on file:-based repositories. Index: .classpath =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/.classpath,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** .classpath 11 Mar 2004 07:35:07 -0000 1.9 --- .classpath 28 Jun 2004 19:14:29 -0000 1.10 *************** *** 9,12 **** --- 9,14 ---- <classpathentry exported="true" sourcepath="/Users/leei/Desktop/gnu.regexp-1.1.4/src/" kind="lib" path="lib/gnu-regexp-1.1.4.jar"/> <classpathentry kind="lib" path="lib/junit.jar"/> + <classpathentry kind="lib" path="lib/jdbm.jar"/> + <classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/> <classpathentry kind="output" path="build/classes"/> </classpath> Index: build.xml =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/build.xml,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** build.xml 11 Mar 2004 07:51:33 -0000 1.31 --- build.xml 28 Jun 2004 19:14:28 -0000 1.32 *************** *** 34,37 **** --- 34,38 ---- <pathelement path="${classpath}"/> <pathelement location="lib/junit.jar"/> + <pathelement location="lib/jdbm.jar"/> <!-- pathelement location="lib/jakarta-regexp-1.2.jar"/ --> <pathelement location="lib/gnu-regexp-1.1.4.jar"/> |
From: Lee I. <le...@us...> - 2004-06-28 19:14:39
|
Update of /cvsroot/nodal/nodal/j-src/storage/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14896/storage/framework Modified Files: SBNStreamServices.java StreamBasedNode.java Log Message: Use JDBM framework for saving/restoring node IDs on file:-based repositories. Index: StreamBasedNode.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/framework/StreamBasedNode.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** StreamBasedNode.java 2 Jun 2004 19:02:05 -0000 1.10 --- StreamBasedNode.java 28 Jun 2004 19:14:28 -0000 1.11 *************** *** 15,18 **** --- 15,19 ---- import java.util.HashMap; import java.util.Iterator; + import java.util.LinkedList; import java.util.List; import java.util.Map; *************** *** 94,97 **** --- 95,103 ---- */ boolean renameNode(Node node, Name nid); + + /** + * @param nidList + */ + void saveNidList(List nidList); } *************** *** 203,206 **** --- 209,214 ---- if (nidList != null) { restoreNIDs(nidList, root); + } else { + saveNIDs (root); } return root.content(); *************** *** 212,215 **** --- 220,236 ---- } + /** + * @param root + */ + private void saveNIDs(Node root) { + List nidList = new LinkedList(); + DFSIterator iter = new DFSIterator(root); + while (iter.hasNext()) { + Node node = iter.nextNode(); + nidList.add(node.id()); + } + services.saveNidList (nidList); + } + private void restoreNIDs(List nidList, Node root) throws IOException { DFSIterator iter = new DFSIterator(root); Index: SBNStreamServices.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/framework/SBNStreamServices.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SBNStreamServices.java 2 Jun 2004 19:02:05 -0000 1.4 --- SBNStreamServices.java 28 Jun 2004 19:14:28 -0000 1.5 *************** *** 84,87 **** --- 84,93 ---- /* (non-Javadoc) + * @see storage.framework.StreamBasedNode.Services#nidList() + */ + public void saveNidList(List list) { + } + + /* (non-Javadoc) * @see storage.framework.StreamBasedNode.Services#renameNode(org.nodal.model.Node, org.nodal.util.Name) */ |
From: Lee I. <le...@us...> - 2004-06-28 19:14:39
|
Update of /cvsroot/nodal/nodal/j-src/storage/file In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14896/storage/file Modified Files: FileDocument.java Log Message: Use JDBM framework for saving/restoring node IDs on file:-based repositories. Index: FileDocument.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/file/FileDocument.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** FileDocument.java 2 Jun 2004 19:02:05 -0000 1.16 --- FileDocument.java 28 Jun 2004 19:14:28 -0000 1.17 *************** *** 17,20 **** --- 17,23 ---- import java.util.Map; + import jdbm.JDBMHashtable; + import jdbm.JDBMRecordManager; + import org.nodal.Repository; import org.nodal.Types; *************** *** 34,37 **** --- 37,41 ---- /** * A class representing a Document associated with a given File object. + * * @author leei */ *************** *** 45,50 **** /** * Create a Document, given a File on a FileRepository. ! * @param repo the containing FileRepository ! * @param file the File to associate with this Document * @return a Document associated with this File or null if doesn't exist */ --- 49,57 ---- /** * Create a Document, given a File on a FileRepository. ! * ! * @param repo ! * the containing FileRepository ! * @param file ! * the File to associate with this Document * @return a Document associated with this File or null if doesn't exist */ *************** *** 57,61 **** return null; } ! } --- 64,68 ---- return null; } ! } *************** *** 72,80 **** Path path = FileRepository.pathFromFile(file); FileRepository.FileNodeFactory factory = repo.nodeFactory(file); ! RecordNode.Editor docEditor = ! factory.createNode(Types.DIRTYPE).editRecord(); try { docEditor.setField("root").set( ! new FileDirMap(repo, path, factory.nextID(), file)); } catch (ConstraintFailure e) { throw new RuntimeException("Failed setting directory root", e); --- 79,87 ---- Path path = FileRepository.pathFromFile(file); FileRepository.FileNodeFactory factory = repo.nodeFactory(file); ! RecordNode.Editor docEditor = factory.createNode(Types.DIRTYPE) ! .editRecord(); try { docEditor.setField("root").set( ! new FileDirMap(repo, path, factory.nextID(), file)); } catch (ConstraintFailure e) { throw new RuntimeException("Failed setting directory root", e); *************** *** 83,87 **** } else { SBServices services = new SBServices(repo, file); ! NodeContent.Editor docNode = StreamBasedNode.createDocStreamNode(services); doc = DocFromNode.reuseOrCreateDoc(services.path(), docNode); } --- 90,95 ---- } else { SBServices services = new SBServices(repo, file); ! NodeContent.Editor docNode = StreamBasedNode ! .createDocStreamNode(services); doc = DocFromNode.reuseOrCreateDoc(services.path(), docNode); } *************** *** 92,99 **** /** ! * An implementation of StreamBasedNode.Services based on a File ! * in a FileRepository. * * Created on Dec 3, 2003 * @author leei */ --- 100,108 ---- /** ! * An implementation of StreamBasedNode.Services based on a File in a ! * FileRepository. * * Created on Dec 3, 2003 + * * @author leei */ *************** *** 104,107 **** --- 113,119 ---- private String mimeType; private Path path; + private List nidList; + private JDBMRecordManager ndldb; + private JDBMHashtable props; SBServices(FileRepository repo, File file) { *************** *** 121,125 **** } ! /* (non-Javadoc) * @see storage.framework.StreamBasedDocument.Services#inputStream() */ --- 133,139 ---- } ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedDocument.Services#inputStream() */ *************** *** 135,139 **** } ! /* (non-Javadoc) * @see storage.framework.StreamBasedDocument.Services#mimeType() */ --- 149,155 ---- } ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedDocument.Services#mimeType() */ *************** *** 142,146 **** String name = file.getName(); mimeType = StreamBasedNode.guessContentTypeFromName(name); ! System.out.println(name + ": MIME guess " + mimeType); if (mimeType == null && file.canRead()) { try { --- 158,162 ---- String name = file.getName(); mimeType = StreamBasedNode.guessContentTypeFromName(name); ! //System.out.println(name + ": MIME guess " + mimeType); if (mimeType == null && file.canRead()) { try { *************** *** 148,152 **** if (str != null) { mimeType = URLConnection.guessContentTypeFromStream(str); ! System.out.println(name + ": MIME guess " + mimeType); } } catch (IOException e) { --- 164,168 ---- if (str != null) { mimeType = URLConnection.guessContentTypeFromStream(str); ! //System.out.println(name + ": MIME guess " + mimeType); } } catch (IOException e) { *************** *** 157,161 **** if (mimeType == null) { mimeType = "application/octet-stream"; ! System.out.println(name + ": MIME default " + mimeType); } } --- 173,177 ---- if (mimeType == null) { mimeType = "application/octet-stream"; ! //System.out.println(name + ": MIME default " + mimeType); } } *************** *** 163,167 **** } ! /* (non-Javadoc) * @see storage.framework.StreamBasedDocument.Services#nodeFactory() */ --- 179,185 ---- } ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedDocument.Services#nodeFactory() */ *************** *** 170,183 **** } ! /* (non-Javadoc) * @see storage.framework.StreamBasedNode.Services#nidList() */ public List nidList() { // NEXT Save and restore NID list for Files ! return null; } ! /* (non-Javadoc) ! * @see storage.framework.StreamBasedNode.Services#renameNode(org.nodal.model.Node, org.nodal.util.Name) */ public boolean renameNode(Node node, Name nid) { --- 188,244 ---- } ! JDBMHashtable properties() throws IOException { ! if (props == null) { ! File dir = file.getParentFile(); ! File ndlDir = new File(dir.getPath() + File.separator + "NDL"); ! if (!ndlDir.exists()) { ! if (!ndlDir.mkdir()) { ! throw new IOException("Unable to create " + ndlDir); ! } ! } ! if (!ndlDir.isDirectory()) { ! throw new IOException(ndlDir + " not a directory"); ! } ! ndldb = new JDBMRecordManager(ndlDir.getPath() + File.separator ! + "Props"); ! props = ndldb.getHashtable(file.getName()); ! } ! return props; ! } ! ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedNode.Services#nidList() */ public List nidList() { // NEXT Save and restore NID list for Files ! if (nidList != null) { ! return nidList; ! } ! try { ! // Check for Props ! this.nidList = (List) properties().get("nidList"); ! return nidList; ! } catch (IOException e) { ! return null; ! } } ! public void saveNidList(List nidList) { ! try { ! properties().put("nidList", nidList); ! this.nidList = nidList; ! } catch (IOException e) { ! System.err.println("cannot save " + file.getName() + " nidList: " + e); ! return; ! } ! } ! ! /* ! * (non-Javadoc) ! * ! * @see storage.framework.StreamBasedNode.Services#renameNode(org.nodal.model.Node, ! * org.nodal.util.Name) */ public boolean renameNode(Node node, Name nid) { *************** *** 186,188 **** } ! } --- 247,249 ---- } ! } \ No newline at end of file |
Update of /cvsroot/nodal/nodal/j-src/storage/memory In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14652/storage/memory Modified Files: memMapContent.java memSetContent.java Added Files: memNodeSetContent.java memLiteralMapContent.java memNodeMapContent.java memLiteralSetContent.java Log Message: Split implementations of Set and Map between literal and node properties. --- NEW FILE: memNodeSetContent.java --- /* * Distributed under the Apache Software License, Version 1.1 * (see below, or the file LICENSE for terms and conditions) * * Copyright (c) 2004 University of British Columbia. All rights reserved. * * Created on Jun 22, 2004 by leei */ package storage.memory; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.Set; import org.nodal.model.Node; import org.nodal.model.NodeContent; import org.nodal.model.SetContent; import org.nodal.type.SetType; import org.nodal.util.ConstraintFailure; /** * @author leei */ final class memNodeSetContent extends memSetContent { private final HashSet content; private final LinkedList propSeq; private final boolean isNodeValue; protected static memSetContent ingest (SetContent c) { memNodeSetContent mc = new memNodeSetContent((SetType) c.type()); Iterator i = c.properties(); try { while (i.hasNext()) { Object k = i.next(); mc.opSetValue(k, c.value(k), null); } } catch (ConstraintFailure f) { throw new RuntimeException("constraint failure in ingest: " + f); } return mc; } protected static memSetContent create(SetType t) { return new memNodeSetContent(t); } private memNodeSetContent(SetType t) { super(t); content = new HashSet(); propSeq = new LinkedList(); isNodeValue = t.propertyType().isNodeType(); } public Set asSet() { return Collections.unmodifiableSet(content); } public int size() { return content.size(); } public Iterator properties() { return propSeq.iterator(); } /** * Return true if this Set contains the object obj. * * @param obj * an Object * @return true if this Set contains obj */ public boolean contains(Object obj) { return content.contains(obj); } boolean opRemove (Object key, NodeContent.Editor c) { key = checkItemType(key); // Notify interested parties notifyRemove(key); // Actually remove the key boolean isRemoved = content.remove(key); if (isRemoved) { propSeq.remove(key); } return isRemoved; } boolean opAdd(Object val, NodeContent.Editor c) throws ConstraintFailure { val = checkValue(val); val = assignNode(c, val, (Node) val); // Notify any interested values notifyAdd(val); // Every single set goes through here. boolean isAdded = content.add(val); if (isAdded) { propSeq.addLast (val); } return isAdded; } } --- NEW FILE: memLiteralMapContent.java --- /* * Distributed under the Apache Software License, Version 1.1 * (see below, or the file LICENSE for terms and conditions) * * Copyright (c) 2004 University of British Columbia. All rights reserved. * * Created on Jun 22, 2004 by leei */ package storage.memory; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; import org.nodal.model.MapContent; import org.nodal.model.Node; import org.nodal.model.NodeContent; import org.nodal.type.MapType; import org.nodal.util.ConstraintFailure; import org.nodal.util.PropertyConstraintFailure; /** * @author leei */ class memLiteralMapContent extends memMapContent { private TreeMap content; protected static memMapContent create(MapType t) { return new memLiteralMapContent(t); } protected static memMapContent ingest(MapContent c) { memMapContent mc = new memLiteralMapContent((MapType) c.type()); Iterator i = c.properties(); try { while (i.hasNext()) { Object k = i.next(); mc.opSetValue(k, c.value(k), null); } } catch (ConstraintFailure f) { throw new RuntimeException("constraint failure in ingest: " + f); } return mc; } private memLiteralMapContent(MapType t) { super(t); content = new TreeMap(); } private memLiteralMapContent(memLiteralMapContent c) { super(c.mapType); content = (TreeMap) c.content.clone(); } public Iterator properties() { return content.keySet().iterator(); } void opRemoveKey(Object key, NodeContent.Editor c) throws PropertyConstraintFailure { key = checkKeyType(key); // Notify interested parties notifyRemoveKey(key); // Actually remove the key content.remove(key); } void opSetValue(Object key, Object val, NodeContent.Editor c) throws ConstraintFailure { // Check types and convert if necessary key = checkKeyType(key); val = checkValueType(val); if (val == null) { opRemoveKey(key, c); } else { if (isNodeValue) { val = assignNode(c, key, (Node) val); } // Notify any interested values notifySetValue(key, val); // Every single set goes through here. content.put(key, val); } } public Map asMap() { return Collections.unmodifiableMap(content); } public int size() { return content.size(); } protected Object getContent(Object key) { return content.get(key); } } --- NEW FILE: memNodeMapContent.java --- /* * Distributed under the Apache Software License, Version 1.1 * (see below, or the file LICENSE for terms and conditions) * * Copyright (c) 2004 University of British Columbia. All rights reserved. * * Created on Jun 22, 2004 by leei */ package storage.memory; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.Map; import org.nodal.model.MapContent; import org.nodal.model.Node; import org.nodal.model.NodeContent; import org.nodal.type.MapType; import org.nodal.util.ConstraintFailure; import org.nodal.util.PropertyConstraintFailure; /** * @author leei */ class memNodeMapContent extends memMapContent { private LinkedList keySeq; private HashMap content; protected static memMapContent create(MapType t) { return new memNodeMapContent(t); } protected static memMapContent ingest(MapContent c) { memMapContent mc = new memNodeMapContent((MapType) c.type()); Iterator i = c.properties(); try { while (i.hasNext()) { Object k = i.next(); mc.opSetValue(k, c.value(k), null); } } catch (ConstraintFailure f) { throw new RuntimeException("constraint failure in ingest: " + f); } return mc; } private memNodeMapContent(MapType t) { super(t); content = new HashMap(); keySeq = new LinkedList(); } private memNodeMapContent(memNodeMapContent c) { super(c.mapType); content = (HashMap) c.content.clone(); } public Iterator properties() { return keySeq.iterator(); } void opRemoveKey(Object key, NodeContent.Editor c) throws PropertyConstraintFailure { key = checkKeyType(key); key = seatNode (c, (Node) key); // Notify interested parties notifyRemoveKey(key); // Actually remove the key content.remove(key); keySeq.remove(key); } void opSetValue(Object key, Object val, NodeContent.Editor c) throws ConstraintFailure { // Check types and convert if necessary key = checkKeyType(key); val = checkValueType(val); if (val == null) { opRemoveKey(key, c); } else { key = seatNode(c, (Node) key); if (isNodeValue) { val = assignNode(c, key, (Node) val); } // Notify any interested values notifySetValue(key, val); // Every single set goes through here. Object v = content.put(key, val); if (v != null) { // If key not previously set, assign new seq pos to key keySeq.addLast(key); } } } public Map asMap() { return Collections.unmodifiableMap(content); } public int size() { return content.size(); } protected Object getContent(Object key) { return content.get(key); } } Index: memSetContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memSetContent.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** memSetContent.java 14 May 2004 17:31:28 -0000 1.4 --- memSetContent.java 28 Jun 2004 19:13:10 -0000 1.5 *************** *** 9,16 **** package storage.memory; - import java.util.Collections; - import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.nodal.model.Getter; import org.nodal.model.Node; --- 9,15 ---- package storage.memory; import java.util.Iterator; import java.util.Set; + import org.nodal.model.Getter; import org.nodal.model.Node; *************** *** 20,23 **** --- 19,23 ---- import org.nodal.model.Setter; import org.nodal.model.TxnOp; + import org.nodal.nav.Path; import org.nodal.nav.PathOperator; *************** *** 41,83 **** * given a Node that is using this class as its memContent. */ ! public final class memSetContent extends memContent { protected final SetType setType; ! protected HashSet content; ! protected CacheMap getters; ! private boolean isNodeValue; static memSetContent ingest(SetContent c) { ! memSetContent mc = new memSetContent((SetType) c.type()); ! Iterator i = c.properties(); ! try { ! while (i.hasNext()) { ! Object k = i.next(); ! mc.opSetValue(k, c.value(k), null); ! } ! } catch (ConstraintFailure f) { ! throw new RuntimeException("constraint failure in ingest: " + f); } - return mc; } ! static memSetContent create(SetType t) { ! return new memSetContent(t); } ! private memSetContent(SetType t) { setType = t; - content = new HashSet(); getters = new CacheMap(); - isNodeValue = t.itemType().isNodeType(); - } - - private memSetContent(memSetContent c) { - setType = c.setType; - content = (HashSet) c.content.clone(); - getters = new CacheMap(); - } - - protected NodeContent createNodeContent(Node n, Capability cap, RepoServices s) { - return new MyNodeContent(n, cap, s); } --- 41,68 ---- * given a Node that is using this class as its memContent. */ ! public abstract class memSetContent extends memContent { protected final SetType setType; ! protected final CacheMap getters; static memSetContent ingest(SetContent c) { ! SetType st = (SetType) c.type(); ! if (st.propertyType().isNodeType()) { ! return memNodeSetContent.ingest(c); ! } else { ! return memLiteralSetContent.ingest(c); } } ! static memSetContent create(SetType st) { ! if (st.propertyType().isNodeType()) { ! return memNodeSetContent.create(st); ! } else { ! return memLiteralSetContent.create(st); ! } } ! protected memSetContent(SetType t) { setType = t; getters = new CacheMap(); } *************** *** 98,129 **** } - // Implementation of Content methods - public Set asSet() { - return Collections.unmodifiableSet(content); - } - public NodeType type() { return setType; } - public int size() { - return content.size(); - } - - public Iterator properties() { - return content.iterator(); - } - - /** - * Return true if this Set contains the object obj. - * - * @param obj - * an Object - * @return true if this Set contains obj - */ - public boolean contains(Object obj) { - return content.contains(obj); - } - /** * Notify all interested parties when we remove a key. --- 83,90 ---- *************** *** 132,136 **** * the key being removed from this Map */ ! private void notifyRemove(Object val) { // Notify any interested NodeContents Iterator i = nodeContents.values(); --- 93,97 ---- * the key being removed from this Map */ ! protected void notifyRemove(Object val) { // Notify any interested NodeContents Iterator i = nodeContents.values(); *************** *** 154,158 **** * the value assigned to this key */ ! private void notifyAdd(Object val) { // Notify any interested NodeContents Iterator i = nodeContents.values(); --- 115,119 ---- * the value assigned to this key */ ! protected void notifyAdd(Object val) { // Notify any interested NodeContents Iterator i = nodeContents.values(); *************** *** 199,203 **** public Object get() { // Every single value access goes through here. ! return (content.contains(key) ? key : null); } --- 160,164 ---- public Object get() { // Every single value access goes through here. ! return (contains(key) ? key : null); } *************** *** 211,218 **** public boolean valueEquals(Object v) throws PropertyConstraintFailure { ! if (isNodeValue && v != null) { ! v = ((Node) v).bareNode(); } - return v.equals(get()); } --- 172,181 ---- public boolean valueEquals(Object v) throws PropertyConstraintFailure { ! Object val = get(); ! if (val != null) { ! return val.equals (v); ! } else { ! return val == v; } } *************** *** 248,285 **** } - boolean opRemoveKey(Object key, NodeContent.Editor c) { - key = checkItemType(key); - // Notify interested parties - notifyRemove(key); - // Actually remove the key - return content.remove(key); - } - - void opSetValue(Object key, Object val, NodeContent.Editor c) - throws ConstraintFailure { - // Check types and convert if necessary - key = checkItemType(key); - val = checkValue(val); - if (val == null) { - opRemoveKey(key, c); - } else if (key == val) { - opAdd(key, c); - } else { - throw new ConstraintFailure("key/value different in Set: " + key + ", " - + val); - } - } - - boolean opAdd(Object val, NodeContent.Editor c) throws ConstraintFailure { - val = checkValue(val); - if (isNodeValue) { - val = assignNode(c, val, (Node) val); - } - // Notify any interested values - notifyAdd(val); - // Every single set goes through here. - return content.add(val); - } - MemOperator invertAdd(Object key, NodeContent c) { Object value = getValue(key, c); --- 211,214 ---- *************** *** 376,380 **** } // Perform the operation ! return memSetContent.this.opRemoveKey(val, MyNodeEditor.this); } --- 305,309 ---- } // Perform the operation ! return memSetContent.this.opRemove(val, MyNodeEditor.this); } *************** *** 387,389 **** --- 316,342 ---- } } + + protected NodeContent createNodeContent(Node n, Capability cap, RepoServices s) { + return new MyNodeContent(n, cap, s); + } + + public abstract boolean contains(Object obj); + public abstract Set asSet(); + + abstract boolean opAdd(Object v, NodeContent.Editor c) throws ConstraintFailure; + abstract boolean opRemove(Object k, NodeContent.Editor c); + + final void opSetValue(Object key, Object val, NodeContent.Editor c) throws ConstraintFailure { + // Check types and convert if necessary + key = checkItemType(key); + val = checkValue(val); + if (val == null) { + opRemove (key, c); + } else if (key == val) { + opAdd(key, c); + } else { + throw new ConstraintFailure("key/value different in Set: " + key + ", " + + val); + } + } } \ No newline at end of file --- NEW FILE: memLiteralSetContent.java --- /* * Distributed under the Apache Software License, Version 1.1 * (see below, or the file LICENSE for terms and conditions) * * Copyright (c) 2004 University of British Columbia. All rights reserved. * * Created on Jun 22, 2004 by leei */ package storage.memory; import java.util.Collections; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import org.nodal.model.NodeContent; import org.nodal.model.SetContent; import org.nodal.type.SetType; import org.nodal.util.ConstraintFailure; /** * @author leei */ final class memLiteralSetContent extends memSetContent { private final TreeSet content; private final boolean isNodeValue; protected static memSetContent ingest (SetContent c) { memLiteralSetContent mc = new memLiteralSetContent((SetType) c.type()); Iterator i = c.properties(); try { while (i.hasNext()) { Object k = i.next(); mc.opSetValue(k, c.value(k), null); } } catch (ConstraintFailure f) { throw new RuntimeException("constraint failure in ingest: " + f); } return mc; } protected static memSetContent create(SetType t) { return new memLiteralSetContent(t); } private memLiteralSetContent(SetType t) { super(t); content = new TreeSet(); isNodeValue = t.propertyType().isNodeType(); } public Set asSet() { return Collections.unmodifiableSet(content); } public int size() { return content.size(); } public Iterator properties() { return content.iterator(); } /** * Return true if this Set contains the object obj. * * @param obj * an Object * @return true if this Set contains obj */ public boolean contains(Object obj) { return content.contains(obj); } boolean opRemove (Object key, NodeContent.Editor c) { key = checkItemType(key); // Notify interested parties notifyRemove(key); // Actually remove the key return content.remove(key); } boolean opAdd(Object val, NodeContent.Editor c) throws ConstraintFailure { val = checkValue(val); // Notify any interested values notifyAdd(val); // Every single set goes through here. return content.add(val); } } Index: memMapContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/memMapContent.java,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** memMapContent.java 14 May 2004 17:31:28 -0000 1.57 --- memMapContent.java 28 Jun 2004 19:13:10 -0000 1.58 *************** *** 9,16 **** package storage.memory; - import java.util.Collections; - import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.nodal.model.Getter; import org.nodal.model.MapContent; --- 9,15 ---- package storage.memory; import java.util.Iterator; import java.util.Map; + import org.nodal.model.Getter; import org.nodal.model.MapContent; *************** *** 41,83 **** * given a Node that is using this class as its memContent. */ ! public final class memMapContent extends memContent { protected final MapType mapType; ! protected HashMap content; ! protected CacheMap getters; ! private boolean isNodeValue; ! private boolean isNodeProperty; ! static memMapContent ingest(MapContent c) { ! memMapContent mc = new memMapContent((MapType) c.type()); ! Iterator i = c.properties(); ! try { ! while (i.hasNext()) { ! Object k = i.next(); ! mc.opSetValue(k, c.value(k), null); ! } ! } catch (ConstraintFailure f) { ! throw new RuntimeException("constraint failure in ingest: " + f); } - return mc; } ! static memMapContent create(MapType t) { ! return new memMapContent(t); } ! private memMapContent(MapType t) { mapType = t; - content = new HashMap(); getters = new CacheMap(); - isNodeProperty = t.keyType().isNodeType(); isNodeValue = t.valueType().isNodeType(); } - private memMapContent(memMapContent c) { - mapType = c.mapType; - content = (HashMap) c.content.clone(); - getters = new CacheMap(); - } - protected NodeContent createNodeContent(Node n, Capability cap, RepoServices s) { return new MyNodeContent(n, cap, s); --- 40,71 ---- * given a Node that is using this class as its memContent. */ ! public abstract class memMapContent extends memContent { protected final MapType mapType; ! protected final CacheMap getters; ! protected final boolean isNodeValue; ! static memMapContent ingest(MapContent c) { ! NodeType nt = (NodeType) c.type(); ! if (nt.propertyType().isNodeType()) { ! return memNodeMapContent.ingest (c); ! } else { ! return memLiteralMapContent.ingest (c); } } ! static memMapContent create(MapType nt) { ! if (nt.propertyType().isNodeType()) { ! return memNodeMapContent.create (nt); ! } else { ! return memLiteralMapContent.create (nt); ! } } ! protected memMapContent(MapType t) { mapType = t; getters = new CacheMap(); isNodeValue = t.valueType().isNodeType(); } protected NodeContent createNodeContent(Node n, Capability cap, RepoServices s) { return new MyNodeContent(n, cap, s); *************** *** 100,120 **** } - // Implementation of Content methods - public Map asMap() { - return Collections.unmodifiableMap(content); - } - public NodeType type() { return mapType; } - public int size() { - return content.size(); - } - - public Iterator properties() { - return content.keySet().iterator(); - } - /** * Notify all interested parties when we remove a key. --- 88,95 ---- *************** *** 123,127 **** * the key being removed from this Map */ ! private void notifyRemoveKey(Object key) { // Notify any interested NodeContents Iterator i = nodeContents.values(); --- 98,102 ---- * the key being removed from this Map */ ! protected void notifyRemoveKey(Object key) { // Notify any interested NodeContents Iterator i = nodeContents.values(); *************** *** 145,149 **** * the value assigned to this key */ ! private void notifySetValue(Object key, Object val) { // Notify any interested NodeContents Iterator i = nodeContents.values(); --- 120,124 ---- * the value assigned to this key */ ! protected void notifySetValue(Object key, Object val) { // Notify any interested NodeContents Iterator i = nodeContents.values(); *************** *** 175,178 **** --- 150,156 ---- } + protected abstract Object getContent (Object key); + public abstract Map asMap(); + /** * Implementation of the Getter associated with a particular key. *************** *** 190,194 **** public Object get() { // Every single value access goes through here. ! return content.get(key); } --- 168,172 ---- public Object get() { // Every single value access goes through here. ! return getContent (key); } *************** *** 240,273 **** } - void opRemoveKey(Object key, NodeContent.Editor c) - throws PropertyConstraintFailure { - key = checkKeyType(key); - // Notify interested parties - notifyRemoveKey(key); - // Actually remove the key - content.remove(key); - } - - void opSetValue(Object key, Object val, NodeContent.Editor c) - throws ConstraintFailure { - // Check types and convert if necessary - key = checkKeyType(key); - val = checkValueType(val); - if (val == null) { - opRemoveKey(key, c); - } else { - if (isNodeProperty) { - key = seatNode(c, (Node) key); - } - if (isNodeValue) { - val = assignNode(c, key, (Node) val); - } - // Notify any interested values - notifySetValue(key, val); - // Every single set goes through here. - content.put(key, val); - } - } - MemOperator invertRemoveKey(Object key, NodeContent c) throws PropertyConstraintFailure { --- 218,221 ---- |
From: Lee I. <le...@us...> - 2004-06-28 19:11:19
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/implementation/types In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14320/org/nodal/implementation/types Modified Files: StructTypeImpl.java Log Message: Make Struct values Comparable. Index: StructTypeImpl.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/implementation/types/StructTypeImpl.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** StructTypeImpl.java 2 Jun 2004 19:02:12 -0000 1.6 --- StructTypeImpl.java 28 Jun 2004 19:11:09 -0000 1.7 *************** *** 528,531 **** --- 528,573 ---- return null; } + /* (non-Javadoc) + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + public int compareTo(Object arg0) { + StructImpl arg = (StructImpl) arg0; + StructType argType = arg.structType(); + if (type == argType) { + // Field by field comparison + return compareByFields (arg, type); + } else if (argType.acceptsType(type)) { + // argType is a subtype of type, use fields from type + int result = compareByFields (arg, type); + return (result == 0 ? 1 : result); + } else if (type.acceptsType(argType)) { + // type is a subtype of argType, use fields from argType + int result = compareByFields (arg, type); + return (result == 0 ? -1 : result); + } else { + throw new ClassCastException ("Incompatible StructTypes"); + } + } + + /** + * Compare two StructTypeImpl objects, using the values from the + * fields in type2. + * @param arg another StructImpl object + * @param type2 a StructTypeImpl to be used as the basis for comparison + * @return -1, 0, 1 depending on whether this or arg is "greater" + */ + private int compareByFields(StructImpl arg, StructTypeImpl type2) { + Iterator i = type2.fields(); + while (i.hasNext()) { + Name field = (Name) i.next(); + Comparable thisValue = (Comparable) getValue(field); + Comparable argValue = (Comparable) arg.getValue(field); + int result = thisValue.compareTo(argValue); + if (result != 0) { + return result; + } + } + return 0; + } } |
From: Lee I. <le...@us...> - 2004-06-28 19:11:19
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14320/org/nodal/model Modified Files: Struct.java Log Message: Make Struct values Comparable. Index: Struct.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/Struct.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Struct.java 5 May 2004 03:24:34 -0000 1.2 --- Struct.java 28 Jun 2004 19:11:10 -0000 1.3 *************** *** 18,22 **** * @author leei */ ! public interface Struct extends RecordContent { /** * The StructType that defines this Object's fields. --- 18,22 ---- * @author leei */ ! public interface Struct extends RecordContent, Comparable { /** * The StructType that defines this Object's fields. |
From: Lee I. <le...@us...> - 2004-06-28 19:09:33
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13884/org/nodal/util Modified Files: Names.java Log Message: Make Name Comparable. Ensure that Name and Namespace are properly Serializable. Index: Names.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/Names.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Names.java 3 Mar 2004 21:20:19 -0000 1.4 --- Names.java 28 Jun 2004 19:09:22 -0000 1.5 *************** *** 10,15 **** package org.nodal.util; ! import java.util.Map; ! import java.util.WeakHashMap; import org.nodal.nav.Path; --- 10,17 ---- package org.nodal.util; ! import java.io.IOException; ! import java.io.ObjectStreamException; ! import java.io.Serializable; ! import java.util.Map;import java.util.WeakHashMap; import org.nodal.nav.Path; *************** *** 22,26 **** /** * Access the Name associated with the given String. ! * @param nm the name of the Name * @return a unique Name */ --- 24,30 ---- /** * Access the Name associated with the given String. ! * ! * @param nm ! * the name of the Name * @return a unique Name */ *************** *** 30,37 **** /** ! * Access the Name associated with the given String in the ! * named Namespace. ! * @param ns the name of the Namespace ! * @param nm the name of the Name * @return a unique Name in the given Namespace */ --- 34,43 ---- /** ! * Access the Name associated with the given String in the named Namespace. ! * ! * @param ns ! * the name of the Namespace ! * @param nm ! * the name of the Name * @return a unique Name in the given Namespace */ *************** *** 41,48 **** /** ! * Access the Name associated with the given String in the ! * named Namespace. ! * @param ns the name of the Namespace ! * @param nm the name of the Name * @return a unique Name in the given Namespace */ --- 47,56 ---- /** ! * Access the Name associated with the given String in the named Namespace. ! * ! * @param ns ! * the name of the Namespace ! * @param nm ! * the name of the Name * @return a unique Name in the given Namespace */ *************** *** 53,57 **** /** * Access or create the unique Namespace with this name. ! * @param path the Path of the Namespace requested. * @return the unique Namespace that has this Path. */ --- 61,67 ---- /** * Access or create the unique Namespace with this name. ! * ! * @param path ! * the Path of the Namespace requested. * @return the unique Namespace that has this Path. */ *************** *** 66,70 **** /** * Access or create a Namespace with the given URI. ! * @param uri a URI String to identify the Namespace * @return a Namespace associated with the Path with this URI */ --- 76,82 ---- /** * Access or create a Namespace with the given URI. ! * ! * @param uri ! * a URI String to identify the Namespace * @return a Namespace associated with the Path with this URI */ *************** *** 77,119 **** } - static abstract class BaseName implements Name { - /** - * Test for equality of two Names. The uniqueness guarantees of the - * creation of Names means that we can just use ==. - * @param obj the object to test equivalance with. - * @return true if these are the same Name. - */ - public final boolean equals(Object obj) { - return this == obj; - } - - /** - * Provide a complete ordering for Names. In general, we order - * lexicographically using the Namespace order followed by the - * {@link #string() string} order if namespaces are equal. - * @param obj the Object to compare with. - * @return -1, 0, or 1 depending on the relative order with obj - */ - public int compareTo(Object obj) { - Name objNS = (Name) obj; - if (namespace() == objNS.namespace()) { - return string().compareTo(objNS.string()); - } - return namespace().compareTo(objNS.namespace()); - } - } - /** ! * A mapping from the Name to the unique instance of Namespace ! * that has that name. */ private static final Map nsMap = new WeakHashMap(); /** ! * A collection of Names, each of which is guaranteed to be ! * unique and selectable from its unqualified name. * @author Lee Iverson <le...@ec...> */ ! static class NamespaceImpl implements Namespace { private static final GlobalNamespace globalNS = new GlobalNamespace(); --- 89,105 ---- } /** ! * A mapping from the Name to the unique instance of Namespace that has that ! * name. */ private static final Map nsMap = new WeakHashMap(); /** ! * A collection of Names, each of which is guaranteed to be unique and ! * selectable from its unqualified name. ! * * @author Lee Iverson <le...@ec...> */ ! static class NamespaceImpl implements Namespace, Serializable { private static final GlobalNamespace globalNS = new GlobalNamespace(); *************** *** 135,141 **** protected final Map names; /** * Construct a Namespace with the given name. ! * @param nsName the name of this Namespace. */ protected NamespaceImpl(Path nsPath) { --- 121,131 ---- protected final Map names; + private Path tPath; + /** * Construct a Namespace with the given name. ! * ! * @param nsName ! * the name of this Namespace. */ protected NamespaceImpl(Path nsPath) { *************** *** 145,148 **** --- 135,156 ---- } + private void writeObject(java.io.ObjectOutputStream out) throws IOException { + out.writeUTF(nsPath.toURLString()); + } + + private void readObject(java.io.ObjectInputStream in) throws IOException, + ClassNotFoundException { + try { + String url = in.readUTF(); + this.tPath = Paths.parse(url); + } catch (Path.Failure e) { + throw new IOException("Failed to read valid URL"); + } + } + + private Object readResolve() throws ObjectStreamException { + return getNamespace(this.tPath); + } + protected void addName(Name nm) { names.put(nm.string(), nm); *************** *** 164,167 **** --- 172,176 ---- * A special Namespace for GlobalNames. This is a singleton class, with the * single instance stored in globalNS. + * * @author leei * @see org.nodal.util.Namespace#GlobalName *************** *** 174,178 **** /** * Create or recover the GlobalName that has the String nm. ! * @param nm the String that names this Name. */ public Name name(String nm) { --- 183,189 ---- /** * Create or recover the GlobalName that has the String nm. ! * ! * @param nm ! * the String that names this Name. */ public Name name(String nm) { *************** *** 187,200 **** return new GlobalName(nm); } ! public boolean isGlobal() { ! return true; } } /** ! * The basic implementation class for Name. ! */ ! private static abstract class BaseName implements Name { protected final String str; --- 198,211 ---- return new GlobalName(nm); } ! public boolean isGlobal() { ! return true; } } /** ! * The basic implementation class for Name. ! */ ! private static abstract class BaseName implements Name, Serializable { protected final String str; *************** *** 203,207 **** } ! public int compareTo(Object obj) { Name name = (Name) obj; int val = namespace().compareTo(name.namespace()); --- 214,239 ---- } ! /** ! * Test for equality of two Names. The uniqueness guarantees of the ! * creation of Names means that we can just use ==. ! * ! * @param obj ! * the object to test equivalance with. ! * @return true if these are the same Name. ! */ ! public final boolean equals(Object obj) { ! return this == obj; ! } ! ! /** ! * Provide a complete ordering for Names. In general, we order ! * lexicographically using the Namespace order followed by the ! * {@link #string() string}order if namespaces are equal. ! * ! * @param obj ! * the Object to compare with. ! * @return -1, 0, or 1 depending on the relative order with obj ! */ ! public final int compareTo(Object obj) { Name name = (Name) obj; int val = namespace().compareTo(name.namespace()); *************** *** 231,234 **** --- 263,267 ---- return str; } + public Namespace namespace() { return globalNS; *************** *** 238,250 **** return str; } ! public boolean isGlobal() { ! return true; } } /** ! * The implementation of a Name in any but the GlobalNames ! * namespace. */ private static final class NSName extends BaseName { --- 271,282 ---- return str; } ! public boolean isGlobal() { ! return true; } } /** ! * The implementation of a Name in any but the GlobalNames namespace. */ private static final class NSName extends BaseName { *************** *** 260,275 **** return ns; } public String toString() { return ns.nsPath.toURLString() + "{" + str + "}"; } public boolean isGlobal() { ! return false; } } /** ! * Create or return the unique Name with this unqualified name in ! * this Namespace. ! * @param str the unqualified name a Name * @return the Name with this unqualified name */ --- 292,311 ---- return ns; } + public String toString() { return ns.nsPath.toURLString() + "{" + str + "}"; } + public boolean isGlobal() { ! return false; } } /** ! * Create or return the unique Name with this unqualified name in this ! * Namespace. ! * ! * @param str ! * the unqualified name a Name * @return the Name with this unqualified name */ *************** *** 286,301 **** /** ! * Specify a complete ordering for Namespaces. Based entirely on the ! * URI used to specify them. ! * @param obj the Object to compare with. * @return -1, 0, or 1 depending on the relative order with obj */ public int compareTo(Object obj) { NamespaceImpl nsObj = (NamespaceImpl) obj; ! return uri().compareTo(nsObj.uri()); } /** * A printable representation of this Namespace. * @return a printable representation of this Namespace. */ --- 322,344 ---- /** ! * Specify a complete ordering for Namespaces. Based entirely on the URI ! * used to specify them. ! * ! * @param obj ! * the Object to compare with. * @return -1, 0, or 1 depending on the relative order with obj */ public int compareTo(Object obj) { NamespaceImpl nsObj = (NamespaceImpl) obj; ! if (this == nsObj) { ! return 0; ! } else { ! return uri().compareTo(nsObj.uri()); ! } } /** * A printable representation of this Namespace. + * * @return a printable representation of this Namespace. */ *************** *** 311,313 **** } } ! } --- 354,356 ---- } } ! } \ No newline at end of file |
From: Lee I. <le...@us...> - 2004-06-21 20:09:31
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22892/org/nodal/util Modified Files: DFSIterator.java Log Message: Make DFSIterator function properly. Index: DFSIterator.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/util/DFSIterator.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** DFSIterator.java 2 Jun 2004 19:02:12 -0000 1.1 --- DFSIterator.java 21 Jun 2004 20:09:22 -0000 1.2 *************** *** 9,29 **** package org.nodal.util; import java.util.Iterator; import java.util.LinkedList; import java.util.NoSuchElementException; import org.nodal.model.Node; import org.nodal.model.NodeContent; /** ! * An Iterator for Nodes in a graph. Delivers the Node values reachable ! * from a starting point in depth-first order. * @author leei */ public class DFSIterator implements Iterator { private NodeContent current; private Iterator properties; private Node next; private LinkedList iters; /** --- 9,36 ---- package org.nodal.util; + import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.NoSuchElementException; + import java.util.Set; import org.nodal.model.Node; import org.nodal.model.NodeContent; + import org.nodal.nav.Path; + import org.nodal.nav.Paths; /** ! * An Iterator for Nodes in a graph. Delivers the Node values reachable from a ! * starting point in depth-first order. ! * * @author leei */ public class DFSIterator implements Iterator { private NodeContent current; + private Object property; private Iterator properties; private Node next; private LinkedList iters; + private Set visited; /** *************** *** 33,37 **** --- 40,47 ---- this.next = root; this.iters = new LinkedList(); + this.visited = new HashSet(); + visit(root); + //System.err.println("DFSIter: " + root); current = root.content(); if (current != null) { *************** *** 40,43 **** --- 50,61 ---- } + private boolean isVisited(Node n) { + return visited.contains(n.bareNode()); + } + + private void visit(Node n) { + visited.add(n.bareNode()); + } + public boolean hasNext() { if (next != null) { *************** *** 45,60 **** } while (properties != null && properties.hasNext()) { ! Object property = properties.next(); // If value is a Node, then return it and walk down... if (current.valueType(property).isNodeType()) { ! next = current.value(property).getNode(); ! // Push current state ! iters.add(current); ! iters.add(properties); ! // Prime pump for next level down unless Anchor ! current = (next.asAnchor() != null ? null : next.content()); ! properties = (current == null ? null : current.properties()); ! // We've found next, so exit loop ! break; } } --- 63,88 ---- } while (properties != null && properties.hasNext()) { ! property = properties.next(); // If value is a Node, then return it and walk down... if (current.valueType(property).isNodeType()) { ! //System.err.println("-- DFSIter: " + current + "." + property); ! Node maybe_next = current.value(property).getNode(); ! // Check if we've visited this one. ! if (maybe_next != null && !isVisited(maybe_next)) { ! // Remember that we've visited this one. ! next = maybe_next; ! visit(next); ! // Push current state ! iters.add(current); ! iters.add(property); ! iters.add(properties); ! //System.err.println("-- DFSIter: Push " + current+"."+property); ! // Prime pump for next level down unless Anchor ! current = (next.asAnchor() != null ? null : next.content()); ! properties = (current == null ? null : current.properties()); ! property = null; ! // We've found next, so exit loop ! break; ! } } } *************** *** 64,73 **** if (!iters.isEmpty()) { properties = (Iterator) iters.removeLast(); current = (NodeContent) iters.removeLast(); return hasNext(); } } ! return false; } --- 92,160 ---- if (!iters.isEmpty()) { properties = (Iterator) iters.removeLast(); + property = iters.removeLast(); current = (NodeContent) iters.removeLast(); + //System.err.println("-- DFSIter: Pop " + current+"."+property); return hasNext(); } } ! if (next == null) { ! //System.err.println("Done DFSIter."); ! } ! return next != null; ! } ! ! private Path buildPath(boolean makeAbsolute) { ! Path path = Paths.emptyPath(); ! Iterator i = iters.iterator(); ! ! try { ! // Now, if there is a stack, initialize from it... ! if (i.hasNext()) { ! Node n = (Node) i.next(); ! Object prop = i.next(); ! i.next(); ! if (makeAbsolute) { ! path = n.path(); ! } ! path = Paths.createPropertyOp(prop).applyTo(path); ! ! // and iterate over it, gathering properties ! while (i.hasNext()) { ! i.next(); ! prop = i.next(); ! i.next(); ! path = Paths.createPropertyOp(prop).applyTo(path); ! } ! } else { ! // Otherwise (no stack), just initialize from context ! if (makeAbsolute) { ! path = current.path(); ! } ! } ! if (property != null) { ! path = Paths.createPropertyOp(property).applyTo(path); ! } ! } catch (Path.Failure e) { ! return null; ! } ! return path; ! } ! ! public Path nextAbsolutePath() { ! if (hasNext()) { ! // Build Path from root node (head of stack) ! // and sequence of saved properties ! return buildPath(true); ! } ! return null; ! } ! ! public Path nextRelativePath() { ! if (hasNext()) { ! // Build Path from sequence of saved properties ! return buildPath(false); ! } ! return null; } *************** *** 75,80 **** if (hasNext()) { Node val = next; // Signal that we've used it up. ! next = null; return val; } --- 162,170 ---- if (hasNext()) { Node val = next; + //System.err.println("-- AbsPath: " + nextAbsolutePath()); + //System.err.println("-- RelPath: " + nextRelativePath()); + //System.err.println("<< DFSIter: " + val); // Signal that we've used it up. ! this.next = null; return val; } |
From: Lee I. <le...@us...> - 2004-06-21 20:07:43
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/implementation/types In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21605/org/nodal/implementation/types Modified Files: RecordTypeImpl.java Log Message: Properly handle Name references in RecordTypeImpl Index: RecordTypeImpl.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/implementation/types/RecordTypeImpl.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** RecordTypeImpl.java 28 Apr 2004 16:24:27 -0000 1.22 --- RecordTypeImpl.java 21 Jun 2004 20:07:34 -0000 1.23 *************** *** 301,305 **** public final Type valueType(Object property) { ! if (property instanceof Names) { Name nm = (Name) property; return fieldType(nm); --- 301,305 ---- public final Type valueType(Object property) { ! if (property instanceof Name) { Name nm = (Name) property; return fieldType(nm); |
From: Lee I. <le...@us...> - 2004-06-21 20:06:34
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/nav In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20908/org/nodal/nav Modified Files: PathOp.java DocLink.java SchemeOp.java PathRootOp.java ParentOp.java HereOp.java Paths.java FragmentRootOp.java Link.java FragmentLink.java AsDirectoryOp.java Log Message: Update path language to use EMPTY_LINK instead of null. Index: Paths.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/Paths.java,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** Paths.java 5 May 2004 03:24:36 -0000 1.38 --- Paths.java 21 Jun 2004 20:06:20 -0000 1.39 *************** *** 42,51 **** static final PathOperator DHERE_OP = HereOp.createDoc(); static final PathOperator DPARENT_OP = ParentOp.createDoc(); ! static final PathOperator FHERE_OP = HereOp.createFrag(); static final PathOperator FPARENT_OP = ParentOp.createFrag(); static final PathOperator FROOT_OP = FragmentRootOp.create(); static final PathOperator ASDIR_OP = AsDirectoryOp.create(); ! public static final Path EMPTY_PATH = DocLink.EMPTY_LINK; static { --- 42,55 ---- static final PathOperator DHERE_OP = HereOp.createDoc(); static final PathOperator DPARENT_OP = ParentOp.createDoc(); ! public static final PathOperator FHERE_OP = HereOp.createFrag(); static final PathOperator FPARENT_OP = ParentOp.createFrag(); static final PathOperator FROOT_OP = FragmentRootOp.create(); static final PathOperator ASDIR_OP = AsDirectoryOp.create(); ! static final DocumentPath EMPTY_PATH = DocLink.EMPTY_LINK; ! ! public static final Path emptyPath () { ! return EMPTY_PATH; ! } static { *************** *** 324,328 **** */ private static Path parseURI(URIDecomp uri) throws Path.Failure { ! Path p = null; if (uri.isAbsolute()) { p = applyAccum(p, SchemeOp.create(uri.getScheme())); --- 328,332 ---- */ private static Path parseURI(URIDecomp uri) throws Path.Failure { ! Path p = EMPTY_PATH; if (uri.isAbsolute()) { p = applyAccum(p, SchemeOp.create(uri.getScheme())); Index: DocLink.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/DocLink.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** DocLink.java 30 Mar 2004 00:56:06 -0000 1.16 --- DocLink.java 21 Jun 2004 20:06:20 -0000 1.17 *************** *** 35,39 **** */ protected DocLink(DocLink parent, PathOperator op) throws Path.Failure { ! super(op, (parent != null ? parent.isAbsolute() : op.isAbsolute())); this.parent = parent; this.url = null; --- 35,39 ---- */ protected DocLink(DocLink parent, PathOperator op) throws Path.Failure { ! super(op, (parent != EMPTY_LINK ? parent.isAbsolute() : op.isAbsolute())); this.parent = parent; this.url = null; *************** *** 49,53 **** throw new RuntimeException("Unable to link: not a DocumentOp"); } ! if (op.isAbsolute() && parent != null) { throw new Path.Failure("Absolute PathOperators must have no parents."); } --- 49,53 ---- throw new RuntimeException("Unable to link: not a DocumentOp"); } ! if (op.isAbsolute() && parent != DocLink.EMPTY_LINK) { throw new Path.Failure("Absolute PathOperators must have no parents."); } *************** *** 62,66 **** Link.Creator c = FragmentLink.CREATOR; return Link.create(parent, op, c); ! } else if (parent == null || parent instanceof DocLink) { DocLink dparent = (DocLink) parent; if (false && dparent != null) { --- 62,66 ---- Link.Creator c = FragmentLink.CREATOR; return Link.create(parent, op, c); ! } else if (parent == DocLink.EMPTY_LINK || parent instanceof DocLink) { DocLink dparent = (DocLink) parent; if (false && dparent != null) { *************** *** 85,89 **** static final DocLink EMPTY_LINK = EmptyLink.create(); ! static class EmptyLink extends DocLink { static EmptyLink create () { try { --- 85,89 ---- static final DocLink EMPTY_LINK = EmptyLink.create(); ! static final class EmptyLink extends DocLink { static EmptyLink create () { try { *************** *** 98,101 **** --- 98,105 ---- } + public Path parent () { + return this; + } + public Path apply (Path path) { return path; *************** *** 103,107 **** public Path apply (PathOperator op) throws Failure { ! return Link.create(null, op, DocLink.CREATOR); } --- 107,111 ---- public Path apply (PathOperator op) throws Failure { ! return Link.create(this, op, DocLink.CREATOR); } *************** *** 113,116 **** --- 117,123 ---- return ""; } + + void docString(StringBuffer s, boolean encode) { + } } *************** *** 168,172 **** void docString(StringBuffer s, boolean encode) { ! if (parent != null) { parent.docString(s, encode); } --- 175,179 ---- void docString(StringBuffer s, boolean encode) { ! if (parent != EMPTY_LINK) { parent.docString(s, encode); } *************** *** 181,185 **** public PathOperator scheme() { if (isAbsolute) { ! for (DocLink p = this; p != null; p = p.parent) { if (p.op instanceof SchemeOp) { return p.op; --- 188,192 ---- public PathOperator scheme() { if (isAbsolute) { ! for (DocLink p = this; p != EMPTY_LINK; p = p.parent) { if (p.op instanceof SchemeOp) { return p.op; *************** *** 197,201 **** public PathOperator schemeSpecific() { if (isAbsolute) { ! for (DocLink p = this; p != null; p = p.parent) { if (p.op instanceof OpaqueOp) { return p.op; --- 204,208 ---- public PathOperator schemeSpecific() { if (isAbsolute) { ! for (DocLink p = this; p != EMPTY_LINK; p = p.parent) { if (p.op instanceof OpaqueOp) { return p.op; *************** *** 230,234 **** Path pdiff = this.difference(otherParent); if (HERE_LINK == null) { ! HERE_LINK = Paths.DHERE_OP.applyTo(null); } if (pdiff == null) { --- 237,241 ---- Path pdiff = this.difference(otherParent); if (HERE_LINK == null) { ! HERE_LINK = Paths.DHERE_OP.applyTo(Paths.EMPTY_PATH); } if (pdiff == null) { *************** *** 259,263 **** } else { Path parent = parent(); ! if (parent == null) { Path diff = other; if (checkDiffs && other != this.apply(diff)) { --- 266,270 ---- } else { Path parent = parent(); ! if (parent == EMPTY_LINK) { Path diff = other; if (checkDiffs && other != this.apply(diff)) { *************** *** 288,292 **** private Path extendFromParent(Path p) throws Failure { if (PARENT_LINK == null) { ! PARENT_LINK = Paths.DPARENT_OP.applyTo(null); } return PARENT_LINK.apply(Paths.ASDIR_OP).apply(p); --- 295,299 ---- private Path extendFromParent(Path p) throws Failure { if (PARENT_LINK == null) { ! PARENT_LINK = Paths.DPARENT_OP.applyTo(Paths.EMPTY_PATH); } return PARENT_LINK.apply(Paths.ASDIR_OP).apply(p); Index: Link.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/Link.java,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** Link.java 30 Mar 2004 00:56:06 -0000 1.27 --- Link.java 21 Jun 2004 20:06:20 -0000 1.28 *************** *** 67,71 **** } if (op.equals(other.operator()) ! && (parent() == null && other.parent() == null) || parent().equivalent(other.parent())) { // Remember discovered equivalences --- 67,71 ---- } if (op.equals(other.operator()) ! && (parent() == null && other.parent() == DocLink.EMPTY_LINK) || parent().equivalent(other.parent())) { // Remember discovered equivalences *************** *** 97,101 **** Map linkCache; // Access the linkCache for this parent. ! if (parent == null) { linkCache = anchorMap; } else { --- 97,101 ---- Map linkCache; // Access the linkCache for this parent. ! if (parent == DocLink.EMPTY_LINK) { linkCache = anchorMap; } else { *************** *** 126,130 **** c = FragmentLink.CREATOR; } ! return Link.create(null, op, c); } --- 126,130 ---- c = FragmentLink.CREATOR; } ! return Link.create(DocLink.EMPTY_LINK, op, c); } *************** *** 227,231 **** } else { Path parent = path.parent(); ! if (parent == null) { return this.apply(path.operator()); } else { --- 227,231 ---- } else { Path parent = path.parent(); ! if (parent == Paths.EMPTY_PATH) { return this.apply(path.operator()); } else { *************** *** 289,293 **** */ public boolean isAncestorOf(Path other) { ! if (other == null) { return false; } else if (other.equals(this)) { --- 289,293 ---- */ public boolean isAncestorOf(Path other) { ! if (other == Paths.EMPTY_PATH) { return false; } else if (other.equals(this)) { *************** *** 303,307 **** } else { Path parent = parent(); ! if (parent == null) { return null; } else { --- 303,307 ---- } else { Path parent = parent(); ! if (parent == DocLink.EMPTY_LINK) { return null; } else { Index: AsDirectoryOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/AsDirectoryOp.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** AsDirectoryOp.java 30 Mar 2004 00:56:06 -0000 1.8 --- AsDirectoryOp.java 21 Jun 2004 20:06:20 -0000 1.9 *************** *** 92,96 **** // An initial asDirectory is a PathRootOp. //return Link.create(null, DROOT_OP, DocLink.CREATOR); ! return Link.create(null, this, DocLink.CREATOR); } else if (path.operator() == this || path.operator() == DROOT_OP) { return path; --- 92,96 ---- // An initial asDirectory is a PathRootOp. //return Link.create(null, DROOT_OP, DocLink.CREATOR); ! return Link.create(DocLink.EMPTY_LINK, this, DocLink.CREATOR); } else if (path.operator() == this || path.operator() == DROOT_OP) { return path; *************** *** 99,105 **** // Check for optimizations presented by .../../ paths. Path p2 = path.nthParent(2); ! if (p2 != null) { Path p3 = p2.parent(); ! if (p3 != null) { // A path .../a/b/../ -> .../a/ PathOperator p3op = p3.operator(); --- 99,105 ---- // Check for optimizations presented by .../../ paths. Path p2 = path.nthParent(2); ! if (p2 != DocLink.EMPTY_LINK) { Path p3 = p2.parent(); ! if (p3 != DocLink.EMPTY_LINK) { // A path .../a/b/../ -> .../a/ PathOperator p3op = p3.operator(); Index: SchemeOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/SchemeOp.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** SchemeOp.java 25 Mar 2004 21:52:34 -0000 1.9 --- SchemeOp.java 21 Jun 2004 20:06:20 -0000 1.10 *************** *** 24,28 **** */ protected SchemeLink(PathOperator op) throws Path.Failure { ! super(null, op); } --- 24,28 ---- */ protected SchemeLink(PathOperator op) throws Path.Failure { ! super(DocLink.EMPTY_LINK, op); } *************** *** 63,67 **** public Path applyTo(Path p) throws Path.Failure { ! return Link.create(null, this, SchemeLink.CREATOR); } --- 63,67 ---- public Path applyTo(Path p) throws Path.Failure { ! return Link.create(DocLink.EMPTY_LINK, this, SchemeLink.CREATOR); } Index: HereOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/HereOp.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** HereOp.java 25 Mar 2004 21:52:34 -0000 1.18 --- HereOp.java 21 Jun 2004 20:06:20 -0000 1.19 *************** *** 47,51 **** } public Path applyTo(Path p) throws Path.Failure { ! if (p != null) { return p; } --- 47,51 ---- } public Path applyTo(Path p) throws Path.Failure { ! if (p != Paths.EMPTY_PATH) { return p; } Index: PathOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/PathOp.java,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** PathOp.java 25 Mar 2004 21:52:34 -0000 1.20 --- PathOp.java 21 Jun 2004 20:06:20 -0000 1.21 *************** *** 34,40 **** public Path applyTo(Path path) throws Path.Failure { // Empty path or absolute PathOp result in new Path creation. ! if (path == null || isAbsolute()) { Link.Creator c = (isDocumentOp() ? DocLink.CREATOR : FragmentLink.CREATOR); ! return Link.create(null, this, c); } else { Link l = (Link) path; --- 34,40 ---- public Path applyTo(Path path) throws Path.Failure { // Empty path or absolute PathOp result in new Path creation. ! if (path == Paths.EMPTY_PATH || isAbsolute()) { Link.Creator c = (isDocumentOp() ? DocLink.CREATOR : FragmentLink.CREATOR); ! return Link.create(DocLink.EMPTY_LINK, this, c); } else { Link l = (Link) path; *************** *** 68,72 **** PathOperator dirOp = AsDirectoryOp.create(); Path p1 = path; ! while (p1 != null && p1.operator() != dirOp) { p1 = p1.parent(); } --- 68,72 ---- PathOperator dirOp = AsDirectoryOp.create(); Path p1 = path; ! while (p1 != Paths.EMPTY_PATH && p1.operator() != dirOp) { p1 = p1.parent(); } Index: FragmentRootOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/FragmentRootOp.java,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** FragmentRootOp.java 25 Mar 2004 21:52:34 -0000 1.23 --- FragmentRootOp.java 21 Jun 2004 20:06:20 -0000 1.24 *************** *** 31,35 **** public Path applyTo(Path p) throws Path.Failure { ! DocLink doc = (p == null ? null : (DocLink) p.documentPath()); return Link.create(doc, this, FragmentLink.CREATOR); } --- 31,35 ---- public Path applyTo(Path p) throws Path.Failure { ! DocLink doc = (DocLink) p.documentPath(); return Link.create(doc, this, FragmentLink.CREATOR); } Index: ParentOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/ParentOp.java,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** ParentOp.java 30 Mar 2004 00:56:06 -0000 1.23 --- ParentOp.java 21 Jun 2004 20:06:20 -0000 1.24 *************** *** 46,50 **** public Path applyTo(Path path) throws Path.Failure { ! if (path != null) { Path parent = path.parent(); if (parent != null) { --- 46,50 ---- public Path applyTo(Path path) throws Path.Failure { ! if (path != Paths.EMPTY_PATH) { Path parent = path.parent(); if (parent != null) { *************** *** 74,83 **** public Path applyTo(Path path) throws Path.Failure { ! if (path != null) { // Must transform foo/bar/baz ... Path p1 = findDir(path); ! if (p1 != null) { Path p3 = p1.nthParent(3); ! if (p3 != null && p3.operator() == Paths.ASDIR_OP) { return p3; } --- 74,83 ---- public Path applyTo(Path path) throws Path.Failure { ! if (path != DocLink.EMPTY_LINK) { // Must transform foo/bar/baz ... Path p1 = findDir(path); ! if (p1 != DocLink.EMPTY_LINK) { Path p3 = p1.nthParent(3); ! if (p3 != DocLink.EMPTY_LINK && p3.operator() == Paths.ASDIR_OP) { return p3; } Index: PathRootOp.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/PathRootOp.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** PathRootOp.java 25 Mar 2004 21:52:34 -0000 1.12 --- PathRootOp.java 21 Jun 2004 20:06:20 -0000 1.13 *************** *** 43,48 **** */ public Path applyTo(Path p) throws Failure { ! if (p == null) { ! return Link.create(null, this, DocLink.CREATOR); } p = p.documentPath(); --- 43,48 ---- */ public Path applyTo(Path p) throws Failure { ! if (p == DocLink.EMPTY_LINK) { ! return Link.create(DocLink.EMPTY_LINK, this, DocLink.CREATOR); } p = p.documentPath(); Index: FragmentLink.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/nav/FragmentLink.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** FragmentLink.java 26 Mar 2004 19:26:41 -0000 1.17 --- FragmentLink.java 21 Jun 2004 20:06:20 -0000 1.18 *************** *** 81,85 **** protected FragmentLink(FragmentLink parent, PathOperator op) throws Path.Failure { ! super(op, (parent == null ? op.isAbsolute() : parent.isAbsolute())); this.parent = parent; this.url = null; --- 81,85 ---- protected FragmentLink(FragmentLink parent, PathOperator op) throws Path.Failure { ! super(op, parent.isAbsolute()); this.parent = parent; this.url = null; *************** *** 87,90 **** --- 87,97 ---- } + private FragmentLink (PathOperator op) throws Path.Failure { + super (op, op.isAbsolute()); + this.parent = null; + this.url = null; + validate(); + } + // Methods from Path public Path parent() { *************** *** 93,97 **** public DocumentPath documentPath() { ! return (parent == null ? null : parent.documentPath()); } --- 100,104 ---- public DocumentPath documentPath() { ! return (parent == null ? Paths.EMPTY_PATH : parent.documentPath()); } *************** *** 147,152 **** FragmentHead(DocLink doc, PathOperator op) throws Path.Failure { ! super(null, op); ! if (doc != null && !op.isAbsolute()) { throw new Path.Failure("Cannot use relative FragmentOp (" + op + ") as head of rooted (" + doc + ") FragmentPath"); --- 154,159 ---- FragmentHead(DocLink doc, PathOperator op) throws Path.Failure { ! super(op); ! if (doc != DocLink.EMPTY_LINK && !op.isAbsolute()) { throw new Path.Failure("Cannot use relative FragmentOp (" + op + ") as head of rooted (" + doc + ") FragmentPath"); |
From: Lee I. <le...@us...> - 2004-06-02 19:02:49
|
Update of /cvsroot/nodal/nodal/j-src/storage/http In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27434/storage/http Modified Files: HttpRepository.java Log Message: o Provide propertyType() and valueType(Object) shortcuts in Content interface. o Provide framework for NID maintenance on stream-based nodes. o Add first cut of DFS iterator Index: HttpRepository.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/http/HttpRepository.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** HttpRepository.java 14 May 2004 17:31:30 -0000 1.12 --- HttpRepository.java 2 Jun 2004 19:02:06 -0000 1.13 *************** *** 137,141 **** SBNStreamServices sbnServices = new SBNStreamServices (this, abs, conn.getInputStream(), conn.getContentType()); ! return StreamBasedNode.createDoc(sbnServices); } catch (IOException e) { return null; --- 137,141 ---- SBNStreamServices sbnServices = new SBNStreamServices (this, abs, conn.getInputStream(), conn.getContentType()); ! return StreamBasedNode.createStreamDoc(sbnServices); } catch (IOException e) { return null; |
From: Lee I. <le...@us...> - 2004-06-02 19:02:47
|
Update of /cvsroot/nodal/nodal/j-src/storage/framework In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27434/storage/framework Modified Files: DocFromURL.java SBNStreamServices.java ProxyNode.java DirFromNode.java StreamBasedNode.java Log Message: o Provide propertyType() and valueType(Object) shortcuts in Content interface. o Provide framework for NID maintenance on stream-based nodes. o Add first cut of DFS iterator Index: StreamBasedNode.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/framework/StreamBasedNode.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** StreamBasedNode.java 5 May 2004 03:24:35 -0000 1.9 --- StreamBasedNode.java 2 Jun 2004 19:02:05 -0000 1.10 *************** *** 14,17 **** --- 14,19 ---- import java.net.URLConnection; import java.util.HashMap; + import java.util.Iterator; + import java.util.List; import java.util.Map; import org.nodal.Repository; *************** *** 25,34 **** import org.nodal.type.NodeType; import org.nodal.util.ConstraintFailure; /** * A Node that represents the root Node of a Document that is managed decoding ! * the contents of an InputStream. This is implemented as a proxy to a node ! * that is only created when necessary, given access requests to the Node's ! * contents or properties. * * @author leei --- 27,38 ---- import org.nodal.type.NodeType; import org.nodal.util.ConstraintFailure; + import org.nodal.util.DFSIterator; + import org.nodal.util.Name; /** * A Node that represents the root Node of a Document that is managed decoding ! * the contents of an InputStream. This is implemented as a proxy to a node that ! * is only created when necessary, given access requests to the Node's contents ! * or properties. * * @author leei *************** *** 49,59 **** --- 53,97 ---- Repository repository(); + /** + * The path associated with this stream-based document. + * + * @return + */ Path path(); + /** + * An input stream for this particular path. + * + * @return + */ InputStream inputStream(); + /** + * The MIME type of this stream. + * + * @return + */ String mimeType(); + /** + * A factory for building Node types in the context of this stream loader. + * + * @return + */ NodeFactory nodeFactory(); + + /** + * A list of NID names that represent the node names in DFS visit order. + * + * @return a list of NID names or null if unavailable + */ + List nidList(); + + /** + * A method to rename Nodes produced by the sequence. + * + * @author leei + */ + boolean renameNode(Node node, Name nid); } *************** *** 62,80 **** * * @param services ! * a set of StreamBasedNode.Services that can define a ! * Document creation environment. */ ! public static Document createDoc(StreamBasedNode.Services services) ! throws IOException { ! NodeContent.Editor node = StreamBasedNode.createDocNode(services); DocumentFormat format = DocumentFormat.Registry.get(services.mimeType()); return DocFromNode.createDoc(services.path(), node, format); } ! public static RecordNode.Editor createDocNode(Services services) { try { ! RecordNode.Editor docNode = ! AbstractDocument.createDocumentNode( ! services.nodeFactory(), services.mimeType()); Node root = new StreamBasedNode(services); docNode.setField("root").setNode(root); --- 100,116 ---- * * @param services ! * a set of StreamBasedNode.Services that can define a Document ! * creation environment. */ ! public static Document createStreamDoc(Services services) throws IOException { ! NodeContent.Editor node = StreamBasedNode.createDocStreamNode(services); DocumentFormat format = DocumentFormat.Registry.get(services.mimeType()); return DocFromNode.createDoc(services.path(), node, format); } ! public static RecordNode.Editor createDocStreamNode(Services services) { try { ! RecordNode.Editor docNode = AbstractDocument.createDocumentNode(services ! .nodeFactory(), services.mimeType()); Node root = new StreamBasedNode(services); docNode.setField("root").setNode(root); *************** *** 134,138 **** * but after installing NODAL-specific mappings. * ! * @param fname the name of the file * @return a suggested MIME type */ --- 170,175 ---- * but after installing NODAL-specific mappings. * ! * @param fname ! * the name of the file * @return a suggested MIME type */ *************** *** 151,170 **** } protected Node target() { // TODO Check for need to update if (node == null) { - DocumentFormat.Decoder dec = format().decoder(); - // This may be necessary to establish context - dec.setURI(services.path().toURLString()); try { ! InputStream in = services.inputStream(); ! Node root = dec.decode(in, services.nodeFactory()); ! if (root != null) { ! node = root.content(); ! } ! in.close(); } catch (IOException e) { ! // TODO What should I do with an IOException in decoding stream? ! node = null; } } --- 188,236 ---- } + protected NodeContent loadStream() throws IOException { + DocumentFormat.Decoder dec = format().decoder(); + // This may be necessary to establish context + dec.setURI(services.path().toURLString()); + + // Load and decode the document graph + InputStream in = services.inputStream(); + try { + Node root = dec.decode(in, services.nodeFactory()); + + // Restore the correct set of Node IDs if possible + if (root != null) { + List nidList = services.nidList(); + if (nidList != null) { + restoreNIDs(nidList, root); + } + return root.content(); + } + } finally { + in.close(); + } + return null; + } + + private void restoreNIDs(List nidList, Node root) throws IOException { + DFSIterator iter = new DFSIterator(root); + Iterator nidIter = nidList.iterator(); + while (iter.hasNext()) { + if (!nidIter.hasNext()) { + throw new IOException("Nodes and NID list unequal length"); + } + Node node = iter.nextNode(); + Name nid = (Name) nidIter.next(); + services.renameNode(node, nid); + } + } + protected Node target() { // TODO Check for need to update if (node == null) { try { ! node = loadStream(); } catch (IOException e) { ! // NEXT What to do with an IOException in load? ! ; } } *************** *** 185,187 **** } } ! } --- 251,253 ---- } } ! } \ No newline at end of file Index: DocFromURL.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/framework/DocFromURL.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** DocFromURL.java 20 Feb 2004 20:32:36 -0000 1.4 --- DocFromURL.java 2 Jun 2004 19:02:05 -0000 1.5 *************** *** 29,33 **** URL url = new URL(path.toURLString()); SBNURLServices services = new SBNURLServices(repo, path, url); ! return StreamBasedNode.createDoc(services); } } --- 29,33 ---- URL url = new URL(path.toURLString()); SBNURLServices services = new SBNURLServices(repo, path, url); ! return StreamBasedNode.createStreamDoc(services); } } Index: ProxyNode.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/framework/ProxyNode.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** ProxyNode.java 5 May 2004 03:24:35 -0000 1.13 --- ProxyNode.java 2 Jun 2004 19:02:05 -0000 1.14 *************** *** 179,183 **** return proxy.nodeType(); } ! public boolean isValidProperty(Object property) { return nodeContent.isValidProperty(property); --- 179,188 ---- return proxy.nodeType(); } ! public Type propertyType () { ! return nodeType().propertyType(); ! } ! public Type valueType (Object property) { ! return nodeType().valueType(property); ! } public boolean isValidProperty(Object property) { return nodeContent.isValidProperty(property); Index: SBNStreamServices.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/framework/SBNStreamServices.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** SBNStreamServices.java 16 Apr 2004 22:03:44 -0000 1.3 --- SBNStreamServices.java 2 Jun 2004 19:02:05 -0000 1.4 *************** *** 1,7 **** /* ! * Distributed under the Apache Software License, Version 1.1 ! * (see below, or the file LICENSE for terms and conditions) ! * ! * Copyright (c) 2004 University of British Columbia. All rights reserved. * * Created on Feb 20, 2004 by leei --- 1,7 ---- /* ! * Distributed under the Apache Software License, Version 1.1 (see below, or the ! * file LICENSE for terms and conditions) ! * ! * Copyright (c) 2004 University of British Columbia. All rights reserved. * * Created on Feb 20, 2004 by leei *************** *** 11,19 **** import java.io.IOException; import java.io.InputStream; import org.nodal.Repository; import org.nodal.model.NodeFactory; import org.nodal.nav.Path; ! public class SBNStreamServices extends BasicNodeFactory implements StreamBasedNode.Services { String mimeType; final InputStream stream; --- 11,25 ---- import java.io.IOException; import java.io.InputStream; + import java.util.List; + import org.nodal.Repository; + import org.nodal.model.Node; import org.nodal.model.NodeFactory; import org.nodal.nav.Path; + import org.nodal.util.Name; ! public class SBNStreamServices extends BasicNodeFactory ! implements ! StreamBasedNode.Services { String mimeType; final InputStream stream; *************** *** 22,28 **** public SBNStreamServices(AbstractRepository repo, Path path, ! InputStream stream, String mimeType) ! throws IOException { ! super (repo.services); this.repo = repo; this.path = path; --- 28,33 ---- public SBNStreamServices(AbstractRepository repo, Path path, ! InputStream stream, String mimeType) throws IOException { ! super(repo.services); this.repo = repo; this.path = path; *************** *** 33,38 **** public String mimeType() { return mimeType; ! } ! /* (non-Javadoc) * @see storage.framework.StreamBasedNode.Services#repository() */ --- 38,46 ---- public String mimeType() { return mimeType; ! } ! ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedNode.Services#repository() */ *************** *** 40,44 **** return repo; } ! /* (non-Javadoc) * @see storage.framework.StreamBasedNode.Services#path() */ --- 48,55 ---- return repo; } ! ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedNode.Services#path() */ *************** *** 47,51 **** } ! /* (non-Javadoc) * @see storage.framework.StreamBasedNode.Services#inputStream() */ --- 58,64 ---- } ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedNode.Services#inputStream() */ *************** *** 53,57 **** return stream; } ! /* (non-Javadoc) * @see storage.framework.StreamBasedNode.Services#nodeFactory() */ --- 66,73 ---- return stream; } ! ! /* ! * (non-Javadoc) ! * * @see storage.framework.StreamBasedNode.Services#nodeFactory() */ *************** *** 59,61 **** --- 75,91 ---- return this; } + + /* (non-Javadoc) + * @see storage.framework.StreamBasedNode.Services#nidList() + */ + public List nidList() { + return null; + } + + /* (non-Javadoc) + * @see storage.framework.StreamBasedNode.Services#renameNode(org.nodal.model.Node, org.nodal.util.Name) + */ + public boolean renameNode(Node node, Name nid) { + return false; + } } \ No newline at end of file Index: DirFromNode.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/framework/DirFromNode.java,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** DirFromNode.java 14 May 2004 17:31:24 -0000 1.14 --- DirFromNode.java 2 Jun 2004 19:02:05 -0000 1.15 *************** *** 21,25 **** import org.nodal.model.Node; import org.nodal.model.NodeContent; ! import org.nodal.model.TxnHandler; import org.nodal.nav.Path; import org.nodal.nav.Paths; --- 21,25 ---- import org.nodal.model.Node; import org.nodal.model.NodeContent; ! import org.nodal.model.TxnHandlerFilter; import org.nodal.nav.Path; import org.nodal.nav.Paths; *************** *** 37,41 **** * @author leei */ ! public class DirFromNode extends DocFromNode implements Directory, TxnHandler { private Node mapNode; protected Directory.Editor editor; --- 37,41 ---- * @author leei */ ! public class DirFromNode extends DocFromNode implements Directory { private Node mapNode; protected Directory.Editor editor; *************** *** 66,70 **** // Listen to events from the contents. ! content.addTxnHandler(this); return mapNode.asMapNode(); --- 66,70 ---- // Listen to events from the contents. ! content.addTxnHandler(new Handler()); return mapNode.asMapNode(); *************** *** 347,411 **** } ! public final void notifyAdd(NodeContent c, Object value) { ! } ! ! /* ! * (non-Javadoc) ! * ! * @see org.nodal.model.TxnHandler#notifyInsertBefore(org.nodal.model.NodeContent, ! * int, java.lang.Object) ! */ ! public final void notifyInsertBefore(NodeContent c, int index, Object value) { ! } ! ! /* ! * (non-Javadoc) ! * ! * @see org.nodal.model.TxnHandler#notifyInsertAfter(org.nodal.model.NodeContent, ! * int, java.lang.Object) ! */ ! public final void notifyInsertAfter(NodeContent c, int index, Object value) { ! } ! ! /* ! * (non-Javadoc) ! * ! * @see org.nodal.model.TxnHandler#notifyRemoveRange(org.nodal.model.NodeContent, ! * int, int) ! */ ! public final void notifyRemoveRange(NodeContent c, int start, int end) { ! } ! ! /* ! * (non-Javadoc) ! * ! * @see org.nodal.model.TxnHandler#notifyReplaceRange(org.nodal.model.NodeContent, ! * int, int, java.lang.Object) ! */ ! public final void notifyReplaceRange(NodeContent c, int start, int end, ! Object seq) { ! } ! ! /* ! * (non-Javadoc) ! * ! * @see org.nodal.model.TxnHandler#notifySetValue(org.nodal.model.NodeContent, ! * java.lang.Object, java.lang.Object) ! */ ! public void notifySetValue(NodeContent c, Object property, Object value) { ! // TODO Handle by creating link... ! } ! ! /* ! * (non-Javadoc) ! * ! * @see org.nodal.model.TxnHandler#notifyRemoveKey(org.nodal.model.NodeContent, ! * java.lang.Object) ! */ ! public void notifyRemove(NodeContent c, Object key) { ! // TODO Handle by unlinking... } ! public String toString() { return "Directory<" + path().toURLString() + ">"; --- 347,360 ---- } + class Handler extends TxnHandlerFilter { + public void notifySetValue(NodeContent c, Object property, Object value) { + // TODO Handle by creating link... + } ! public void notifyRemove(NodeContent c, Object key) { ! // TODO Handle by unlinking... ! } } ! public String toString() { return "Directory<" + path().toURLString() + ">"; |
From: Lee I. <le...@us...> - 2004-06-02 19:02:45
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/model In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27434/org/nodal/model Modified Files: Content.java Log Message: o Provide propertyType() and valueType(Object) shortcuts in Content interface. o Provide framework for NID maintenance on stream-based nodes. o Add first cut of DFS iterator Index: Content.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/model/Content.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** Content.java 5 May 2004 03:24:34 -0000 1.21 --- Content.java 2 Jun 2004 19:02:05 -0000 1.22 *************** *** 43,46 **** --- 43,59 ---- /** + * The Type of all properties for this Content object. + * @return the Type of this Content object's properties + */ + Type propertyType (); + + /** + * The Type of values for this Content object's property. + * @param property an Object that identifies a property + * @return the Type restricting values for this property + */ + Type valueType(Object property); + + /** * The number of properties contained in this Content object. */ |
From: Lee I. <le...@us...> - 2004-06-02 19:02:45
|
Update of /cvsroot/nodal/nodal/j-src/storage/file In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27434/storage/file Modified Files: FileDocument.java Log Message: o Provide propertyType() and valueType(Object) shortcuts in Content interface. o Provide framework for NID maintenance on stream-based nodes. o Add first cut of DFS iterator Index: FileDocument.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/file/FileDocument.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** FileDocument.java 29 Feb 2004 19:24:06 -0000 1.15 --- FileDocument.java 2 Jun 2004 19:02:05 -0000 1.16 *************** *** 14,17 **** --- 14,18 ---- import java.net.URLConnection; import java.util.HashMap; + import java.util.List; import java.util.Map; *************** *** 19,22 **** --- 20,24 ---- import org.nodal.Types; import org.nodal.filesystem.Document; + import org.nodal.model.Node; import org.nodal.model.NodeContent; import org.nodal.model.RecordNode; *************** *** 24,27 **** --- 26,30 ---- import org.nodal.nav.Path; import org.nodal.util.ConstraintFailure; + import org.nodal.util.Name; import storage.framework.AbstractDocument; *************** *** 80,84 **** } else { SBServices services = new SBServices(repo, file); ! NodeContent.Editor docNode = StreamBasedNode.createDocNode(services); doc = DocFromNode.reuseOrCreateDoc(services.path(), docNode); } --- 83,87 ---- } else { SBServices services = new SBServices(repo, file); ! NodeContent.Editor docNode = StreamBasedNode.createDocStreamNode(services); doc = DocFromNode.reuseOrCreateDoc(services.path(), docNode); } *************** *** 166,169 **** --- 169,187 ---- return repo.nodeFactory(file); } + + /* (non-Javadoc) + * @see storage.framework.StreamBasedNode.Services#nidList() + */ + public List nidList() { + // NEXT Save and restore NID list for Files + return null; + } + + /* (non-Javadoc) + * @see storage.framework.StreamBasedNode.Services#renameNode(org.nodal.model.Node, org.nodal.util.Name) + */ + public boolean renameNode(Node node, Name nid) { + return false; + } } |
From: Lee I. <le...@us...> - 2004-06-02 19:02:45
|
Update of /cvsroot/nodal/nodal/j-src/storage/memory In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27434/storage/memory Modified Files: BareContent.java Log Message: o Provide propertyType() and valueType(Object) shortcuts in Content interface. o Provide framework for NID maintenance on stream-based nodes. o Add first cut of DFS iterator Index: BareContent.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/storage/memory/BareContent.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** BareContent.java 14 May 2004 17:31:28 -0000 1.26 --- BareContent.java 2 Jun 2004 19:02:06 -0000 1.27 *************** *** 71,74 **** --- 71,82 ---- } + public Type propertyType () { + return node.nodeType().propertyType(); + } + + public Type valueType (Object property) { + return node.nodeType().valueType(property); + } + public AnchorNode asAnchor() { return null; *************** *** 217,221 **** return content.nodeType(); } ! // Methods from Content public final Type type() { --- 225,235 ---- return content.nodeType(); } ! public final Type propertyType() { ! return nodeType().propertyType(); ! } ! public final Type valueType (Object property) { ! return nodeType().valueType(property); ! } ! // Methods from Content public final Type type() { |
From: Lee I. <le...@us...> - 2004-06-02 19:02:21
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/implementation/types In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27434/org/nodal/implementation/types Modified Files: StructTypeImpl.java Log Message: o Provide propertyType() and valueType(Object) shortcuts in Content interface. o Provide framework for NID maintenance on stream-based nodes. o Add first cut of DFS iterator Index: StructTypeImpl.java =================================================================== RCS file: /cvsroot/nodal/nodal/j-src/org/nodal/implementation/types/StructTypeImpl.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** StructTypeImpl.java 5 May 2004 03:24:36 -0000 1.5 --- StructTypeImpl.java 2 Jun 2004 19:02:12 -0000 1.6 *************** *** 450,453 **** --- 450,459 ---- return type; } + public Type propertyType () { + return type.propertyType(); + } + public Type valueType(Object property) { + return type.valueType(property); + } public Getter field(Name name) { int idx = type.fieldMap().fieldIndex(name); |
From: Lee I. <le...@us...> - 2004-06-02 19:02:20
|
Update of /cvsroot/nodal/nodal/j-src/org/nodal/util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27434/org/nodal/util Added Files: DFSIterator.java Log Message: o Provide propertyType() and valueType(Object) shortcuts in Content interface. o Provide framework for NID maintenance on stream-based nodes. o Add first cut of DFS iterator --- NEW FILE: DFSIterator.java --- /* * Distributed under the Apache Software License, Version 1.1 * (see below, or the file LICENSE for terms and conditions) * * Copyright (c) 2004 University of British Columbia. All rights reserved. * * Created on May 31, 2004 by leei */ package org.nodal.util; import java.util.Iterator; import java.util.LinkedList; import java.util.NoSuchElementException; import org.nodal.model.Node; import org.nodal.model.NodeContent; /** * An Iterator for Nodes in a graph. Delivers the Node values reachable * from a starting point in depth-first order. * @author leei */ public class DFSIterator implements Iterator { private NodeContent current; private Iterator properties; private Node next; private LinkedList iters; /** * */ public DFSIterator(Node root) { this.next = root; this.iters = new LinkedList(); current = root.content(); if (current != null) { properties = current.properties(); } } public boolean hasNext() { if (next != null) { return true; } while (properties != null && properties.hasNext()) { Object property = properties.next(); // If value is a Node, then return it and walk down... if (current.valueType(property).isNodeType()) { next = current.value(property).getNode(); // Push current state iters.add(current); iters.add(properties); // Prime pump for next level down unless Anchor current = (next.asAnchor() != null ? null : next.content()); properties = (current == null ? null : current.properties()); // We've found next, so exit loop break; } } if (next == null) { // Since properties.hasNext() is false, we must pop off stack and // try again with that context. if (!iters.isEmpty()) { properties = (Iterator) iters.removeLast(); current = (NodeContent) iters.removeLast(); return hasNext(); } } return false; } public Node nextNode() { if (hasNext()) { Node val = next; // Signal that we've used it up. next = null; return val; } throw new NoSuchElementException(); } public Object next() { return nextNode(); } public void remove() { throw new UnsupportedOperationException(); } } |