001package org.javasimon.console.action; 002 003import org.javasimon.Simon; 004import org.javasimon.console.ActionContext; 005import org.javasimon.console.ActionException; 006import org.javasimon.console.SimonType; 007import org.javasimon.console.SimonVisitor; 008import org.javasimon.console.SimonVisitors; 009import org.javasimon.console.json.ArrayJS; 010import org.javasimon.console.json.ObjectJS; 011 012import java.io.IOException; 013import java.util.Set; 014 015import javax.servlet.ServletException; 016 017/** 018 * Export Simons as a flat JSON array. 019 * All attributes of Simons are exported. 020 * 021 * @author gquintana 022 */ 023public class ListJsonAction extends AbstractJsonAction { 024 025 public static final String PATH = "/data/list.json"; 026 027 /** Pattern for Simon name filtering. */ 028 private String pattern; 029 030 /** Types for Simon type filtering. */ 031 private Set<SimonType> types; 032 033 public ListJsonAction(ActionContext context) { 034 super(context); 035 } 036 037 public String getPattern() { 038 return pattern; 039 } 040 041 public void setPattern(String pattern) { 042 this.pattern = pattern; 043 } 044 045 @Override 046 public void readParameters() { 047 super.readParameters(); 048 pattern = getContext().getParameterAsString("pattern", null); 049 types = getContext().getParametersAsEnums("type", SimonType.class, null); 050 } 051 052 @Override 053 public void execute() throws ServletException, IOException, ActionException { 054 getContext().setContentType("application/json"); 055 ArrayJS arrayJS = new ArrayJS(); 056 SimonVisitors.visitList(getContext().getManager(), pattern, types, new SimonVisitorImpl(arrayJS)); 057 arrayJS.write(getContext().getWriter()); 058 } 059 060 private class SimonVisitorImpl implements SimonVisitor { 061 062 private final ArrayJS arrayJS; 063 064 public SimonVisitorImpl(ArrayJS arrayJS) { 065 this.arrayJS = arrayJS; 066 } 067 068 public void visit(Simon simon) throws IOException { 069 ObjectJS objectJS = createObjectJS(simon); 070 arrayJS.addElement(objectJS); 071 } 072 } 073}