Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.clickntap.square.database.Query Maven / Gradle / Ivy
package com.clickntap.square.database;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import com.clickntap.square.App;
import com.clickntap.square.objects.BO;
import com.clickntap.square.utils.DateUtils;
import com.clickntap.square.utils.StringUtils;
public class Query {
private List params;
private BO bo;
private String name;
private JSONObject json;
private String code;
private Map paramsMap;
public String getName() {
return name;
}
public Query(BO bo) {
this.bo = bo;
this.name = null;
clear();
}
public void clear() {
this.params = new ArrayList();
}
public Query(String name) throws Exception {
this(null, name);
{
StringBuffer sb = new StringBuffer(App.getInstance().getConf().getJSONObject("context").getString("web-inf"));
sb.append("/square/sql/");
sb.append(name);
sb.append(".json");
this.json = new JSONObject(FileUtils.readFileToString(new File(sb.toString()), StandardCharsets.UTF_8));
}
{
StringBuffer sb = new StringBuffer(App.getInstance().getConf().getJSONObject("context").getString("web-inf"));
sb.append("/square/sql/");
sb.append(name);
sb.append(".js");
try {
this.code = FileUtils.readFileToString(new File(sb.toString()), StandardCharsets.UTF_8);
} catch (Exception e) {
this.code = null;
}
}
this.paramsMap = new HashMap();
this.paramsMap.put("now", DateUtils.now());
}
public Query(BO bo, String name) {
this(bo);
this.name = name;
}
public BO getBo() {
return this.bo;
}
public boolean has(String name) {
return this.bo.get(name) != null;
}
public String param(String name) {
if (this.bo == null && this.paramsMap != null) {
this.params.add(this.paramsMap.get(name));
} else {
this.params.add(this.bo.get(name));
}
return "?";
}
public String camel(String name) {
return StringUtils.toCamelCase(name);
}
public Number create() throws Exception {
String sql = App.getInstance().getBOs().evalScript("create.sql", this);
return new Database(sql, params).create();
}
public JSONObject read() throws Exception {
String sql = App.getInstance().getBOs().evalScript("read.sql", this);
return new Database(sql, params).read();
}
public JSONArray search() throws Exception {
String sql = App.getInstance().getBOs().evalScript("search.sql", this);
return new Database(sql, params).search();
}
public int update() throws Exception {
String sql = App.getInstance().getBOs().evalScript("update.sql", this);
return new Database(sql, params).update();
}
public int touch() throws Exception {
String sql = App.getInstance().getBOs().evalScript("touch.sql", this);
return new Database(sql, params).update();
}
public int delete() throws Exception {
String sql = App.getInstance().getBOs().evalScript("delete.sql", this);
return new Database(sql, params).update();
}
public JSONObject auth() throws Exception {
String sql = App.getInstance().getBOs().evalScript("auth.sql", this);
return new Database(sql, params).read();
}
public JSONArray list() throws Exception {
String sql = App.getInstance().getBOs().evalScript("list.sql", this);
return new Database(sql, params).list();
}
public JSONObject run() throws Exception {
boolean byId = false;
if (this.json.has("filters")) {
JSONArray filters = this.json.getJSONArray("filters");
for (int i = 0; i < filters.length(); i++) {
if (filters.getJSONObject(i).getString("name").equals("id")) {
byId = true;
}
}
}
Number count = 0;
if (this.json.has("limit")) {
String sql = App.getInstance().getBOs().evalScript("count.sql", this, json);
JSONObject json = new Database(sql, params).read();
count = json.getNumber("count");
}
String sql = App.getInstance().getBOs().evalScript("query.sql", this, json);
JSONObject json = new Database(sql, params).query(byId);
if (this.json.has("limit")) {
json.put("count", count);
}
if (this.json.has("includes")) {
JSONArray includes = this.json.getJSONArray("includes");
if (json.has("item")) {
query(json.getJSONObject("item"), includes);
} else if (json.has("items")) {
JSONArray items = json.getJSONArray("items");
for (int i = 0; i < items.length(); i++) {
query(items.getJSONObject(i), includes);
}
}
}
if (this.code != null) {
return new JSONObject(App.getInstance().parse(this.code, json));
}
return json;
}
private void query(JSONObject item, JSONArray includes) throws Exception {
for (int i = 0; i < includes.length(); i++) {
JSONObject include = includes.getJSONObject(i);
Query query = new Query(include.getString("file"));
for (String key : paramsMap.keySet()) {
query.addParam(key, paramsMap.get(key));
}
for (String key : item.keySet()) {
query.addParam("item." + key, item.get(key));
}
item.put(include.getString("name"), query.run());
}
}
public void addParam(String name, Object value) {
paramsMap.put(name, value);
}
public boolean hasParam(String name) {
return paramsMap.containsKey(name);
}
public Object getParam(String name) {
return paramsMap.get(name);
}
}