All Libraries | This Library | Package | Class | Use | Tree | Deprecated | Index | Grand Index | Help
|  | Components |
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.sas.storage.jdbc
Class JDBCToTreeModelAdapter

    com.sas.storage.jdbc.JDBCToTreeModelAdapter

All Implemented Interfaces:
  LevelDataInterface, com.sas.table.StaticColumnInfoInterface, com.sas.util.transforms.DisplayTransformInterface, javax.swing.tree.TreeModel

Direct Known Subclasses:
  JDBCToTreeViewModelAdapter

    public class JDBCToTreeModelAdapter

implements javax.swing.tree.TreeModel, LevelDataInterface

The JDBCToTreeModelAdapter allows JDBC data sources to be displayed in any viewer that requires a model of type `javax.swing.tree.TreeModel`, mainly being a `javax.swing.JTree`. The data source must have three specific columns within it: text, level, and index. These three columns must be designated in order for the levels within the tree to be displayed correctly.

The adapter requires a `java.sql.Connection` object and a query statement. They can be passed in on the constructor or set via methods. The `setConnection()` method will apply the connection object. The `setQueryStatement()` method will apply the SQL query statement. When non-null values for both connection and query statement have been applied, the adapter is initialized and ready to use.

The query statement must be a SQL query that is valid for the JDBC data source. This may include a blank statement, if valid.

The setTextColumnName method can be used to specify a single column from the result set that contains the values to be displayed in the tree nodes. If more control is desired on what is displayed in the tree nodes, then a column values transform can be set on the adapter, via the `setColumnValuesTransform` method. The `retrieveAllColumnValues` property must be set to true in order for the column values transform to be used. If a column values transform has been specified and the `retrieveAllColumnValues` is true, then the adapter will use the specified column values transform to transform the Map containing column names (all uppercased) mapped to column values into a single Object which is used in the tree node. If the `retrieveAllColumnValues` property is true, but no column values transform has been set, then the Object used in the tree node will be a Map containing the column names (all uppercased) mapped to the column values.

The adapter can be configured and used within a webAF project. Add a `com.sas.storage.jdbc.JDBCConnection` component to your project. Open the customizer and specify the values needed for your JDBC connection.These include driver name and URL. Now open the customizer for the adapter. Specify the value for JDBC Connection using the top combo box. The drop-down list will show all JDBC Connection objects that exist in your project. You can set the properties for query statement, the three designated columns, autoCommit, and read-only, as well.

Field Summary
`protected java.lang.String` | `indexColumnName` Column name of index column
`protected boolean` | `inInit` True if the adapter is in initializion to prevent re-initialization from taking place concurrently
`protected int` | `initialLevelsRead` Number of levels initially read
`protected java.lang.String` | `levelColumnName` Column name of level column
`protected javax.swing.event.EventListenerList` | `listenerList` List of listeners
`protected com.sas.util.transforms.TransformInterface` | `nodeTransform` The transform used to transform a row of column values into a Node to be added to the tree model
`static java.lang.String` | `RB_KEY`
`protected java.lang.String` | `textColumnName` Column name of text column
`protected javax.swing.tree.DefaultTreeModel` | `treeModel` TreeModel to store node values
`protected java.lang.String` | `whereClause` The where clause applied for this particular node

Fields inherited from class com.sas.storage.jdbc.JDBCColumnValuesAdapter
`columnValuesTransform, retrieveAllColumnValues`

Fields inherited from class com.sas.storage.jdbc.JDBCAdapter
`autoCommit, CLASS_NAME, columnInfoUsed, conn, designTime, displayTransform, forwardOnly, initialized, isRowCountKnown, LABEL, meta, NAME, printWarnings, queryRowCountDisabled, queryStatement, readOnly, result, resultSetRequeryUsed, resultSetType, resultSetUsed, retrieveNumericTypesAsDouble, rowCount, rowCountQueryString, rowNumber, spcs, stmt, trimUsed`

