mondrian.xmla
Class Rowset

java.lang.Object
  extended by mondrian.xmla.Rowset
All Implemented Interfaces:
XmlaConstants
Direct Known Subclasses:
RowsetDefinition.DbschemaCatalogsRowset, RowsetDefinition.DbschemaColumnsRowset, RowsetDefinition.DbschemaProviderTypesRowset, RowsetDefinition.DbschemaSchemataRowset, RowsetDefinition.DbschemaTablesInfoRowset, RowsetDefinition.DbschemaTablesRowset, RowsetDefinition.DiscoverDatasourcesRowset, RowsetDefinition.DiscoverEnumeratorsRowset, RowsetDefinition.DiscoverKeywordsRowset, RowsetDefinition.DiscoverLiteralsRowset, RowsetDefinition.DiscoverPropertiesRowset, RowsetDefinition.DiscoverSchemaRowsetsRowset, RowsetDefinition.MdschemaActionsRowset, RowsetDefinition.MdschemaCubesRowset, RowsetDefinition.MdschemaDimensionsRowset, RowsetDefinition.MdschemaFunctionsRowset, RowsetDefinition.MdschemaHierarchiesRowset, RowsetDefinition.MdschemaLevelsRowset, RowsetDefinition.MdschemaMeasuresRowset, RowsetDefinition.MdschemaMembersRowset, RowsetDefinition.MdschemaPropertiesRowset, RowsetDefinition.MdschemaSetsRowset

abstract class Rowset
extends Object
implements XmlaConstants

Base class for an XML for Analysis schema rowset. A concrete derived class should implement populateImpl(mondrian.xmla.XmlaResponse, org.olap4j.OlapConnection, java.util.List), calling addRow(mondrian.xmla.Rowset.Row, java.util.List) for each row.

Since:
May 2, 2003
Author:
jhyde
See Also:
RowsetDefinition

Nested Class Summary
protected static class Rowset.Row
          A set of name/value pairs, which can be output using addRow(mondrian.xmla.Rowset.Row, java.util.List).
protected static class Rowset.XmlElement
          Holder for non-scalar column values of a Rowset.Row.
 
Field Summary
protected  boolean deep
           
protected  Map<String,String> extraProperties
           
protected  XmlaHandler handler
           
protected static org.apache.log4j.Logger LOGGER
           
protected  Map<String,String> properties
           
protected  XmlaRequest request
           
protected  Map<String,Object> restrictions
           
