+ public static Vertex fromJson(String jsonString, String version) throws CrudException {
+ JSONObject doc = new JSONObject(jsonString);
+ return fromJson(doc, version);
+ }
+
+ public static Vertex fromJson(JSONObject jsonObject, String version) throws CrudException {
+ Builder builder;
+
+ try {
+ String type = jsonObject.getString("type");
+ builder = new Builder(type).id(jsonObject.getString("key"));
+
+ type = OxmModelValidator.resolveCollectionType(version, type);
+ DynamicJAXBContext jaxbContext = OxmModelLoader.getContextForVersion(version);
+
+ final DynamicType modelObjectType = OxmModelLoader.getDynamicTypeForVersion(version, type);
+ final DynamicType reservedType = jaxbContext.getDynamicType("ReservedPropNames");
+
+
+ if (modelObjectType == null) {
+ throw new CrudException("Unable to load oxm version", javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
+ }
+
+ if (jsonObject.has("properties")) {
+ JSONObject jsonProps = jsonObject.getJSONObject("properties");
+ for (String key : jsonProps.keySet()) {
+ String keyJavaName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, key);
+ DatabaseMapping mapping = modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName);
+
+ if (mapping == null) {
+ // This might be one of the reserved properties
+ mapping = reservedType.getDescriptor().getMappingForAttributeName(keyJavaName);
+ }
+
+ if (mapping != null) {
+ DatabaseField field = mapping.getField();
+ Object value = CrudServiceUtil.validateFieldType(jsonProps.get(key).toString(), field.getType());
+ builder.property(key, value);
+ }
+ }
+ }
+ }
+ catch (Exception ex) {
+ throw new CrudException("Unable to transform response: " + jsonObject.toString(), javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR);
+ }
+
+ return builder.build();
+ }
+
+ public static List<Vertex> collectionFromJson(String jsonString, String version) throws CrudException {
+ List<Vertex> result = new ArrayList<>();
+ JSONArray array = new JSONArray(jsonString);
+
+ for (Object jsonObject : array) {
+ result.add(Vertex.fromJson((JSONObject)jsonObject, version));
+ }
+
+ return result;