@Override public String requireObject( GMLReference<?> ref, GmlXlinkOptions resolveState ) { String uri = ref.getURI(); LOG.debug( "Exporting forward reference to object {} which must be included in the output.", uri ); uriToRef.put( uri, ref ); refToResolveState.put( ref, resolveState ); return uri; }
/** * Adds a new {@link GMLReference} that has been encountered during the parsing of the GML document. * * @param ref * GML reference, must not be <code>null</code> */ public void addReference( GMLReference<?> ref ) { refs.add( ref ); if ( ref.getURI().startsWith( "#" ) ) { localRefs.add( ref ); } }
@Override public String requireObject( GMLReference<?> ref, GmlXlinkOptions resolveState ) { if ( ref.isLocal() ) { return remoteXlinkTemplate.replace( "{}", ref.getId() ); } return ref.getURI(); }
@Override public String handleReference( GMLReference<?> ref ) { if ( ref.isLocal() ) { return remoteXlinkTemplate.replace( "{}", ref.getId() ); } return ref.getURI(); }
/** * Resolves all local references that have been added before against the added objects. * * @throws ReferenceResolvingException * if a local reference cannot be resolved */ public void resolveLocalRefs() throws ReferenceResolvingException { for ( GMLReference<?> ref : localRefs ) { String id = ref.getURI().substring( 1 ); LOG.debug( "Resolving reference to object '" + id + "'" ); if ( ref.getReferencedObject() == null ) { String msg = "Cannot resolve reference to object with id '" + id + "'. There is no object with this id in the document."; throw new ReferenceResolvingException( msg ); } } }
@Override public String handleReference( GMLReference<?> ref ) { String uri = ref.getURI(); LOG.debug( "Encountered reference to object {}.", uri ); if ( !isGmlIdBasedUri( uri ) ) { LOG.debug( "Reference to object {} considered non-rewritable.", uri ); return uri; } if ( localReferencesPossible ) { LOG.debug( "Exporting potential forward reference to object {} which may or may not be exported later.", ref.getURI() ); try { xmlStream.activateBuffering(); } catch ( XMLStreamException e ) { throw new RuntimeException( e.getMessage(), e ); } return "{" + ref.getId() + "}"; } LOG.debug( "Exporting reference to object {} as remote reference.", ref.getId() ); return remoteXlinkTemplate.replace( "{}", ref.getId() ); }