Constructor Summary
`JDBCToTreeModelAdapter()` Default constructor
`JDBCToTreeModelAdapter(java.sql.Connection conn, java.lang.String queryStatement)` Constructor used to create an initialized adapter.
`JDBCToTreeModelAdapter(java.sql.ResultSet result)` Constructor used to connect an adapter directly to a previously created ResultSet.

Method Summary
`void` | `addChildren(java.lang.Object parentNode, java.sql.ResultSet queryResult)` Creates and adds children to the `parentNode` based on level, index, and text values in the specified `resultSet`.
`void` | `addTreeModelListener(javax.swing.event.TreeModelListener l)` Adds a listener for the TreeModelEvent posted after the tree changes.
`void` | `fireCellEvent(int row, int column)` Fire a specific event for a model signaling that one cell has changed.
`void` | `fireModelEvent()` Fire a default event for a model signaling the some aspect of the model has changed.
`void` | `fireModelEvent(java.util.EventObject event)` Fire a specific event for a model signaling that some aspect of the model has changed.
`java.lang.Object` | `getChild(java.lang.Object parent, int index)` Returns the child of parent at the index given in the parent's child array.
`int` | `getChildCount(java.lang.Object parent)` Returns the number of children of parent.
`static com.sas.beans.ExtendedBeanInfo` | `getExtendedBeanInfo()` Returns information used by the com.sas.beans.Introspector to augment the automatically introspected information about this JDBCToTreeModelAdapter.
`java.lang.String` | `getIndexColumnName()` Returns the name of the column in the data sourcet that contains the index values.
`int` | `getIndexOfChild(java.lang.Object parent, java.lang.Object child)` Returns the index of child in parent.
`int` | `getInitialLevelsRead()` Returns the number of initial levels that should be read when the adapter initializes.
`java.lang.String` | `getLevelColumnName()` Returns the name of the column in the data source that contains the level values.
`com.sas.util.transforms.TransformInterface` | `getNodeTransform()` Retruns the transform that will be used to transform a Map containing column names (all uppercased) mapped to column values from a row in the result set into an IndexedMutableTreeNode.
`java.lang.Object` | `getRoot()` Returns the root of the tree.
`java.lang.String` | `getTextColumnName()` Returns the name of the column in the data source that contains the text values.
`protected void` | `init()` Creates the Statement, ResultSet, and ResultSetMetaData objects using the `queryStatement` whenever the initialized field is false.
`boolean` | `isLeaf(java.lang.Object node)` Returns true if node is a leaf.
`protected boolean` | `readChildren(java.lang.Object node)` Read the children for this node and load them into the tree model for future access if the node has not yet been read.
`void` | `removeTreeModelListener(javax.swing.event.TreeModelListener l)` Removes a listener previously added with addTreeModelListener().
`void` | `setIndexColumnName(java.lang.String indexColumnName)` Sets the name of the column in the data source that contains the index values.
`void` | `setInitialLevelsRead(int initialLevelsRead)` Sets the number of initial levels that should be read when the adapter initializes.
`void` | `setLevelColumnName(java.lang.String levelColumnName)` Sets the name of the column in the data source that contains the level values.
`void` | `setNodeTransform(com.sas.util.transforms.TransformInterface nodeTransform)` Sets the transform that will be used to transform a Map containing column names (all uppercased) mapped to column values from a row in the result set into an IndexedMutableTreeNode.
`void` | `setTextColumnName(java.lang.String textColumnName)` Sets the name of the column in the data source that contains the text values.
`void` | `valueForPathChanged(javax.swing.tree.TreePath path, java.lang.Object newValue)` Messaged when the user has altered the value for the item identified by path to newValue.

Methods inherited from class com.sas.storage.jdbc.JDBCColumnValuesAdapter
`getColumnValuesMap, getColumnValuesTransform, isRetrieveAllColumnValues, retrieveColumnValueAt, retrieveValueAt, setColumnValuesTransform, setRetrieveAllColumnValues`

