/** * @param t * @return all layers contained in this theme and subthemes */ public static List<Layer> getAllLayers( Theme t ) { List<Layer> list = new ArrayList<Layer>(); if ( t == null ) { return list; } list.addAll( t.getLayers() ); for ( Theme c : t.getThemes() ) { list.addAll( getAllLayers( c ) ); } return list; }
private void exportTheme( Theme t ) throws XMLStreamException { writer.writeStartElement( WMTSNS, "Theme" ); exportMetadata( t.getLayerMetadata(), false, null, null ); for ( Theme t2 : t.getThemes() ) { exportTheme( t2 ); } exportLayers( t.getLayers() ); writer.writeEndElement(); }
public static void aggregateSpatialMetadata( Theme theme ) { // TODO price question is, bottom up or top down inheritance? Possibly a combined approach is desirable (top // down inheritance for configured theme values, bottom up for envelopes from layers or so) SpatialMetadata curSmd = theme.getLayerMetadata().getSpatialMetadata(); Envelope env = curSmd.getEnvelope(); List<ICRS> crs = new ArrayList<ICRS>(); if ( curSmd.getCoordinateSystems() != null ) { crs.addAll( curSmd.getCoordinateSystems() ); } for ( Theme t : theme.getThemes() ) { env = aggregateFromTheme( t, env, crs ); } for ( Layer l : theme.getLayers() ) { env = aggregateFromLayer( l, env, crs ); } theme.getLayerMetadata().setSpatialMetadata( new SpatialMetadata( env, crs ) ); }
/** * Writes the given {@link Theme} as a WMS 1.1,1 Layer element. * * @param writer * used to write the XML, must not be <code>null</code> * @param theme * theme to be serialized, must not be <code>null</code> * @throws XMLStreamException */ public void writeTheme( final XMLStreamWriter writer, final Theme theme ) throws XMLStreamException { final LayerMetadata layerMetadata = new LayerMetadataMerger().merge( theme ); final DatasetMetadataFactory factory = new DatasetMetadataFactory(); final List<DatasetMetadata> dsMd1 = getDatasetMetadataFromProvider( theme ); final DatasetMetadata dsMd2 = factory.buildDatasetMetadata( layerMetadata, theme, mdUrlTemplate ); if ( dsMd1 != null && dsMd2 != null ) dsMd1.add( dsMd2 ); final DatasetMetadata datasetMetadata = new DatasetMetadataMerger().merge( dsMd1 ); final DoublePair scaleDenominators = new LayerMetadataMerger().mergeScaleDenominators( theme ); final Map<String, String> authorityNameToUrl = getExternalAuthorityNameToUrlMap( metadataProvider ); writeTheme( writer, layerMetadata, datasetMetadata, authorityNameToUrl, scaleDenominators, theme.getThemes() ); }
/** * Writes the given {@link Theme} as a WMS 1.3.0 Layer element. * * @param writer * used to write the XML, must not be <code>null</code> * @param theme * theme to be serialized, must not be <code>null</code> * @throws XMLStreamException */ public void writeTheme( final XMLStreamWriter writer, final Theme theme ) throws XMLStreamException { final LayerMetadata layerMetadata = new LayerMetadataMerger().merge( theme ); final DatasetMetadataFactory factory = new DatasetMetadataFactory(); final List<DatasetMetadata> dsMd1 = getDatasetMetadataFromProvider( theme ); final DatasetMetadata dsMd2 = factory.buildDatasetMetadata( layerMetadata, theme, mdUrlTemplate ); if ( dsMd1 != null && dsMd2 != null ) dsMd1.add( dsMd2 ); final DatasetMetadata datasetMetadata = new DatasetMetadataMerger().merge( dsMd1 ); final DoublePair scaleDenominators = new LayerMetadataMerger().mergeScaleDenominators( theme ); final Map<String, String> authorityNameToUrl = getExternalAuthorityNameToUrlMap( metadataProvider ); writeTheme( writer, layerMetadata, datasetMetadata, authorityNameToUrl, scaleDenominators, theme.getThemes() ); }