protected  RowsetDefinition rowsetDefinition
           
 
Fields inherited from interface mondrian.xmla.XmlaConstants
CHH_AUTHORIZATION_CODE, CHH_AUTHORIZATION_FAULT_FS, CHH_CODE, CHH_FAULT_FS, CLIENT_FAULT_FC, CONTEXT_MIME_TYPE, CONTEXT_ROLE_NAME, CONTEXT_XMLA_PASSWORD, CONTEXT_XMLA_SESSION_ID, CONTEXT_XMLA_SESSION_STATE, CONTEXT_XMLA_SESSION_STATE_BEGIN, CONTEXT_XMLA_SESSION_STATE_END, CONTEXT_XMLA_SESSION_STATE_WITHIN, CONTEXT_XMLA_USERNAME, CPOSTA_CODE, CPOSTA_FAULT_FS, CPREA_CODE, CPREA_FAULT_FS, FAULT_ACTOR, FAULT_FC_PREFIX, FAULT_FS_PREFIX, FAULT_NS_PREFIX, HSB_ACCESS_DENIED_CODE, HSB_ACCESS_DENIED_FAULT_FS, HSB_BAD_COMMAND_CODE, HSB_BAD_COMMAND_FAULT_FS, HSB_BAD_METHOD_CODE, HSB_BAD_METHOD_FAULT_FS, HSB_BAD_METHOD_NS_CODE, HSB_BAD_METHOD_NS_FAULT_FS, HSB_BAD_NON_NULLABLE_COLUMN_CODE, HSB_BAD_NON_NULLABLE_COLUMN_FAULT_FS, HSB_BAD_PROPERTIES_CODE, HSB_BAD_PROPERTIES_FAULT_FS, HSB_BAD_PROPERTIES_LIST_CODE, HSB_BAD_PROPERTIES_LIST_FAULT_FS, HSB_BAD_REQUEST_TYPE_CODE, HSB_BAD_REQUEST_TYPE_FAULT_FS, HSB_BAD_RESTRICTION_LIST_CODE, HSB_BAD_RESTRICTION_LIST_FAULT_FS, HSB_BAD_RESTRICTIONS_CODE, HSB_BAD_RESTRICTIONS_FAULT_FS, HSB_BAD_SOAP_BODY_CODE, HSB_BAD_SOAP_BODY_FAULT_FS, HSB_BAD_STATEMENT_CODE, HSB_BAD_STATEMENT_FAULT_FS, HSB_CONNECTION_DATA_SOURCE_CODE, HSB_CONNECTION_DATA_SOURCE_FAULT_FS, HSB_DISCOVER_FORMAT_CODE, HSB_DISCOVER_FORMAT_FAULT_FS, HSB_DISCOVER_UNPARSE_CODE, HSB_DISCOVER_UNPARSE_FAULT_FS, HSB_DRILL_THROUGH_FORMAT_CODE, HSB_DRILL_THROUGH_FORMAT_FAULT_FS, HSB_DRILL_THROUGH_NOT_ALLOWED_CODE, HSB_DRILL_THROUGH_NOT_ALLOWED_FAULT_FS, HSB_DRILL_THROUGH_SQL_CODE, HSB_DRILL_THROUGH_SQL_FAULT_FS, HSB_EXECUTE_QUERY_CODE, HSB_EXECUTE_QUERY_FAULT_FS, HSB_EXECUTE_UNPARSE_CODE, HSB_EXECUTE_UNPARSE_FAULT_FS, HSB_PARSE_QUERY_CODE, HSB_PARSE_QUERY_FAULT_FS, HSB_PROCESS_CODE, HSB_PROCESS_FAULT_FS, HSB_UNKNOWN_CODE, HSB_UNKNOWN_FAULT_FS, HSH_BAD_SESSION_ID_CODE, HSH_BAD_SESSION_ID_FAULT_FS, HSH_MUST_UNDERSTAND_CODE, HSH_MUST_UNDERSTAND_FAULT_FS, HSH_UNKNOWN_CODE, HSH_UNKNOWN_FAULT_FS, MONDRIAN_NAMESPACE, MSM_UNKNOWN_CODE, MSM_UNKNOWN_FAULT_FS, MUST_UNDERSTAND_FAULT_FC, NS_SOAP_ENC_1_1, NS_SOAP_ENC_1_2, NS_SOAP_ENV_1_1, NS_SOAP_ENV_1_2, NS_SOAP_SECEXT, NS_SQL, NS_XMLA, NS_XMLA_EMPTY, NS_XMLA_EX, NS_XMLA_MDDATASET, NS_XMLA_ROWSET, NS_XSD, NS_XSI, SERVER_FAULT_FC, SOAP_MUST_UNDERSTAND_ATTR, SOAP_PREFIX, UNKNOWN_ERROR_CODE, UNKNOWN_ERROR_FAULT_FS, USM_DOM_FACTORY_CODE, USM_DOM_FACTORY_FAULT_FS, USM_DOM_PARSE_CODE, USM_DOM_PARSE_FAULT_FS, USM_DOM_PARSE_IO_CODE, USM_DOM_PARSE_IO_FAULT_FS, USM_REQUEST_INPUT_CODE, USM_REQUEST_INPUT_FAULT_FS, USM_REQUEST_STATE_CODE, USM_REQUEST_STATE_FAULT_FS, USM_UNKNOWN_CODE, USM_UNKNOWN_FAULT_FS, VERSION_MISSMATCH_FAULT_FC, XMLA_BEGIN_SESSION, XMLA_END_SESSION, XMLA_SECURITY, XMLA_SESSION, XMLA_SESSION_ID
 
Constructor Summary
Rowset(RowsetDefinition definition, XmlaRequest request, XmlaHandler handler)
          Creates a Rowset.
 
Method Summary
protected  boolean addRow(Rowset.Row row, List<Rowset.Row> rows)
          Adds a Rowset.Row to a result, provided that it meets the necessary criteria.
protected  Util.Functor1<Boolean,Catalog> catNameCond()
           
protected  void emit(Rowset.Row row, XmlaResponse response)
          Emits a row for this rowset, reading fields from a Rowset.Row object.
(package private)  int getRestrictionValueAsInt(RowsetDefinition.Column column)
          Returns a column's restriction as an int if it exists, -1 otherwise.
(package private)  String getRestrictionValueAsString(RowsetDefinition.Column column)
          Returns the restriction if it is a String, or null otherwise.
protected  boolean isRestricted(RowsetDefinition.Column column)
          Returns true if there is a restriction for the given column definition.
(package private)
<E> Util.Functor1<Boolean,E>
makeCondition(RowsetDefinition.Column column)
          Creates a condition functor based on the restrictions on a given metadata column specified in an XMLA request.
(package private)
<E,V> Util.Functor1<Boolean,E>
makeCondition(Util.Functor1<V,? super E> getter, RowsetDefinition.Column column)
          Creates a condition functor using an accessor.
protected  boolean needConnection()
           
protected
<E> void
populate(Class<E> clazz, List<Rowset.Row> rows, Comparator<E> comparator)
          Populates all of the values in an enumeration into a list of rows.
 void populate(XmlaResponse response, OlapConnection connection, List<Rowset.Row> rows)
          Gathers the set of rows which match a given set of the criteria.
protected abstract  void populateImpl(XmlaResponse response, OlapConnection connection, List<Rowset.Row> rows)
          Gathers the set of rows which match a given set of the criteria.
