feat: support map rule

This commit is contained in:
CaiHQ 2022-05-03 15:46:11 +08:00
parent 1957d163b5
commit 4974fb7a90
7 changed files with 258 additions and 268 deletions

View File

@ -78,7 +78,7 @@ task copyAssets(type: Copy) {
into "./build/output/assets/"
}
def currVersion = "0.0.4"
def currVersion = "0.0.5"
task copyJar(type: Copy, dependsOn: [":backend:copyLibs",":backend:jar"]) {
from "./build/libs/$project.name-${project.version}.jar"
into "./build/output/libs"

View File

@ -2,7 +2,7 @@
"agentHttpAddr": "127.0.0.1:18000",
"privKey": "589d94ee5688358a1c5c18430dd9c75097ddddebf769f139da36a807911d20f8",
"pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
"script": "./build/registry-0.0.1.ypk",
"script": "./build/registry-0.0.5.ypk",
"killContract": "Registry",
"createParam": {
"privateKey": "4616ff0e2a4f982364914f9be30b51c6bc6ccb6602114a9ee8792f2ccf67465b",

View File

@ -0,0 +1,50 @@
package org.bdware.sc.registry;
import com.google.gson.JsonObject;
import org.bdware.sc.ContractProcess;
import org.bdware.sc.boundry.JavaScriptEntry;
import org.bdware.sc.engine.JSONTool;
import wrp.jdk.nashorn.api.scripting.NashornScriptEngine;
import wrp.jdk.nashorn.api.scripting.ScriptObjectMirror;
import wrp.jdk.nashorn.internal.runtime.PropertyMap;
import wrp.jdk.nashorn.internal.runtime.ScriptFunction;
import wrp.jdk.nashorn.internal.scripts.JO;
public class RuleExecutor {
private static int executeCode;
public static Object executeRule(ScriptObjectMirror som) {
executeCode = 0;
JsonObject jo = JSONTool.convertMirrorToJson(som).getAsJsonObject();
Object val = som.get("localDataSample");
JsonObject rule = jo.get("mapRule").getAsJsonObject();
JO ret = new JO(PropertyMap.newMap());
for (String str : rule.keySet()) {
ret.put(str, getMapResult(val, rule.get(str).getAsString()), false);
}
return ret;
}
//{"localDataSample":{"owner":"abcdef","size":"1234"},"mapRule":{"所有者":"${val.owner}","大小":"${val.size*1000}","偏移过的大小":"${edp(val.size,30.0)}" }}
private static Object getMapResult(Object val, String fun) {
try {
NashornScriptEngine engine = ContractProcess.instance.engine.engine;
if (fun.matches("\\$\\{.*\\}")) {
fun = "function(val){ return " + fun.substring(2);
}
ScriptObjectMirror function = (ScriptObjectMirror) engine.eval(fun);
function.compileScriptFunction();
return JavaScriptEntry.executeFunction((ScriptFunction) function.getScriptObject(), val);
} catch (Exception e) {
e.printStackTrace();
//TODO GREP....
executeCode = 1;
return "exception:" + e.getMessage();
}
}
public static int getLastExecuteStatus() {
return executeCode;
}
}

View File

@ -0,0 +1,27 @@
package org.bdware.sc.registry;
import com.alibaba.datax.transport.transformer.maskingMethods.differentialPrivacy.EpsilonDifferentialPrivacyImpl;
import com.alibaba.datax.transport.transformer.maskingMethods.irreversibleInterference.MD5EncryptionImpl;
public class RuleHelper {
public static String md5(Object obj) {
try {
MD5EncryptionImpl masker = new MD5EncryptionImpl();
return masker.execute(obj.toString());
} catch (Exception e) {
return "*****" + e.getMessage() + "****";
}
}
public static Object edp(Object obj, double epsilon) {
try {
EpsilonDifferentialPrivacyImpl masker = new EpsilonDifferentialPrivacyImpl();
double result = 0;
result = masker.maskOne(Double.valueOf(obj.toString()), epsilon);
return result;
} catch (Exception e) {
e.printStackTrace();
return "***" + e.getMessage() + "***";
}
}
}

View File

@ -1,16 +1,17 @@
import "User.yjs";
import "metaDetail.yjs";
oracle Register{
@ArgSchema({"!doId":"string","offset":"number","count":"number"})
export function retrieve(){
//executeContract去拿到Repo的原始结果
//根据request进行判断找到对应的rule
//将原始结果与rule做一个映射得到转换后的结果
//返回转换后的结果。
return Transform.trans(abc);
import "ruleHelper.yjs";
oracle Register {
@ArgSchema({"!doId":"string", "offset":"number", "count":"number"})
export function retrieve() {
//executeContract去拿到Repo的原始结果
//根据request进行判断找到对应的rule
//将原始结果与rule做一个映射得到转换后的结果
//返回转换后的结果。
return Transform.trans(abc);
}
function onCreate(arg){
function onCreate(arg) {
Global.registerID = arg.registerID;
org.bdware.sc.registry.RegistryDB.init(arg, requester);
}

View File

@ -1,261 +1,165 @@
module metaStandardDetail{
export function getRegistryInfo(arg){
return {"code":0,"registryID":"macjw.ab","description":"这是xx市的注册表添加更多Registry描述"};
}
export function verifyRule(arg){
return {"code":0,"msg":"success"}
}
export function getFieldTypeList(arg){
return {"code":0, "data":[
{
"typeName":"string",
"lable":"字符串",
"formDesc":{
"固定值":{
"type":"input"
},
"默认值":{
"type":"input"
},
"最小长度":{
"type":"input"
},
"最大长度":{
"type":"input"
},
"必备项":{
"type":"select",
"options":["是","否"]
},
}
},
{
"typeName":"boolean",
"lable":"真假",
"formDesc":{
"固定值":{
"type":"input"
},
"默认值":{
"type":"input"
},
"必备项":{
"type":"select",
"options":["是","否"]
},
}
},
]};
}
export function listRemoteRegistry(){
var ret = [
{"registryID":"macjw","name":"jw市市级注册"},
{"registryID":"macjw.de.cd","name":"jw市de县cd镇注册表"}
];
return {
"total":10,"data":ret,"code":0};
}
//{如果是offset+count就按顺序
// controlType=过滤
// createStartDate createEndDate
// updateStartDate updateEndDate
// 如果是keyword:... 就模糊搜索}
// registryID
//{"createStartDate":16111,"createEndDate":12222,"offset":0,"count":5}
export function listMetaStandard(arg){
var ret =[];
ret.push({
"name":"CO传感数据",
"createDate":167227222,
"updateDate":1111111,
"creator":"xxx",
"updater":"aabbcc",
"registryID":"macjw.ab",
"controlType":"private",
"typeList":["public","private"],
"status":"off",
"version":"2.1",
"doId":"ab.ccd/aaaaa-aaa",
"desc":"元数据标准说明",
"fields":[
{
"name":"owner",
"type":"string",
"description":"简要的说明",
"constraint":{
"固定值":"xxxxx",
"最大长度":50,
"必备项":"是",
}
},
{
"name":"pubkey",
"type":"string",
"description":"pubkey简要的说明2",
"constraint":{
"固定值":"jjjjjjj",
"最大长度":50
}
}
]
},
{
"name":"BF传感数据",
"createDate":167226222,
"updateDate":1111311,
"creator":"xxx",
"updater":"aabbcc",
"registryID":"macjw",
"controlType":"public",
"typeList":["public","private"],
"status":"on",
"version":"2.1",
"doId":"ab.ccd/aabbbaa-aaa",
"desc":"元数据标准说明",
"fields":[
{
"name":"repository",
"type":"string",
"description":"简要的说明",
"constraint":{
"固定值":"xxx",
"最大长度":50,
"必备项":"是",
}
},
{
"name":"format",
"type":"boolean",
"description":"简要的说明2",
"constraint":{
"必备项":"否"
}
},
{
"name":"registertime",
"type":"string",
"description":"registertime简要的说明333333333",
"constraint":{
"固定值":"ooooo",
"默认值":"hhhhhhhh",
"最小长度":10,
"必备项":"否",
}
},
]
},
{
"name":"AA传感数据",
"createDate":167227222,
"updateDate":1111111,
"creator":"xxx",
"updater":"aabbcc",
"registryID":"macjw.ab",
"controlType":"private",
"typeList":["public","private"],
"status":"off",
"version":"2.1",
"doId":"ab.ccd/adddda-aaa",
"desc":"元数据标准说明",
"fields":[
{
"name":"owner",
"type":"string",
"description":"简要的说明",
"constraint":{
"固定值":"xxxxx",
"最大长度":50,
"必备项":"是",
}
},
{
"name":"pubkey",
"type":"string",
"description":"pubkey简要的说明2",
"constraint":{
"固定值":"jjjjjjj",
"最大长度":50
}
}
]
},
{
"name":"HHH传感数据",
"createDate":167227222,
"updateDate":1111111,
"creator":"xxx",
"updater":"aabbcc",
"registryID":"macjw.ac",
"controlType":"private",
"typeList":["public","private"],
"status":"on",
"version":"2.1",
"doId":"ab.ccd/aggga-aaa",
"desc":"元数据标准说明",
"fields":[
{
"name":"owner",
"type":"string",
"description":"简要的说明",
"constraint":{
"固定值":"xxxxx",
"最大长度":50,
"必备项":"是",
}
},
{
"name":"pubkey",
"type":"string",
"description":"pubkey简要的说明2",
"constraint":{
"固定值":"jjjjjjj",
"最大长度":50
}
}
]
module metaStandardDetail {
export function getRegistryInfo(arg) {
return {
"code":0, "registryID":"macjw.ab", "description":"这是xx市的注册表添加更多Registry描述"
};
}
);
return {
"total":10,"data":ret,"code":0};
}
export function updateMetaStandardDetail(arg){
var ret =[];
//通知对应的远程注册表,需要更新这个关系。
return {
"total":10,"data":ret,"code":0};
}
//{"offset":..,"count":,"localMetaStandardDoid":}
export function listMetaStandardRelaction(arg){
var ret = [];
ret.push({
"name":"煤矿传感数据映射",
"localMetaStandardDoid":"xx.xx/adfa",
"remoteMetaStandardDoid":"ab.ccd/aaaaa-aaa",
"createDate":167227222,
"updateDate":1111111,
"creator":"aabbcc",
"updater":"aabbcc",
"mapRule":{
"owner":"${val.大小}",
"pubkey":"function(val){}",
}
});
return {
"total":10,"data":ret,"code":0};
}
//{"localMetaID":"xxx","mapRule":{},"remoteMetaID":"xxx"}
export function getPreviewMapResult(arg){
return {"code":0, data:{"localData":{"大小":"500KB","姓名":"小东"},"remoteData":{"size":"500000Byte","name":"*东"}}};
export function verifyRule(arg) {
return {
"code":0, "msg":"success"
}
}
export function getFieldTypeList(arg) {
return {
"code":0, "data":[
{
"typeName":"string", "lable":"字符串", "formDesc":{
"固定值":{
"type":"input"
}, "默认值":{
"type":"input"
}, "最小长度":{
"type":"input"
}, "最大长度":{
"type":"input"
}, "必备项":{
"type":"select", "options":["是", "否"]
}, }
}, {
"typeName":"boolean", "lable":"真假", "formDesc":{
"固定值":{
"type":"input"
}, "默认值":{
"type":"input"
}, "必备项":{
"type":"select", "options":["是", "否"]
}, }
}, ]
};
}
export function listRemoteRegistry() {
var ret = [
{
"registryID":"macjw", "name":"jw市市级注册"
}, {
"registryID":"macjw.de.cd", "name":"jw市de县cd镇注册表"
}
];
return {
"total":10, "data":ret, "code":0
};
}
//{如果是offset+count就按顺序
// controlType=过滤
// createStartDate createEndDate
// updateStartDate updateEndDate
// 如果是keyword:... 就模糊搜索}
// registryID
//{"createStartDate":16111,"createEndDate":12222,"offset":0,"count":5}
export function listMetaStandard(arg) {
var ret = [];
ret.push({
"name":"CO传感数据", "createDate":167227222, "updateDate":1111111, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw.ab", "controlType":"private", "typeList":["public", "private"], "status":"off", "version":"2.1", "doId":"ab.ccd/aaaaa-aaa", "desc":"元数据标准说明", "fields":[
{
"name":"owner", "type":"string", "description":"简要的说明", "constraint":{
"固定值":"xxxxx", "最大长度":50, "必备项":"是", }
}, {
"name":"pubkey", "type":"string", "description":"pubkey简要的说明2", "constraint":{
"固定值":"jjjjjjj", "最大长度":50
}
}
]
}, {
"name":"BF传感数据", "createDate":167226222, "updateDate":1111311, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw", "controlType":"public", "typeList":["public", "private"], "status":"on", "version":"2.1", "doId":"ab.ccd/aabbbaa-aaa", "desc":"元数据标准说明", "fields":[
{
"name":"repository", "type":"string", "description":"简要的说明", "constraint":{
"固定值":"xxx", "最大长度":50, "必备项":"是", }
}, {
"name":"format", "type":"boolean", "description":"简要的说明2", "constraint":{
"必备项":"否"
}
}, {
"name":"registertime", "type":"string", "description":"registertime简要的说明333333333", "constraint":{
"固定值":"ooooo", "默认值":"hhhhhhhh", "最小长度":10, "必备项":"否", }
}, ]
}, {
"name":"AA传感数据", "createDate":167227222, "updateDate":1111111, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw.ab", "controlType":"private", "typeList":["public", "private"], "status":"off", "version":"2.1", "doId":"ab.ccd/adddda-aaa", "desc":"元数据标准说明", "fields":[
{
"name":"owner", "type":"string", "description":"简要的说明", "constraint":{
"固定值":"xxxxx", "最大长度":50, "必备项":"是", }
}, {
"name":"pubkey", "type":"string", "description":"pubkey简要的说明2", "constraint":{
"固定值":"jjjjjjj", "最大长度":50
}
}
]
}, {
"name":"HHH传感数据", "createDate":167227222, "updateDate":1111111, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw.ac", "controlType":"private", "typeList":["public", "private"], "status":"on", "version":"2.1", "doId":"ab.ccd/aggga-aaa", "desc":"元数据标准说明", "fields":[
{
"name":"owner", "type":"string", "description":"简要的说明", "constraint":{
"固定值":"xxxxx", "最大长度":50, "必备项":"是", }
}, {
"name":"pubkey", "type":"string", "description":"pubkey简要的说明2", "constraint":{
"固定值":"jjjjjjj", "最大长度":50
}
}
]
}
);
return {
"total":10, "data":ret, "code":0
};
}
export function updateMetaStandardDetail(arg) {
var ret = [];
//通知对应的远程注册表,需要更新这个关系。
return {
"total":10, "data":ret, "code":0
};
}
//{"offset":..,"count":,"localMetaStandardDoid":}
export function listMetaStandardRelaction(arg) {
var ret = [];
ret.push({
"name":"煤矿传感数据映射", "localMetaStandardDoid":"xx.xx/adfa", "remoteMetaStandardDoid":"ab.ccd/aaaaa-aaa", "createDate":167227222, "updateDate":1111111, "creator":"aabbcc", "updater":"aabbcc", "mapRule":{
"owner":"${val.大小}", "pubkey":"function(val){}", }
});
return {
"total":10, "data":ret, "code":0
};
}
//{"localMetaID":"xxx","mapRule":{},"remoteMetaID":"xxx"}
export function getPreviewMapResult(arg) {
return {
"code":0, data:{
"localData":{
"大小":"500KB", "姓名":"小东"
}, "remoteData":{
"size":"500000Byte", "name":"*东"
}
}
};
//TODO 返回映射格式有误
// return {"code":1,"....."}
}
//{"localDataSample":{},"mapRule":{},"remoteMetaID":"xxx"}
export function getMapResult(){
return {"code":0, data: {"remoteData":{"size":"500000Byte","姓名":"*明"}}}
}
}
function convertArgToJson(arg) {
if (typeof(arg)=='string') return JSON.parse(arg);
return arg;
}
//{"localDataSample":{},"mapRule":{},"remoteMetaID":"xxx"}
export function getMapResult(arg) {
arg = convertArgToJson(arg);
var ret = {
};
ret.data = org.bdware.sc.registry.RuleExecutor.executeRule(arg);
ret.code = org.bdware.sc.registry.RuleExecutor.getLastExecuteStatus();
return ret;
}
}

8
backend/yjs/ruleHelper.yjs Executable file
View File

@ -0,0 +1,8 @@
module ruleHelper {
function md5(str) {
return org.bdware.sc.registry.RuleHelper.md5(str);
}
function edp(d1, d2) {
return org.bdware.sc.registry.RuleHelper.edp(d1, d2);
}
}