sparnatural
Version:
Visual client-side SPARQL query builder and knowledge graph exploration tool
198 lines • 16.8 kB
JavaScript
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _WhereBuilder_instances, _WhereBuilder_grpWrapper, _WhereBuilder_specProvider, _WhereBuilder_typePredicate, _WhereBuilder_isChild, _WhereBuilder_isInOption, _WhereBuilder_valueBuilder, _WhereBuilder_resultPtrns, _WhereBuilder_startClassPtrn, _WhereBuilder_endClassPtrn, _WhereBuilder_intersectionPtrn, _WhereBuilder_whereChildPtrns, _WhereBuilder_andChildPtrns, _WhereBuilder_rdfPtrns, _WhereBuilder_executedAfterPtrns, _WhereBuilder_defaultVars, _WhereBuilder_buildChildPatterns, _WhereBuilder_buildWhereChildPtrn, _WhereBuilder_buildAndChildPtrn, _WhereBuilder_buildRdfPtrn, _WhereBuilder_buildEndClassPtrn, _WhereBuilder_buildStartClassPtrn, _WhereBuilder_buildIntersectionPtrn, _WhereBuilder_buildGrpWrapperPtrn, _WhereBuilder_createOptionStatePtrn;
import { DataFactory } from "rdf-data-factory";
import { OptionTypes } from "../../components/builder-section/groupwrapper/criteriagroup/optionsgroup/OptionsGroup";
import ClassBuilder from "./ClassBuilder";
import IntersectionBuilder from "./IntersectionBuilder";
import SparqlFactory from "./SparqlFactory";
import { ValueBuilderFactory } from "./ValueBuilder";
import { SelectAllValue } from "../../components/builder-section/groupwrapper/criteriagroup/edit-components/EditComponents";
const factory = new DataFactory();
export default class WhereBuilder {
constructor(grpWrapper, specProvider, typePredicate, isChild, isInOption, settings) {
_WhereBuilder_instances.add(this);
// variables set in construtor
_WhereBuilder_grpWrapper.set(this, void 0);
_WhereBuilder_specProvider.set(this, void 0);
_WhereBuilder_typePredicate.set(this, void 0);
_WhereBuilder_isChild.set(this, void 0);
_WhereBuilder_isInOption.set(this, void 0);
_WhereBuilder_valueBuilder.set(this, void 0);
// patterns built in the build process
_WhereBuilder_resultPtrns.set(this, []);
_WhereBuilder_startClassPtrn.set(this, []);
_WhereBuilder_endClassPtrn.set(this, []);
_WhereBuilder_intersectionPtrn.set(this, []);
_WhereBuilder_whereChildPtrns.set(this, []);
_WhereBuilder_andChildPtrns.set(this, []);
_WhereBuilder_rdfPtrns.set(this, []);
_WhereBuilder_executedAfterPtrns.set(this, []);
// default vars gathered from children
_WhereBuilder_defaultVars.set(this, []);
__classPrivateFieldSet(this, _WhereBuilder_grpWrapper, grpWrapper, "f");
__classPrivateFieldSet(this, _WhereBuilder_specProvider, specProvider, "f");
__classPrivateFieldSet(this, _WhereBuilder_typePredicate, typePredicate, "f");
__classPrivateFieldSet(this, _WhereBuilder_isChild, isChild, "f");
__classPrivateFieldSet(this, _WhereBuilder_isInOption, isInOption, "f");
this.settings = settings;
// create the object to convert widget values to SPARQL
let endClassValue = __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.EndClassGroup.endClassVal.type;
// this is because the query geenration may be triggered while the end class is not there yet
if (endClassValue != null) {
__classPrivateFieldSet(this, _WhereBuilder_valueBuilder, new ValueBuilderFactory().buildValueBuilder(__classPrivateFieldGet(this, _WhereBuilder_specProvider, "f")
.getProperty(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.ObjectPropertyGroup.getTypeSelected())
.getPropertyType(endClassValue)), "f");
// pass everything needed to generate SPARQL
__classPrivateFieldGet(this, _WhereBuilder_valueBuilder, "f").init(__classPrivateFieldGet(this, _WhereBuilder_specProvider, "f"), __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.StartClassGroup.startClassVal, __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.ObjectPropertyGroup.objectPropVal, __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.EndClassGroup.endClassVal, __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.EndClassGroup.isVarSelected(), __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.endClassWidgetGroup
.getWidgetValues()
.filter((v) => !(v instanceof SelectAllValue))
.map((v) => {
return v.value;
}));
}
}
build() {
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildChildPatterns).call(this);
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildRdfPtrn).call(this);
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildStartClassPtrn).call(this);
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildEndClassPtrn).call(this);
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildIntersectionPtrn).call(this);
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildGrpWrapperPtrn).call(this);
}
getResultPtrns() {
return __classPrivateFieldGet(this, _WhereBuilder_resultPtrns, "f");
}
getDefaultVars() {
return __classPrivateFieldGet(this, _WhereBuilder_defaultVars, "f");
}
getExecutedAfterPtrns() {
return __classPrivateFieldGet(this, _WhereBuilder_executedAfterPtrns, "f");
}
}
_WhereBuilder_grpWrapper = new WeakMap(), _WhereBuilder_specProvider = new WeakMap(), _WhereBuilder_typePredicate = new WeakMap(), _WhereBuilder_isChild = new WeakMap(), _WhereBuilder_isInOption = new WeakMap(), _WhereBuilder_valueBuilder = new WeakMap(), _WhereBuilder_resultPtrns = new WeakMap(), _WhereBuilder_startClassPtrn = new WeakMap(), _WhereBuilder_endClassPtrn = new WeakMap(), _WhereBuilder_intersectionPtrn = new WeakMap(), _WhereBuilder_whereChildPtrns = new WeakMap(), _WhereBuilder_andChildPtrns = new WeakMap(), _WhereBuilder_rdfPtrns = new WeakMap(), _WhereBuilder_executedAfterPtrns = new WeakMap(), _WhereBuilder_defaultVars = new WeakMap(), _WhereBuilder_instances = new WeakSet(), _WhereBuilder_buildChildPatterns = function _WhereBuilder_buildChildPatterns() {
if (__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").whereChild)
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildWhereChildPtrn).call(this);
if (__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").andSibling)
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_buildAndChildPtrn).call(this);
}, _WhereBuilder_buildWhereChildPtrn = function _WhereBuilder_buildWhereChildPtrn() {
const builder = new WhereBuilder(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").whereChild, __classPrivateFieldGet(this, _WhereBuilder_specProvider, "f"), __classPrivateFieldGet(this, _WhereBuilder_typePredicate, "f"), true, __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").optionState !== OptionTypes.NONE, this.settings);
builder.build();
__classPrivateFieldSet(this, _WhereBuilder_whereChildPtrns, builder.getResultPtrns(), "f");
// gather default vars from children
__classPrivateFieldGet(this, _WhereBuilder_defaultVars, "f").push(...builder.getDefaultVars());
// gather patterns to be executed after
__classPrivateFieldGet(this, _WhereBuilder_executedAfterPtrns, "f").push(...builder.getExecutedAfterPtrns());
}, _WhereBuilder_buildAndChildPtrn = function _WhereBuilder_buildAndChildPtrn() {
const builder = new WhereBuilder(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").andSibling, __classPrivateFieldGet(this, _WhereBuilder_specProvider, "f"), __classPrivateFieldGet(this, _WhereBuilder_typePredicate, "f"), true, __classPrivateFieldGet(this, _WhereBuilder_isInOption, "f"), this.settings);
builder.build();
__classPrivateFieldSet(this, _WhereBuilder_andChildPtrns, builder.getResultPtrns(), "f");
// gather default vars from children
__classPrivateFieldGet(this, _WhereBuilder_defaultVars, "f").push(...builder.getDefaultVars());
// gather patterns to be executed after
__classPrivateFieldGet(this, _WhereBuilder_executedAfterPtrns, "f").push(...builder.getExecutedAfterPtrns());
}, _WhereBuilder_buildRdfPtrn = function _WhereBuilder_buildRdfPtrn() {
// exclude the "Any" value
if ((__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.endClassWidgetGroup?.getWidgetValues()?.length > 0)
&&
!(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.endClassWidgetGroup?.hasAnyValue())) {
__classPrivateFieldSet(this, _WhereBuilder_rdfPtrns, __classPrivateFieldGet(this, _WhereBuilder_valueBuilder, "f").build(), "f");
}
}, _WhereBuilder_buildEndClassPtrn = function _WhereBuilder_buildEndClassPtrn() {
const endClsGrp = __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.EndClassGroup;
const endClsBuilder = new ClassBuilder(endClsGrp, __classPrivateFieldGet(this, _WhereBuilder_specProvider, "f"), __classPrivateFieldGet(this, _WhereBuilder_valueBuilder, "f")?.isBlockingEnd(), __classPrivateFieldGet(this, _WhereBuilder_typePredicate, "f"));
endClsBuilder.build();
__classPrivateFieldSet(this, _WhereBuilder_endClassPtrn, endClsBuilder.getPattern(), "f");
if (endClsBuilder.getDefaultVar()) {
__classPrivateFieldGet(this, _WhereBuilder_defaultVars, "f").push(endClsBuilder.getDefaultVar());
}
}, _WhereBuilder_buildStartClassPtrn = function _WhereBuilder_buildStartClassPtrn() {
const startClsGrp = __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.StartClassGroup;
const startClsBuilder = new ClassBuilder(startClsGrp, __classPrivateFieldGet(this, _WhereBuilder_specProvider, "f"), __classPrivateFieldGet(this, _WhereBuilder_valueBuilder, "f")?.isBlockingStart(), __classPrivateFieldGet(this, _WhereBuilder_typePredicate, "f"));
startClsBuilder.build();
__classPrivateFieldSet(this, _WhereBuilder_startClassPtrn, startClsBuilder.getPattern(), "f");
if (startClsBuilder.getDefaultVar()) {
__classPrivateFieldGet(this, _WhereBuilder_defaultVars, "f").push(startClsBuilder.getDefaultVar());
}
}, _WhereBuilder_buildIntersectionPtrn = function _WhereBuilder_buildIntersectionPtrn() {
const objectPropCls = __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.ObjectPropertyGroup;
const intersectionBuilder = new IntersectionBuilder(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.StartClassGroup.getVarName(), __classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.EndClassGroup.getVarName(), __classPrivateFieldGet(this, _WhereBuilder_valueBuilder, "f"), objectPropCls, __classPrivateFieldGet(this, _WhereBuilder_specProvider, "f"), this.settings);
intersectionBuilder.build();
__classPrivateFieldSet(this, _WhereBuilder_intersectionPtrn, intersectionBuilder.getPattern(), "f");
}, _WhereBuilder_buildGrpWrapperPtrn = function _WhereBuilder_buildGrpWrapperPtrn() {
// The startClassPtrn does not need to be created if it is a WHERE or AND child
const hasStartClass = !__classPrivateFieldGet(this, _WhereBuilder_isChild, "f");
const hasEndClass = !__classPrivateFieldGet(this, _WhereBuilder_specProvider, "f")
.getEntity(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.EndClassGroup.getTypeSelected())
.isLiteralEntity() &&
(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.ObjectPropertyGroup.getTypeSelected() ==
null ||
!__classPrivateFieldGet(this, _WhereBuilder_specProvider, "f")
.getProperty(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.ObjectPropertyGroup.getTypeSelected())
.omitClassCriteria());
const hasIntersectionTriple = __classPrivateFieldGet(this, _WhereBuilder_intersectionPtrn, "f");
let exceptStartPtrn = [];
if (hasIntersectionTriple && __classPrivateFieldGet(this, _WhereBuilder_intersectionPtrn, "f"))
exceptStartPtrn.push(...__classPrivateFieldGet(this, _WhereBuilder_intersectionPtrn, "f"));
if (hasEndClass)
exceptStartPtrn.push(...__classPrivateFieldGet(this, _WhereBuilder_endClassPtrn, "f"));
exceptStartPtrn.push(...__classPrivateFieldGet(this, _WhereBuilder_rdfPtrns, "f"));
exceptStartPtrn.push(...__classPrivateFieldGet(this, _WhereBuilder_whereChildPtrns, "f"));
__classPrivateFieldGet(this, _WhereBuilder_instances, "m", _WhereBuilder_createOptionStatePtrn).call(this, hasStartClass, exceptStartPtrn);
__classPrivateFieldGet(this, _WhereBuilder_resultPtrns, "f").push(...__classPrivateFieldGet(this, _WhereBuilder_andChildPtrns, "f"));
}, _WhereBuilder_createOptionStatePtrn = function _WhereBuilder_createOptionStatePtrn(hasStartClass, exceptStartPtrn) {
// always store the startClassPattern in the final result pattern (no OPTIONAL, no NOT EXISTS, no SERVICE)
if (hasStartClass)
__classPrivateFieldGet(this, _WhereBuilder_resultPtrns, "f").push(...__classPrivateFieldGet(this, _WhereBuilder_startClassPtrn, "f"));
// create a SERVICE clause if needed
const sparqlService = __classPrivateFieldGet(this, _WhereBuilder_specProvider, "f")
.getProperty(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.ObjectPropertyGroup?.getTypeSelected())
?.getServiceEndpoint();
let servicePtrn = null;
if (__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").optionState === OptionTypes.SERVICE || sparqlService) {
const endpoint = factory.namedNode(sparqlService);
// to be on the safe side : when rollback an endclass group, we may come here with only the start class group criteria
// and nothing in this array
if (exceptStartPtrn.length > 0) {
servicePtrn = SparqlFactory.buildServicePattern(exceptStartPtrn, endpoint);
}
}
let normalOrServicePatterns = servicePtrn
? [servicePtrn]
: exceptStartPtrn;
// produce the generated patterns, maybe wrapped in OPTIONAL or NOT EXISTS
let finalResultPtrns = [];
if (__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").optionState === OptionTypes.OPTIONAL &&
!__classPrivateFieldGet(this, _WhereBuilder_isInOption, "f")) {
finalResultPtrns.push(SparqlFactory.buildOptionalPattern(normalOrServicePatterns));
}
else if (__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").optionState === OptionTypes.NOTEXISTS &&
!__classPrivateFieldGet(this, _WhereBuilder_isInOption, "f")) {
finalResultPtrns.push(SparqlFactory.buildNotExistsPattern(SparqlFactory.buildGroupPattern(normalOrServicePatterns)));
}
else {
// nothing special, just retain the patterns in the final result pattern
finalResultPtrns.push(...normalOrServicePatterns);
}
// then decide where to store the generated patterns : either in "normal" patterns
// or in patterns that shall be executed after the rest of the query
if (servicePtrn &&
__classPrivateFieldGet(this, _WhereBuilder_specProvider, "f")
.getProperty(__classPrivateFieldGet(this, _WhereBuilder_grpWrapper, "f").CriteriaGroup.ObjectPropertyGroup?.getTypeSelected())
?.isLogicallyExecutedAfter()) {
__classPrivateFieldGet(this, _WhereBuilder_executedAfterPtrns, "f").push(...finalResultPtrns);
}
else {
__classPrivateFieldGet(this, _WhereBuilder_resultPtrns, "f").push(...finalResultPtrns);
}
};
//# sourceMappingURL=WhereBuilder.js.map