/**
* ============LICENSE_START=======================================================
- * Gizmo
+ * org.onap.aai
* ================================================================================
- * Copyright © 2017 AT&T Intellectual Property.
- * Copyright © 2017 Amdocs
- * All rights reserved.
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 Amdocs
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
- *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
*/
package org.onap.schema;
import org.onap.aaiutils.oxm.OxmModelLoader;
import org.onap.crud.entity.Vertex;
import org.onap.crud.exception.CrudException;
+import org.onap.crud.util.CrudServiceConstants;
import org.onap.crud.util.CrudServiceUtil;
import java.util.HashMap;
public class OxmModelValidator {
public enum Metadata {
- NODE_TYPE("aai-node-type"), URI("aai-uri"), CREATED_TS("aai-created-ts"), SOT("source-of-truth"), LAST_MOD_SOT(
- "last-mod-source-of-truth");
+ NODE_TYPE("aai-node-type"),
+ URI("aai-uri"),
+ CREATED_TS("aai-created-ts"),
+ UPDATED_TS("aai-last-mod-ts"),
+ SOT("source-of-truth"),
+ LAST_MOD_SOT("last-mod-source-of-truth");
private final String propName;
}
final DynamicType modelObjectType = jaxbContext.getDynamicType(
CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type)));
+ final DynamicType reservedObjectType = jaxbContext.getDynamicType("ReservedPropNames");
for (String key : filter.keySet()) {
+ if ((key == CrudServiceConstants.CRD_RESERVED_VERSION ) || key == CrudServiceConstants.CRD_RESERVED_NODE_TYPE ) {
+ result.put ( key, filter.get ( key ) );
+ continue;
+ }
String keyJavaName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, key);
- if (modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName) != null) {
+ DatabaseMapping mapping = modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName);
+
+ // Try both the model for the specified type and the reserved properties for our key
+ if (mapping == null) {
+ mapping = reservedObjectType.getDescriptor().getMappingForAttributeName(keyJavaName);
+ }
+ if (mapping != null) {
try {
- DatabaseMapping mapping = modelObjectType.getDescriptor().getMappingForAttributeName(keyJavaName);
Object value = CrudServiceUtil.validateFieldType(filter.get(key), mapping.getField().getType());
result.put(key, value);
} catch (Exception ex) {
public static Vertex validateIncomingUpsertPayload(String id, String version, String type, JsonElement properties)
throws CrudException {
-
+
try {
type = resolveCollectionType(version, type);
DynamicJAXBContext jaxbContext = OxmModelLoader.getContextForVersion(version);
public static Vertex validateIncomingPatchPayload(String id, String version, String type, JsonElement properties,
Vertex existingVertex) throws CrudException {
-
try {
type = resolveCollectionType(version, type);
DynamicJAXBContext jaxbContext = OxmModelLoader.getContextForVersion(version);
Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(), field.getType());
existingVertex.getProperties().put(entry.getKey(), value);
}
-
}
return existingVertex;
} catch (Exception e) {
throw new CrudException(e.getMessage(), Status.BAD_REQUEST);
}
-
}
private static DatabaseField getDatabaseField(String fieldName, DynamicType modelObjectType) {
return null;
}
- public static Vertex validateOutgoingPayload(String version, Vertex vertex) {
-
+ public static Vertex validateOutgoingPayload(String version, Vertex vertex) {
Vertex.Builder modelVertexBuilder = new Vertex.Builder(vertex.getType()).id(vertex.getId().get());
try {
vertex.getProperties().get(Metadata.NODE_TYPE.propertyName()) != null
? vertex.getProperties().get(Metadata.NODE_TYPE.propertyName()).toString() : vertex.getType()));
final DynamicType modelObjectType = jaxbContext.getDynamicType(modelObjectClass);
+ final DynamicType reservedObjectType = jaxbContext.getDynamicType("ReservedPropNames");
for (String key : vertex.getProperties().keySet()) {
DatabaseField field = getDatabaseField(key, modelObjectType);
+ if (field == null) {
+ field = getDatabaseField(key, reservedObjectType);
+ }
if (field != null) {
- if (!Metadata.isProperty(key)) {
- modelVertexBuilder.property(key, vertex.getProperties().get(key));
- }
+ modelVertexBuilder.property(key, vertex.getProperties().get(key));
}
}
+
return modelVertexBuilder.build();
} catch (Exception ex) {
return vertex;