package net.rubygrapefruit.docs.model.buildable;
import net.rubygrapefruit.docs.model.Referenceable;
import java.net.URI;
import java.util.concurrent.atomic.AtomicReference;
public class UnresolvedLink extends BuildableInlineContainer implements BuildableInline {
private LinkResolver resolver;
public UnresolvedLink(LinkResolver resolver) {
this.resolver = resolver;
}
public BuildableInline resolve() {
final AtomicReference<BuildableInline> result = new AtomicReference<BuildableInline>();
resolver.resolve(new LinkResolverContext() {
public void error(String message) {
result.set(new BuildableErrorElement(message));
}
public void crossReference(Referenceable target) {
BuildableCrossReference crossReference = new BuildableCrossReference(target);
moveContentsTo(crossReference);
result.set(crossReference);
}
public void url(URI target) {
BuildableLink link = new BuildableLink(target);
moveContentsTo(link);
result.set(link);
}
});
return result.get();
}
}