package frame.object.data; import java.util.List; import java.util.Set; import frame.data.DataLink; import frame.data.DataType; import frame.data.Entity; import frame.data.EntitySet; import frame.data.IDataProvider; import frame.data.Page; import frame.expression.VariantRequestParams; import frame.object.http.HttpObject; import frame.persist.NamedSQL; import frame.persist.Result; import frame.persist.SQLCreator; import frame.persist.SQLRunner; public class DataObject extends HttpObject implements IDataProvider { protected String dataName; private String operator; @Override protected void publishMethod() { addMethod("getDataSet"); addMethod("getSetByPage"); addMethod("getComboboxDataSet"); addMethod("procedure"); addMethod("getLine"); addMethod("newObject"); addMethod("addLine"); addMethod("deleteById"); addMethod("getCount"); } public void getDataSet() throws Exception { Filter filter = new Filter(onlineUser.getUserRight(), dataPool); OrderBy orderBy = new OrderBy(dataPool); EntitySet entitySet = new EntitySet(dataName); entitySet.loadDB(filter, orderBy); resultPool.addValue(entitySet); } public void getSetByPage() throws Exception { Filter filter = new Filter(onlineUser.getUserRight(), dataPool); OrderBy orderBy = new OrderBy(dataPool); EntitySet entitySet = new EntitySet(dataName); int totalCount = entitySet.getDBCount(filter); Page page = new Page(totalCount, dataPool); entitySet.loadDB(filter, page, orderBy); resultPool.addValue("page", page); resultPool.addValue(entitySet); } public void getComboboxDataSet() throws Exception { Filter filter = new Filter(onlineUser.getUserRight(), dataPool); OrderBy orderBy = new OrderBy(dataPool); EntitySet entitySet = new EntitySet(dataName); entitySet.loadDB(filter, orderBy); resultPool.addValue(entitySet); } public void procedure() throws Exception { DataType returnType = path.getReturnType(); NamedSQL namedSQL = NamedSQL.getInstance(operator); namedSQL.setReturnType(returnType); //set parameter for first time Set pageVariants = Page.getVarinatNameSet(); boolean reset = DataLink.moveOnConsumer(this, namedSQL, pageVariants); //set parameter for second time Page page = null; if (reset) { int count = getProcedureDataCount(namedSQL); page = new Page(count, dataPool); DataLink.moveOnProvider(page, namedSQL); } Result result = namedSQL.exec(); resultPool.addValue(result.getValue()); if (page != null) { resultPool.addValue("page", page); } } public void getLine() throws Exception { Id id = getId(); if (id.isEmpty()) { resultPool.error("empty id"); return; } Entity entity = new Entity(dataName); entity.loadDB(id); resultPool.addValue(entity); } public void newObject() throws Exception { Entity entity = new Entity(dataName); Initializer initializer = InitializerContainer.get(dataName); initializer.exec(new VariantRequestParams(request), entity); resultPool.addValue("line", entity); } public void addLine() throws Exception { Entity entity = new Entity(dataName); Initializer initializer = InitializerContainer.get(dataName); initializer.exec(new VariantRequestParams(request), entity); DataLink.moveOnConsumer(dataPool, entity); entity.insertDB(); resultPool.addValue("line", entity); } public void saveLine() throws Exception { Entity entity = new Entity(dataName); DataLink.moveOnConsumer(dataPool, entity); entity.saveDB(); } public void deleteById() throws Exception { Id id = getId(); if (id.isEmpty()) { resultPool.error("empty id"); return; } Entity entity = new Entity(dataName); entity.set("id", id.getValue()); entity.deleteDB(); } public void getCount() throws Exception { Filter filter = new Filter(onlineUser.getUserRight(), dataPool); Entity entity = new Entity(dataName); int count = entity.getDBCount(filter); resultPool.addValue(count); } protected Filter getFilter() { Filter filter = new Filter(onlineUser.getUserRight(), dataPool); return filter; } protected OrderBy getOrderBy() { OrderBy orderBy = new OrderBy(dataPool); return orderBy; } protected Id getId() { Id id = new Id(dataPool); return id; } private int getProcedureDataCount(NamedSQL namedSQL) throws Exception { String sql = namedSQL.getSQL(); sql = SQLCreator.deletePageLimit(sql); sql = "select count(1) from (" + sql + ") tempTbl"; namedSQL = new NamedSQL("getCount", sql); int count = SQLRunner.getInteger(namedSQL); return count; } @Override public List getDataNameList() { // TODO Auto-generated method stub return null; } @Override public boolean containsData(String name) { // TODO Auto-generated method stub return false; } @Override public Object getDataValue(String name) { // TODO Auto-generated method stub return null; } }