Methods inherited from class com.sas.storage.jdbc.JDBCAdapter
`addPropertyChangeListener, addPropertyChangeListener, calculateRowCount, close, doAbsolute, doCountColumns, doUpdateCell, finalize, getAutoCommit, getColumnInfo, getColumnInfoNames, getConnection, getDisplayTransform, getModel, getPrintWarnings, getQueryStatement, getResultSetConcurrency, getResultSetRowCount, getResultSetType, getRowCountByCountFunction, getRowCountQueryString, initializeData, isQueryRowCountDisabled, isReadOnly, isResultSetRequeryUsed, isRetrieveNumericTypesAsDouble, isTrimUsed, printSQLWarning, putColumnInfoUsed, putValueAt, refresh, removePropertyChangeListener, removePropertyChangeListener, retrieveColumnClass, retrieveColumnCount, retrieveColumnIndex, retrieveColumnInfoUsed, retrieveColumnLabel, retrieveRawSASNumericValue, retrieveRawSASNumericValue, retrieveValueAt, setAutoCommit, setConnection, setDisplayTransform, setModel, setPrintWarnings, setQueryRowCountDisabled, setQueryStatement, setReadOnly, setResultSetRequeryUsed, setResultSetType, setRetrieveNumericTypesAsDouble, setRowCountQueryString, setTrimUsed`

Field Detail

### RB_KEY

    public static final java.lang.String RB_KEY

See Also:
  Constant Field Values

### listenerList

    protected javax.swing.event.EventListenerList listenerList

  List of listeners

### initialLevelsRead

    protected int initialLevelsRead

  Number of levels initially read

### levelColumnName

    protected java.lang.String levelColumnName

  Column name of level column

### indexColumnName

    protected java.lang.String indexColumnName

  Column name of index column

### textColumnName

    protected java.lang.String textColumnName

  Column name of text column

### treeModel

    protected javax.swing.tree.DefaultTreeModel treeModel

  TreeModel to store node values

### inInit

    protected boolean inInit

  True if the adapter is in initializion to prevent re-initialization from taking place concurrently

### nodeTransform

    protected com.sas.util.transforms.TransformInterface nodeTransform

  The transform used to transform a row of column values into a Node to be added to the tree model

### whereClause

    protected java.lang.String whereClause

  The where clause applied for this particular node

Constructor Detail

### JDBCToTreeModelAdapter

    public JDBCToTreeModelAdapter()

  Default constructor

### JDBCToTreeModelAdapter

    public JDBCToTreeModelAdapter(java.sql.ResultSet result)

  Constructor used to connect an adapter directly to a previously created ResultSet.

  Parameters:
    `result` - ResultSet to use.

### JDBCToTreeModelAdapter

    public JDBCToTreeModelAdapter(java.sql.Connection conn,
                                  java.lang.String queryStatement)

  Constructor used to create an initialized adapter.

  Parameters:
    `conn` - A `java.sql.Connection` object.
    `queryStatement` - A SQL query that is valid for the database represented by `conn`.

Method Detail

### addTreeModelListener

    public void addTreeModelListener(javax.swing.event.TreeModelListener l)

  Adds a listener for the TreeModelEvent posted after the tree changes.

  Specified by:
    `addTreeModelListener` in interface `javax.swing.tree.TreeModel`
  Parameters:
    `l` - The listener to add

### removeTreeModelListener

    public void removeTreeModelListener(javax.swing.event.TreeModelListener l)

  Removes a listener previously added with addTreeModelListener().

  Specified by:
    `removeTreeModelListener` in interface `javax.swing.tree.TreeModel`
  Parameters:
    `l` - The listener to remove

### getInitialLevelsRead

    public int getInitialLevelsRead()

  Returns the number of initial levels that should be read when the adapter initializes.

  Returns:
    The number of initial levels loaded

