/** * Exports the given {@link Feature} (or {@link FeatureCollection}). * * @param feature * feature to be exported, must not be <code>null</code> * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void export( Feature feature ) throws XMLStreamException, UnknownCRSException, TransformationException { export( feature, referenceExportStrategy.getResolveOptions() ); }
private boolean isObjectAlreadySerialized( final GMLStreamWriter gmlStream, final String id ) { return gmlStream.getReferenceResolveStrategy().isObjectExported( id ); }
private void exportPolyhedralSurface( PolyhedralSurface polyhSurf ) throws XMLStreamException, UnknownCRSException, TransformationException { if ( polyhSurf.getId() != null && referenceExportStrategy.isObjectExported( polyhSurf.getId() ) ) { writer.writeEmptyElement( gmlNs, "PolyhedralSurface" ); writer.writeAttribute( XLNNS, "href", "#" + polyhSurf.getId() ); } else { referenceExportStrategy.addExportedId( polyhSurf.getId() ); writer.writeStartElement( gmlNs, "PolyhedralSurface" ); writer.writeStartElement( gmlNs, "polygonPatches" ); for ( SurfacePatch surfacePatch : polyhSurf.getPatches() ) exportSurfacePatch( surfacePatch ); writer.writeEndElement(); writer.writeEndElement(); } }
private void exportFeaturePropertyByReference( QName propName, FeatureReference ref, boolean forceInclusionInDocument, GmlXlinkOptions resolveState ) throws XMLStreamException { writeEmptyElementWithNS( propName.getNamespaceURI(), propName.getLocalPart() ); String uri = null; if ( forceInclusionInDocument ) { resolveState = getResolveStateForNextLevel( resolveState ); uri = referenceExportStrategy.requireObject( ref, resolveState ); } else { uri = referenceExportStrategy.handleReference( ref ); } writeAttributeWithNS( XLNNS, "href", uri ); endEmptyElement(); }
private void exportFeaturePropertyByValue( QName propName, Feature subFeature, GmlXlinkOptions resolveState ) throws XMLStreamException, UnknownCRSException, TransformationException { referenceExportStrategy.addExportedId( subFeature.getId() ); writeStartElementWithNS( propName.getNamespaceURI(), propName.getLocalPart() ); writer.writeComment( "Inlined feature '" + subFeature.getId() + "'" ); export( subFeature, getResolveStateForNextLevel( resolveState ) ); writer.writeEndElement(); }
private void startGeometry( String localName, Geometry geometry ) throws XMLStreamException { writeStartElementWithNS( GML21NS, localName ); if ( geometry.getId() != null ) { referenceExportStrategy.addExportedId( geometry.getId() ); writer.writeAttribute( "gid", geometry.getId() ); } if ( outputCRS != null ) { writer.writeAttribute( "srsName", outputCRS.getAlias() ); } else if ( geometry.getCoordinateSystem() != null ) { ICRS coordinateSystem = geometry.getCoordinateSystem(); writer.writeAttribute( "srsName", coordinateSystem.getAlias() ); } }
private void copyAttributes( GMLStreamWriter gmlWriter, XMLStreamReader inStream ) throws XMLStreamException { for ( int i = 0; i < inStream.getAttributeCount(); i++ ) { String attrLocalName = inStream.getAttributeLocalName( i ); String nsPrefix = inStream.getAttributePrefix( i ); String value = inStream.getAttributeValue( i ); String nsURI = inStream.getAttributeNamespace( i ); if ( nsURI == null || nsURI.equals( "" ) ) { sink.writeAttribute( attrLocalName, value ); } else { if ( attrLocalName.equals( "href" ) && nsURI.equals( XLNNS ) ) { if ( value.startsWith( "{" ) || value.endsWith( "}" ) ) { String objectId = value.substring( 1, value.length() - 1 ); if ( gmlWriter.getReferenceResolveStrategy().isObjectExported( objectId ) ) { value = "#" + objectId; } else { value = xLinkTemplate.replace( "{}", objectId ); } } } if ( sink.getPrefix( nsURI ) == null ) { sink.writeNamespace( nsPrefix, nsURI ); } sink.writeAttribute( nsURI, attrLocalName, value ); } } }
private void exportOrientableSurface( OrientableSurface orientableSurface ) throws XMLStreamException, UnknownCRSException, TransformationException { startGeometry( "OrientableSurface", orientableSurface ); Surface baseSurface = orientableSurface.getBaseSurface(); if ( baseSurface.getId() != null && referenceExportStrategy.isObjectExported( baseSurface.getId() ) ) { writer.writeEmptyElement( gmlNs, "baseSurface" ); writer.writeAttribute( XLNNS, "href", "#" + baseSurface.getId() ); } else { referenceExportStrategy.addExportedId( baseSurface.getId() ); writer.writeStartElement( gmlNs, "baseSurface" ); exportSurface( orientableSurface.getBaseSurface() ); writer.writeEndElement(); } writer.writeEndElement(); }
/** * Exports the given {@link Property}. * * @param prop * property to be exported, must not be <code>null</code> * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void export( Property prop ) throws XMLStreamException, UnknownCRSException, TransformationException { export( prop, referenceExportStrategy.getResolveOptions() ); }
public void export( final TimeSlice timeSlice, final GmlXlinkOptions resolveState ) throws XMLStreamException, UnknownCRSException, TransformationException { if ( timeSlice.getId() != null ) { referenceExportStrategy.addExportedId( timeSlice.getId() ); } final QName featureName = timeSlice.getType().getName(); LOG.debug( "Exporting TimeSlice {} with ID {}", featureName, timeSlice.getId() ); final String namespaceURI = featureName.getNamespaceURI(); final String localName = featureName.getLocalPart(); writeStartElementWithNS( namespaceURI, localName ); if ( timeSlice.getId() != null ) { if ( fidAttr.getNamespaceURI() == "" ) { writer.writeAttribute( fidAttr.getLocalPart(), timeSlice.getId() ); } else { writeAttributeWithNS( fidAttr.getNamespaceURI(), fidAttr.getLocalPart(), timeSlice.getId() ); } } for ( final Property prop : timeSlice.getProperties() ) { export( prop, resolveState ); } writer.writeEndElement(); }
protected void writeMemberFeature( Feature member, GMLStreamWriter gmlStream, XMLStreamWriter xmlStream, GmlXlinkOptions resolveState, QName featureMemberEl ) throws XMLStreamException, UnknownCRSException, TransformationException { if ( gmlStream.getReferenceResolveStrategy().isObjectExported( member.getId() ) ) { xmlStream.writeEmptyElement( featureMemberEl.getNamespaceURI(), featureMemberEl.getLocalPart() ); if ( xmlStream.getPrefix( XLNNS ) == null ) { xmlStream.setPrefix( "xlink", XLNNS ); xmlStream.writeNamespace( "xlink", XLNNS ); } xmlStream.writeAttribute( "xlink", XLNNS, "href", "#" + member.getId() ); } else { xmlStream.writeStartElement( featureMemberEl.getNamespaceURI(), featureMemberEl.getLocalPart() ); gmlStream.getFeatureWriter().export( member, resolveState ); xmlStream.writeEndElement(); } }
/** * Exporting a triangulated surface via the XMLStreamWriter given when the class was constructed * * @param triangSurface * a {@link TriangulatedSurface} object * @throws XMLStreamException * if an error occured writing to the xml stream * @throws UnknownCRSException * @throws TransformationException */ @Override public void exportTriangulatedSurface( TriangulatedSurface triangSurface ) throws XMLStreamException, UnknownCRSException, TransformationException { writer.writeStartElement( gmlNs, "TriangulatedSurface" ); if ( triangSurface.getId() != null && referenceExportStrategy.isObjectExported( triangSurface.getId() ) ) { writer.writeEmptyElement( gmlNs, "trianglePatches" ); writer.writeAttribute( XLNNS, "href", "#" + triangSurface.getId() ); } else { referenceExportStrategy.addExportedId( triangSurface.getId() ); writer.writeStartElement( gmlNs, "trianglePatches" ); for ( SurfacePatch surfacePatch : triangSurface.getPatches() ) exportSurfacePatch( surfacePatch ); writer.writeEndElement(); } writer.writeEndElement(); }
GmlXlinkOptions resolveState = gmlStream.getReferenceResolveStrategy().getResolveOptions(); for ( Map.Entry<FeatureStore, List<Query>> fsToQueries : analyzer.getQueries().entrySet() ) { FeatureStore fs = fsToQueries.getKey();
private void startGeometry( String localName, Geometry geometry ) throws XMLStreamException, UnknownCRSException, TransformationException { GMLObjectType gmlType = geometry.getType(); if ( gmlType == null ) { writeStartElementWithNS( gmlNs, localName ); } else { QName elName = gmlType.getName(); writeStartElementWithNS( elName.getNamespaceURI(), elName.getLocalPart() ); } if ( geometry.getId() != null ) { referenceExportStrategy.addExportedId( geometry.getId() ); writeAttributeWithNS( gmlNs, "id", geometry.getId() ); } else if ( version == GML_32 && geometry.getId() == null ) { // in GML 3.2, a gml:id is required for every geometry writeAttributeWithNS( gmlNs, "id", "GEOMETRY_" + generateNewId() ); } if ( outputCRS != null ) { writer.writeAttribute( "srsName", outputCRS.getAlias() ); } else if ( geometry.getCoordinateSystem() != null ) { writer.writeAttribute( "srsName", geometry.getCoordinateSystem().getAlias() ); } exportStandardProps( geometry ); }
/** * @param multiPoint * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiPoint( MultiPoint multiPoint ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiPoint", multiPoint ); for ( Point point : multiPoint ) { if ( referenceExportStrategy.isObjectExported( point.getId() ) ) { writer.writeEmptyElement( "gml", "pointMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + point.getId() ); } else { writer.writeStartElement( "gml", "pointMember", GML21NS ); exportPoint( point ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiPoint> }
/** * Exporting a composite solid via the XMLStreamWriter given when the class was constructed * * @param compositeSolid * the {@link CompositeSolid} object * @throws XMLStreamException * if an error occured writing to the xml stream * @throws UnknownCRSException * @throws TransformationException */ @Override public void exportCompositeSolid( CompositeSolid compositeSolid ) throws XMLStreamException, UnknownCRSException, TransformationException { startGeometry( "CompositeSolid", compositeSolid ); for ( Solid solidMember : compositeSolid ) { if ( solidMember.getId() != null && referenceExportStrategy.isObjectExported( solidMember.getId() ) ) { writer.writeEmptyElement( gmlNs, "solidMember" ); writer.writeAttribute( XLNNS, "href", "#" + solidMember.getId() ); } else { referenceExportStrategy.addExportedId( solidMember.getId() ); writer.writeStartElement( gmlNs, "solidMember" ); exportSolid( solidMember ); writer.writeEndElement(); } } writer.writeEndElement(); }
GmlXlinkOptions resolveState = gmlStream.getReferenceResolveStrategy().getResolveOptions(); for ( Feature member : allFeatures ) { writeMemberFeature( member, gmlStream, xmlStream, resolveState, featureMemberEl );
/** * @param multiLineString * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiLineString( MultiLineString multiLineString ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiLineString", multiLineString ); for ( LineString lineString : multiLineString ) { if ( referenceExportStrategy.isObjectExported( lineString.getId() ) ) { writer.writeEmptyElement( "gml", "lineStringMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + lineString.getId() ); } else { writer.writeStartElement( "gml", "lineStringMember", GML21NS ); exportLineString( lineString ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiLineString> }
private void exportPolygon( Polygon polygon ) throws XMLStreamException, UnknownCRSException, TransformationException { startGeometry( "Polygon", polygon ); Ring exteriorRing = polygon.getExteriorRing(); if ( exteriorRing.getId() != null && referenceExportStrategy.isObjectExported( exteriorRing.getId() ) ) { writer.writeEmptyElement( gmlNs, "exterior" ); writer.writeAttribute( XLNNS, "href", "#" + exteriorRing.getId() ); } else { referenceExportStrategy.addExportedId( exteriorRing.getId() ); writer.writeStartElement( gmlNs, "exterior" ); exportRing( exteriorRing ); writer.writeEndElement(); } if ( polygon.getInteriorRings() != null ) { for ( Ring ring : polygon.getInteriorRings() ) { if ( ring.getId() != null && referenceExportStrategy.isObjectExported( ring.getId() ) ) { writer.writeEmptyElement( gmlNs, "interior" ); writer.writeAttribute( XLNNS, "href", "#" + ring.getId() ); } else { referenceExportStrategy.addExportedId( ring.getId() ); writer.writeStartElement( gmlNs, "interior" ); exportRing( ring ); writer.writeEndElement(); } } } exportAdditionalProps( polygon ); writer.writeEndElement(); }
/** * @param multiCurve * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiLineString( MultiCurve<Curve> multiCurve ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiLineString", multiCurve ); for ( Curve curve : multiCurve ) { if ( referenceExportStrategy.isObjectExported( curve.getId() ) ) { writer.writeEmptyElement( "gml", "lineStringMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + curve.getId() ); } else { writer.writeStartElement( "gml", "lineStringMember", GML21NS ); exportLineString( curve ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiLineString> }