public class LocalXMLDataSource extends DataAccessAdapter implements CubeDataDirector, CubeDataAccess, RelationalDataDirector, RelationalDataAccess, DataSource
| Modifier and Type | Field and Description |
|---|---|
protected int |
m_columnCount |
protected java.lang.Object[] |
m_columnLabels |
protected java.lang.Object[][] |
m_data |
protected DataMap |
m_dataMap |
protected javax.swing.event.EventListenerList |
m_listenerList |
protected MetadataMap |
m_metadataMap |
protected int |
m_pageCount |
protected int |
m_rowCount |
protected java.lang.Object[] |
m_rowLabels |
COLUMN_EDGE, DATA_ELEMENT_EDGE, DRILL_BACK, DRILL_COLLAPSE, DRILL_MEMBERS_ABOVE, DRILL_MEMBERS_BELOW, DRILL_REPLACE, DRILL_TO_PARENT, DRILL_TO_PARENT_AND_SIBLINGS, DRILLSTATE_DRILLABLE, DRILLSTATE_IS_DRILLED, DRILLSTATE_NOT_DRILLABLE, FORCE_FETCH_DATA, FORCE_FETCH_RELATIVE_INDENT, FORCE_FETCH_SPANS, GRAND_TOTAL_LAYER, GROUPSORT_END, GROUPSORT_MIDDLE, GROUPSORT_NONE, GROUPSORT_START, HIDDEN_EDGE, max_edge, NA_SUPPRESSION, NA_ZERO_SUPPRESSION, NO_SUPPRESSION, NO_TOTALS, PAGE_EDGE, PIVOT_CHECK_OK, PIVOT_CHECK_UNKNOWN, PIVOT_EDGES, PIVOT_MOVE_AFTER, PIVOT_MOVE_BEFORE, PIVOT_MOVE_TO, PIVOT_SWAP, PROP_ASYNCHRONOUS, PROP_AUTO_FIRE_EVENTS, PROP_CACHE_LIMIT, PROP_COLUMN_FETCH_SIZE, PROP_COLUMN_SORTS_SUPPORTED, PROP_DD2_DRILL_SUPPORTED, PROP_DD2_VARIABLE_DRILLPATHS, PROP_DEFAULT_DRILL_TYPE, PROP_EDGE_EXTENT_AVAILABLE, PROP_HIDDEN_EDGE_SUPPORTED, PROP_IS_COLUMN_OUTLINE_SUPPORTED, PROP_IS_OUTLINE_SUPPORTED, PROP_IS_REORDER_SUPPORTED, PROP_IS_ROW_OUTLINE_SUPPORTED, PROP_PAGE_SORTS_SUPPORTED, PROP_REL_INDENT_SCAN_LIMIT, PROP_ROW_FETCH_SIZE, PROP_SORTS_SUPPORTED, PROP_SUPPORTED_DRILL_TYPES, PROP_TABULAR, PROP_TOTALS_ALLOWED, PROP_TOTALS_VISIBLE, PROP_UNIQUE_MEMBERS_SCAN_LIMIT, ROW_EDGE, SECTION_EDGE, SORT_DIRECTION_ASCENDING, SORT_DIRECTION_DESCENDING, SORT_TYPE_GROUPSORT, SORT_TYPE_GROUPSORT_PAGEBREAK, SORT_TYPE_NORMAL, TOTAL_ALL_LAYERS, TOTAL_AVERAGE, TOTAL_MAXIMUM, TOTAL_MINIMUM, TOTAL_SUM, ZERO_SUPPRESSIONDATATYPE_BOOLEAN, DATATYPE_DATE, DATATYPE_DOUBLE, DATATYPE_FLOAT, DATATYPE_INTEGER, DATATYPE_LONG, DATATYPE_SHORT, DATATYPE_STRING, FIND_CASE_INSENSITIVE, FIND_CONTAINS, FIND_ENDS_WITH, FIND_EXACT, FIND_PRIOR, FIND_STARTS_WITH, QDR_WITH_PAGE, QDR_WITHOUT_PAGE| Constructor and Description |
|---|
LocalXMLDataSource(java.lang.Object[] columnLabels,
java.lang.Object[] rowLabels,
java.lang.Object[][] data)
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addDataDirectorListener(DataDirectorListener l)
Registers a listener to the data source for changes.
|
CubeDataDirector |
createCubeDataDirector()
Creates a DataDirector for cube-based (OLAP) views
|
DataDirector |
createDataDirector() |
RelationalDataDirector |
createRelationalDataDirector()
Creates a DataDirector for relational views.
|
protected void |
fireDataAvailableEvent(DataAvailableEvent e)
Fire a DataAvailableEvent to all DataDirectorListeners.
|
DataAccess |
getDataAccess()
Called by the view to get a current
BaseDataAccess model of the data. |
DataMap |
getDataMap()
Retrieves the list of types of data that can be retrieved or set
for each location in the data cursor.
|
int |
getEdgeCount()
Retrieves the total number of edges in the cursor.
|
int |
getEdgeExtent(int edge)
Retrieves the total number of members on the given edge.
|
int |
getLayerCount(int edge)
Retrieves the number of layers on the specified edge.
|
java.lang.Object |
getLayerMetadata(int edge,
int layer,
java.lang.String type)
Retrieves the specified type of metadata for a member at the specified
location.
|
int |
getMemberDepth(int edge,
int layer,
int slice)
Retrieves the size (expressed in layers that are perpendicular to
the specified edge orientation) of a member at the specified
layer, slice, and edge.
|
int |
getMemberExtent(int edge,
int layer,
int slice)
Retrieves the number of slices that a member spans.
|
java.lang.Object |
getMemberMetadata(int edge,
int layer,
int slice,
java.lang.String type)
Retrieves a piece of metadata for a dimension member.
|
QDR |
getMemberQDR(int edge,
int layer,
int slice,
int flags)
Retrieves a
QDR object that represents the data value for the member at
the specified edge, layer, and slice. |
int |
getMemberStartSlice(int edge,
int layer,
int slice)
Retrieves the first slice that a member spans.
|
MetadataMap |
getMetadataMap(int edge,
int layer)
Retrieves the list of available types of metadata.
|
java.lang.Object |
getSliceLabel(int edge,
int slice,
java.lang.String type)
Retrieves the label for the specified slice.
|
int |
getSliceMemberCount(int edge,
int slice)
Retrieves the number of logical layers at the specified location on the
specified edge.
|
QDR |
getSliceQDR(int edge,
int slice,
int flags)
Retrieves a
QDR object that represents the data value at the specified
slice on the edge (that is, across all relevant logical layers of the
slice). |
DataMap |
getSupportedDataMap()
Return a
DataMap that contains all of the types that
this DataAccessAdapter can support. |
LayerMetadataMap |
getSupportedLayerMetadataMap()
Return a
LayerMetadataMap that contains all of the types
that this DataAccessAdapter can support. |
MetadataMap |
getSupportedMetadataMap()
Retrieves a
MetadataMap that contains all of the types that
this DataAccessAdapter can support. |
java.lang.Object |
getValue(int row,
int col,
java.lang.String type)
Retrieves a data value for the specified row and column intersection.
|
QDR |
getValueQDR(int row,
int column,
int flags)
Retrieves a
QDR object that represents the value at the specified
row and column in the data area of the cursor. |
void |
removeDataDirectorListener(DataDirectorListener l)
Removes a listener from the data source.
|
allSlicesFetched, cancel, changeEdgeCurrentHPos, changeEdgeCurrentSlice, deleteMemberCalc, deleteValueCalc, drill, drill, drill, drill, drillOK, drillOK, drillOK, drillOK, dropChanges, endGroupEdit, findMember, findMembers, fireEvents, forceFetch, getColumnSorts, getCompatibleDataItemMetadata, getCorrespondingMemberMetadata, getCorrespondingMemberMetadata, getDimensionSorts, getEdgeCurrentHPos, getEdgeCurrentSlice, getEdgeSymmetric, getExpressions, getFirstHPos, getLastHPos, getLayerQDR, getMemberHPos, getMemberLogicalLayer, getMemberMetadata, getMemberQDR, getMemberSiblingCount, getMemberSorts, getMemberStartLayer, getNextHPos, getPrevHPos, getProperty, getQDRoverrideCollection, getSliceOutlineLayer, getSlicesFromQDR, getSorts, getStatus, getUniqueMemberMetadata, getUniqueMemberMetadata, insertMemberCalc, insertValueCalc, isAutoSubmit, isCancelable, isFetched, isMemberExtentComplete, isOutline, pivot, pivotCheck, pivotOK, redoEdit, refresh, release, reorder, revalidate, setAutoSubmit, setColumnSorts, setDataMap, setDimensionSorts, setExpressions, setLayerMetadata, setManualUpdate, setMemberSorts, setMetadataMap, setOutline, setProperty, setSorts, setValue, startExecution, startGroupEdit, submitChanges, undoEdit, updateclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitcancel, changeEdgeCurrentHPos, changeEdgeCurrentSlice, deleteMemberCalc, deleteValueCalc, drill, drill, drill, drill, drillOK, drillOK, drillOK, drillOK, fireEvents, getColumnSorts, getCompatibleDataItemMetadata, getDimensionSorts, getExpressions, getMemberSorts, getProperty, getSorts, getStatus, insertMemberCalc, insertValueCalc, isCancelable, isOutline, pivot, pivotCheck, pivotOK, refresh, release, reorder, revalidate, setColumnSorts, setDataMap, setDimensionSorts, setExpressions, setLayerMetadata, setManualUpdate, setMemberSorts, setMetadataMap, setOutline, setProperty, setSorts, startExecution, updateallSlicesFetched, dropChanges, endGroupEdit, findMember, findMembers, forceFetch, getCorrespondingMemberMetadata, getCorrespondingMemberMetadata, getEdgeCurrentHPos, getEdgeCurrentSlice, getFirstHPos, getLastHPos, getLayerQDR, getMemberHPos, getMemberLogicalLayer, getMemberMetadata, getMemberQDR, getMemberSiblingCount, getNextHPos, getPrevHPos, getQDRoverrideCollection, getSliceOutlineLayer, getSlicesFromQDR, getUniqueMemberMetadata, getUniqueMemberMetadata, isAutoSubmit, isFetched, isMemberExtentComplete, redoEdit, release, setAutoSubmit, setValue, startGroupEdit, submitChanges, undoEditgetEdgeSymmetric, getMemberStartLayerprotected javax.swing.event.EventListenerList m_listenerList
protected DataMap m_dataMap
protected MetadataMap m_metadataMap
protected int m_columnCount
protected int m_rowCount
protected int m_pageCount
protected java.lang.Object[] m_columnLabels
protected java.lang.Object[] m_rowLabels
protected java.lang.Object[][] m_data
public LocalXMLDataSource(java.lang.Object[] columnLabels,
java.lang.Object[] rowLabels,
java.lang.Object[][] data)
public CubeDataDirector createCubeDataDirector()
createCubeDataDirector in interface DataSourcepublic RelationalDataDirector createRelationalDataDirector()
createRelationalDataDirector in interface DataSourcepublic void addDataDirectorListener(DataDirectorListener l)
addDataDirectorListener in interface DataDirectoraddDataDirectorListener in class DataAccessAdapterl - The listener to add.public void removeDataDirectorListener(DataDirectorListener l)
removeDataDirectorListener in interface DataDirectorremoveDataDirectorListener in class DataAccessAdapterl - The listener to remove.public DataDirector createDataDirector()
public DataAccess getDataAccess() throws DataDirectorException
DataDirectorBaseDataAccess model of the data.getDataAccess in interface DataDirectorgetDataAccess in class DataAccessAdapterBaseDataAccessDataDirectorExceptionpublic DataMap getDataMap()
getDataMap in interface DataDirectorgetDataMap in class DataAccessAdapterpublic int getEdgeCount()
getEdgeCount in interface CDFDataAccessgetEdgeCount in class DataAccessAdapterpublic int getEdgeExtent(int edge)
throws EdgeOutOfRangeException
getEdgeExtent in interface CDFDataAccessgetEdgeExtent in class DataAccessAdapteredge - A constant that represents the edge of interest.
The constants end with _EDGE in
DataDirector.EdgeOutOfRangeException - If the edge parameter is
not valid.DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
*public int getLayerCount(int edge)
throws EdgeOutOfRangeException
getLayerCount in interface CDFDataAccessgetLayerCount in class DataAccessAdapteredge - A constant that represents the edge of interest.
The constants end with _EDGE in
DataDirector.layer parameter in other API calls:
the valid range is from zero to this return value minus one.
This implementation returns zero.EdgeOutOfRangeException - If edge is out of range.DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic java.lang.Object getLayerMetadata(int edge,
int layer,
java.lang.String type)
throws EdgeOutOfRangeException,
LayerOutOfRangeException
getLayerMetadata in interface CDFDataAccessgetLayerMetadata in class DataAccessAdapteredge - A constant that represents the edge in which to look for
the member metadata.
The constants end with _EDGE in
DataDirector.layer - The zero-based index of the layer for which metadata is
requested.
Uses a depth computation to identify the
location of the layer or layer member;
0 is the outer-most layer on the edge.
The value for this parameter can be obtained by calling
getMemberLogicalLayer.type - A constant that specifies the kind of metadata that
you want.
Valid type values are defined in the
LayerMetadataMap.EdgeOutOfRangeException - If edge is too large.LayerOutOfRangeException - If layer is negative or
too large.LayerMetadataMap,
DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic int getMemberDepth(int edge,
int layer,
int slice)
throws EdgeOutOfRangeException,
LayerOutOfRangeException,
SliceOutOfRangeException
The sum of all the members' values for this method, within a specified
slice, should not exceed the value that getLayerCount
returns for the specified edge.
This method is useful only in cases of asymmetry where the members on an edge do not all cover one layer and have a depth of 1. On a symmetric edge, all members have a member depth of 1.
This implementation returns 1 for the row and column edges.
getMemberDepth in interface CDFDataAccessgetMemberDepth in class DataAccessAdapteredge - A constant that represents the edge in which to look for
the layer and slice.
The constants end with _EDGE in
DataDirector.layer - The zero-based index of the starting physical
layer in which to look for the slice,
as returned by getMemberStartLayer.slice - An absolute index (zero-based) that indicates the location
of a slice along the specified edge.
Each member in the innermost layer has a unique slice.
In outer layers, any slice that the
outer member spans can be used.EdgeOutOfRangeException - If edge is too large.LayerOutOfRangeException - If layer is negative or
too large.SliceOutOfRangeException - If slice is negative or
too large.DataAccessAdapter.getMemberStartLayer(int, int, int),
DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic int getMemberExtent(int edge,
int layer,
int slice)
throws EdgeOutOfRangeException,
LayerOutOfRangeException,
SliceOutOfRangeException
getMemberExtent in interface CDFDataAccessgetMemberExtent in class DataAccessAdapteredge - A constant that represents the edge in which to look for
the layer and slice.
The constants end with _EDGE in
DataDirector.layer - The zero-based index of the physical layer of the member
whose size will be returned.
Valid values are zero to total layers at the specified
slice.slice - An absolute index (zero-based) that indicates the location
along the edge of the member whose extent will be returned.
Each member in the innermost layer has a unique slice.
In outer layers, any slice that the outer member spans
can be used.EdgeOutOfRangeException - If edge is too large.LayerOutOfRangeException - If layer is negative or
too largeSliceOutOfRangeException - If slice is negative or
too largeDataAccessAdapter.getMemberStartSlice(int, int, int),
DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic java.lang.Object getMemberMetadata(int edge,
int layer,
int slice,
java.lang.String type)
throws EdgeOutOfRangeException,
LayerOutOfRangeException,
SliceOutOfRangeException
getMemberMetadata in interface CDFDataAccessgetMemberMetadata in class DataAccessAdapteredge - A constant that represents the edge in which to look for
the member metadata.
The constants end with _EDGE in
DataDirector.layer - The zero-based index of the physical layer in which to
find the slice.
Valid values are zero to total layers at the specified
slice.slice - An absolute index (zero-based) that indicates the location
along the edge of a slice that belongs to the member
for which metadata is requested.
Each member in the innermost layer has a unique slice.
In outer layers, any slice that the
outer member spans can be used.type - A constant that specifies the kind of metadata requested.
Valid type values are defined in
MetadataMap.
The caller should have intialized the appropriate
MetadataMap object with any types of metadata
that the caller intends to use.LayerOutOfRangeException - If layer is negative or
too large.SliceOutOfRangeException - If slice is negative or
too large.EdgeOutOfRangeExceptionMetadataMap,
DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic int getMemberStartSlice(int edge,
int layer,
int slice)
throws EdgeOutOfRangeException,
LayerOutOfRangeException,
SliceOutOfRangeException
getMemberStartSlice in interface CDFDataAccessgetMemberStartSlice in class DataAccessAdapteredge - A constant that represents the edge in which to look for
the layer and slice.
The constants end with _EDGE in
DataDirector.layer - The zero-based index of the physical layer of the member
whose first slice will be returned.
Valid values are zero to total layers at the specified
slice.slice - An absolute index (zero-based) that indicates the location
along the specified edge of the member whose starting slice
will be returned.
Each member in the innermost layer has a unique slice.
In outer layers, any slice that the outer member spans
can be used.EdgeOutOfRangeException - If edge is too large.LayerOutOfRangeException - If layer is negative or
too large.SliceOutOfRangeException - If slice is negative or
too large.DataAccessAdapter.getMemberExtent(int, int, int),
DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic MetadataMap getMetadataMap(int edge, int layer) throws EdgeOutOfRangeException, LayerOutOfRangeException
getMetadataMap in interface DataDirectorgetMetadataMap in class DataAccessAdapteredge - A constant that indicates the edge that contains the
logical layer.
Valid constants end with _EDGE
in this interface.
A value of -1 is a request
for the default MetadataMap.layer - A zero-based index for the logical layer for which to
retrieve the metadata map.
The outermost layer on the specified edge is zero.
A layer value of -1 indicates all of the
layers on the specified edge.layer.EdgeOutOfRangeException - if edge is out of range.LayerOutOfRangeException - If no layer exists at this location.DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic java.lang.Object getSliceLabel(int edge,
int slice,
java.lang.String type)
throws EdgeOutOfRangeException,
SliceOutOfRangeException
getSliceLabel in interface DataAccessgetSliceLabel in class DataAccessAdapteredge - A constant that represents the edge of interest.
The constants end with _EDGE in
DataDirector.slice - An absolute index (zero-based) along the specified edge
that indicates the slice for which concatenated metadata
is desired.type - A constant that specifies the kind of metadata that the
caller wants to have returned.
Valid type values are defined in the class
MetadataMap class.EdgeOutOfRangeException - If edge is out of range.SliceOutOfRangeException - If slice is negative or
too large.DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic int getSliceMemberCount(int edge,
int slice)
throws EdgeOutOfRangeException,
SliceOutOfRangeException
getSliceMemberCount in interface DataAccessgetSliceMemberCount in class DataAccessAdapteredge - A constant that represents the edge of interest.
The constants end with _EDGE in
DataDirector.slice - An absolute index (zero-based) that indicates the location
of a slice along the specified edge.
Each member in the innermost layer has a unique slice.
In outer layers, any slice that the
outer member spans can be used.EdgeOutOfRangeException - If edge is out of range.SliceOutOfRangeException - If slice is negative or too
large.DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGEpublic java.lang.Object getValue(int row,
int col,
java.lang.String type)
throws RowOutOfRangeException,
ColumnOutOfRangeException
getValue in interface DataAccessgetValue in class DataAccessAdapterrow - The row to get.col - The column to get.type - Type of data to return, such as formatted or unformatted.
Valid type values are defined in the DataMap.RowOutOfRangeException - If row is negative or too
large.ColumnOutOfRangeException - If column is negative or
too large.DataMappublic QDR getValueQDR(int row, int column, int flags) throws RowOutOfRangeException, ColumnOutOfRangeException
QDR object that represents the value at the specified
row and column in the data area of the cursor.getValueQDR in interface DataAccessgetValueQDR in class DataAccessAdapterrow - The row in the data cursor for which to return the QDR.column - The column in the data cursor for which to return the QDR.flags - A constant that identifies whether to include page edge
information if the QDR is not for the page edge. Valid
constants are listed in the See Also section.QDR object that refers to the data at the
specified location.RowOutOfRangeException - If the row parameter is
not valid.ColumnOutOfRangeException - If the column parameter
is not valid.DataAccess.QDR_WITH_PAGE,
DataAccess.QDR_WITHOUT_PAGEpublic QDR getSliceQDR(int edge, int slice, int flags) throws EdgeOutOfRangeException, SliceOutOfRangeException
QDR object that represents the data value at the specified
slice on the edge (that is, across all relevant logical layers of the
slice).getSliceQDR in interface DataAccessgetSliceQDR in class DataAccessAdapteredge - A constant that represents the edge of in which to find the
slice.
The constants end with _EDGE in
DataDirector.slice - An absolute index (zero-based) that indicates the location
of the slice along the specified edge.flags - A constant that identifies whether to include page edge
information if the QDR is not for the page edge. Valid
constants are listed in the See Also section.QDR object that refers to the data at the
specified location.EdgeOutOfRangeException - If the edge parameter
is not valid.SliceOutOfRangeException - If the slice parameter
is not valid.DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGE,
DataAccess.QDR_WITH_PAGE,
DataAccess.QDR_WITHOUT_PAGEpublic QDR getMemberQDR(int edge, int layer, int slice, int flags) throws EdgeOutOfRangeException, LayerOutOfRangeException, SliceOutOfRangeException
QDR object that represents the data value for the member at
the specified edge, layer, and slice.getMemberQDR in interface DataAccessgetMemberQDR in class DataAccessAdapteredge - A constant that represents the edge of interest.
The constants end with _EDGE in
DataDirector.layer - A zero-based index that represents the physical layer of
the member for which the QDR object is requested.slice - An absolute index (zero-based) that indicates the location,
along the specified edge, of a slice that belongs to the
member for which the QDR object is requested.flags - A constant that identifies whether to include page edge
information if the QDR is not for the page edge. Valid
constants are listed in the See Also section.QDR object that refers to the data at the
specified position.EdgeOutOfRangeException - If edge is not valid.LayerOutOfRangeException - If layer is not valid for
the specified edge.SliceOutOfRangeException - If slice is not valid for
the specified edge and
layer.DataDirector.COLUMN_EDGE,
DataDirector.PAGE_EDGE,
DataDirector.ROW_EDGE,
DataAccess.QDR_WITH_PAGE,
DataAccess.QDR_WITHOUT_PAGEprotected void fireDataAvailableEvent(DataAvailableEvent e)
public DataMap getSupportedDataMap()
DataAccessAdapterDataMap that contains all of the types that
this DataAccessAdapter can support.
Some types of data might not be available in some types
of queries.getSupportedDataMap in interface DataDirectorgetSupportedDataMap in class DataAccessAdapternull.DataMappublic MetadataMap getSupportedMetadataMap()
DataAccessAdapterMetadataMap that contains all of the types that
this DataAccessAdapter can support.
Some types of metadata might not be available in some types of queries.getSupportedMetadataMap in interface DataDirectorgetSupportedMetadataMap in class DataAccessAdapternull.MetadataMappublic LayerMetadataMap getSupportedLayerMetadataMap()
DataAccessAdapterLayerMetadataMap that contains all of the types
that this DataAccessAdapter can support.
Some types of layer metadata might not be available in some types
of queries.getSupportedLayerMetadataMap in interface DataDirectorgetSupportedLayerMetadataMap in class DataAccessAdapternull.LayerMetadataMap