### setInitialLevelsRead

    public void setInitialLevelsRead(int initialLevelsRead)

  Sets the number of initial levels that should be read when the adapter initializes.

  Parameters:
    `initialLevelsRead` - The number of levels that should be loaded By default, the initial number of levels read is three: one for the root, another for its children to be visible, and the third level to detect whether the children are leaf nodes. Setting initial values to any value less than one will read all levels.
    In order for this method to run as expected, it must be called before all of the column names have been set.

### getLevelColumnName

    public java.lang.String getLevelColumnName()

  Returns the name of the column in the data source that contains the level values.

  Specified by:
    `getLevelColumnName` in interface `LevelDataInterface`
  Returns:
    The name of column that contains the level values

### setLevelColumnName

    public void setLevelColumnName(java.lang.String levelColumnName)

  Sets the name of the column in the data source that contains the level values.

  Specified by:
    `setLevelColumnName` in interface `LevelDataInterface`
  Parameters:
    `levelColumnName` - The name of column that contains level values

### getIndexColumnName

    public java.lang.String getIndexColumnName()

  Returns the name of the column in the data sourcet that contains the index values.

  Specified by:
    `getIndexColumnName` in interface `LevelDataInterface`
  Returns:
    The name of column that contains the index values

### setIndexColumnName

    public void setIndexColumnName(java.lang.String indexColumnName)

  Sets the name of the column in the data source that contains the index values.

  Specified by:
    `setIndexColumnName` in interface `LevelDataInterface`
  Parameters:
    `indexColumnName` - The name of column that contains index values

### getTextColumnName

    public java.lang.String getTextColumnName()

  Returns the name of the column in the data source that contains the text values.

  Specified by:
    `getTextColumnName` in interface `LevelDataInterface`
  Returns:
    The name of column that contains the text values

### setTextColumnName

    public void setTextColumnName(java.lang.String textColumnName)

  Sets the name of the column in the data source that contains the text values.

  Specified by:
    `setTextColumnName` in interface `LevelDataInterface`
  Parameters:
    `textColumnName` - The name of column that contains text values

### init

    protected void init()

  Creates the Statement, ResultSet, and ResultSetMetaData objects using the `queryStatement` whenever the initialized field is false.

  Overrides:
    `init` in class `JDBCAdapter`
  Throws:
    `java.lang.IllegalStateException` - If the Connection or `queryStatement` are null.

### addChildren

    public void addChildren(java.lang.Object parentNode,
                            java.sql.ResultSet queryResult)

  Creates and adds children to the `parentNode` based on level, index, and text values in the specified `resultSet`. The cursor of the `resultSet` should be positioned before the first row.

  In order to be successfully added as a new child to the `parentNode`, the level value must be one greater than the level of the `parentNode`, and the index value must be greater than the `parentNode`'s index and less than the `parentNode`'s next relative's index.

  Parameters:
    `parentNode` - The node to which to add the new children

### setNodeTransform

    public void setNodeTransform(com.sas.util.transforms.TransformInterface nodeTransform)

  Sets the transform that will be used to transform a Map containing column names (all uppercased) mapped to column values from a row in the result set into an IndexedMutableTreeNode. The input object into the transform method is the Map containing column names (all uppercased) mapped to column values from a row in the result set. The Object returned from the transform should be an IndexedMutableTreeNode.

  Parameters:
    `nodeTransform` - the transform used to transform a Map containing column names (all uppercased) mapped to column values from a row in the result set into an IndexedMutableTreeNode

### getNodeTransform

    public com.sas.util.transforms.TransformInterface getNodeTransform()

  Retruns the transform that will be used to transform a Map containing column names (all uppercased) mapped to column values from a row in the result set into an IndexedMutableTreeNode.

