Added array handling to deal with collection listing.
This code should be folded into Stapler but during the initial PoC this should be sufficient
This commit is contained in:
parent
f1fbf56fc2
commit
9815602191
|
@ -4,11 +4,19 @@ import hudson.model.Api;
|
|||
import org.kohsuke.stapler.HttpResponse;
|
||||
import org.kohsuke.stapler.StaplerRequest;
|
||||
import org.kohsuke.stapler.StaplerResponse;
|
||||
import org.kohsuke.stapler.export.DataWriter;
|
||||
import org.kohsuke.stapler.export.ExportConfig;
|
||||
import org.kohsuke.stapler.export.Flavor;
|
||||
import org.kohsuke.stapler.export.Model;
|
||||
import org.kohsuke.stapler.export.ModelBuilder;
|
||||
import org.kohsuke.stapler.export.NamedPathPruner;
|
||||
import org.kohsuke.stapler.export.TreePruner;
|
||||
import org.kohsuke.stapler.interceptor.Interceptor;
|
||||
import org.kohsuke.stapler.interceptor.InterceptorAnnotation;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
@ -36,9 +44,39 @@ public @interface TreeResponse {
|
|||
return new HttpResponse() {
|
||||
@Override
|
||||
public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException {
|
||||
new Api(resp).doJson(req,rsp);
|
||||
if (node instanceof Object[]) {
|
||||
// TODO: Kohsuke is going to make this array handling a part of Stapler
|
||||
Flavor flavor = Flavor.JSON;
|
||||
rsp.setContentType(flavor.contentType);
|
||||
Writer w = rsp.getCompressedWriter(req);
|
||||
|
||||
TreePruner pruner = null;
|
||||
String tree = req.getParameter("tree");
|
||||
if (tree != null) {
|
||||
try {
|
||||
pruner = new NamedPathPruner(tree);
|
||||
} catch (IllegalArgumentException x) {
|
||||
throw new ServletException("Malformed tree expression: " + x, x);
|
||||
}
|
||||
}
|
||||
|
||||
ExportConfig config = new ExportConfig();
|
||||
config.prettyPrint = req.hasParameter("pretty");
|
||||
|
||||
DataWriter dw = flavor.createDataWriter(node, w, config);
|
||||
dw.startArray();
|
||||
for (Object item : (Object[])node) {
|
||||
Model p = MODEL_BUILDER.get(item.getClass());
|
||||
p.writeTo(item, pruner, dw);
|
||||
}
|
||||
dw.endArray();
|
||||
w.close();
|
||||
} else {
|
||||
new Api(resp).doJson(req, rsp);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
private static final ModelBuilder MODEL_BUILDER = new ModelBuilder();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue