forked from fanruan/demo-tabledata-es
richie
4 years ago
12 changed files with 296 additions and 14 deletions
Binary file not shown.
@ -0,0 +1,93 @@ |
|||||||
|
package com.fr.plugin.db.es.fun.query; |
||||||
|
|
||||||
|
import com.fanruan.api.cal.ParameterKit; |
||||||
|
import com.fanruan.api.log.LogKit; |
||||||
|
import com.fanruan.api.script.ScriptKit; |
||||||
|
import com.fanruan.api.util.GeneralKit; |
||||||
|
import com.fanruan.api.util.RenderKit; |
||||||
|
import com.fr.general.FArray; |
||||||
|
import com.fr.plugin.db.es.fun.help.RenderUtils; |
||||||
|
import com.fr.plugin.db.es.fun.type.ParaType; |
||||||
|
import com.fr.stable.ArrayUtils; |
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
|
||||||
|
import javax.script.ScriptException; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author richie |
||||||
|
* @version 10.0 |
||||||
|
* Created by richie on 2020/9/11 |
||||||
|
*/ |
||||||
|
public class QueryBuilder { |
||||||
|
|
||||||
|
public String build(ParameterProvider[] ps, String query, ParaType paraType) { |
||||||
|
if (ParaType.PLAIN == paraType) { |
||||||
|
return RenderUtils.renderPlainText(query, ps); |
||||||
|
} |
||||||
|
int len = ArrayUtils.getLength(ps); |
||||||
|
StringBuilder sb = new StringBuilder(); |
||||||
|
sb.append("JSON.stringify((function("); |
||||||
|
String[] paras = new String[len]; |
||||||
|
Object[] values = new Object[len]; |
||||||
|
for (int i = 0; i < len;i ++) { |
||||||
|
paras[i] = ps[i].getName(); |
||||||
|
Object value = ps[i].getValue(); |
||||||
|
if (value instanceof String) { |
||||||
|
values[i] = "\"" + value + "\""; |
||||||
|
} else if (value instanceof Iterable) { |
||||||
|
List<Object> objects = new ArrayList<>(); |
||||||
|
((Iterable)value).forEach(el-> { |
||||||
|
if (el instanceof String) { |
||||||
|
objects.add("\"" + el + "\""); |
||||||
|
} else { |
||||||
|
objects.add(el); |
||||||
|
} |
||||||
|
}); |
||||||
|
values[i] = "[" + GeneralKit.join(objects.toArray(new Object[0]), ",") + "]"; |
||||||
|
} else { |
||||||
|
values[i] = value; |
||||||
|
} |
||||||
|
} |
||||||
|
sb.append(GeneralKit.join(paras, ",")); |
||||||
|
sb.append("){"); |
||||||
|
sb.append(renderQuery(ps, query)); |
||||||
|
sb.append("}("); |
||||||
|
sb.append(GeneralKit.join(values, ",")); |
||||||
|
sb.append(")))"); |
||||||
|
try { |
||||||
|
return GeneralKit.objectToString(ScriptKit.newScriptEngine().eval(sb.toString())); |
||||||
|
} catch (ScriptException e) { |
||||||
|
LogKit.error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return RenderUtils.renderPlainText(query, ps); |
||||||
|
} |
||||||
|
|
||||||
|
private String renderQuery(ParameterProvider[] ps, String query) { |
||||||
|
int len = ArrayUtils.getLength(ps); |
||||||
|
Map<String, Object> map = new HashMap<>(); |
||||||
|
for (int i = 0; i < len; i ++) { |
||||||
|
map.put(ps[i].getName(), ps[i].getName()); |
||||||
|
} |
||||||
|
try { |
||||||
|
return RenderKit.renderParameter4Tpl(query, map); |
||||||
|
} catch (Exception e) { |
||||||
|
return query; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String... args) { |
||||||
|
ParameterProvider[] ps = new ParameterProvider[] { |
||||||
|
ParameterKit.newParameter("aa", 1), |
||||||
|
ParameterKit.newParameter("bb", "xxx"), |
||||||
|
ParameterKit.newParameter("cc", null), |
||||||
|
ParameterKit.newParameter("dd", new FArray(new String[]{"qqq","qq","zzz"})), |
||||||
|
}; |
||||||
|
QueryBuilder builder = new QueryBuilder(); |
||||||
|
String r = builder.build(ps, "return {\"aa\":aa};", ParaType.ECMASCRIPT); |
||||||
|
System.out.println(r); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.plugin.db.es.fun.type; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author richie |
||||||
|
* @version 10.0 |
||||||
|
* Created by richie on 2020/9/11 |
||||||
|
*/ |
||||||
|
public enum ParaType { |
||||||
|
|
||||||
|
PLAIN("PLAIN"), ECMASCRIPT("SCRIPT"); |
||||||
|
|
||||||
|
private String type; |
||||||
|
|
||||||
|
ParaType(String type) { |
||||||
|
this.type = type; |
||||||
|
} |
||||||
|
|
||||||
|
public String getType() { |
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public static ParaType parse(String text) { |
||||||
|
for (ParaType qt : values()) { |
||||||
|
if (qt.type.equals(text)) { |
||||||
|
return qt; |
||||||
|
} |
||||||
|
} |
||||||
|
return PLAIN; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue