package org.skyscreamer.yoga.view;
import java.io.IOException;
import java.io.OutputStream;
import org.skyscreamer.yoga.mapper.YogaRequestContext;
import org.skyscreamer.yoga.model.ArrayStreamingJsonHierarchicalModel;
import org.skyscreamer.yoga.model.HierarchicalModel;
import org.skyscreamer.yoga.model.ObjectStreamingJsonHierarchicalModel;
import org.skyscreamer.yoga.util.JacksonLibraryUtil;
import org.skyscreamer.yoga.view.json.GeneratorAdapter;
public class StreamingJsonSelectorView extends AbstractYogaView
{
@Override
protected void render(Object value, YogaRequestContext context, OutputStream os) throws Exception
{
GeneratorAdapter generator = JacksonLibraryUtil.selectGeneratorAdapter(os);
HierarchicalModel<GeneratorAdapter> model = createModel( value, generator );
_resultTraverser.traverse( value, context.getSelector(), model, context );
model.getUnderlyingModel().close();
}
protected HierarchicalModel<GeneratorAdapter> createModel( Object value, GeneratorAdapter generator )
throws IOException
{
if (value instanceof Iterable)
{
return new ArrayStreamingJsonHierarchicalModel(generator);
}
else
{
return new ObjectStreamingJsonHierarchicalModel(generator);
}
}
@Override
public String getContentType()
{
return "application/json";
}
@Override
public String getHrefSuffix()
{
return "json";
}
}