| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 |
9x
9x
9x
9x
9x
9x
38x
38x
38x
67x
67x
34x
34x
21x
13x
13x
6x
7x
7x
33x
33x
38x
9x
25x
25x
25x
9x
9x
7x
7x
7x
7x
9x
291x
291x
9x
9x
1376x
1376x
4115x
4115x
3420x
695x
695x
695x
| /*!
GPII Ontology Server Utilities
Copyright 2012 OCAD University
Copyright 2014 Raising the Floor - International
Licensed under the New BSD license. You may not use this file except in
compliance with this License.
The research leading to these results has received funding from the European Union's
Seventh Framework Programme (FP7/2007-2013) under grant agreement no. 289016.
You may obtain a copy of the License at
https://github.com/GPII/universal/blob/master/LICENSE.txt
*/
"use strict";
var fluid = fluid || require("infusion"),
gpii = fluid.registerNamespace("gpii"),
$ = fluid.registerNamespace("jQuery");
fluid.registerNamespace("gpii.ontologyHandler.utils");
fluid.registerNamespace("gpii.ontologyHandler.transforms");
/*
* Function used when PUTting preferences to the preferences server. Filtering a full preferences
* set by removing a subset from it which is needed when ensuring that no preferences are stored
* twice on the server
*
* There are two rules regarding the preferences sets that this function helps to adhere to:
* (1) A preference should be stored in the ontology the user saves it in and
* (2) no preference should be stored at one time in multiple ontologies (not taking into account
* contexts).
*
* So if I do a PUT with preference set containing setting Xa in ontology A, and that setting
* already exist in the preference set stored on server as Xb, in ontology B, we need to make
* sure that Xb is deleted from the NP set. That is what this filter function does.
* When storing a preferences set in eg. the flat ontology, all the prefs are first translated
* to other known ontologies, and then these settings are removed from the prefs set using
* this filter function. Once this is done, the flat preferences can safely be stored on the
* server without risking duplication.
*
* @source (Object) - the set of preferences from which to remove elements found in the _remove_
* object
* @remove (Object) - The set of preferences to remove from the _source_ set.
* @returns (Object) - The _source_ set of preferences, but with all the elements present in _remove_
* removed
*/
gpii.ontologyHandler.utils.filter = function (source, remove) {
var modified = false,
sourceElement,
toRemove;
var ret = fluid.freshContainer(source);
for (var ind in source) {
sourceElement = source[ind];
if (ind in remove) {
toRemove = remove[ind];
if (fluid.isPrimitive(toRemove) || $.isArray(toRemove)) {
continue;
} else {
var res = gpii.ontologyHandler.utils.filter(sourceElement, toRemove);
if (res === undefined) {
continue;
}
ret[ind] = res;
modified = true;
}
} else {
ret[ind] = sourceElement;
modified = true;
}
}
return modified ? ret : undefined;
};
gpii.ontologyHandler.utils.filterPrefs = function (fullSet, toRemove) {
var cpy = fluid.copy(fullSet);
var result = gpii.ontologyHandler.utils.filter(cpy, toRemove);
return result === undefined ? {} : result;
};
// Transforms required for application specific settings
fluid.defaults("gpii.ontologyHandler.transforms.applicationISOToFlat", {
gradeNames: "fluid.standardTransformFunction",
invertConfiguration: "gpii.ontologyHandler.transforms.applicationISOToFlat.invert"
});
gpii.ontologyHandler.transforms.applicationISOToFlat = function (preferences, transformSpec, transform) {
fluid.each(preferences, function (data, appId) {
var value, key;
value = data.parameters;
key = "http://registry\\.gpii\\.net/applications/" + fluid.pathUtil.escapeSegment(appId);
fluid.model.transform.setValue(key, value, transform);
});
};
gpii.ontologyHandler.transforms.applicationISOToFlat.invert = function (transformSpec) {
transformSpec.type = "gpii.ontologyHandler.transforms.applicationFlatToISO";
return transformSpec;
};
fluid.defaults("gpii.ontologyHandler.transforms.applicationFlatToISO", {
gradeNames: "fluid.standardTransformFunction"
});
gpii.ontologyHandler.transforms.applicationFlatToISO = function (preferences, transformSpec, transform) {
var searchValue = "//registry.gpii.net/applications/";
fluid.each(preferences, function (preference, uri) {
var appIndex = uri.indexOf(searchValue),
appId;
if (appIndex < 0) {
return;
}
appId = uri.substring(appIndex + searchValue.length);
preference = {
parameters: preference,
id: appId
};
fluid.model.transform.setValue(fluid.model.composeSegments(transformSpec.outputPath,
fluid.pathUtil.escapeSegment(appId)), preference, transform);
});
};
|