package http.resource; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintStream; import java.io.Reader; import java.io.Writer; import java.util.List; import javax.servlet.http.HttpServletRequest; import nebula.data.Classificator; import nebula.data.json.DataHelper; import nebula.lang.Type; import nebula.lang.TypeLoader; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import util.FileUtil; public class TypeListResouce extends AbstractResouce { private static Log log = LogFactory.getLog(TypeListResouce.class); private final DataHelper<Type, Reader, Writer> json; final TypeLoader typeLoader; protected byte[] cacheAll; public TypeListResouce(TypeLoader typeLoader, DataHelper<Type, Reader, Writer> json) { super("text/json", 0, 1000); this.typeLoader = typeLoader; this.json = json; } @Override protected void get(HttpServletRequest req) { List<Type> dataList; String query = req.getQueryString(); String classification; if (query != null && query.length() > 0 && (classification = req.getParameter("Standalone")) != null) { Classificator<String, Type> classificator = typeLoader.groupByStandalone(); dataList = classificator.getData(classification); } else { throw new RuntimeException( "query != null && query.length() > 0 && (classification = req.getParameter(\"Standalone\"))!=null"); } ByteArrayOutputStream bout = new ByteArrayOutputStream(); PrintStream out = new PrintStream(bout); boolean start = true; out.append('['); for (Type data : dataList) { if (!start) { out.append(','); } else { start = false; } json.stringifyTo(data, new OutputStreamWriter(out)); } out.append(']'); out.flush(); out.close(); this.cache = bout.toByteArray(); if (req.getQueryString() == null || req.getQueryString().length() > 0) { this.cacheAll = bout.toByteArray(); } } @Override protected String post(HttpServletRequest req) throws IOException { BufferedInputStream bio = new BufferedInputStream(req.getInputStream()); if (log.isTraceEnabled()) { log.trace("Input stream : "); log.trace(FileUtil.readAllTextFrom(bio)); } String newCode = FileUtil.readAllTextFrom(bio); Type newType = typeLoader.update(null, newCode); return req.getPathInfo() + newType.getName(); } }