summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/onap/crud/CrudApplication.java19
-rw-r--r--src/main/java/org/onap/crud/EdgePropsIngestConfiguration.java36
-rw-r--r--src/main/java/org/onap/crud/SchemaIngestConfiguration.java62
-rw-r--r--src/main/java/org/onap/crud/SchemaLoaderConfiguration.java48
-rw-r--r--src/main/java/org/onap/crud/service/AaiResourceService.java529
-rw-r--r--src/main/java/org/onap/schema/EdgePropsConfiguration.java38
-rw-r--r--src/main/java/org/onap/schema/EdgeRulesLoader.java76
-rw-r--r--src/main/java/org/onap/schema/OxmModelConfigTranslator.java19
-rw-r--r--src/main/java/org/onap/schema/OxmModelLoader.java187
-rw-r--r--src/main/java/org/onap/schema/util/SchemaIngestPropertyReader.java117
-rw-r--r--src/main/resources/application.properties2
11 files changed, 339 insertions, 794 deletions
diff --git a/src/main/java/org/onap/crud/CrudApplication.java b/src/main/java/org/onap/crud/CrudApplication.java
index a1531f1..b2b2611 100644
--- a/src/main/java/org/onap/crud/CrudApplication.java
+++ b/src/main/java/org/onap/crud/CrudApplication.java
@@ -20,9 +20,8 @@
*/
package org.onap.crud;
-import java.util.HashMap;
-import java.util.Map;
import java.util.Collections;
+import java.util.HashMap;
import javax.annotation.PostConstruct;
@@ -31,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;
import org.springframework.core.env.Environment;
@@ -47,21 +47,22 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
*/
@SpringBootApplication
@EnableSwagger2
+@Import({SchemaIngestConfiguration.class, SchemaLoaderConfiguration.class})
@ImportResource({"file:${SERVICE_BEANS}/*.xml"})
public class CrudApplication extends SpringBootServletInitializer{// NOSONAR
@Autowired
private Environment env;
-
+
public static void main(String[] args) {// NOSONAR
String keyStorePassword = System.getProperty("KEY_STORE_PASSWORD");
if(keyStorePassword==null || keyStorePassword.isEmpty()){
throw new RuntimeException("Env property KEY_STORE_PASSWORD not set");
}
- Map<String, Object> props = new HashMap<>();
+ HashMap<String, Object> props = new HashMap<>();
props.put("server.ssl.key-store-password", Password.deobfuscate(keyStorePassword));
- new CrudApplication().configure(new SpringApplicationBuilder(CrudApplication.class).properties(props)).run(args);
+ new CrudApplication().configure(new SpringApplicationBuilder(SchemaIngestConfiguration.class, SchemaLoaderConfiguration.class).child(CrudApplication.class).properties(props)).run(args);
}
-
+
/**
* Set required trust store system properties using values from application.properties
*/
@@ -84,9 +85,9 @@ public class CrudApplication extends SpringBootServletInitializer{// NOSONAR
public static final ApiInfo DEFAULT_API_INFO = new ApiInfo("AAI NCSO Adapter Service", "AAI NCSO Adapter Service.",
"1.0", "urn:tos", DEFAULT_CONTACT, "Apache 2.0", "API license URL", Collections.emptyList());
-
-
- public Docket api() {
+
+
+ public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(DEFAULT_API_INFO).select().paths(PathSelectors.any())
.apis(RequestHandlerSelectors.basePackage("org.onap.crud")).build();
}
diff --git a/src/main/java/org/onap/crud/EdgePropsIngestConfiguration.java b/src/main/java/org/onap/crud/EdgePropsIngestConfiguration.java
new file mode 100644
index 0000000..a5d25d5
--- /dev/null
+++ b/src/main/java/org/onap/crud/EdgePropsIngestConfiguration.java
@@ -0,0 +1,36 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.crud;
+
+import org.onap.schema.EdgePropsConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+@Configuration
+@PropertySource(value = "file:${edgeprops.ingest.file}", ignoreResourceNotFound = true)
+public class EdgePropsIngestConfiguration {
+
+ @Bean
+ public EdgePropsConfiguration edgePropsConfiguration() {
+ return new EdgePropsConfiguration();
+ }
+}
diff --git a/src/main/java/org/onap/crud/SchemaIngestConfiguration.java b/src/main/java/org/onap/crud/SchemaIngestConfiguration.java
new file mode 100644
index 0000000..ee050dd
--- /dev/null
+++ b/src/main/java/org/onap/crud/SchemaIngestConfiguration.java
@@ -0,0 +1,62 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.crud;
+
+import org.onap.aai.edges.EdgeIngestor;
+import org.onap.aai.nodes.NodeIngestor;
+import org.onap.aai.setup.AAIConfigTranslator;
+import org.onap.aai.setup.ConfigTranslator;
+import org.onap.aai.setup.SchemaLocationsBean;
+import org.onap.aai.setup.SchemaVersions;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+@Configuration
+@PropertySource(value = "file:${schema.ingest.file}", ignoreResourceNotFound = true)
+public class SchemaIngestConfiguration {
+
+ @Bean
+ public SchemaVersions schemaVersions() {
+ return new SchemaVersions();
+ }
+
+ @Bean
+ public SchemaLocationsBean schemaLocationsBean() {
+ return new SchemaLocationsBean();
+ }
+
+ @Bean
+ public ConfigTranslator configTranslator() {
+ return new AAIConfigTranslator(schemaLocationsBean(), schemaVersions());
+ }
+
+ @Bean
+ public NodeIngestor nodeIngestor() {
+ return new NodeIngestor(configTranslator());
+ }
+
+ @Bean
+ public EdgeIngestor edgeIngestor() {
+ return new EdgeIngestor(configTranslator(), schemaVersions());
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/org/onap/crud/SchemaLoaderConfiguration.java b/src/main/java/org/onap/crud/SchemaLoaderConfiguration.java
new file mode 100644
index 0000000..4851af5
--- /dev/null
+++ b/src/main/java/org/onap/crud/SchemaLoaderConfiguration.java
@@ -0,0 +1,48 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.crud;
+
+import org.onap.aai.edges.EdgeIngestor;
+import org.onap.aai.nodes.NodeIngestor;
+import org.onap.aai.setup.ConfigTranslator;
+import org.onap.schema.EdgeRulesLoader;
+import org.onap.schema.OxmModelLoader;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+@Configuration
+@Import({SchemaIngestConfiguration.class, EdgePropsIngestConfiguration.class})
+public class SchemaLoaderConfiguration {
+
+ @Bean
+ public OxmModelLoader oxmModelLoader(ConfigTranslator configTranslator, NodeIngestor nodeIngestor) {
+ return new OxmModelLoader(configTranslator, nodeIngestor);
+ }
+
+ @Bean
+ public EdgeRulesLoader edgeRulesLoader(ConfigTranslator configTranslator, EdgeIngestor edgeIngestor,
+ EdgePropsIngestConfiguration edgePropsIngestConfiguration) {
+ return new EdgeRulesLoader(configTranslator, edgeIngestor,
+ edgePropsIngestConfiguration.edgePropsConfiguration());
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/org/onap/crud/service/AaiResourceService.java b/src/main/java/org/onap/crud/service/AaiResourceService.java
deleted file mode 100644
index c2e0338..0000000
--- a/src/main/java/org/onap/crud/service/AaiResourceService.java
+++ /dev/null
@@ -1,529 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.crud.service;
-
-import java.security.cert.X509Certificate;
-import java.util.AbstractMap;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import javax.security.auth.x500.X500Principal;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Encoded;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.EntityTag;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-import javax.ws.rs.core.UriInfo;
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.onap.aai.cl.api.Logger;
-import org.onap.aai.cl.eelf.LoggerFactory;
-import org.onap.aai.exceptions.AAIException;
-import org.onap.aai.serialization.db.EdgeProperty;
-import org.onap.aai.serialization.db.EdgeRule;
-import org.onap.aai.serialization.db.EdgeRules;
-import org.onap.aai.serialization.db.EdgeType;
-import org.onap.aaiauth.auth.Auth;
-import org.onap.crud.exception.CrudException;
-import org.onap.crud.logging.CrudServiceMsgs;
-import org.onap.crud.logging.LoggingUtil;
-import org.onap.crud.parser.EdgePayload;
-import org.onap.crud.parser.util.EdgePayloadUtil;
-import org.onap.crud.service.CrudRestService.Action;
-import org.onap.crud.util.CrudServiceConstants;
-import org.onap.schema.EdgeRulesLoader;
-import org.slf4j.MDC;
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-
-/**
- * This defines a set of REST endpoints which allow clients to create or update graph edges
- * where the edge rules defined by the A&AI will be invoked to automatically populate the
- * defined edge properties.
- */
-public class AaiResourceService {
-
- private String mediaType = MediaType.APPLICATION_JSON;
- public static final String HTTP_PATCH_METHOD_OVERRIDE = "X-HTTP-Method-Override";
-
- private Auth auth;
- AbstractGraphDataService graphDataService;
- Gson gson = new Gson();
-
- private Logger logger = LoggerFactory.getInstance().getLogger(AaiResourceService.class.getName());
- private Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(AaiResourceService.class.getName());
-
- public AaiResourceService() {}
-
- /**
- * Creates a new instance of the AaiResourceService.
- *
- * @param crudGraphDataService - Service used for interacting with the graph.
- *
- * @throws Exception
- */
- public AaiResourceService(AbstractGraphDataService graphDataService) throws Exception {
- this.graphDataService = graphDataService;
- this.auth = new Auth(CrudServiceConstants.CRD_AUTH_FILE);
- }
-
- /**
- * Perform any one-time initialization required when starting the service.
- */
- public void startup() {
-
- if(logger.isDebugEnabled()) {
- logger.debug("AaiResourceService started!");
- }
- }
-
-
- /**
- * Creates a new relationship in the graph, automatically populating the edge
- * properties based on the A&AI edge rules.
- *
- * @param content - Json structure describing the relationship to create.
- * @param type - Relationship type supplied as a URI parameter.
- * @param uri - Http request uri
- * @param headers - Http request headers
- * @param uriInfo - Http URI info field
- * @param req - Http request structure.
- *
- * @return - Standard HTTP response.
- */
- @POST
- @Path("/relationships/{type}/")
- @Consumes({MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_JSON})
- public Response createRelationship(String content,
- @PathParam("type") String type,
- @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers,
- @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- if(logger.isDebugEnabled()) {
- logger.debug("Incoming request..." + content);
- }
-
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
-
- // Extract the edge payload from the request.
- EdgePayload payload = EdgePayload.fromJson(content);
-
- // Do some basic validation on the payload.
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
- }
- if (payload.getType() != null && !payload.getType().equals(type)) {
- throw new CrudException("Edge Type mismatch", Status.BAD_REQUEST);
- }
-
- // Apply the edge rules to our edge.
- payload = applyEdgeRulesToPayload(payload);
-
- if(logger.isDebugEnabled()) {
- logger.debug("Creating AAI edge using version " + EdgeRulesLoader.getLatestSchemaVersion() );
- }
-
- // Now, create our edge in the graph store.
- ImmutablePair<EntityTag, String> result = graphDataService.addEdge(EdgeRulesLoader.getLatestSchemaVersion(), type, payload);
- response = Response.status(Status.CREATED).entity(result.getValue()).tag(result.getKey()).type(mediaType).build();
-
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
-
- /**
- * Creates a new relationship in the graph, automatically populating the edge
- * properties based on the A&AI edge rules.
- *
- * @param content - Json structure describing the relationship to create.
- * @param uri - Http request uri
- * @param headers - Http request headers
- * @param uriInfo - Http URI info field
- * @param req - Http request structure.
- *
- * @return - Standard HTTP response.
- *
- */
- @POST
- @Path("/relationships/")
- @Consumes({MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_JSON})
- public Response createRelationship(String content,
- @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers,
- @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
-
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.POST, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
-
- // Extract the edge payload from the request.
- EdgePayload payload = EdgePayload.fromJson(content);
-
- // Do some basic validation on the payload.
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null) {
- throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
- }
- if (payload.getType() == null || payload.getType().isEmpty()) {
- throw new CrudException("Missing Edge Type ", Status.BAD_REQUEST);
- }
-
- // Apply the edge rules to our edge.
- payload = applyEdgeRulesToPayload(payload);
-
- // Now, create our edge in the graph store.
- ImmutablePair<EntityTag, String> result = graphDataService.addEdge(EdgeRulesLoader.getLatestSchemaVersion(), payload.getType(), payload);
- response = Response.status(Status.CREATED).entity(result.getValue()).tag(result.getKey()).type(mediaType).build();
-
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
- } else {
- response = Response.status(Status.FORBIDDEN).entity(content)
- .type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
-
-
- /**
- * Upserts a relationship into the graph, automatically populating the edge properties
- * based on the A&AI edge rules. The behaviour is as follows:
- * <p>
- * <li>If no relationship with the supplied identifier already exists, then a new relationship
- * is created with that id.<br>
- * <li>If a relationship with the supplied id DOES exist, then it is replaced with the supplied
- * content.
- *
- * @param content - Json structure describing the relationship to create.
- * @param type - Relationship type supplied as a URI parameter.
- * @param id - Edge identifier.
- * @param uri - Http request uri
- * @param headers - Http request headers
- * @param uriInfo - Http URI info field
- * @param req - Http request structure.
- *
- * @return - Standard HTTP response.
- */
- @PUT
- @Path("/relationships/{type}/{id}")
- @Consumes({MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_JSON})
- public Response upsertEdge(String content,
- @PathParam("type") String type,
- @PathParam("id") String id,
- @PathParam("uri") @Encoded String uri,
- @Context HttpHeaders headers,
- @Context UriInfo uriInfo,
- @Context HttpServletRequest req) {
- LoggingUtil.initMdcContext(req, headers);
-
- logger.debug("Incoming request..." + content);
- Response response = null;
-
- if (validateRequest(req, uri, content, Action.PUT, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
-
- try {
-
- // Extract the edge payload from the request.
- EdgePayload payload = EdgePayload.fromJson(content);
-
- // Do some basic validation on the payload.
- if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
- throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
- }
- if (payload.getId() != null && !payload.getId().equals(id)) {
- throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
- }
-
- // Apply the edge rules to our edge.
- payload = applyEdgeRulesToPayload(payload);
- ImmutablePair<EntityTag, String> result;
- if (headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE) != null &&
- headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE).equalsIgnoreCase("PATCH")) {
- result = graphDataService.patchEdge(EdgeRulesLoader.getLatestSchemaVersion(), id, type, payload);
- response = Response.status(Status.OK).entity(result.getValue()).type(mediaType).tag(result.getKey()).build();
- } else {
- result = graphDataService.updateEdge(EdgeRulesLoader.getLatestSchemaVersion(), id, type, payload);
- response = Response.status(Status.OK).entity(result.getValue()).type(mediaType).tag(result.getKey()).build();
- }
-
- } catch (CrudException ce) {
- response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
- } catch (Exception e) {
- response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
- }
-
- } else {
-
- response = Response.status(Status.FORBIDDEN).entity(content)
- .type(MediaType.APPLICATION_JSON).build();
- }
-
- LoggingUtil.logRestRequest(logger, auditLogger, req, response);
- return response;
- }
-
-
- /**
- * Retrieves the properties defined in the edge rules for a relationship between the
- * supplied vertex types.
- *
- * @param sourceVertexType - Type of source vertex for the relationship.
- * @param targetVertexType - Type of target vertex for the relationship.
- *
- * @return - The defined properties for the relationship type.
- *
- * @throws CrudException
- */
- private Map<EdgeProperty, String> getEdgeRuleProperties(String sourceVertexType, String targetVertexType) throws CrudException {
-
- if(logger.isDebugEnabled()) {
- logger.debug("Lookup db edge rules for " + sourceVertexType + " -> " + targetVertexType);
- }
-
- EdgeRules rules = EdgeRules.getInstance();
- EdgeRule rule;
- try {
-
- if(logger.isDebugEnabled()) {
- logger.debug("Lookup by edge type TREE");
- }
-
- // We have no way of knowing in advance whether our relationship is considered to
- // be a tree or cousing relationship, so try looking it up as a tree type first.
- rule = rules.getEdgeRule(EdgeType.TREE, sourceVertexType, targetVertexType);
-
- } catch (AAIException e) {
- try {
-
- if(logger.isDebugEnabled()) {
- logger.debug("Lookup by edge type COUSIN");
- }
-
- // If we are here, then our lookup by 'tree' type failed, so try looking it up
- // as a 'cousin' relationship.
- rule = rules.getEdgeRule(EdgeType.COUSIN, sourceVertexType, targetVertexType);
-
- } catch (AAIException e1) {
-
- // If we're here then we failed to find edge rules for this relationship. Time to
- // give up...
- throw new CrudException("No edge rules for " + sourceVertexType + " -> " + targetVertexType, Status.NOT_FOUND);
- }
- } catch (Exception e) {
-
- throw new CrudException("General failure getting edge rule properties - " +
- e.getMessage(), Status.INTERNAL_SERVER_ERROR);
- }
-
- return rule.getEdgeProperties();
- }
-
-
- /**
- * This method takes an inbound edge request payload, looks up the edge rules for the
- * sort of relationship defined in the payload, and automatically applies the defined
- * edge properties to it.
- *
- * @param payload - The original edge request payload
- *
- * @return - An updated edge request payload, with the properties defined in the edge
- * rules automatically populated.
- *
- * @throws CrudException
- */
- public EdgePayload applyEdgeRulesToPayload(EdgePayload payload) throws CrudException {
-
- // Extract the types for both the source and target vertices.
- String srcType = EdgePayloadUtil.getVertexNodeType(payload.getSource());
- String tgtType = EdgePayloadUtil.getVertexNodeType(payload.getTarget());
-
- // Now, get the default properties for this edge based on the edge rules definition...
- Map<EdgeProperty, String> props = getEdgeRuleProperties(srcType, tgtType);
-
- // ...and merge them with any custom properties provided in the request.
- JsonElement mergedProperties = mergeProperties(payload.getProperties(), props);
- payload.setProperties(mergedProperties);
-
- if(logger.isDebugEnabled()) {
- logger.debug("Edge properties after applying rules for '" + srcType + " -> " + tgtType + "': " + mergedProperties);
- }
-
- return payload;
- }
-
-
- /**
- * Given a set of edge properties extracted from an edge request payload and a set of properties
- * taken from the db edge rules, this method merges them into one set of properties.
- * <p>
- * If the client has attempted to override the defined value for a property in the db edge rules
- * then the request will be rejected as invalid.
- *
- * @param propertiesFromRequest - Set of properties from the edge request.
- * @param propertyDefaults - Set of properties from the db edge rules.
- *
- * @return - A merged set of properties.
- *
- * @throws CrudException
- */
- @SuppressWarnings("unchecked")
- public JsonElement mergeProperties(JsonElement propertiesFromRequest, Map<EdgeProperty, String> propertyDefaults) throws CrudException {
-
- // Convert the properties from the edge payload into something we can
- // manipulate.
- Set<Map.Entry<String, JsonElement>> properties = new HashSet<Map.Entry<String, JsonElement>>();
- properties.addAll(propertiesFromRequest.getAsJsonObject().entrySet());
-
- Set<String> propertyKeys = new HashSet<String>();
- for(Map.Entry<String, JsonElement> property : properties) {
- propertyKeys.add(property.getKey());
- }
-
- // Now, merge in the properties specified in the Db Edge Rules.
- for(EdgeProperty defProperty : propertyDefaults.keySet()) {
-
- // If the edge rules property was explicitly specified by the
- // client then we will reject the request...
- if(!propertyKeys.contains(defProperty.toString())) {
- properties.add(new AbstractMap.SimpleEntry<String, JsonElement>(defProperty.toString(),
- (new JsonPrimitive(propertyDefaults.get(defProperty)))));
-
- } else {
- throw new CrudException("Property " + defProperty + " defined in db edge rules can not be overriden by the client.",
- Status.BAD_REQUEST);
- }
- }
-
- Object[] propArray = properties.toArray();
- StringBuilder sb = new StringBuilder();
- sb.append("{");
- boolean first=true;
- for(int i=0; i<propArray.length; i++) {
-
- Map.Entry<String, JsonElement> entry = (Entry<String, JsonElement>) propArray[i];
- if(!first) {
- sb.append(",");
- }
- sb.append("\"").append(entry.getKey()).append("\"").append(":").append(entry.getValue());
- first=false;
- }
- sb.append("}");
-
- // We're done. Return the result as a JsonElement.
- return gson.fromJson(sb.toString(), JsonElement.class);
- }
-
-
- /**
- * Invokes authentication validation on an incoming HTTP request.
- *
- * @param req - The HTTP request.
- * @param uri - HTTP URI
- * @param content - Payload of the HTTP request.
- * @param action - What HTTP action is being performed (GET/PUT/POST/PATCH/DELETE)
- * @param authPolicyFunctionName - Policy function being invoked.
- *
- * @return true - if the request passes validation,
- * false - otherwise.
- */
- protected boolean validateRequest(HttpServletRequest req,
- String uri,
- String content,
- Action action,
- String authPolicyFunctionName) {
- try {
- String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");
- String authUser = null;
- if (cipherSuite != null) {
-
- X509Certificate[] certChain = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
- X509Certificate clientCert = certChain[0];
- X500Principal subjectDn = clientCert.getSubjectX500Principal();
- authUser = subjectDn.toString();
- }
-
- return this.auth.validateRequest(authUser!=null ? authUser.toLowerCase():"", action.toString() + ":" + authPolicyFunctionName);
-
- } catch (Exception e) {
- logResult(action, uri, e);
- return false;
- }
- }
-
- protected void logResult(Action op, String uri, Exception e) {
-
- logger.error(CrudServiceMsgs.EXCEPTION_DURING_METHOD_CALL,
- op.toString(),
- uri, Arrays.toString(e.getStackTrace()));
-
- // Clear the MDC context so that no other transaction inadvertently
- // uses our transaction id.
- MDC.clear();
- }
-}
diff --git a/src/main/java/org/onap/schema/EdgePropsConfiguration.java b/src/main/java/org/onap/schema/EdgePropsConfiguration.java
new file mode 100644
index 0000000..728fa26
--- /dev/null
+++ b/src/main/java/org/onap/schema/EdgePropsConfiguration.java
@@ -0,0 +1,38 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.schema;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class EdgePropsConfiguration {
+
+ @Value("${edgePropsDir}")
+ private String edgePropsDir;
+
+ public String getEdgePropsDir() {
+ return edgePropsDir;
+ }
+
+ public void setEdgePropsDir(String edgePropsDir) {
+ this.edgePropsDir = edgePropsDir;
+ }
+}
diff --git a/src/main/java/org/onap/schema/EdgeRulesLoader.java b/src/main/java/org/onap/schema/EdgeRulesLoader.java
index 7f08949..2c139a7 100644
--- a/src/main/java/org/onap/schema/EdgeRulesLoader.java
+++ b/src/main/java/org/onap/schema/EdgeRulesLoader.java
@@ -31,35 +31,48 @@ import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+
import javax.ws.rs.core.Response.Status;
+
import org.apache.commons.io.IOUtils;
import org.onap.aai.cl.eelf.LoggerFactory;
import org.onap.aai.edges.EdgeIngestor;
import org.onap.aai.edges.EdgeRule;
import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException;
import org.onap.aai.setup.ConfigTranslator;
-import org.onap.aai.setup.SchemaLocationsBean;
-import org.onap.aai.setup.Version;
+import org.onap.aai.setup.SchemaVersion;
import org.onap.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
-import org.onap.schema.util.SchemaIngestPropertyReader;
+import org.springframework.beans.factory.annotation.Autowired;
+
import com.google.common.collect.Multimap;
public class EdgeRulesLoader {
+
+ private static ConfigTranslator configTranslator;
+ private static EdgeIngestor edgeIngestor;
+
+ private static EdgePropsConfiguration edgePropsConfiguration;
private static Map<String, RelationshipSchema> versionContextMap =
new ConcurrentHashMap<> ();
- static final Pattern versionPattern = Pattern.compile ( "V(\\d*)" );
+ static final Pattern versionPattern = Pattern.compile("(?i)v(\\d*)");
static final String propsPrefix = "edge_properties_";
static final String propsSuffix = ".json";
final static Pattern propsFilePattern = Pattern.compile ( propsPrefix + "(.*)" + propsSuffix );
- final static Pattern propsVersionPattern = Pattern.compile ( "v\\d*" );
+ final static Pattern propsVersionPattern = Pattern.compile("(?i)v(\\d*)");
private static org.onap.aai.cl.api.Logger logger =
LoggerFactory.getInstance ().getLogger ( EdgeRulesLoader.class.getName () );
- private EdgeRulesLoader () {
+ private EdgeRulesLoader () { }
+
+ @Autowired
+ public EdgeRulesLoader(ConfigTranslator configTranslator, EdgeIngestor edgeIngestor, EdgePropsConfiguration edgePropsConfiguration) {
+ EdgeRulesLoader.configTranslator = configTranslator;
+ EdgeRulesLoader.edgeIngestor = edgeIngestor;
+ EdgeRulesLoader.edgePropsConfiguration = edgePropsConfiguration;
}
/**
@@ -68,20 +81,17 @@ public class EdgeRulesLoader {
* @throws CrudException
*/
public static synchronized void loadModels () throws CrudException {
- SchemaIngestPropertyReader schemaIngestPropertyReader = new SchemaIngestPropertyReader ();
- SchemaLocationsBean schemaLocationsBean = new SchemaLocationsBean ();
- schemaLocationsBean.setEdgeDirectory ( schemaIngestPropertyReader.getEdgeDir () );
- ConfigTranslator configTranslator = new OxmModelConfigTranslator ( schemaLocationsBean );
- EdgeIngestor edgeIngestor = new EdgeIngestor ( configTranslator );
- Map<String, File> propFiles = edgePropertyFiles(schemaIngestPropertyReader);
-
- if (logger.isDebugEnabled ()) {
- logger.debug ( "Loading DB Edge Rules" );
+ Map<String, File> propFiles = edgePropertyFiles(edgePropsConfiguration);
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Loading DB Edge Rules");
}
- for (String version : OxmModelLoader.getLoadedOXMVersions ()) {
+ for (String version : OxmModelLoader.getLoadedOXMVersions()) {
try {
- loadModel ( Version.valueOf ( version ), edgeIngestor, propFiles );
+ SchemaVersion schemaVersion = configTranslator.getSchemaVersions().getVersions().stream()
+ .filter(s -> s.toString().equalsIgnoreCase(version)).findAny().orElse(null);
+ loadModel(schemaVersion, edgeIngestor, propFiles);
} catch (IOException | EdgeRuleNotFoundException e) {
throw new CrudException(e.getMessage (), e);
}
@@ -95,20 +105,17 @@ public class EdgeRulesLoader {
*/
public static synchronized void loadModels ( String v ) throws CrudException {
- SchemaIngestPropertyReader schemaIngestPropertyReader = new SchemaIngestPropertyReader ();
- SchemaLocationsBean schemaLocationsBean = new SchemaLocationsBean ();
- schemaLocationsBean.setEdgeDirectory ( schemaIngestPropertyReader.getEdgeDir () );
- ConfigTranslator configTranslator = new OxmModelConfigTranslator ( schemaLocationsBean );
- EdgeIngestor edgeIngestor = new EdgeIngestor ( configTranslator );
- String version = v.toUpperCase ();
- Map<String, File> propFiles = edgePropertyFiles(schemaIngestPropertyReader);
-
- if (logger.isDebugEnabled ()) {
- logger.debug ( "Loading DB Edge Rules " );
+ Map<String, File> propFiles = edgePropertyFiles(edgePropsConfiguration);
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Loading DB Edge Rules ");
}
try {
- loadModel ( Version.valueOf ( version ), edgeIngestor, propFiles );
+ SchemaVersion schemaVersion = configTranslator.getSchemaVersions().getVersions().stream()
+ .filter(s -> s.toString().equalsIgnoreCase(v)).findAny().orElse(null);
+
+ loadModel(schemaVersion, edgeIngestor, propFiles);
} catch (IOException | EdgeRuleNotFoundException e) {
throw new CrudException(e.getMessage (), Status.INTERNAL_SERVER_ERROR);
}
@@ -175,7 +182,7 @@ public class EdgeRulesLoader {
String latestVersionStr = null;
for (String versionKey : versionContextMap.keySet ()) {
- Matcher matcher = versionPattern.matcher ( versionKey.toUpperCase () );
+ Matcher matcher = versionPattern.matcher(versionKey);
if (matcher.find ()) {
int currentVersion = Integer.parseInt ( matcher.group ( 1 ) );
@@ -199,8 +206,8 @@ public class EdgeRulesLoader {
versionContextMap = new ConcurrentHashMap<> ();
}
- private static synchronized void loadModel ( Version version, EdgeIngestor edgeIngestor, Map<String, File> props)
- throws IOException, CrudException, EdgeRuleNotFoundException {
+ private static synchronized void loadModel(SchemaVersion version, EdgeIngestor edgeIngestor,
+ Map<String, File> props) throws IOException, CrudException, EdgeRuleNotFoundException {
Multimap<String, EdgeRule> edges = edgeIngestor.getAllRules ( version );
String edgeProps;
@@ -216,11 +223,12 @@ public class EdgeRulesLoader {
}
}
- private static Map<String, File> edgePropertyFiles ( SchemaIngestPropertyReader dir ) throws CrudException {
- Map<String, File> propsFiles = Arrays.stream ( new File ( dir.getEdgePropsDir () )
+ private static Map<String, File> edgePropertyFiles ( EdgePropsConfiguration edgePropsConfiguration ) throws CrudException {
+ Map<String, File> propsFiles = Arrays.stream ( new File ( edgePropsConfiguration.getEdgePropsDir () )
.listFiles ( ( d, name ) -> propsFilePattern.matcher ( name ).matches () ) )
.collect ( Collectors.toMap ( new Function<File, String> () {
- public String apply ( File f ) {
+ @Override
+ public String apply ( File f ) {
Matcher m1 = propsVersionPattern.matcher ( f.getName () );
m1.find ();
return m1.group ( 0 );
diff --git a/src/main/java/org/onap/schema/OxmModelConfigTranslator.java b/src/main/java/org/onap/schema/OxmModelConfigTranslator.java
index f6b9e70..cb82ed0 100644
--- a/src/main/java/org/onap/schema/OxmModelConfigTranslator.java
+++ b/src/main/java/org/onap/schema/OxmModelConfigTranslator.java
@@ -32,16 +32,17 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.onap.aai.setup.ConfigTranslator;
import org.onap.aai.setup.SchemaLocationsBean;
-import org.onap.aai.setup.Version;
+import org.onap.aai.setup.SchemaVersion;
+import org.onap.aai.setup.SchemaVersions;
public class OxmModelConfigTranslator extends ConfigTranslator {
- public OxmModelConfigTranslator(SchemaLocationsBean bean) {
- super(bean);
+ public OxmModelConfigTranslator(SchemaLocationsBean bean, SchemaVersions schemaVersions) {
+ super(bean, schemaVersions);
}
@Override
- public Map<Version, List<String>> getNodeFiles() {
+ public Map<SchemaVersion, List<String>> getNodeFiles() {
String nodeDirectory = bean.getNodeDirectory();
if (nodeDirectory == null) {
throw new ServiceConfigurationError(
@@ -55,7 +56,7 @@ public class OxmModelConfigTranslator extends ConfigTranslator {
}
@Override
- public Map<Version, List<String>> getEdgeFiles() {
+ public Map<SchemaVersion, List<String>> getEdgeFiles() {
String edgeDirectory = bean.getEdgeDirectory();
if (edgeDirectory == null) {
throw new ServiceConfigurationError(
@@ -80,7 +81,7 @@ public class OxmModelConfigTranslator extends ConfigTranslator {
* @return a new Map object (may be empty)
* @throws IOException if there is a problem reading the specified directory path
*/
- private Map<Version, List<String>> getVersionMap(Path folderPath, String globPattern) throws IOException {
+ private Map<SchemaVersion, List<String>> getVersionMap(Path folderPath, String globPattern) throws IOException {
final PathMatcher filter = folderPath.getFileSystem().getPathMatcher("glob:**/" + globPattern);
try (final Stream<Path> stream = Files.list(folderPath)) {
return stream.filter(filter::matches).map(Path::toString).filter(p -> getVersionFromPath(p) != null)
@@ -88,10 +89,12 @@ public class OxmModelConfigTranslator extends ConfigTranslator {
}
}
- private Version getVersionFromPath(String pathName) {
+ private SchemaVersion getVersionFromPath(String pathName) {
String version = "V" + pathName.replaceAll("^.*\\/", "").replaceAll("\\D+", "");
try {
- return Version.valueOf(version);
+ SchemaVersion schemaVersion = schemaVersions.getVersions().stream()
+ .filter(s -> s.toString().equalsIgnoreCase(version)).findAny().orElse(null);
+ return schemaVersion;
} catch (IllegalArgumentException e) {
return null;
}
diff --git a/src/main/java/org/onap/schema/OxmModelLoader.java b/src/main/java/org/onap/schema/OxmModelLoader.java
index 948914c..12f8f09 100644
--- a/src/main/java/org/onap/schema/OxmModelLoader.java
+++ b/src/main/java/org/onap/schema/OxmModelLoader.java
@@ -20,46 +20,48 @@
*/
package org.onap.schema;
+import com.google.common.base.CaseFormat;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
import javax.ws.rs.core.Response.Status;
-
import org.eclipse.persistence.dynamic.DynamicType;
import org.eclipse.persistence.internal.oxm.mappings.Descriptor;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
import org.onap.aai.cl.eelf.LoggerFactory;
import org.onap.aai.nodes.NodeIngestor;
import org.onap.aai.setup.ConfigTranslator;
-import org.onap.aai.setup.SchemaLocationsBean;
-import org.onap.aai.setup.Version;
+import org.onap.aai.setup.SchemaVersion;
import org.onap.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
-import org.onap.schema.util.SchemaIngestPropertyReader;
-
-import com.google.common.base.CaseFormat;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+@Component
public class OxmModelLoader {
- private static Map<String, DynamicJAXBContext> versionContextMap =
- new ConcurrentHashMap<>();
+ private static ConfigTranslator configTranslator;
+ private static NodeIngestor nodeIngestor;
- private static Map<String, HashMap<String, DynamicType>> xmlElementLookup = new ConcurrentHashMap<String, HashMap<String, DynamicType>>();
+ private static Map<String, DynamicJAXBContext> versionContextMap = new ConcurrentHashMap<>();
+ private static Map<String, HashMap<String, DynamicType>> xmlElementLookup = new ConcurrentHashMap<>();
- static final Pattern p = Pattern.compile("aai_oxm_(.*).xml");
- static final Pattern versionPattern = Pattern.compile("V(\\d*)");
+ final static Pattern versionPattern = Pattern.compile("(?i)v(\\d*)");
private static org.onap.aai.cl.api.Logger logger =
LoggerFactory.getInstance().getLogger(OxmModelLoader.class.getName());
- private OxmModelLoader() {
+ private OxmModelLoader() { }
+
+ @Autowired
+ public OxmModelLoader(ConfigTranslator configTranslator, NodeIngestor nodeIngestor) {
+ OxmModelLoader.configTranslator = configTranslator;
+ OxmModelLoader.nodeIngestor = nodeIngestor;
}
/**
@@ -69,28 +71,22 @@ public class OxmModelLoader {
* @throws IOException
*
*/
- public static synchronized void loadModels() throws CrudException {
- SchemaIngestPropertyReader schemaIngestPropertyReader = new SchemaIngestPropertyReader();
-
- SchemaLocationsBean schemaLocationsBean = new SchemaLocationsBean();
- schemaLocationsBean.setNodeDirectory(schemaIngestPropertyReader.getNodeDir());
- ConfigTranslator configTranslator = new OxmModelConfigTranslator(schemaLocationsBean);
- NodeIngestor nodeIngestor = new NodeIngestor(configTranslator);
+ public synchronized static void loadModels() throws CrudException {
if (logger.isDebugEnabled()) {
logger.debug("Loading OXM Models");
}
- for (Version oxmVersion : Version.values()) {
+ for (SchemaVersion oxmVersion : configTranslator.getSchemaVersions().getVersions()) {
DynamicJAXBContext jaxbContext = nodeIngestor.getContextForVersion(oxmVersion);
if (jaxbContext != null) {
- loadModel(oxmVersion.toString().toLowerCase(), jaxbContext);
+ loadModel(oxmVersion.toString(), jaxbContext);
}
}
}
- private static synchronized void loadModel(String oxmVersion, DynamicJAXBContext jaxbContext) {
+ private synchronized static void loadModel(String oxmVersion, DynamicJAXBContext jaxbContext) {
versionContextMap.put(oxmVersion, jaxbContext);
loadXmlLookupMap(oxmVersion, jaxbContext);
logger.info(CrudServiceMsgs.LOADED_OXM_FILE, oxmVersion);
@@ -111,7 +107,7 @@ public class OxmModelLoader {
if (versionContextMap == null || versionContextMap.isEmpty()) {
loadModels();
} else if (!versionContextMap.containsKey(version)) {
- logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
+ logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
throw new CrudException("Error loading oxm model: " + version, Status.INTERNAL_SERVER_ERROR);
}
@@ -128,8 +124,7 @@ public class OxmModelLoader {
// If there are still no models available, then there's not much we can do...
if (versionContextMap.isEmpty()) {
logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "No available OXM schemas to get latest version for.");
- throw new CrudException("No available OXM schemas to get latest version for.",
- Status.INTERNAL_SERVER_ERROR);
+ throw new CrudException("No available OXM schemas to get latest version for.", Status.INTERNAL_SERVER_ERROR);
}
// Iterate over the available model versions to determine which is the most
@@ -138,10 +133,10 @@ public class OxmModelLoader {
String latestVersionStr = null;
for (String versionKey : versionContextMap.keySet()) {
- Matcher matcher = versionPattern.matcher(versionKey.toUpperCase());
+ Matcher matcher = versionPattern.matcher(versionKey);
if (matcher.find()) {
- int currentVersion = Integer.parseInt(matcher.group(1));
+ int currentVersion = Integer.valueOf(matcher.group(1));
if ((latestVersion == null) || (currentVersion > latestVersion)) {
latestVersion = currentVersion;
@@ -154,38 +149,6 @@ public class OxmModelLoader {
}
/**
- * Retrieves the list of all Loaded OXM versions.
- *
- * @return - A List of Strings of all loaded OXM versions.
- *
- * @throws CrudException
- */
- public static List<String> getLoadedOXMVersions() throws CrudException {
-
- // If we haven't already loaded in the available OXM models, then do so now.
- if (versionContextMap == null || versionContextMap.isEmpty()) {
- loadModels();
- }
-
- // If there are still no models available, then there's not much we can do...
- if (versionContextMap.isEmpty()) {
- logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "No available OXM schemas to get versions for.");
- throw new CrudException("No available OXM schemas to get versions for.",
- Status.INTERNAL_SERVER_ERROR);
- }
-
- List<String> versions = new ArrayList<String> ();
- for (String versionKey : versionContextMap.keySet()) {
-
- Matcher matcher = versionPattern.matcher(versionKey.toUpperCase());
- if (matcher.find()) {
- versions.add ( "V" + matcher.group ( 1 ) );
- }
- }
- return versions;
- }
-
- /**
* Retrieves the map of all JAXB context objects that have been created by importing the
* available OXM model schemas.
*
@@ -206,56 +169,86 @@ public class OxmModelLoader {
public static void loadXmlLookupMap(String version, DynamicJAXBContext jaxbContext ) {
-
- @SuppressWarnings("rawtypes")
- List<Descriptor> descriptorsList = jaxbContext.getXMLContext().getDescriptors();
- HashMap<String,DynamicType> types = new HashMap<String,DynamicType>();
- for (@SuppressWarnings("rawtypes")
- Descriptor desc : descriptorsList) {
+ @SuppressWarnings("rawtypes")
+ List<Descriptor> descriptorsList = jaxbContext.getXMLContext().getDescriptors();
+ HashMap<String, DynamicType> types = new HashMap<String, DynamicType>();
- DynamicType entity = jaxbContext.getDynamicType(desc.getAlias());
- String entityName = desc.getDefaultRootElement();
- types.put(entityName, entity);
- }
- xmlElementLookup.put(version, types);
+ for (@SuppressWarnings("rawtypes")
+ Descriptor desc : descriptorsList) {
+
+ DynamicType entity = jaxbContext.getDynamicType(desc.getAlias());
+ String entityName = desc.getDefaultRootElement();
+ types.put(entityName, entity);
+ }
+ xmlElementLookup.put(version, types);
}
public static DynamicType getDynamicTypeForVersion(String version, String type) throws CrudException {
- DynamicType dynamicType;
- // If we haven't already loaded in the available OXM models, then do so now.
- if (versionContextMap == null || versionContextMap.isEmpty()) {
- loadModels();
- } else if (!versionContextMap.containsKey(version)) {
- logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
- throw new CrudException("Error loading oxm model: " + version, Status.INTERNAL_SERVER_ERROR);
- }
-
- // First try to match the Java-type based on hyphen to camel case translation
- String javaTypeName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type);
- dynamicType = versionContextMap.get(version).getDynamicType(javaTypeName);
+ DynamicType dynamicType;
+ // If we haven't already loaded in the available OXM models, then do so now.
+ if (versionContextMap == null || versionContextMap.isEmpty()) {
+ loadModels();
+ } else if (!versionContextMap.containsKey(version)) {
+ logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "Error loading oxm model: " + version);
+ throw new CrudException("Error loading oxm model: " + version, Status.INTERNAL_SERVER_ERROR);
+ }
- //Attempt to lookup in xml elements
- if (xmlElementLookup.containsKey(version)) {
- if (dynamicType == null) {
- // Try to lookup by xml root element by exact match
- dynamicType = xmlElementLookup.get(version).get(type);
+ // First try to match the Java-type based on hyphen to camel case
+ // translation
+ String javaTypeName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, type);
+ dynamicType = versionContextMap.get(version).getDynamicType(javaTypeName);
+
+ if (xmlElementLookup.containsKey(version)) {
+ if (dynamicType == null) {
+ // Try to lookup by xml root element by exact match
+ dynamicType = xmlElementLookup.get(version).get(type);
+ }
+
+ if (dynamicType == null) {
+ // Try to lookup by xml root element by lowercase
+ dynamicType = xmlElementLookup.get(version).get(type.toLowerCase());
+ }
+
+ if (dynamicType == null) {
+ // Direct lookup as java-type name
+ dynamicType = versionContextMap.get(version).getDynamicType(type);
+ }
}
- if (dynamicType == null) {
- // Try to lookup by xml root element by lowercase
- dynamicType = xmlElementLookup.get(version).get(type.toLowerCase());
+ return dynamicType;
+ }
+
+ /**
+ * Retrieves the list of all Loaded OXM versions.
+ *
+ * @return - A List of Strings of all loaded OXM versions.
+ *
+ * @throws CrudException
+ */
+ public static List<String> getLoadedOXMVersions() throws CrudException {
+
+ // If we haven't already loaded in the available OXM models, then do so now.
+ if (versionContextMap == null || versionContextMap.isEmpty()) {
+ loadModels();
}
- if (dynamicType == null) {
- // Direct lookup as java-type name
- dynamicType = versionContextMap.get(version).getDynamicType(type);
+ // If there are still no models available, then there's not much we can do...
+ if (versionContextMap.isEmpty()) {
+ logger.error(CrudServiceMsgs.OXM_LOAD_ERROR, "No available OXM schemas to get versions for.");
+ throw new CrudException("No available OXM schemas to get versions for.", Status.INTERNAL_SERVER_ERROR);
}
- }
- return dynamicType;
+ List<String> versions = new ArrayList<String>();
+ for (String versionKey : versionContextMap.keySet()) {
+ Matcher matcher = versionPattern.matcher(versionKey);
+ if (matcher.find()) {
+ versions.add ("V"+ matcher.group(1));
+ }
+ }
+ return versions;
}
}
diff --git a/src/main/java/org/onap/schema/util/SchemaIngestPropertyReader.java b/src/main/java/org/onap/schema/util/SchemaIngestPropertyReader.java
deleted file mode 100644
index ca5fa6b..0000000
--- a/src/main/java/org/onap/schema/util/SchemaIngestPropertyReader.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * ============LICENSE_START=======================================================
- * org.onap.aai
- * ================================================================================
- * 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.schema.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.NoSuchFileException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Properties;
-import org.onap.aai.cl.eelf.LoggerFactory;
-import org.onap.crud.exception.CrudException;
-import org.onap.crud.logging.CrudServiceMsgs;
-
-public class SchemaIngestPropertyReader {
-
- private static final String SCHEMA_INGEST_PROPERTIES_FILE = "schemaIngest.properties";
-
- private static final String SCHEMA_INGEST_PROPERTIES_LOCATION =
- System.getProperty("CONFIG_HOME") + "/" + SCHEMA_INGEST_PROPERTIES_FILE;
-
- private static org.onap.aai.cl.api.Logger logger =
- LoggerFactory.getInstance().getLogger(SchemaIngestPropertyReader.class.getName());
-
- /**
- * Gets the location of the OXM
- *
- * @return
- * @throws CrudException
- */
- public String getNodeDir() throws CrudException {
-
- return getProps ().getProperty("nodeDir");
- }
-
- /**
- * Gets the location of the Edge Rules
- *
- * @return
- * @throws CrudException
- */
- public String getEdgeDir() throws CrudException {
-
- return getProps ().getProperty("edgeDir");
- }
-
- /**
- * Gets the location of the Edge Properties
- *
- * @return
- * @throws CrudException
- */
- public String getEdgePropsDir() throws CrudException {
-
- return getProps ().getProperty("edgePropsDir");
- }
-
- private Properties getProps() throws CrudException {
-
- Properties prop = new Properties();
- try {
- prop = loadFromFile(SCHEMA_INGEST_PROPERTIES_LOCATION);
- } catch (NoSuchFileException e) {
- // if file not found, try via classpath
- try {
- prop = loadFromClasspath(SCHEMA_INGEST_PROPERTIES_FILE);
- } catch (URISyntaxException | IOException e1) {
- logger.error(CrudServiceMsgs.SCHEMA_INGEST_LOAD_ERROR, e1.getMessage());
- throw new CrudException("Failed to load schemaIngest.properties", e1);
- }
- } catch (IOException e) {
- logger.error(CrudServiceMsgs.SCHEMA_INGEST_LOAD_ERROR, e.getMessage());
- throw new CrudException("Failed to load schemaIngest.properties", e);
- }
- return prop;
- }
-
- private Properties loadFromFile(String filename) throws IOException {
- Path configLocation = Paths.get(filename);
- try (InputStream stream = Files.newInputStream(configLocation)) {
- return loadProperties(stream);
- }
- }
-
- private Properties loadFromClasspath(String resourceName) throws URISyntaxException, IOException {
- Path path = Paths.get(ClassLoader.getSystemResource(resourceName).toURI());
- try (InputStream stream = Files.newInputStream(path)) {
- return loadProperties(stream);
- }
- }
-
- private Properties loadProperties(InputStream stream) throws IOException {
- Properties config = new Properties();
- config.load(stream);
- return config;
- }
-} \ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index a21f3c5..049a2d9 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -7,3 +7,5 @@ server.ssl.enabled=true
server.ssl.client-auth=need
server.ssl.enabled-protocols=TLSv1.1,TLSv1.2
+schema.ingest.file=${CONFIG_HOME}/schema-ingest.properties
+edgeprops.ingest.file=${CONFIG_HOME}/edgeprops-ingest.properties