package http.resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import nebula.data.DataRepos;
import nebula.data.DataStore;
import nebula.data.Entity;
import nebula.data.impl.EditableEntity;
import nebula.data.json.DataHelper;
import nebula.lang.NebulaNative;
import nebula.lang.RuntimeContext;
import nebula.lang.Type;
public class EntityNewResouce extends AbstractResouce {
private final DataHelper<Entity, Reader, Writer> jsonHolder;
// private final Broker<DataStore<Entity>> datastoreHolder;
final RuntimeContext context;
final DataRepos dataRepos;
final Type typeBroker;
public EntityNewResouce(final RuntimeContext context, final DataRepos dataRepos,DataHelper<Entity, Reader, Writer> json, Type typeBroker,DataStore<Entity> datas) {
super("text/json", 0, 0);
this.jsonHolder = json;
this.context = context;
this.dataRepos = dataRepos;
this.typeBroker = typeBroker;
}
@Override
protected void get(HttpServletRequest req) throws IOException {
Entity data = new EditableEntity();
long newModified;
for (Map.Entry<String, String[]> entry : req.getParameterMap().entrySet()) {
data.put(entry.getKey(), entry.getValue()[0]);
}
NebulaNative.ctor(context, dataRepos, data, typeBroker);
// long newModified = (Long) data.get("LastModified_");
// if (newModified == this.lastModified) return;
/*StringBuilder sb = new StringBuilder();
sb.append('{');
for (Map.Entry<String, String[]> entry : req.getParameterMap().entrySet()) {
sb.append('\"');
sb.append(entry.getKey());
sb.append('\"');
sb.append(':');
sb.append('\"');
sb.append(entry.getValue()[0]);
sb.append('\"');
sb.append(',');
}
sb.setCharAt(sb.length() - 1, '}');*/
newModified = System.currentTimeMillis();
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 {
throw new RuntimeException("Cann't find object ");
}
@Override
protected void delete(HttpServletRequest req) {
throw new RuntimeException("Cann't find object ");
}
}