|
|
@@ -57,6 +57,79 @@ var _defaultVisJsOptions = {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+function dataMakeNode(params) {
|
|
|
+ var objectName = params.typeName.substr(params.typeName.indexOf(':') + 1)
|
|
|
+ var nodeId = objectName + '.' + params.primaryKey // TODO: primaryKey?
|
|
|
+ // {
|
|
|
+ // id: nodeId,
|
|
|
+ // label: makeShortLabel(nodeId),
|
|
|
+ // group: objectName,
|
|
|
+ // _loaded: true,
|
|
|
+ // typeName: typeName,
|
|
|
+ // primaryKey: (json['ID']) ? json['ID'] : null // TODO: _primaryKey
|
|
|
+ // }
|
|
|
+ return {
|
|
|
+ id: nodeId,
|
|
|
+ label: makeShortLabel(nodeId), // TODO: get from schema assert @label attribute
|
|
|
+ group: objectName,
|
|
|
+ _loaded: true,
|
|
|
+ typeName: params.typeName,
|
|
|
+ primaryKey: params.primaryKey // TODO: _primaryKey
|
|
|
+ }
|
|
|
+}
|
|
|
+function dataMakeEdge(parentNodeId, nodeObject) {
|
|
|
+ return {
|
|
|
+ id: parentNodeId + nodeObject.id,
|
|
|
+ from: parentNodeId,
|
|
|
+ to: nodeObject.id,
|
|
|
+ }
|
|
|
+}
|
|
|
+function dataMakeXlinkNode(params) {
|
|
|
+ var objectName = params.typeName.substr(params.typeName.indexOf(':') + 1)
|
|
|
+ var nodeId = params.xlink.substr(params.xlink.indexOf('#') + 1)
|
|
|
+ var primaryKey = nodeId.substr(nodeId.lastIndexOf('.') + 1)
|
|
|
+ return {
|
|
|
+ id: nodeId,
|
|
|
+ label: makeShortLabel(nodeId) + ' (+)',
|
|
|
+ group: objectName,
|
|
|
+ _loaded: false,
|
|
|
+ typeName: params.typeName,
|
|
|
+ primaryKey: primaryKey
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function dataMakeFetchMoreNode(params) {
|
|
|
+ // params = {
|
|
|
+ // parentNodeId: parentNodeId,
|
|
|
+ // type: json.type,
|
|
|
+ // objectName: objectName,
|
|
|
+ // ref: json,
|
|
|
+ // }
|
|
|
+ if(DBG)console.log('DBG dataMakeFetchMoreNode(params)', params)
|
|
|
+ var nodeId = params.parentNodeId+'fetch-more-features-'+params.type+'-on-' + params.objectName;
|
|
|
+ return {
|
|
|
+ id: nodeId,
|
|
|
+ label: 'Pobierz więcej (+)',
|
|
|
+ group: 'fetch-more-data', // params.objectName,
|
|
|
+ _loaded: false,
|
|
|
+ _type: 'ref',
|
|
|
+ parentNodeId: params.parentNodeId,
|
|
|
+ ref: params.ref,
|
|
|
+ // typeName: typeName,
|
|
|
+ // primaryKey: nodeId.substr(nodeId.lastIndexOf('.') + 1)
|
|
|
+ };
|
|
|
+}
|
|
|
+function dataMakeFetchMoreEdge(parentNodeId, fetchMoreNode) {
|
|
|
+ // @param parentNodeId - from node id
|
|
|
+ // @param fetchMoreNode - from dataMakeFetchMoreNode
|
|
|
+ if(DBG)console.log('DBG dataMakeFetchMoreEdge(parentNodeId, fetchMoreNode)', {parentNodeId:parentNodeId, fetchMoreNode:fetchMoreNode})
|
|
|
+ return {
|
|
|
+ id: fetchMoreNode.id,
|
|
|
+ from: parentNodeId,
|
|
|
+ to: fetchMoreNode.id
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
(function () {
|
|
|
var form = document.getElementById('wfs_request')
|
|
|
var featureTypeName = TYPENAME
|
|
|
@@ -88,13 +161,13 @@ function updateWfsResponse(features, featureTypeName) {
|
|
|
nodes: _nodes,
|
|
|
edges: _edges,
|
|
|
};
|
|
|
- _todoGraphData.forEach(function (levelData) {
|
|
|
+ _todoGraphData.forEach(function (levelData, levelIdx) {
|
|
|
if (levelData.nodes && levelData.nodes.length) {
|
|
|
levelData.nodes.forEach(function (node) {
|
|
|
try {
|
|
|
_nodes.add(node)
|
|
|
} catch (e) {
|
|
|
- if(DBG)console.log('_graphData.nodes.add error:', e);
|
|
|
+ if(DBG)console.log('_graphData.nodes.add [level='+levelIdx+'] error:', e);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
@@ -103,7 +176,7 @@ function updateWfsResponse(features, featureTypeName) {
|
|
|
try {
|
|
|
_edges.add(edge)
|
|
|
} catch (e) {
|
|
|
- if(DBG)console.log('_graphData.edges.add error:', e);
|
|
|
+ if(DBG)console.log('_graphData.edges.add [level='+levelIdx+'] error:', e);
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
@@ -127,6 +200,7 @@ function updateWfsResponse(features, featureTypeName) {
|
|
|
return;
|
|
|
}
|
|
|
var selectedNode = _nodes.get(featureID)
|
|
|
+ if(DBG)console.log('Selection: selectedNode:', selectedNode)
|
|
|
if (!selectedNode) return;
|
|
|
|
|
|
if ('ref' === selectedNode._type) {
|
|
|
@@ -165,26 +239,19 @@ function parseResponseRec(_todoGraphData, json, typeName, parentNodeId, level) {
|
|
|
}
|
|
|
})
|
|
|
} else if (p5Utils__isObject(json) && isP5LinkObject(json)) {
|
|
|
- if(DBG)console.log('DBG::parseResponseRec isP5LinkObject - TODO', json);
|
|
|
+ if(DBG)console.log('DBG::parseResponseRec isP5LinkObject');
|
|
|
parseResponseP5Link(_todoGraphData, json, typeName, parentNodeId, level)
|
|
|
} else if (p5Utils__isObject(json)) {
|
|
|
- var objectName = typeName.substr(typeName.indexOf(':') + 1)
|
|
|
- var nodeId = objectName + '.' + json.ID // TODO: primaryKey?
|
|
|
- {
|
|
|
- // _todoGraphData.nodes.add({ id: nodeId, label: nodeId })
|
|
|
- if (!_todoGraphData[level]) _todoGraphData[level] = { nodes: [], edges: [] }
|
|
|
- _todoGraphData[level].nodes.push({
|
|
|
- id: nodeId,
|
|
|
- label: makeShortLabel(nodeId),
|
|
|
- group: objectName,
|
|
|
- _loaded: true,
|
|
|
- typeName: typeName,
|
|
|
- primaryKey: (json['ID']) ? json['ID'] : null // TODO: _primaryKey
|
|
|
- })
|
|
|
- if (parentNodeId) {
|
|
|
- // _graphData.edges.add({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
- _todoGraphData[level].edges.push({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
- }
|
|
|
+ // _todoGraphData.nodes.add({ id: nodeId, label: nodeId })
|
|
|
+ if (!_todoGraphData[level]) _todoGraphData[level] = { nodes: [], edges: [] }
|
|
|
+ var nodeObject = dataMakeNode({
|
|
|
+ typeName: typeName,
|
|
|
+ primaryKey: (json['ID']) ? json['ID'] : null, // TODO: get primaryKey from object
|
|
|
+ })
|
|
|
+ var nodeId = nodeObject.id
|
|
|
+ _todoGraphData[level].nodes.push(nodeObject)
|
|
|
+ if (parentNodeId) {
|
|
|
+ _todoGraphData[level].edges.push(dataMakeEdge(parentNodeId, nodeObject))
|
|
|
}
|
|
|
Object.keys(json).filter(function (fieldName) {
|
|
|
return (fieldName.indexOf(':') > -1)
|
|
|
@@ -203,21 +270,17 @@ function parseResponseXlinkListRec(_todoGraphData, json, typeName, parentNodeId,
|
|
|
if(DBG)console.log('DBG::parseResponseRec:XlinkList', {json:json, typeName:typeName, parentNodeId:parentNodeId, isString: p5Utils__isString(json), isArray: p5Utils__isArray(json), isObject: p5Utils__isObject(json)});
|
|
|
if (p5Utils__isString(json)) { // xlink "https://biuro.biall-net.pl/wfs/default_db/BI_audit_ENERGA_RUM_KONTRAHENCI#BI_audit_ENERGA_RUM_KONTRAHENCI.9233",
|
|
|
var nodeId = json.substr(json.indexOf('#') + 1)
|
|
|
- var objectName = typeName.substr(typeName.indexOf(':') + 1)
|
|
|
{
|
|
|
// _graphData.nodes.add({ id: nodeId, label: nodeId })
|
|
|
if (!_todoGraphData[level]) _todoGraphData[level] = { nodes: [], edges: [] }
|
|
|
- _todoGraphData[level].nodes.push({
|
|
|
- id: nodeId,
|
|
|
- label: makeShortLabel(nodeId) + ' (+)',
|
|
|
- group: objectName,
|
|
|
- _loaded: false,
|
|
|
+ var nodeObject = dataMakeXlinkNode({
|
|
|
+ xlink: json,
|
|
|
typeName: typeName,
|
|
|
- primaryKey: nodeId.substr(nodeId.lastIndexOf('.') + 1)
|
|
|
+ primaryKey: (json['ID']) ? json['ID'] : null, // TODO: get primaryKey from object
|
|
|
})
|
|
|
+ _todoGraphData[level].nodes.push(nodeObject)
|
|
|
if (parentNodeId) {
|
|
|
- // _graphData.edges.add({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
- _todoGraphData[level].edges.push({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
+ _todoGraphData[level].edges.push(dataMakeEdge(parentNodeId, nodeObject))
|
|
|
}
|
|
|
}
|
|
|
} else if (p5Utils__isObject(json) && isP5LinkObject(json)) {
|
|
|
@@ -227,8 +290,7 @@ function parseResponseXlinkListRec(_todoGraphData, json, typeName, parentNodeId,
|
|
|
}
|
|
|
}
|
|
|
function parseResponseP5Link(_todoGraphData, json, typeName, parentNodeId, level) {
|
|
|
- if(DBG)console.log('parseResponseRec isObject - fetch more xlink object');
|
|
|
- console.warn('parseResponseRec isObject - fetch more xlink object', json);
|
|
|
+ if(DBG)console.log('parseResponseRec isObject and P5Link - fetch more xlink object');
|
|
|
// example json: { type: "next",
|
|
|
// @backRefNS: "default_db/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA/BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA",
|
|
|
// @backRefPK: "42",
|
|
|
@@ -241,47 +303,29 @@ function parseResponseP5Link(_todoGraphData, json, typeName, parentNodeId, level
|
|
|
if (!_todoGraphData[level]) _todoGraphData[level] = { nodes: [], edges: [] }
|
|
|
switch (json.type) {
|
|
|
case 'next': {
|
|
|
- if(DBG)console.log('TODO: next "'+json.type+'" - fetch more xlink object');
|
|
|
- var nodeId = 'fetch-more-features-'+json.type+'-on-' + objectName;
|
|
|
- _todoGraphData[level].nodes.push({
|
|
|
- id: nodeId,
|
|
|
- label: 'Pobierz więcej (+)',
|
|
|
- group: objectName,
|
|
|
- _loaded: false,
|
|
|
- _type: 'ref',
|
|
|
+ var nodeObject = dataMakeFetchMoreNode({
|
|
|
parentNodeId: parentNodeId,
|
|
|
+ type: json.type,
|
|
|
+ objectName: objectName,
|
|
|
ref: json,
|
|
|
- // typeName: typeName,
|
|
|
- // primaryKey: nodeId.substr(nodeId.lastIndexOf('.') + 1)
|
|
|
})
|
|
|
- // _graphData.edges.add({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
- _todoGraphData[level].edges.push({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
+ _todoGraphData[level].nodes.push(nodeObject)
|
|
|
+ _todoGraphData[level].edges.push(dataMakeFetchMoreEdge(parentNodeId, nodeObject))
|
|
|
} break;
|
|
|
default: {
|
|
|
if(DBG)console.log('TODO: Not implemented - parseResponseRec isObject with type "'+json.type+'" - fetch more xlink object');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // var nodeId = json.substr(json.indexOf('#') + 1)
|
|
|
- // var objectName = typeName
|
|
|
- // {
|
|
|
- // // _graphData.nodes.add({ id: nodeId, label: nodeId })
|
|
|
- // if (!_todoGraphData[level]) _todoGraphData[level] = { nodes: [], edges: [] }
|
|
|
- // _todoGraphData[level].nodes.push({ id: nodeId, label: nodeId, group: objectName })
|
|
|
- // if (parentNodeId) {
|
|
|
- // // _graphData.edges.add({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
- // _todoGraphData[level].edges.push({ id: parentNodeId+nodeId, from: parentNodeId, to: nodeId })
|
|
|
- // }
|
|
|
- // }
|
|
|
}
|
|
|
|
|
|
function fetchNodeMoreRefs(selectedNode, featureID) {
|
|
|
try {
|
|
|
if (!selectedNode) throw "Missing featureID"
|
|
|
if (!featureID) throw "Missing featureID"
|
|
|
+ if (!selectedNode.ref) throw "Missing selectedNode.ref"
|
|
|
var idSelectedNode = selectedNode.id
|
|
|
- var idSelectedEdge = selectedNode.parentNodeId + selectedNode.id
|
|
|
+ var idSelectedEdge = selectedNode.id
|
|
|
var parentNodeId = selectedNode.parentNodeId
|
|
|
var featureTypeName = selectedNode.ref['@typeName']
|
|
|
var backRefNS = selectedNode.ref['@backRefNS']
|
|
|
@@ -297,7 +341,7 @@ function fetchNodeMoreRefs(selectedNode, featureID) {
|
|
|
backRefPK: backRefPK,
|
|
|
backRefField: backRefField,
|
|
|
startIndex: startIndex,
|
|
|
- // count: 3,
|
|
|
+ maxFeatures: 10,
|
|
|
};
|
|
|
p5WFS_GetFeature(featureTypeName, wfsParams).then(function (features) {
|
|
|
if(DBG)console.log('features', features)
|
|
|
@@ -307,15 +351,6 @@ function fetchNodeMoreRefs(selectedNode, featureID) {
|
|
|
var objectName = featureTypeName.substr(featureTypeName.indexOf(':') + 1)
|
|
|
var nodeId = objectName + '.' + feature.ID // TODO: primaryKey?
|
|
|
_todoGraphData[0].edges.push({ id: parentNodeId + nodeId, from: parentNodeId, to: nodeId })
|
|
|
- // _nodes.add({
|
|
|
- // id: fakeLoadingNodeID,
|
|
|
- // label: 'loading...',
|
|
|
- // })
|
|
|
- // _edges.add({
|
|
|
- // id: parentNodeId + nodeId,
|
|
|
- // from: parentNodeId,
|
|
|
- // to: nodeId
|
|
|
- // })
|
|
|
})
|
|
|
// var refFields = Object.keys(features[0]).filter(function (fieldName) {
|
|
|
// return (fieldName.indexOf(':') > -1)
|
|
|
@@ -345,11 +380,28 @@ function fetchNodeMoreRefs(selectedNode, featureID) {
|
|
|
features.forEach(function (feature) {
|
|
|
updateWfsResponse(feature, featureTypeName)
|
|
|
})
|
|
|
+
|
|
|
+ var nodeSelectedData = _nodes.get(idSelectedNode)
|
|
|
+ var edgeSelectedData = _nodes.get(idSelectedEdge)
|
|
|
+ _nodes.remove({ id: idSelectedNode })
|
|
|
+ _edges.remove({ id: idSelectedEdge })
|
|
|
+ if (features.length >= 10) {
|
|
|
+ var nodeObject = dataMakeFetchMoreNode({
|
|
|
+ parentNodeId: nodeSelectedData.parentNodeId,
|
|
|
+ type: nodeSelectedData.type,
|
|
|
+ objectName: nodeSelectedData.objectName,
|
|
|
+ ref: Object.assign(nodeSelectedData.ref, {
|
|
|
+ '@startIndex': (10 + parseInt(startIndex)),
|
|
|
+ value: nodeSelectedData.ref.value.replace('startIndex=' + startIndex, 'startIndex=' + (10 + parseInt(startIndex)))
|
|
|
+ })
|
|
|
+ })
|
|
|
+ _nodes.add(nodeObject)
|
|
|
+ _edges.add(dataMakeFetchMoreEdge(parentNodeId, nodeObject))
|
|
|
+ }
|
|
|
+
|
|
|
return "Pobrano nowe dane"
|
|
|
}).then(function (msg) {
|
|
|
p5UI__notifyAjaxCallback({ type: 'info', msg: msg })
|
|
|
- _nodes.remove({ id: idSelectedNode })
|
|
|
- _edges.remove({ id: idSelectedEdge })
|
|
|
}).catch(function (e) {
|
|
|
if(DBG)console.warn(e)
|
|
|
p5UI__notifyAjaxCallback({ type: 'error', msg: e })
|
|
|
@@ -372,17 +424,6 @@ function fetchNodeRecurse(selectedNode, featureID) {
|
|
|
primaryKey: featureEx[1]
|
|
|
});
|
|
|
|
|
|
- // var fakeLoadingNodeID = featureID + '-loading'
|
|
|
- // _nodes.add({
|
|
|
- // id: fakeLoadingNodeID,
|
|
|
- // label: 'loading...',
|
|
|
- // })
|
|
|
- // _edges.add({
|
|
|
- // id: fakeLoadingNodeID,
|
|
|
- // from: featureID,
|
|
|
- // to: fakeLoadingNodeID
|
|
|
- // })
|
|
|
-
|
|
|
// view-source:http://visjs.org/examples/network/data/dynamicData.html
|
|
|
_nodes.update({
|
|
|
id: featureID,
|
|
|
@@ -401,14 +442,10 @@ function fetchNodeRecurse(selectedNode, featureID) {
|
|
|
return "Pobrano nowe dane"
|
|
|
}).then(function (msg) {
|
|
|
p5UI__notifyAjaxCallback({ type: 'info', msg: msg })
|
|
|
- // _nodes.remove({ id: fakeLoadingNodeID })
|
|
|
- // _edges.remove({ id: fakeLoadingNodeID })
|
|
|
_nodes.update({ id: featureID, label: makeShortLabel(selectedNodeId), _loaded: true })
|
|
|
}).catch(function (e) {
|
|
|
if(DBG)console.warn(e)
|
|
|
p5UI__notifyAjaxCallback({ type: 'error', msg: e })
|
|
|
- // _nodes.remove({ id: fakeLoadingNodeID })
|
|
|
- // _edges.remove({ id: fakeLoadingNodeID })
|
|
|
_nodes.update({ id: featureID, label: makeShortLabel(selectedNodeId), _loaded: true })
|
|
|
})
|
|
|
} catch (e) {
|
|
|
@@ -505,3 +542,5 @@ function renderSelectedNode(node) {
|
|
|
|
|
|
// global['FUNCTION_FETCH_CHILDRENS'] = 'refGraphFetchChildrens'
|
|
|
// global['FUNCTION_FETCH_PARENTS'] = 'refGraphFetchParents'
|
|
|
+// global['_nodes'] = _nodes // TODO: DBG
|
|
|
+// global['_edges'] = _edges // TODO: DBG
|