Skip to content
Snippets Groups Projects
Commit 0dcd0be0 authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

WIP: running

parent d05c7394
No related branches found
No related tags found
No related merge requests found
Pipeline #53138 failed
...@@ -275,8 +275,9 @@ var resolve_references = ...@@ -275,8 +275,9 @@ var resolve_references =
* named `par`. * named `par`.
* *
* @param {HTMLElement} entity - entity in HTML * @param {HTMLElement} entity - entity in HTML
* representation. @param * representation.
* {string} par - parent name. @return {boolean} * @param {string} par - parent name.
* @return {boolean}
*/ */
this.is_child = this.is_child =
function(entity, par) { function(entity, par) {
...@@ -289,6 +290,45 @@ var resolve_references = ...@@ -289,6 +290,45 @@ var resolve_references =
return false; return false;
}; };
/**
* Return true iff the entity has at least one direct parent
* named `par`.
*
* @param {GRPC Entity} entity - GRPC entity object
* @param {string} par - parent name.
* @return {boolean}
*/
this.is_child_g =
function(entity, par) {
var pars = []
entity.getParentsList().forEach((e)=>{pars.push(e.getName().toLowerCase())});
if (pars.indexOf(par.toLowerCase())!=-1){
return true;
} else {
return false;
}
};
/**
* Return the value of the property with the given name
*
* @param {GRPC Entity} entity - GRPC entity object
* @param {string} pname - property name
* @return {object}
*/
this.get_property_g =
function(entity, pname) {
var pnames = [];
entity.getPropertiesList().forEach((e)=>{pnames.push(e.getName().toLowerCase())});
var index = pnames.indexOf(pname.toLowerCase());
if (index!=-1){
return entity.getPropertiesList()[index].getValue();
} else {
return null;
}
};
/** /**
* @typedef {reference_info} * @typedef {reference_info}
* @property {string} text * @property {string} text
...@@ -324,22 +364,25 @@ var resolve_references = ...@@ -324,22 +364,25 @@ var resolve_references =
* is to be resolved. @return {reference_info} * is to be resolved. @return {reference_info}
*/ */
this.resolve_reference = this.resolve_reference =
async function(id) { async function(entity) {
const custom_reference_resolver = const custom_reference_resolver =
window["${BUILD_EXT_REFERENCES_CUSTOM_RESOLVER}"]; window["${BUILD_EXT_REFERENCES_CUSTOM_RESOLVER}"];
if (custom_reference_resolver && if (custom_reference_resolver &&
typeof custom_reference_resolver.resolve === "function") { typeof custom_reference_resolver.resolve === "function") {
// try custom_reference_resolver and fall-back to standard // try custom_reference_resolver and fall-back to standard
// implementation // implementation
var ret = await custom_reference_resolver.resolve(id); if (custom_reference_resolver.new_resolve) {
var ret = await custom_reference_resolver.resolve(entity);
if (ret) { if (ret) {
return ret; return ret;
} }
} else {
var ret = await custom_reference_resolver.resolve(entity.getId());
if (ret) {
return ret;
}
}
} }
const entity = (await resolve_references.retrieve(id))[0];
// TODO handle multiple parents // TODO handle multiple parents
const par = resolve_references.getParents(entity)[0] || {}; const par = resolve_references.getParents(entity)[0] || {};
...@@ -394,13 +437,20 @@ var resolve_references = ...@@ -394,13 +437,20 @@ var resolve_references =
* @return {reference_info} the resolved reference information * @return {reference_info} the resolved reference information
*/ */
this.update_single_resolvable_reference = this.update_single_resolvable_reference =
async function(rs) { async function(rs, entities_prom) {
$(rs).find(".caosdb-id-button").hide(); $(rs).find(".caosdb-id-button").hide();
const target = resolve_references.add_target(rs); const target = resolve_references.add_target(rs);
const entities=await entities_prom;
const id = getEntityID(rs); const id = getEntityID(rs);
const entity = entities[id];
if (entity.getId()!=id){
console.error("IDs do not match!!!!");
}
console.log("Entity looks good!!!!");
console.log(typeof entity.getParentsList==="function");
target.textContent = id; target.textContent = id;
const resolved_entity_info = const resolved_entity_info =
(await resolve_references.resolve_reference(id)); (await resolve_references.resolve_reference(entity));
target.textContent = resolved_entity_info.text; target.textContent = resolved_entity_info.text;
return resolved_entity_info; return resolved_entity_info;
}; };
...@@ -442,6 +492,22 @@ var resolve_references = ...@@ -442,6 +492,22 @@ var resolve_references =
.toArray(); .toArray();
}; };
/**
* This function retrieves all entities corresponding to the given
* IDs.
*
* @param {Set} ids
*/
this._create_entity_dict = async function(ids) {
resp = await GrpcTransactionService.retrieve(Array.from(ids));
edict = {};
for (eresp of resp.getResponsesList()) {
var ent = eresp.getRetrieveResponse().getEntityResponse().getEntity();
edict[ent.getId()] = ent;
}
return edict;
}
/** /**
* This function updates all references in the body which are inside * This function updates all references in the body which are inside
* of the current viewport. * of the current viewport.
...@@ -485,7 +551,8 @@ var resolve_references = ...@@ -485,7 +551,8 @@ var resolve_references =
// the view port. // the view port.
const first_ref_info = const first_ref_info =
await resolve_references.update_single_resolvable_reference( await resolve_references.update_single_resolvable_reference(
rs[0]); rs[0],
resolve_references._create_entity_dict([getEntityID(rs[0])]));
first_ref_info["index"] = 0; first_ref_info["index"] = 0;
...@@ -497,11 +564,16 @@ var resolve_references = ...@@ -497,11 +564,16 @@ var resolve_references =
resolve_references.add_summary_field(property_value); resolve_references.add_summary_field(property_value);
// collect ref infos for the summary // collect ref infos for the summary
const entity_ids = new Set
for (var j = 1; j < rs.length; j++) {
entity_ids.add(getEntityID(rs[j]))
}
entities_prom = resolve_references._create_entity_dict(ids);
const ref_infos = [first_ref_info]; const ref_infos = [first_ref_info];
for (var j = 1; j < rs.length; j++) { for (var j = 1; j < rs.length; j++) {
const ref_info = const ref_info =
resolve_references.update_single_resolvable_reference( resolve_references.update_single_resolvable_reference(
rs[j]); rs[j], entities_prom);
ref_info["index"] = j; ref_info["index"] = j;
ref_infos.push(ref_info); ref_infos.push(ref_info);
} }
...@@ -550,7 +622,9 @@ var resolve_references = ...@@ -550,7 +622,9 @@ var resolve_references =
// discard return value as it is not needed for any summary // discard return value as it is not needed for any summary
// generation as above. // generation as above.
resolve_references.update_single_resolvable_reference(rs[i]); resolve_references.update_single_resolvable_reference(
rs[i],
resolve_references._create_entity_dict([getEntityID(rs[i])]));
} }
} }
} }
......
...@@ -42,24 +42,22 @@ var caosdb_default_person_reference = new function () { ...@@ -42,24 +42,22 @@ var caosdb_default_person_reference = new function () {
/** /**
* Return the name of a person as firstname + lastname * Return the name of a person as firstname + lastname
*/ */
this.get_person_str = function (el) { this.get_person_str = function (entity) {
var valpr = getProperties(el); var lname =""
if (valpr == undefined) { if (resolve_references.get_property_g(entity, lastname_prop_name)!=null){
return; lname = resolve_references.get_property_g(entity, lastname_prop_name).getScalarValue().getStringValue();
} }
return valpr.filter(valprel => var fname =""
valprel.name.toLowerCase().trim() == if (resolve_references.get_property_g(entity, firstname_prop_name)!=null){
firstname_prop_name.toLowerCase())[0].value + fname= resolve_references.get_property_g(entity, firstname_prop_name).getScalarValue().getStringValue();
" " +
valpr.filter(valprel => valprel.name.toLowerCase().trim() ==
lastname_prop_name.toLowerCase())[0].value;
} }
return fname+" " +lname;
this.resolve = async function (id) { }
this.new_resolve = true; // enable new syntax
const entity = (await resolve_references.retrieve(id))[0]; this.resolve = async function (entity) {
console.log("whats that?");
if (resolve_references.is_child(entity, person_rt_name)) { console.log(entity);
if (resolve_references.is_child_g(entity, person_rt_name)) {
return { return {
"text": caosdb_default_person_reference.get_person_str(entity) "text": caosdb_default_person_reference.get_person_str(entity)
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment