package org.swellrt.beta.client.js.editor;
import org.swellrt.beta.common.SException;
import org.swellrt.beta.model.local.STextLocal;
import org.swellrt.beta.model.wave.SWaveSchemas;
import org.waveprotocol.wave.client.common.util.LogicalPanel.Impl;
import org.waveprotocol.wave.client.editor.Editor;
import org.waveprotocol.wave.client.editor.content.ContentDocument;
import org.waveprotocol.wave.model.document.operation.DocInitialization;
import org.waveprotocol.wave.model.document.operation.Nindo;
import org.waveprotocol.wave.model.document.util.DocProviders;
import org.waveprotocol.wave.model.document.util.Range;
import com.google.gwt.dom.client.Element;
public class STextLocalWeb implements STextWeb, STextLocal {
public static STextLocalWeb create(String text) throws SException {
String xml = "<body><line/>"+text+"</body>";
DocInitialization op;
try {
op = DocProviders.POJO.parse(xml).asOperation();
} catch (IllegalArgumentException e) {
throw new SException(SException.INTERNAL_ERROR, e);
}
return new STextLocalWeb(new ContentDocument(Editor.ROOT_REGISTRIES, op, SWaveSchemas.STEXT_SCHEMA_CONSTRAINTS));
}
private final STextWebImpl textWeb;
protected STextLocalWeb(ContentDocument doc) {
this.textWeb = new STextWebImpl(doc);
}
@Override
public String getRawContent() {
return textWeb.getContentDocument().getMutableDoc().toXmlString();
}
@Override
public DocInitialization getInitContent() {
return textWeb.getContentDocument().asOperation();
}
@Override
public ContentDocument getContentDocument() {
return textWeb.getContentDocument();
}
@Override
public void setInteractive() throws SException {
textWeb.setInteractive();
}
@Override
public void setParent(Element element) throws SException {
textWeb.setParent(element);
}
@Override
public void setShelved() {
textWeb.setShelved();
}
@Override
public void setRendered() {
textWeb.setRendered();
}
@Override
public void setInteractive(Impl panel) throws SException {
textWeb.setInteractive(panel);
}
@Override
public void setInitContent(DocInitialization ops) {
textWeb.getContentDocument().getMutableDoc().hackConsume(Nindo.fromDocOp(ops, true));
}
@Override
public boolean isEmpty() {
return textWeb.isEmpty();
}
@Override
public Range insert(Range at, String content) {
return textWeb.insert(at, content);
}
@Override
public Range replace(Range at, String content) {
return textWeb.replace(at, content);
}
}