package http.resource; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import javax.servlet.http.HttpServletRequest; import nebula.data.DataRepos; import nebula.data.DataStore; import nebula.data.Entity; import nebula.data.json.DataHelper; public class TxEntityResource extends AbstractResouce { private final DataHelper<Entity, Reader, Writer> jsonHolder; final DataRepos dataRepos; private final Long key; private final DataStore<Entity> datastoreHolder; public TxEntityResource(final DataRepos dataRepos,DataHelper<Entity, Reader, Writer> json, DataStore<Entity> datas, String key) { this(dataRepos,json, datas, Long.parseLong(key)); } public TxEntityResource(final DataRepos dataRepos,DataHelper<Entity, Reader, Writer> json, DataStore<Entity> datas, Long key) { super("text/json", 0, 0); this.dataRepos = dataRepos; this.jsonHolder = json; this.datastoreHolder = datas; this.key = key; } @Override protected void get(HttpServletRequest req) throws IOException { Entity data = datastoreHolder.get(key); long newModified = (Long) data.get("LastModified_"); // if (newModified == this.lastModified) return; ByteArrayOutputStream bout = null; try { bout = new ByteArrayOutputStream(); Writer write = new OutputStreamWriter(bout); jsonHolder.stringifyTo(data, new OutputStreamWriter(bout)); write.flush(); this.lastModified = newModified; this.cache = bout.toByteArray(); } finally { try { if (bout != null) bout.close(); } catch (Exception e) { } } } @Override protected void put(HttpServletRequest req) throws IOException { Entity data = datastoreHolder.get(key).editable(); if (data != null) { jsonHolder.readFrom(data, new InputStreamReader(req.getInputStream())); datastoreHolder.flush(); } else { throw new RuntimeException("Cann't find object " + key); } } @Override protected void delete(HttpServletRequest req) { throw new RuntimeException("Cann't find object " + key); } }