opendap.dap
Class DSequence

java.lang.Object
  extended by opendap.dap.BaseType
      extended by opendap.dap.DConstructor
          extended by opendap.dap.DSequence
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, ClientIO
Direct Known Subclasses:
asciiSeq, SDSequence, wwwSequence

public class DSequence
extends DConstructor
implements ClientIO

A DSequence in OPeNDAP can hold N sequentially accessed instances of a set of variables. In relation to the DStructure datatype, a DSequence is a table of N instances of a DStructure. Data in a DSequence is accessed row by row.

Unlike its C++ counterpart, this class reads all of its rows on a deserialize, which gives DSequence the same semantics as the other BaseType classes, eliminating the need to worry about DSequence as a special case.

Version:
$Revision: 23881 $
Author:
jehamby
See Also:
BaseType, DConstructor, Serialized Form

Field Summary
protected  java.util.Vector allValues
          The values in this DSequence, stored as a Vector of Vector of BaseType objects.
protected static byte END_OF_SEQUENCE
          The end of sequence byte marker
protected static byte START_OF_INSTANCE
          The start of instance byte marker
protected  java.util.Vector varTemplate
          The variables in this DSequence, stored in a Vector of BaseType objects and used as a template for deserialize.
 
Constructor Summary
DSequence()
          Constructs a new DSequence.
DSequence(java.lang.String n)
          Constructs a new DSequence with name n.
 
Method Summary
 void addRow(java.util.Vector row)
          Adds a row to the container.
 void addVariable(BaseType v, int part)
          Adds a variable to the container.
 void checkSemantics(boolean all)
          Checks for internal consistency.
 java.lang.Object clone()
          Returns a clone of this DSequence.
 void delRow(int row)
          Deletes a row from the container.
 void deserialize(java.io.DataInputStream source, ServerVersion sv, StatusUI statusUI)
          Reads data from a DataInputStream.
 int elementCount(boolean leaves)
          Returns the number of variables contained in this object.
 void externalize(java.io.DataOutputStream sink)
          Writes data to a DataOutputStream.
protected  int getLevel()
          Returns the level of this sequence.
 java.util.Vector getRow(int row)
          Gets a row from the container.
 int getRowCount()
          Returns the number of rows in this Sequence.
 java.lang.String getTypeName()
          Returns the OPeNDAP type name of the class instance as a String.
 BaseType getVar(int index)
          Gets the indexed variable.
 BaseType getVariable(int row, java.lang.String name)
          Returns the named variable in the given row of the sequence.
 BaseType getVariable(java.lang.String name)
          Returns the named variable.
 java.util.Enumeration getVariables()
          Return an Enumeration that can be used to iterate over the members of a Sequence.
 void printDecl(java.io.PrintWriter os, java.lang.String space, boolean print_semi, boolean constrained)
          Write the variable's declaration in a C-style syntax.
 void printVal(java.io.PrintWriter os, java.lang.String space, boolean print_decl_p)
          Prints the value of the variable, with its declaration.
protected  void setLevel(int level)
          Sets the level of this sequence.
protected  void writeMarker(java.io.DataOutputStream sink, byte marker)
          Writes a marker byte to the output stream.
 
Methods inherited from class opendap.dap.DConstructor
addVariable, printXML, someChildHasAttributes
 
Methods inherited from class opendap.dap.BaseType
addAttributeAlias, addAttributeContainer, appendAttribute, appendAttribute, appendAttributeContainer, checkSemantics, delAttribute, delAttribute, elementCount, getAttribute, getAttribute, getAttributeNames, getAttributeTable, getClearName, getLongName, getName, getParent, hasAttributes, newPrimitiveVector, printAttributes, printAttributes, printAttributes, printAttributes, printDecl, printDecl, printDecl, printDecl, printDecl, printDecl, printDecl, printVal, printVal, printVal, printXML, printXML, printXML, printXML, setClearName, setName, setParent
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

START_OF_INSTANCE

protected static byte START_OF_INSTANCE
The start of instance byte marker


END_OF_SEQUENCE

protected static byte END_OF_SEQUENCE
The end of sequence byte marker


varTemplate

protected java.util.Vector varTemplate
The variables in this DSequence, stored in a Vector of BaseType objects and used as a template for deserialize.


allValues

protected java.util.Vector allValues
The values in this DSequence, stored as a Vector of Vector of BaseType objects.

Constructor Detail

DSequence

public DSequence()
Constructs a new DSequence.


DSequence

public DSequence(java.lang.String n)
Constructs a new DSequence with name n.

Parameters:
n - the name of the variable.
Method Detail

clone

public java.lang.Object clone()
Returns a clone of this DSequence. A deep copy is performed on all data inside the variable.

Overrides:
clone in class BaseType
Returns:
a clone of this DSequence.

getTypeName

public java.lang.String getTypeName()
Returns the OPeNDAP type name of the class instance as a String.

Specified by:
getTypeName in class BaseType
Returns:
the OPeNDAP type name of the class instance as a String.

setLevel

protected final void setLevel(int level)
Sets the level of this sequence.

Parameters:
level - the new level.

getLevel

protected final int getLevel()
Returns the level of this sequence.

Returns:
the level of this sequence.

elementCount

public int elementCount(boolean leaves)
Returns the number of variables contained in this object. For simple and vector type variables, it always returns 1. To count the number of simple-type variable in the variable tree rooted at this variable, set leaves to true.

