package org.nate.internal;
import java.io.InputStream;
import org.nate.Encoder;
import org.nate.Engine;
import org.nate.encoder.NateDocument;
import org.nate.internal.transformer.NateTransformers;
public class NateDocumentBackedEngine implements Engine {
private final NateDocument document;
public NateDocumentBackedEngine(InputStream source, Encoder encoder) {
this.document = encoder.encode(source);
}
public NateDocumentBackedEngine(String source, Encoder encoder) {
this.document = encoder.encode(source);
}
private NateDocumentBackedEngine(NateDocument newDocument) {
this.document = newDocument;
}
public NateDocumentBackedEngine inject(Object data) {
NateDocument newDocument = document.copy();
NateTransformers.from(data).transform(newDocument);
return new NateDocumentBackedEngine(newDocument);
}
public NateDocumentBackedEngine select(String selector) {
selector = selector.trim();
if (selector.startsWith(CONTENT_SELECTION_FLAG)) {
return new NateDocumentBackedEngine(document.copyContentOf(selector.substring(CONTENT_SELECTION_FLAG.length())));
}
return new NateDocumentBackedEngine(document.copy(selector));
}
public NateDocument getDocument() {
return document;
}
public String render() {
return document.render();
}
@Override
public String toString() {
return render();
}
}