-
Notifications
You must be signed in to change notification settings - Fork 70
cobigen jsonplugin
At the moment the plug-in can be used for merge generic JSOn files and Sencha Architect generation depending on the merge strategy defined at the templates.
As for the Sencha Architect generation the input is a java object, the trigger expressions (including matchers and variable assignments) are implemented as Java.
There are currently these merge strategies:
Generic JSON Merge
-
merge strategy
jsonmerge
(add the new code respecting the existent is case of conflict) -
merge strategy
jsonmerge_override
(add the new code overwriting the existent in case of conflict)
Sencha Architect
-
merge strategy
sencharchmerge
(add the new code respecting the existent is case of conflict) -
merge strategy
sencharchmerge_override
(add the new code overwriting the existent in case of conflict)-
JsonArray’s will be ignored / replaced in total
-
JsonObjects in conclict will be processed recursively ignoring adding non existent elements.
-
The JSON plugin uses the GSON 2.7 library from Google as parser/interpreter of the JSON code.
The parsed JSON code is stored in a Jsonlement that can be accessed recursively to get all the objects and merge them following the same principles of the Sencha merger. The JSON merger is a little more simple due to only is needed to take into account two node types:
-
JSONObject
-
JSONArray
The JSON parsed code is stored into a JsonElement. The JsonElement class is extended for the different JSON elements:
JsonParser parser = new JsonParser();
JsonElement jsonBase = parser.parse(new FileReader(file));
JsonObject objBase = jsonBase.getAsJsonObject();
The recursion is made over the JsonObjects in conflict and just overriding in case of JsonArray because, due to the nature of JSON, is impossible to know if the current index of the base array correspond to the same index of the patch array.
The concept for the JSON merger is very similar to the Sencha merger:
To output the code with format, the library Json 20160810 is used only to build a JSONObject with the resultant code of the merge process and return a formatted code specifying and indentation (4 by default).
String result = jsonObjectMerge(objBase, patchOverrides, objPatch);
JSONObject jsonBase = new JSONObject(new JSONTokener(result));
return jsonBase.toString(4);
Disclaimer
If you discover any documentation bugs or would like to request new content, please raise them as an issue or create a pull request. Contributions to this wiki are done through the main repo under the folder documentation.
License
This documentation is licensed under the Creative Commons License (Attribution-NoDerivatives 4.0 International
)