protected  ArrayList<RowsetDefinition.Column> pruneRestrictions(ArrayList<RowsetDefinition.Column> list)
           
protected  void setProperty(PropertyDefinition propertyDef, String value)
          Sets a property for this rowset.
 void unparse(XmlaResponse response)
          Writes the contents of this rowset as a series of SAX events.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOGGER

protected static final org.apache.log4j.Logger LOGGER

rowsetDefinition

protected final RowsetDefinition rowsetDefinition

restrictions

protected final Map<String,Object> restrictions

properties

protected final Map<String,String> properties

extraProperties

protected final Map<String,String> extraProperties

request

protected final XmlaRequest request

handler

protected final XmlaHandler handler

deep

protected final boolean deep
Constructor Detail

Rowset

Rowset(RowsetDefinition definition,
       XmlaRequest request,
       XmlaHandler handler)
Creates a Rowset.

The exceptions thrown in this constructor are not produced during the execution of an XMLA request and so can be ordinary exceptions and not XmlaException (which are specifically for generating SOAP Fault xml).

Method Detail

pruneRestrictions

protected ArrayList<RowsetDefinition.Column> pruneRestrictions(ArrayList<RowsetDefinition.Column> list)

setProperty

protected void setProperty(PropertyDefinition propertyDef,
                           String value)
Sets a property for this rowset. Called by the constructor for each supplied property.

A derived class should override this method and intercept each property it supports. Any property it does not support, it should forward to the base class method, which will probably throw an error.


unparse

public final void unparse(XmlaResponse response)
                   throws XmlaException,
                          SQLException
Writes the contents of this rowset as a series of SAX events.

Throws:
XmlaException
SQLException

populate

public final void populate(XmlaResponse response,
                           OlapConnection connection,
                           List<Rowset.Row> rows)
                    throws XmlaException
Gathers the set of rows which match a given set of the criteria.

Throws:
XmlaException

needConnection

protected boolean needConnection()

populateImpl

protected abstract void populateImpl(XmlaResponse response,
                                     OlapConnection connection,
                                     List<Rowset.Row> rows)
                              throws XmlaException,
                                     SQLException
Gathers the set of rows which match a given set of the criteria.

Throws:
XmlaException
SQLException

addRow

protected final boolean addRow(Rowset.Row row,
                               List<Rowset.Row> rows)
                        throws XmlaException
Adds a Rowset.Row to a result, provided that it meets the necessary criteria. Returns whether the row was added.

Parameters:
row - Row
rows - List of result rows
Throws:
XmlaException

emit

protected void emit(Rowset.Row row,
                    XmlaResponse response)
             throws XmlaException,
                    SQLException
Emits a row for this rowset, reading fields from a Rowset.Row object.

Parameters:
row - Row
response - XMLA response writer
Throws:
XmlaException
SQLException

populate

protected <E> void populate(Class<E> clazz,
                            List<Rowset.Row> rows,
                            Comparator<E> comparator)
                 throws XmlaException
Populates all of the values in an enumeration into a list of rows.

Throws:
XmlaException

makeCondition

<E> Util.Functor1<Boolean,E> makeCondition(RowsetDefinition.Column column)
Creates a condition functor based on the restrictions on a given metadata column specified in an XMLA request.

A condition is a Util.Functor1 whose return type is boolean. Restrictions are used in each Rowset's discovery request. If there is no restriction then the passes method always returns true.

It is known at the beginning of a populate(XmlaResponse, org.olap4j.OlapConnection, java.util.List) method whether the restriction is not specified (null), a single value (String) or an array of values (String[]). So, creating the conditions just once at the beginning is faster than having to determine the restriction status each time it is needed.

Type Parameters:
E - Element type, e.g. Catalog or Level
Parameters:
column - Metadata column
Returns:
Condition functor

makeCondition

<E,V> Util.Functor1<Boolean,E> makeCondition(Util.Functor1<V,? super E> getter,
                                             RowsetDefinition.Column column)
Creates a condition functor using an accessor.

The accessor gets a particular property of the element in question for the column restrictions to act upon.

Type Parameters:
E - Element type, e.g. Catalog or Level
V - Value type; often String, since many restrictions work on the name or unique name of elements
Parameters:
getter - Attribute accessor
column - Metadata column
Returns:
Condition functor

getRestrictionValueAsString

String getRestrictionValueAsString(RowsetDefinition.Column column)
Returns the restriction if it is a String, or null otherwise. Does not attempt two determine if the restriction is an array of Strings if all members of the array have the same value (in which case one could return, again, simply a single String).


getRestrictionValueAsInt

int getRestrictionValueAsInt(RowsetDefinition.Column column)
Returns a column's restriction as an int if it exists, -1 otherwise.


isRestricted

protected boolean isRestricted(RowsetDefinition.Column column)
Returns true if there is a restriction for the given column definition.


catNameCond

protected Util.Functor1<Boolean,Catalog> catNameCond()

Get Mondrian at SourceForge.net. Fast, secure and free Open Source software downloads