Overrides:
elementCount in class BaseType
Parameters:
leaves - If true, count all the simple types in the `tree' of variables rooted at this variable.
Returns:
the number of contained variables.

addVariable

public void addVariable(BaseType v,
                        int part)
Adds a variable to the container.

Specified by:
addVariable in class DConstructor
Parameters:
v - the variable to add.
part - ignored for DSequence.

addRow

public final void addRow(java.util.Vector row)
Adds a row to the container. This is assumed to contain a Vector of variables of the same type and in the same order as the variable template added with the addVariable method.

Parameters:
row - the Vector to add.

getRow

public final java.util.Vector getRow(int row)
Gets a row from the container. This returns a Vector of variables of the same type and in the same order as the variable template added with the addVariable method.

Parameters:
row - the row number to retrieve.
Returns:
the Vector of BaseType variables.

delRow

public final void delRow(int row)
Deletes a row from the container.

Parameters:
row - the row number to delete.
Throws:
java.lang.ArrayIndexOutOfBoundsException - if the index was invalid.

getRowCount

public int getRowCount()
Returns the number of rows in this Sequence.

Returns:
the number of rows currently in this Sequence.

getVariable

public BaseType getVariable(java.lang.String name)
                     throws NoSuchVariableException
Returns the named variable. Note: In DSequence, this method returns the template variable, which holds no data. If you need to get a variable containing data, use getRow or the getVariable method which takes a row number parameter.

Specified by:
getVariable in class DConstructor
Parameters:
name - the name of the variable.
Returns:
the named variable.
Throws:
NoSuchVariableException - if the named variable does not exist in this container.
See Also:
getVariable(int, String)

getVar

public BaseType getVar(int index)
                throws NoSuchVariableException
Gets the indexed variable. For a DSrquence this returns the BaseType from the indexth column from the internal map Vector.

Specified by:
getVar in class DConstructor
Parameters:
index - the index of the variable in the Vector Vars.
Returns:
the indexed variable.
Throws:
NoSuchVariableException - if the named variable does not exist in this container.

getVariable

public BaseType getVariable(int row,
                            java.lang.String name)
                     throws NoSuchVariableException
Returns the named variable in the given row of the sequence.

Parameters:
row - the row number to retrieve.
name - the name of the variable.
Returns:
the named variable.
Throws:
NoSuchVariableException - if the named variable does not exist in this container.

getVariables

public java.util.Enumeration getVariables()
Return an Enumeration that can be used to iterate over the members of a Sequence. This implementation provides access to the template elements of the Sequence, not the entire sequence. Each Object returned by the Enumeration can be cast to a BaseType.

Specified by:
getVariables in class DConstructor
Returns:
An Enumeration

checkSemantics

public void checkSemantics(boolean all)
                    throws BadSemanticsException
Checks for internal consistency. For DSequence, verify that the variables have unique names.

Overrides:
checkSemantics in class BaseType
Parameters:
all - for complex constructor types, this flag indicates whether to check the semantics of the member variables, too.
Throws:
BadSemanticsException - if semantics are bad, explains why.
See Also:
BaseType.checkSemantics(boolean)

printDecl

public void printDecl(java.io.PrintWriter os,
                      java.lang.String space,
                      boolean print_semi,
                      boolean constrained)
Write the variable's declaration in a C-style syntax. This function is used to create textual representation of the Data Descriptor Structure (DDS). See The OPeNDAP User Manual for information about this structure.

Overrides:
printDecl in class BaseType
Parameters:
os - The PrintWriter on which to print the declaration.
space - Each line of the declaration will begin with the characters in this string. Usually used for leading spaces.
print_semi - a boolean value indicating whether to print a semicolon at the end of the declaration.
constrained - a boolean value indicating whether to print the declartion dependent on the projection information. This is only used by Server side code.
See Also:
BaseType.printDecl(PrintWriter, String, boolean)

printVal

public void printVal(java.io.PrintWriter os,
                     java.lang.String space,
                     boolean print_decl_p)
Prints the value of the variable, with its declaration. This function is primarily intended for debugging OPeNDAP applications and text-based clients such as geturl.

Specified by:
printVal in class BaseType
Parameters:
os - the PrintWriter on which to print the value.
space - this value is passed to the printDecl method, and controls the leading spaces of the output.
print_decl_p - a boolean value controlling whether the variable declaration is printed as well as the value.
See Also:
BaseType.printVal(PrintWriter, String, boolean)

deserialize

public void deserialize(java.io.DataInputStream source,
                        ServerVersion sv,
                        StatusUI statusUI)
                 throws java.io.IOException,
                        DataReadException
Reads data from a DataInputStream. This method is only used on the client side of the OPeNDAP client/server connection.

Specified by:
deserialize in interface ClientIO
Parameters:
source - a DataInputStream to read from.
sv - the ServerVersion returned by the server.
statusUI - the StatusUI object to use for GUI updates and user cancellation notification (may be null).
Throws:
java.io.EOFException - if EOF is found before the variable is completely deserialized.
java.io.IOException - thrown on any other InputStream exception.
DataReadException - if an unexpected value was read.
See Also:
ClientIO.deserialize(DataInputStream, ServerVersion, StatusUI)

writeMarker

protected void writeMarker(java.io.DataOutputStream sink,
                           byte marker)
                    throws java.io.IOException
Writes a marker byte to the output stream.

Throws:
java.io.IOException

externalize

public void externalize(java.io.DataOutputStream sink)
                 throws java.io.IOException
Writes data to a DataOutputStream. This method is used primarily by GUI clients which need to download OPeNDAP data, manipulate it, and then re-save it as a binary file.

Specified by:
externalize in interface ClientIO
Parameters:
sink - a DataOutputStream to write to.
Throws:
java.io.IOException - thrown on any OutputStream exception.