package com.psddev.cms.tool.view;
import java.io.IOException;
import java.io.StringWriter;
import com.psddev.cms.tool.ToolPageContext;
import com.psddev.cms.view.RawView;
import com.psddev.cms.view.ViewModel;
import com.psddev.dari.util.PageContextFilter;
/**
* Abstract {@link ViewModel} to help render Views for {@link com.psddev.cms.tool.Tool} pages.
*/
public abstract class ToolPageViewModel<M> extends ViewModel<M> {
/**
* Helper method to produce a {@link RawView} from
* {@link ToolPageContext}#write... methods.
*/
protected RawView createRawView(RawViewWriter writer) {
StringWriter delegate = new StringWriter();
ToolPageContext page = new ToolPageContext(
PageContextFilter.Static.getServletContext(),
PageContextFilter.Static.getRequest(),
PageContextFilter.Static.getResponse());
page.setDelegate(delegate);
try {
writer.write(page);
} catch (IOException error) {
// This should never happen.
throw new IllegalStateException(error);
}
return RawView.of(delegate.toString());
}
@FunctionalInterface
protected interface RawViewWriter {
void write(ToolPageContext t) throws IOException;
}
}