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}