### readChildren

    protected boolean readChildren(java.lang.Object node)

  Read the children for this node and load them into the tree model for future access if the node has not yet been read.

  Parameters:
    `node` - The node in which the children should be read
  Returns:
    whether this node has successfully read in its children. False will be returned when the children have been previously read.

### getChild

    public java.lang.Object getChild(java.lang.Object parent,
                                     int index)

  Returns the child of parent at the index given in the parent's child array. Parent must be a node previously obtained from this data source. This should not return null if index is a valid index for parent (that is index >= 0 && index < getChildCount(parent)).

  Specified by:
    `getChild` in interface `javax.swing.tree.TreeModel`
  Parameters:
    `parent` - A node in the tree, obtained from this data source
    `index` - Valid index of parent
  Returns:
    The child of parent at given index

### isLeaf

    public boolean isLeaf(java.lang.Object node)

  Returns true if node is a leaf. It is possible for this method to return false even if node has no children. A directory in a filesystem, for example, may contain no files; the node representing the directory is not a leaf, but it also has no children.

  Specified by:
    `isLeaf` in interface `javax.swing.tree.TreeModel`
  Parameters:
    `node` - A node in the tree, obtained from this data source
  Returns:
    True if node is a leaf

### getChildCount

    public int getChildCount(java.lang.Object parent)

  Returns the number of children of parent. Returns 0 if the node is a leaf or if it has no children. parent must be a node previously obtained from this data source.

  Specified by:
    `getChildCount` in interface `javax.swing.tree.TreeModel`
  Parameters:
    `parent` - A node in the tree, obtained from this data source
  Returns:
    The number of children of the node parent

### valueForPathChanged

    public void valueForPathChanged(javax.swing.tree.TreePath path,
                                    java.lang.Object newValue)

  Messaged when the user has altered the value for the item identified by path to newValue. If newValue signifies a truly new value the model should post a treeNodesChanged event.

  Specified by:
    `valueForPathChanged` in interface `javax.swing.tree.TreeModel`
  Parameters:
    `path` - Path to the node that the user has altered.
    `newValue` - The new value from the TreeCellEditor.

### getIndexOfChild

    public int getIndexOfChild(java.lang.Object parent,
                               java.lang.Object child)

  Returns the index of child in parent.

  Specified by:
    `getIndexOfChild` in interface `javax.swing.tree.TreeModel`
  Returns:
    Index of child

### getRoot

    public java.lang.Object getRoot()

  Returns the root of the tree. Returns null only if the tree has no nodes.

  Specified by:
    `getRoot` in interface `javax.swing.tree.TreeModel`
  Returns:
    The root of the tree

### getExtendedBeanInfo

    public static com.sas.beans.ExtendedBeanInfo getExtendedBeanInfo()

  Returns information used by the com.sas.beans.Introspector to augment the automatically introspected information about this JDBCToTreeModelAdapter.

### fireCellEvent

    public void fireCellEvent(int row,
                              int column)

  Fire a specific event for a model signaling that one cell has changed. Subclasses must override this method to fire specific events for their model.

  Specified by:
    `fireCellEvent` in class `JDBCAdapter`
  Parameters:
    `row` - row number of the cell that has been modified
    `column` - column number of the cell that has been modified

### fireModelEvent

    public void fireModelEvent(java.util.EventObject event)

  Fire a specific event for a model signaling that some aspect of the model has changed. Subclasses must override this method to fire specific events for their model.

  Specified by:
    `fireModelEvent` in class `JDBCAdapter`
  Parameters:
    `event` - Event that must be cast that should be fired

### fireModelEvent

    public void fireModelEvent()

  Fire a default event for a model signaling the some aspect of the model has changed. Subclasses must override this method to fire a default events for their model.

  Specified by:
    `fireModelEvent` in class `JDBCAdapter`

All Libraries | This Library | Package | Class | Use | Tree | Deprecated | Index | Grand Index | Help
|  | Components |
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2009 SAS Institute Inc. All Rights Reserved.