X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fcrud%2Futil%2FCrudServiceUtil.java;h=5eeb38ed5420361346fa85d6db693a4d941d90a1;hb=3bc6a702f2d3d8710c7aaa94cdc8c0ccf3deb759;hp=7943218f4091234df7d657ecff110e3d6f2b990a;hpb=b6ec637f5ee03c573855431e65fcb6ab0f321851;p=aai%2Fgizmo.git diff --git a/src/main/java/org/onap/crud/util/CrudServiceUtil.java b/src/main/java/org/onap/crud/util/CrudServiceUtil.java index 7943218..5eeb38e 100644 --- a/src/main/java/org/onap/crud/util/CrudServiceUtil.java +++ b/src/main/java/org/onap/crud/util/CrudServiceUtil.java @@ -20,27 +20,32 @@ */ package org.onap.crud.util; -import org.onap.aai.db.props.AAIProperties; -import org.onap.aaiutils.oxm.OxmModelLoader; -import org.onap.crud.exception.CrudException; -import org.onap.schema.RelationshipSchemaLoader; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; - import java.util.AbstractMap; import java.util.HashSet; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; - +import java.util.Set; +import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response.Status; +import org.onap.aai.db.props.AAIProperties; +import org.onap.crud.exception.CrudException; +import org.onap.crud.parser.EdgePayload; +import org.onap.crud.parser.util.EdgePayloadUtil; +import org.onap.schema.EdgeRulesLoader; +import org.onap.schema.OxmModelLoader; +import org.onap.schema.RelationshipSchema; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; public class CrudServiceUtil { private static Gson gson = new Gson(); + + @SuppressWarnings({"unchecked", "rawtypes"}) public static Object validateFieldType(String value, Class clazz) throws CrudException { try { if (clazz.isAssignableFrom(Integer.class)) { @@ -52,13 +57,13 @@ public class CrudServiceUtil { } else if (clazz.isAssignableFrom(Double.class)) { return Double.parseDouble(value); } else if (clazz.isAssignableFrom(Boolean.class)) { - + // If the value is an IN/OUT direction, this gets seen as a boolean, so // check for that first. if (value.equals("OUT") || value.equals("IN")) { return value; } - + if (!value.equals("true") && !value.equals("false")) { throw new CrudException("Invalid propertry value: " + value, Status.BAD_REQUEST); } @@ -75,12 +80,12 @@ public class CrudServiceUtil { // load the schemas try { OxmModelLoader.loadModels(); + EdgeRulesLoader.loadModels (); } catch (Exception e) { throw new CrudException(e); } - RelationshipSchemaLoader.loadModels(); } - + /** * This method will merge header property from app id in request payload if not already populated * @param propertiesFromRequest @@ -88,7 +93,9 @@ public class CrudServiceUtil { * @param isAdd * @return */ - public static JsonElement mergeHeaderInFoToPayload(JsonElement propertiesFromRequest, HttpHeaders headers, boolean isAdd) { + @SuppressWarnings("unchecked") + public static JsonElement mergeHeaderInFoToPayload(JsonElement propertiesFromRequest, HttpHeaders headers, + boolean isAdd) { String sourceOfTruth = headers.getRequestHeaders().getFirst("X-FromAppId"); Set> properties = new HashSet>(); properties.addAll(propertiesFromRequest.getAsJsonObject().entrySet()); @@ -100,12 +107,12 @@ public class CrudServiceUtil { if(!propertyKeys.contains(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH)) { properties.add(new AbstractMap.SimpleEntry(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH, - (JsonElement)(new JsonPrimitive(sourceOfTruth)))); + (new JsonPrimitive(sourceOfTruth)))); } if(isAdd && !propertyKeys.contains(AAIProperties.SOURCE_OF_TRUTH)) { properties.add(new AbstractMap.SimpleEntry(AAIProperties.SOURCE_OF_TRUTH, - (JsonElement)(new JsonPrimitive(sourceOfTruth)))); + (new JsonPrimitive(sourceOfTruth)))); } Object[] propArray = properties.toArray(); @@ -113,7 +120,7 @@ public class CrudServiceUtil { sb.append("{"); boolean first=true; for(int i=0; i entry = (Entry) propArray[i]; if(!first) { sb.append(","); @@ -122,7 +129,38 @@ public class CrudServiceUtil { first=false; } sb.append("}"); - + return gson.fromJson(sb.toString(), JsonElement.class); } + + public static EntityTag getETagFromHeader(MultivaluedMap headers) { + EntityTag entityTag = null; + if (headers != null && headers.containsKey(CrudServiceConstants.CRD_HEADER_ETAG)) { + String value = headers.getFirst(CrudServiceConstants.CRD_HEADER_ETAG); + entityTag = new EntityTag(value.replace("\"", "")); + } + return entityTag; + } + + public static String determineEdgeType(EdgePayload payload, String version) throws CrudException { + RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version); + + if (payload.getSource() == null || payload.getTarget() == null) { + throw new CrudException("Source/Target not specified", Status.BAD_REQUEST); + } + + Set edgeTypes = schema.getValidRelationTypes(EdgePayloadUtil.getVertexNodeType(payload.getSource()), + EdgePayloadUtil.getVertexNodeType(payload.getTarget())); + + if (edgeTypes.size() == 0) { + throw new CrudException("No valid relationship types from " + payload.getSource() + " to " + payload.getTarget(), Status.BAD_REQUEST); + } + + if (edgeTypes.size() > 1) { + throw new CrudException("Multiple possible relationship types from " + payload.getSource() + " to " + payload.getTarget(), Status.BAD_REQUEST); + } + + return edgeTypes.iterator().next(); + } + }