private boolean isObjectAlreadySerialized( final GMLStreamWriter gmlStream, final String id ) { return gmlStream.getReferenceResolveStrategy().isObjectExported( id ); }
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(); } }
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 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(); } }
/** * @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> }
/** * @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> }
/** * @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> }
/** * @param multiSurface * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiPolygon( MultiSurface<Surface> multiSurface ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiPolygon", multiSurface ); for ( Surface polygon : multiSurface ) { if ( polygon.getId() != null && referenceExportStrategy.isObjectExported( polygon.getId() ) ) { writer.writeEmptyElement( "gml", "polygonMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + polygon.getId() ); } else { writer.writeStartElement( "gml", "polygonMember", GML21NS ); exportSurface( polygon ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiPolygon> }
/** * @param multiPolygon * @throws XMLStreamException * @throws UnknownCRSException * @throws TransformationException */ public void exportMultiPolygon( MultiPolygon multiPolygon ) throws XMLStreamException, TransformationException, UnknownCRSException { startGeometry( "MultiPolygon", multiPolygon ); for ( Polygon polygon : multiPolygon ) { if ( polygon.getId() != null && referenceExportStrategy.isObjectExported( polygon.getId() ) ) { writer.writeEmptyElement( "gml", "polygonMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + polygon.getId() ); } else { writer.writeStartElement( "gml", "polygonMember", GML21NS ); exportPolygon( polygon ); writer.writeEndElement(); } } writer.writeEndElement(); // </gml:MultiPolygon> }
private void exportOffsetCurve( OffsetCurve offsetCurve ) throws XMLStreamException, UnknownCRSException, TransformationException { writer.writeStartElement( "gml", "OffsetCurve", gmlNs ); Curve baseCurve = offsetCurve.getBaseCurve(); if ( baseCurve.getId() != null && referenceExportStrategy.isObjectExported( baseCurve.getId() ) ) { writer.writeEmptyElement( gmlNs, "offsetBase" ); writer.writeAttribute( "gml", gmlNs, "href", "#" + baseCurve.getId() ); } else { writer.writeStartElement( "gml", "offsetBase", gmlNs ); exportCurve( baseCurve ); writer.writeEndElement(); } writer.writeStartElement( "gml", "distance", gmlNs ); writer.writeAttribute( "uom", offsetCurve.getDistance( null ).getUomUri() ); writer.writeCharacters( String.valueOf( offsetCurve.getDistance( null ).getValue() ) ); writer.writeEndElement(); writer.writeStartElement( "gml", "refDirection", gmlNs ); exportAsPos( offsetCurve.getDirection() ); writer.writeEndElement(); writer.writeEndElement(); }
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(); }
/** * 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(); }
if ( outerRing.getId() != null && referenceExportStrategy.isObjectExported( outerRing.getId() ) ) { writer.writeEmptyElement( "gml", "outerBoundaryIs", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + outerRing.getId() ); for ( Ring ring : rings ) { writer.writeStartElement( "gml", "innerBoundaryIs", GML21NS ); if ( referenceExportStrategy.isObjectExported( ring.getId() ) ) { writer.writeAttribute( "xlink", XLNNS, "href", "#" + ring.getId() ); } else {
/** * 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(); }
startGeometry( "MultiGeometry", multiGeometry ); for ( Geometry geom : multiGeometry ) { if ( referenceExportStrategy.isObjectExported( geom.getId() ) ) { writer.writeEmptyElement( "gml", "geometryMember", GML21NS ); writer.writeAttribute( "xlink", XLNNS, "href", "#" + geom.getId() );
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(); }
private void exportPointsAsProperties( final Points points ) throws XMLStreamException, UnknownCRSException, TransformationException { for ( final Point point : points ) { writer.writeStartElement( "gml", "pointProperty", gmlNs ); if ( point instanceof Reference<?> && !( (Reference<?>) point ).isLocal() ) { final Reference<?> ref = (Reference<?>) point; writeAttributeWithNS( XLNNS, "href", ref.getURI() ); } else if ( point.getId() != null && referenceExportStrategy.isObjectExported( point.getId() ) ) { writeAttributeWithNS( XLNNS, "href", "#" + point.getId() ); } else { export( point ); } writer.writeEndElement(); } }
private void exportFeatureProperty( FeaturePropertyType pt, Feature subFeature, Map<QName, PrimitiveValue> attributes, GmlXlinkOptions resolveState ) throws XMLStreamException, UnknownCRSException, TransformationException { QName propName = pt.getName(); LOG.debug( "Exporting feature property '" + propName + "'" ); if ( subFeature == null ) { exportEmptyProperty( propName, attributes ); } else if ( subFeature instanceof FeatureReference ) { exportFeatureProperty( pt, (FeatureReference) subFeature, resolveState, propName ); } else { // normal feature String subFid = subFeature.getId(); if ( subFid == null ) { // no feature id -> no other chance, but inlining it writeStartElementWithNS( propName.getNamespaceURI(), propName.getLocalPart() ); writer.writeComment( "Inlined feature '" + subFid + "'" ); export( subFeature, getResolveStateForNextLevel( resolveState ) ); writer.writeEndElement(); } else { // has feature id if ( referenceExportStrategy.isObjectExported( subFid ) ) { exportAlreadyExportedFeaturePropertyByReference( subFeature, propName ); } else { exportFeaturePropertyByValue( propName, subFeature, resolveState ); } } } }
String memberFid = member.getId(); writeStartElementWithNS( gmlNs, "featureMember" ); if ( memberFid != null && referenceExportStrategy.isObjectExported( memberFid ) ) { writeAttributeWithNS( XLNNS, "href", "#" + memberFid ); } else {
private void exportFeatureProperty( FeaturePropertyType pt, FeatureReference ref, GmlXlinkOptions resolveState, QName propName ) throws XMLStreamException, UnknownCRSException, TransformationException { boolean includeNextLevelInOutput = includeNextLevelInOutput( resolveState ); if ( includeNextLevelInOutput ) { if ( pt.getAllowedRepresentation() == REMOTE ) { exportFeaturePropertyByReference( propName, ref, true, resolveState ); } else { if ( referenceExportStrategy.isObjectExported( ref.getId() ) ) { exportAlreadyExportedFeaturePropertyByReference( ref, propName ); } else { exportFeaturePropertyByValue( propName, ref, resolveState ); } } } else { exportFeaturePropertyByReference( propName, ref, false, resolveState ); } }