82 json_object **replacementObj)
87 json_object *diffJson = json_tokener_parse(diff);
90 VUserLog(
"Couldn't parse the composition diff: %s", diff);
94 string nodePath = convertIdentifierToPath(compositionIdentifier, nodeIdentifier);
96 set<string> keysFound;
97 int numChanges = json_object_array_length(diffJson);
98 for (
int i = 0; i < numChanges; ++i)
100 json_object *change = json_object_array_get_idx(diffJson, i);
101 json_object_object_foreach(change, key, val)
103 if (! strcmp(nodePath.c_str(), json_object_get_string(val)))
105 keysFound.insert(key);
107 if (! strcmp(key,
"replace") || ! strcmp(key,
"with") || ! strcmp(key,
"move") || ! strcmp(key,
"to"))
109 json_object_get(change);
110 *replacementObj = change;
116 json_object_put(diffJson);
118 if (keysFound.find(
"add") != keysFound.end())
120 else if (keysFound.find(
"remove") != keysFound.end())
122 else if (keysFound.find(
"replace") != keysFound.end() || keysFound.find(
"with") != keysFound.end())
124 else if (keysFound.find(
"move") != keysFound.end() || keysFound.find(
"to") != keysFound.end())
161 json_object *portMappingArray = NULL;
164 if (json_object_object_get_ex(replacementObj,
"ports", &o))
165 portMappingArray = o;
167 if (! portMappingArray)
170 int numPortMappings = json_object_array_length(portMappingArray);
171 for (
int i = 0; i < numPortMappings; ++i)
173 json_object *portMapping = json_object_array_get_idx(portMappingArray, i);
176 if (json_object_object_get_ex(portMapping,
"map", &o) && ! strcmp(json_object_get_string(o), portName))
187 string &oldNodeIdentifier,
string &oldPortIdentifier)
189 json_object *portMappingArray = NULL;
193 if (json_object_object_get_ex(replacementObj,
"replace", &o))
195 const char *oldNodePath = json_object_get_string(o);
196 string oldCompositionIdentifier;
197 convertPathToIdentifier(oldNodePath, oldCompositionIdentifier, oldNodeIdentifier);
200 if (json_object_object_get_ex(replacementObj,
"ports", &o))
201 portMappingArray = o;
203 if (! portMappingArray)
207 bool foundPort =
false;
208 int numPortMappings = json_object_array_length(portMappingArray);
209 for (
int i = 0; i < numPortMappings; ++i)
211 json_object *portMapping = json_object_array_get_idx(portMappingArray, i);
214 if (json_object_object_get_ex(portMapping,
"to", &o) && ! strcmp(json_object_get_string(o), portName))
216 if (json_object_object_get_ex(portMapping,
"map", &o))
217 oldPortName = json_object_get_string(o);
226 oldPortIdentifier = joinPortIdentifier(oldNodeIdentifier, oldPortName);
234 string &oldCompositionIdentifier)
240 if (json_object_object_get_ex(replacementObj,
"move", &o))
241 moveFrom = json_object_get_string(o);
243 if (json_object_object_get_ex(replacementObj,
"to", &o))
244 moveTo = json_object_get_string(o);
246 if (moveTo == convertIdentifierToPath(newCompositionIdentifier, nodeIdentifier))
249 convertPathToIdentifier(moveFrom.c_str(), oldCompositionIdentifier, unused);
260 string &destinationCompositionIdentifier,
string &destinationPortIdentifier)
262 json_object *portMappingArray = NULL;
265 if (json_object_object_get_ex(replacementObj,
"ports", &o))
266 portMappingArray = o;
268 if (! portMappingArray)
271 int numPortMappings = json_object_array_length(portMappingArray);
272 for (
int i = 0; i < numPortMappings; ++i)
274 json_object *portMapping = json_object_array_get_idx(portMappingArray, i);
277 if (json_object_object_get_ex(portMapping,
"copy", &o) && ! strcmp(json_object_get_string(o), portName))
279 if (json_object_object_get_ex(portMapping,
"to", &o))
281 const char *destinationPortPath = json_object_get_string(o);
282 convertPathToIdentifier(destinationPortPath, destinationCompositionIdentifier, destinationPortIdentifier);