summaryrefslogtreecommitdiffstats
path: root/sparkybe-onap-service/src/main/java
diff options
context:
space:
mode:
authorda490c <dave.adams@amdocs.com>2018-08-25 02:19:05 -0400
committerda490c <dave.adams@amdocs.com>2018-08-25 02:19:12 -0400
commitb889beb825c82c38d96b74bed2d6c98cb4e0cb53 (patch)
treea26d6148e5d894e81b5e4257af2281fbbacc7d8d /sparkybe-onap-service/src/main/java
parent70bc6523efb4736362497ee32d37fa29f0aa50f7 (diff)
implemented sparky graph extensibility
Add additional interface abstraction points to make it easier to extend and customize the graph logic, and made it easier to interwork with resources and gizmo via spring-bean wiring changes only. Issue-ID: AAI-1503 Change-Id: I5a3dcc81ecc49db89d71f0db27cffbb04c89fbd1 Signed-off-by: da490c <dave.adams@amdocs.com>
Diffstat (limited to 'sparkybe-onap-service/src/main/java')
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessor.java6
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationContext.java (renamed from sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationContext.java)15
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationContextBuilder.java9
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationService.java (renamed from sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationService.java)10
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigs.java45
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseGizmoVisualizationContext.java (renamed from sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseGizmoVisualizationContext.java)69
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseGizmoVisualizationContextBuilder.java71
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseVisualizationContext.java (renamed from sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationContext.java)92
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseVisualizationContextBuilder.java70
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutput.java11
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/GraphMeta.java56
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessage.java66
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationService.java103
-rw-r--r--sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationTransformer.java15
14 files changed, 316 insertions, 322 deletions
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessor.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessor.java
index 5c4e160..fb0280e 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessor.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessor.java
@@ -22,7 +22,6 @@ package org.onap.aai.sparky.viewandinspect;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.apache.camel.Exchange;
import org.onap.aai.cl.api.Logger;
@@ -31,7 +30,6 @@ import org.onap.aai.restclient.client.OperationResult;
import org.onap.aai.sparky.logging.AaiUiMsgs;
import org.onap.aai.sparky.logging.util.ServletUtils;
import org.onap.aai.sparky.viewandinspect.entity.QueryRequest;
-import org.onap.aai.sparky.viewandinspect.services.VisualizationService;
import org.restlet.data.Status;
public class SchemaVisualizationProcessor {
@@ -42,7 +40,7 @@ public class SchemaVisualizationProcessor {
private VisualizationService visualizationService;
- public SchemaVisualizationProcessor()throws Exception{}
+ public SchemaVisualizationProcessor() throws Exception{}
protected String generateJsonErrorResponse(String message) {
return String.format("{ \"errorMessage\" : %s }", message);
@@ -68,7 +66,7 @@ public class SchemaVisualizationProcessor {
if (hashId != null) {
- operationResult = this.getVisualizationService().buildVisualizationUsingGenericQuery(hashId);
+ operationResult = this.getVisualizationService().buildVisualization(hashId);
if (operationResult.getResultCode() != Status.SUCCESS_OK.getCode()) {
exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, operationResult.getResultCode());
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationContext.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationContext.java
index 1641aa3..0d2f8aa 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationContext.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationContext.java
@@ -18,13 +18,12 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.sparky.viewandinspect.services;
+package org.onap.aai.sparky.viewandinspect;
import java.util.concurrent.ConcurrentHashMap;
import org.onap.aai.sparky.sync.entity.SearchableEntity;
import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode;
-import org.onap.aai.sparky.viewandinspect.entity.InlineMessage;
import org.onap.aai.sparky.viewandinspect.entity.QueryParams;
@@ -36,16 +35,10 @@ public interface VisualizationContext {
* @param skeletonNode the skeleton node
* @param queryParams the query params
*/
- void processSelfLinks(SearchableEntity searchtargetEntity, QueryParams queryParams);
+ public void processSelfLinks(SearchableEntity searchtargetEntity, QueryParams queryParams);
- ConcurrentHashMap<String, ActiveInventoryNode> getNodeCache();
-
- InlineMessage getInlineMessage();
+ public ConcurrentHashMap<String, ActiveInventoryNode> getNodeCache();
- int getNumFailedLinkResolve();
-
- int getNumSuccessfulLinkResolveFromCache();
-
- int getNumSuccessfulLinkResolveFromFromServer();
+ public long getContextId();
}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationContextBuilder.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationContextBuilder.java
new file mode 100644
index 0000000..6286fde
--- /dev/null
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationContextBuilder.java
@@ -0,0 +1,9 @@
+package org.onap.aai.sparky.viewandinspect;
+
+public interface VisualizationContextBuilder {
+
+ public VisualizationContext getVisualizationContext() throws Exception;
+
+ public void shutdown();
+
+}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationService.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationService.java
index 7693885..7a090b0 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationService.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/VisualizationService.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.sparky.viewandinspect.services;
+package org.onap.aai.sparky.viewandinspect;
import org.onap.aai.restclient.client.OperationResult;
@@ -33,7 +33,7 @@ public interface VisualizationService {
* @return the query request
*/
- QueryRequest analyzeQueryRequestBody(String queryRequestJson);
+ public QueryRequest analyzeQueryRequestBody(String queryRequestJson);
/**
* Builds the visualization using generic query.
@@ -41,8 +41,8 @@ public interface VisualizationService {
* @param queryRequest the query request
* @return the operation result
*/
- OperationResult buildVisualizationUsingGenericQuery(QueryRequest queryRequest);
-
- void shutdown();
+ public OperationResult buildVisualization(QueryRequest queryRequest);
+
+ public void shutdown();
}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigs.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigs.java
index b0834ca..acca775 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigs.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigs.java
@@ -47,16 +47,12 @@ public class VisualizationConfigs {
private ArrayList<String> shallowEntities;
- private boolean gizmoEnabled;
-
private SparkyResourceLoader resourceLoader;
/**
* Instantiates a new visualization config.
*/
- public VisualizationConfigs() {
- this.gizmoEnabled = false;
- }
+ public VisualizationConfigs() {}
public ArrayList<String> getShallowEntities() {
return shallowEntities;
@@ -135,14 +131,6 @@ public class VisualizationConfigs {
this.numOfThreadsToFetchNodeIntegrity = numOfThreadsToFetchNodeIntegrity;
}
- public boolean isGizmoEnabled() {
- return gizmoEnabled;
- }
-
- public void setGizmoEnabled(boolean gizmoEnabled) {
- this.gizmoEnabled = gizmoEnabled;
- }
-
public SparkyResourceLoader getResourceLoader() {
return resourceLoader;
}
@@ -152,19 +140,22 @@ public class VisualizationConfigs {
}
@Override
- public String toString() {
- return "VisualizationConfigs [maxSelfLinkTraversalDepth=" + maxSelfLinkTraversalDepth
- + ", visualizationDebugEnabled=" + visualizationDebugEnabled + ", "
- + (aaiEntityNodeDescriptors != null ? "aaiEntityNodeDescriptors=" + aaiEntityNodeDescriptors + ", "
- : "")
- + (generalNodeClassName != null ? "generalNodeClassName=" + generalNodeClassName + ", " : "")
- + (searchNodeClassName != null ? "searchNodeClassName=" + searchNodeClassName + ", " : "")
- + (selectedSearchedNodeClassName != null
- ? "selectedSearchedNodeClassName=" + selectedSearchedNodeClassName + ", " : "")
- + "numOfThreadsToFetchNodeIntegrity=" + numOfThreadsToFetchNodeIntegrity
- + ", makeAllNeighborsBidirectional=" + makeAllNeighborsBidirectional + ", "
- + (shallowEntities != null ? "shallowEntities=" + shallowEntities + ", " : "") + "gizmoEnabled="
- + gizmoEnabled + "]";
- }
+ public String toString() {
+ return "VisualizationConfigs [maxSelfLinkTraversalDepth=" + maxSelfLinkTraversalDepth
+ + ", visualizationDebugEnabled=" + visualizationDebugEnabled + ", "
+ + (aaiEntityNodeDescriptors != null
+ ? "aaiEntityNodeDescriptors=" + aaiEntityNodeDescriptors + ", " : "")
+ + (generalNodeClassName != null ? "generalNodeClassName=" + generalNodeClassName + ", "
+ : "")
+ + (searchNodeClassName != null ? "searchNodeClassName=" + searchNodeClassName + ", " : "")
+ + (selectedSearchedNodeClassName != null
+ ? "selectedSearchedNodeClassName=" + selectedSearchedNodeClassName + ", " : "")
+ + "numOfThreadsToFetchNodeIntegrity=" + numOfThreadsToFetchNodeIntegrity
+ + ", makeAllNeighborsBidirectional=" + makeAllNeighborsBidirectional + ", "
+ + (shallowEntities != null ? "shallowEntities=" + shallowEntities + ", " : "")
+ + (resourceLoader != null ? "resourceLoader=" + resourceLoader : "") + "]";
+ }
+
+
}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseGizmoVisualizationContext.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseGizmoVisualizationContext.java
index 11a771b..f058c48 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseGizmoVisualizationContext.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseGizmoVisualizationContext.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.sparky.viewandinspect.services;
+package org.onap.aai.sparky.viewandinspect.context;
import static java.util.concurrent.CompletableFuture.supplyAsync;
@@ -38,13 +38,13 @@ import org.onap.aai.sparky.dal.GizmoAdapter;
import org.onap.aai.sparky.logging.AaiUiMsgs;
import org.onap.aai.sparky.sync.entity.SearchableEntity;
import org.onap.aai.sparky.util.NodeUtils;
+import org.onap.aai.sparky.viewandinspect.VisualizationContext;
import org.onap.aai.sparky.viewandinspect.config.SparkyConstants;
import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs;
import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode;
import org.onap.aai.sparky.viewandinspect.entity.GizmoEntity;
import org.onap.aai.sparky.viewandinspect.entity.GizmoRelationshipEntity;
import org.onap.aai.sparky.viewandinspect.entity.GizmoRelationshipHint;
-import org.onap.aai.sparky.viewandinspect.entity.InlineMessage;
import org.onap.aai.sparky.viewandinspect.entity.NodeProcessingTransaction;
import org.onap.aai.sparky.viewandinspect.entity.QueryParams;
import org.onap.aai.sparky.viewandinspect.enumeration.NodeProcessingAction;
@@ -65,36 +65,35 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
private static final Logger LOG =
LoggerFactory.getInstance().getLogger(BaseGizmoVisualizationContext.class);
- private final GizmoAdapter gizmoAdapter;
+ protected final GizmoAdapter gizmoAdapter;
- private AtomicInteger numLinksDiscovered;
- private AtomicInteger numSuccessfulLinkResolveFromCache;
- private AtomicInteger numSuccessfulLinkResolveFromFromServer;
- private AtomicInteger numFailedLinkResolve;
- private AtomicInteger aaiWorkOnHand;
+ protected AtomicInteger numLinksDiscovered;
+ protected AtomicInteger numSuccessfulLinkResolveFromCache;
+ protected AtomicInteger numSuccessfulLinkResolveFromFromServer;
+ protected AtomicInteger numFailedLinkResolve;
+ protected AtomicInteger aaiWorkOnHand;
- private VisualizationConfigs visualizationConfigs;
+ protected VisualizationConfigs visualizationConfigs;
- private AtomicInteger totalLinksRetrieved;
+ protected AtomicInteger totalLinksRetrieved;
- private final long contextId;
- private final String contextIdStr;
- private long lastProcessStatesSummaryLogInMs = -1;
+ protected final long contextId;
+ protected final String contextIdStr;
+ protected long lastProcessStatesSummaryLogInMs = -1;
- private ObjectMapper mapper;
- private InlineMessage inlineMessage = null;
+ protected ObjectMapper mapper;
- private ExecutorService graphExecutorService;
- private OxmEntityLookup oxmEntityLookup;
- private boolean rootNodeFound;
+ protected ExecutorService graphExecutorService;
+ protected OxmEntityLookup oxmEntityLookup;
+ protected boolean rootNodeFound;
/*
* The node cache is intended to be a flat structure indexed by a primary key to avoid needlessly
* re-requesting the same self-links over-and-over again, to speed up the overall render time and
* more importantly to reduce the network cost of determining information we already have.
*/
- private ConcurrentHashMap<String, ActiveInventoryNode> nodeCache;
+ protected ConcurrentHashMap<String, ActiveInventoryNode> nodeCache;
/**
* Instantiates a new self link node collector.
@@ -148,7 +147,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
*
* @param nodeId the node id
*/
- private void processSelfLinkResponse(String nodeId) {
+ protected void processSelfLinkResponse(String nodeId) {
if (nodeId == null) {
LOG.error(AaiUiMsgs.SELF_LINK_PROCESSING_ERROR,
@@ -288,7 +287,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
*
* @param nodeId the node id
*/
- private void performSelfLinkResolve(String nodeId) {
+ protected void performSelfLinkResolve(String nodeId) {
if (nodeId == null) {
LOG.error(AaiUiMsgs.SELF_LINK_PROCESSING_ERROR,
@@ -456,7 +455,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
* @param queryParams the query params
* @return true, if successful
*/
- private void findAndMarkRootNode(QueryParams queryParams) {
+ protected void findAndMarkRootNode(QueryParams queryParams) {
if (isRootNodeFound()) {
return;
@@ -511,7 +510,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
dumpThrottledWorkOnHandLog(false);
}
- private void dumpThrottledWorkOnHandLog(boolean override) {
+ protected void dumpThrottledWorkOnHandLog(boolean override) {
if ((lastProcessStatesSummaryLogInMs < 0)
|| ((System.currentTimeMillis() > (lastProcessStatesSummaryLogInMs + 5000))) || override) {
@@ -572,7 +571,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
*
* @param rootNodeDiscovered the root node discovered
*/
- private void processCurrentNodeStates(QueryParams queryParams) {
+ protected void processCurrentNodeStates(QueryParams queryParams) {
/*
* Force an evaluation of node depths before determining if we should limit state-based
* traversal or processing.
@@ -635,14 +634,6 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
return numFailedLinkResolve.get();
}
- public InlineMessage getInlineMessage() {
- return inlineMessage;
- }
-
- public void setInlineMessage(InlineMessage inlineMessage) {
- this.inlineMessage = inlineMessage;
- }
-
public ConcurrentHashMap<String, ActiveInventoryNode> getNodeCache() {
return nodeCache;
}
@@ -654,7 +645,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
*
* @param nodeId the node id
*/
- private void processInitialState(String nodeId) {
+ protected void processInitialState(String nodeId) {
if (nodeId == null) {
LOG.error(AaiUiMsgs.FAILED_TO_PROCESS_INITIAL_STATE, "Node id is null");
@@ -713,7 +704,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
* @param skeletonNode the skeleton node
* @param queryParams the query params
*/
- private void processSearchableEntity(SearchableEntity searchTargetEntity,
+ protected void processSearchableEntity(SearchableEntity searchTargetEntity,
QueryParams queryParams) {
if (searchTargetEntity == null) {
@@ -741,7 +732,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
nodeCache.putIfAbsent(newNode.getNodeId(), newNode);
}
- private int getTotalWorkOnHand() {
+ protected int getTotalWorkOnHand() {
int numNodesWithPendingStates = 0;
@@ -781,7 +772,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
*
* @return true, if successful
*/
- private void processOutstandingWork(QueryParams queryParams) {
+ protected void processOutstandingWork(QueryParams queryParams) {
while (getTotalWorkOnHand() > 0) {
@@ -852,7 +843,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
/**
* Verify outbound neighbors.
*/
- private void verifyOutboundNeighbors() {
+ protected void verifyOutboundNeighbors() {
for (ActiveInventoryNode srcNode : nodeCache.values()) {
@@ -879,7 +870,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
/**
* Evaluate node depths.
*/
- private void evaluateNodeDepths() {
+ protected void evaluateNodeDepths() {
int numChanged = -1;
int numAttempts = 0;
@@ -954,7 +945,7 @@ public class BaseGizmoVisualizationContext implements VisualizationContext {
*/
- private String getEntityTypePrimaryKeyName(String entityType) {
+ protected String getEntityTypePrimaryKeyName(String entityType) {
if (entityType == null) {
LOG.error(AaiUiMsgs.FAILED_TO_DETERMINE,
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseGizmoVisualizationContextBuilder.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseGizmoVisualizationContextBuilder.java
new file mode 100644
index 0000000..a0f0fd5
--- /dev/null
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseGizmoVisualizationContextBuilder.java
@@ -0,0 +1,71 @@
+/**
+ * ============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.aai.sparky.viewandinspect.context;
+
+import java.security.SecureRandom;
+import java.util.concurrent.ExecutorService;
+
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
+import org.onap.aai.sparky.dal.GizmoAdapter;
+import org.onap.aai.sparky.util.NodeUtils;
+import org.onap.aai.sparky.viewandinspect.VisualizationContext;
+import org.onap.aai.sparky.viewandinspect.VisualizationContextBuilder;
+import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs;
+
+public class BaseGizmoVisualizationContextBuilder implements VisualizationContextBuilder {
+
+ private static final Logger LOG =
+ LoggerFactory.getInstance().getLogger(BaseGizmoVisualizationContextBuilder.class);
+
+ private SecureRandom secureRandom = new SecureRandom();
+ private GizmoAdapter gizmoAdapter;
+ private final ExecutorService executorService;
+ private VisualizationConfigs visualizationConfig;
+ private OxmEntityLookup oxmEntityLookup;
+
+
+ public BaseGizmoVisualizationContextBuilder(GizmoAdapter gizmoAdapter, int numWorkers,
+ VisualizationConfigs visualizationConfig, OxmEntityLookup oxmEntityLookup) {
+ this.gizmoAdapter = gizmoAdapter;
+ this.executorService = NodeUtils.createNamedExecutor("SLNC-WORKER", numWorkers, LOG);
+ this.visualizationConfig = visualizationConfig;
+ this.oxmEntityLookup = oxmEntityLookup;
+ }
+
+ @Override
+ public VisualizationContext getVisualizationContext() throws Exception {
+
+ return new BaseGizmoVisualizationContext(secureRandom.nextLong(), this.gizmoAdapter,
+ executorService, visualizationConfig, oxmEntityLookup);
+
+ }
+
+ @Override
+ public void shutdown() {
+ if (executorService != null) {
+ executorService.shutdown();
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationContext.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseVisualizationContext.java
index 0cbd52e..18c6647 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationContext.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseVisualizationContext.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.aai.sparky.viewandinspect.services;
+package org.onap.aai.sparky.viewandinspect.context;
import static java.util.concurrent.CompletableFuture.supplyAsync;
@@ -43,10 +43,10 @@ import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
import org.onap.aai.sparky.logging.AaiUiMsgs;
import org.onap.aai.sparky.sync.entity.SearchableEntity;
import org.onap.aai.sparky.util.NodeUtils;
+import org.onap.aai.sparky.viewandinspect.VisualizationContext;
import org.onap.aai.sparky.viewandinspect.config.SparkyConstants;
import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs;
import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode;
-import org.onap.aai.sparky.viewandinspect.entity.InlineMessage;
import org.onap.aai.sparky.viewandinspect.entity.NodeProcessingTransaction;
import org.onap.aai.sparky.viewandinspect.entity.QueryParams;
import org.onap.aai.sparky.viewandinspect.entity.Relationship;
@@ -68,42 +68,41 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategy;
*/
public class BaseVisualizationContext implements VisualizationContext {
- private static final int MAX_DEPTH_EVALUATION_ATTEMPTS = 100;
- private static final String DEPTH_ALL_MODIFIER = "?depth=all";
- private static final String NODES_ONLY_MODIFIER = "?nodes-only";
- private static final String SERVICE_INSTANCE = "service-instance";
+ protected static final int MAX_DEPTH_EVALUATION_ATTEMPTS = 100;
+ protected static final String DEPTH_ALL_MODIFIER = "?depth=all";
+ protected static final String NODES_ONLY_MODIFIER = "?nodes-only";
+ protected static final String SERVICE_INSTANCE = "service-instance";
private static final Logger LOG = LoggerFactory.getInstance().getLogger(
BaseVisualizationContext.class);
- private final ActiveInventoryAdapter aaiAdapter;
-
- private int maxSelfLinkTraversalDepth;
- private AtomicInteger numLinksDiscovered;
- private AtomicInteger numSuccessfulLinkResolveFromCache;
- private AtomicInteger numSuccessfulLinkResolveFromFromServer;
- private AtomicInteger numFailedLinkResolve;
- private AtomicInteger aaiWorkOnHand;
+ protected final ActiveInventoryAdapter aaiAdapter;
+
+ protected int maxSelfLinkTraversalDepth;
+ protected AtomicInteger numLinksDiscovered;
+ protected AtomicInteger numSuccessfulLinkResolveFromCache;
+ protected AtomicInteger numSuccessfulLinkResolveFromFromServer;
+ protected AtomicInteger numFailedLinkResolve;
+ protected AtomicInteger aaiWorkOnHand;
- private VisualizationConfigs visualizationConfigs;
+ protected VisualizationConfigs visualizationConfigs;
- private AtomicInteger totalLinksRetrieved;
+ protected AtomicInteger totalLinksRetrieved;
- private final long contextId;
- private final String contextIdStr;
+ protected final long contextId;
+ protected final String contextIdStr;
- private ObjectMapper mapper;
- private InlineMessage inlineMessage = null;
+ protected ObjectMapper mapper;
- private ExecutorService aaiExecutorService;
- private OxmEntityLookup oxmEntityLookup;
- private boolean rootNodeFound;
+ protected ExecutorService aaiExecutorService;
+ protected OxmEntityLookup oxmEntityLookup;
+ protected boolean rootNodeFound;
/*
* The node cache is intended to be a flat structure indexed by a primary key to avoid needlessly
* re-requesting the same self-links over-and-over again, to speed up the overall render time and
* more importantly to reduce the network cost of determining information we already have.
*/
- private ConcurrentHashMap<String, ActiveInventoryNode> nodeCache;
+ protected ConcurrentHashMap<String, ActiveInventoryNode> nodeCache;
/**
* Instantiates a new self link node collector.
@@ -471,7 +470,7 @@ public class BaseVisualizationContext implements VisualizationContext {
*
* @param nodeId the node id
*/
- private void processSelfLinkResponse(String nodeId) {
+ protected void processSelfLinkResponse(String nodeId) {
if (nodeId == null) {
LOG.error(AaiUiMsgs.SELF_LINK_PROCESSING_ERROR, "Cannot process self link"
@@ -605,7 +604,7 @@ public class BaseVisualizationContext implements VisualizationContext {
}
- private void handleNodeValue(ActiveInventoryNode ain, String fieldName, String key, String value) {
+ protected void handleNodeValue(ActiveInventoryNode ain, String fieldName, String key, String value) {
if (oxmEntityLookup.getEntityDescriptors().get(fieldName) == null) {
/*
@@ -623,7 +622,7 @@ public class BaseVisualizationContext implements VisualizationContext {
*
* @param nodeId the node id
*/
- private void performSelfLinkResolve(String nodeId) {
+ protected void performSelfLinkResolve(String nodeId) {
if (nodeId == null) {
LOG.error(AaiUiMsgs.SELF_LINK_PROCESSING_ERROR, "Resolve of self-link"
@@ -744,7 +743,7 @@ public class BaseVisualizationContext implements VisualizationContext {
*
* @param nodeId the node id
*/
- private void processNeighbors(String nodeId) {
+ protected void processNeighbors(String nodeId) {
if (nodeId == null) {
LOG.error(AaiUiMsgs.SELF_LINK_PROCESS_NEIGHBORS_ERROR, "Failed to process"
@@ -795,7 +794,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* @param queryParams the query params
* @return true, if successful
*/
- private void findAndMarkRootNode(QueryParams queryParams) {
+ protected void findAndMarkRootNode(QueryParams queryParams) {
if (isRootNodeFound()) {
return;
@@ -817,7 +816,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* Process current node states.
*
*/
- private void processCurrentNodeStates(QueryParams queryParams) {
+ protected void processCurrentNodeStates(QueryParams queryParams) {
/*
* Force an evaluation of node depths before determining if we should limit state-based
* traversal or processing.
@@ -896,7 +895,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* @param attributeGroup the attribute group
* @return true, if successful
*/
- private boolean addComplexGroupToNode(ActiveInventoryNode targetNode, JsonNode attributeGroup) {
+ protected boolean addComplexGroupToNode(ActiveInventoryNode targetNode, JsonNode attributeGroup) {
if (attributeGroup == null) {
targetNode.changeState(NodeProcessingState.ERROR,
@@ -986,14 +985,6 @@ public class BaseVisualizationContext implements VisualizationContext {
return numFailedLinkResolve.get();
}
- public InlineMessage getInlineMessage() {
- return inlineMessage;
- }
-
- public void setInlineMessage(InlineMessage inlineMessage) {
- this.inlineMessage = inlineMessage;
- }
-
public void setMaxSelfLinkTraversalDepth(int depth) {
this.maxSelfLinkTraversalDepth = depth;
}
@@ -1014,7 +1005,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* @param pkeyNames the pkey names
* @return the relationship primary key values
*/
- private String getRelationshipPrimaryKeyValues(Relationship r, String entityType,
+ protected String getRelationshipPrimaryKeyValues(Relationship r, String entityType,
List<String> pkeyNames) {
StringBuilder sb = new StringBuilder(64);
@@ -1066,7 +1057,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* @param keyName the key name
* @return the string
*/
- private String extractKeyValueFromRelationData(Relationship r, String keyName) {
+ protected String extractKeyValueFromRelationData(Relationship r, String keyName) {
RelationshipData[] rdList = r.getRelationshipData();
@@ -1086,7 +1077,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* @param ain the ain
* @return true, if successful
*/
- private boolean addNodeQueryParams(ActiveInventoryNode ain) {
+ protected boolean addNodeQueryParams(ActiveInventoryNode ain) {
if (ain == null) {
LOG.error(AaiUiMsgs.FAILED_TO_DETERMINE_NODE_ID, "ActiveInventoryNode is null");
@@ -1158,7 +1149,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* @param relationshipList the relationship list
* @return true, if successful
*/
- private boolean addSelfLinkRelationshipChildren(ActiveInventoryNode processingNode,
+ protected boolean addSelfLinkRelationshipChildren(ActiveInventoryNode processingNode,
RelationshipList relationshipList) {
if (relationshipList == null) {
@@ -1171,7 +1162,6 @@ public class BaseVisualizationContext implements VisualizationContext {
Relationship[] relationshipArray = relationshipList.getRelationshipList();
OxmEntityDescriptor descriptor = null;
- String repairedSelfLink = null;
if (relationshipArray != null) {
@@ -1254,7 +1244,7 @@ public class BaseVisualizationContext implements VisualizationContext {
*
* @param nodeId the node id
*/
- private void processInitialState(String nodeId) {
+ protected void processInitialState(String nodeId) {
if (nodeId == null) {
LOG.error(AaiUiMsgs.FAILED_TO_PROCESS_INITIAL_STATE, "Node id is null");
@@ -1313,7 +1303,7 @@ public class BaseVisualizationContext implements VisualizationContext {
* @param skeletonNode the skeleton node
* @param queryParams the query params
*/
- private void processSearchableEntity(SearchableEntity searchTargetEntity, QueryParams queryParams) {
+ protected void processSearchableEntity(SearchableEntity searchTargetEntity, QueryParams queryParams) {
if (searchTargetEntity == null) {
return;
@@ -1361,7 +1351,7 @@ public class BaseVisualizationContext implements VisualizationContext {
nodeCache.putIfAbsent(newNode.getNodeId(), newNode);
}
- private int getTotalWorkOnHand() {
+ protected int getTotalWorkOnHand() {
int numNodesWithPendingStates = 0;
@@ -1419,7 +1409,7 @@ public class BaseVisualizationContext implements VisualizationContext {
*
* @return true, if successful
*/
- private void processOutstandingWork(QueryParams queryParams) {
+ protected void processOutstandingWork(QueryParams queryParams) {
while (getTotalWorkOnHand() > 0) {
@@ -1484,7 +1474,7 @@ public class BaseVisualizationContext implements VisualizationContext {
/**
* Verify outbound neighbors.
*/
- private void verifyOutboundNeighbors() {
+ protected void verifyOutboundNeighbors() {
for (ActiveInventoryNode srcNode : nodeCache.values()) {
@@ -1511,7 +1501,7 @@ public class BaseVisualizationContext implements VisualizationContext {
/**
* Evaluate node depths.
*/
- private void evaluateNodeDepths() {
+ protected void evaluateNodeDepths() {
int numChanged = -1;
int numAttempts = 0;
@@ -1586,7 +1576,7 @@ public class BaseVisualizationContext implements VisualizationContext {
*/
- private String getEntityTypePrimaryKeyName(String entityType) {
+ protected String getEntityTypePrimaryKeyName(String entityType) {
if (entityType == null) {
LOG.error(AaiUiMsgs.FAILED_TO_DETERMINE, "node primary key"
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseVisualizationContextBuilder.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseVisualizationContextBuilder.java
new file mode 100644
index 0000000..7ffc9d0
--- /dev/null
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/context/BaseVisualizationContextBuilder.java
@@ -0,0 +1,70 @@
+/**
+ * ============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.aai.sparky.viewandinspect.context;
+
+import java.security.SecureRandom;
+import java.util.concurrent.ExecutorService;
+
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
+import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
+import org.onap.aai.sparky.util.NodeUtils;
+import org.onap.aai.sparky.viewandinspect.VisualizationContext;
+import org.onap.aai.sparky.viewandinspect.VisualizationContextBuilder;
+import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs;
+
+public class BaseVisualizationContextBuilder implements VisualizationContextBuilder {
+
+ private static final Logger LOG =
+ LoggerFactory.getInstance().getLogger(BaseVisualizationContextBuilder.class);
+
+ private SecureRandom secureRandom = new SecureRandom();
+ private ActiveInventoryAdapter aaiAdapter;
+ private final ExecutorService executorService;
+ private VisualizationConfigs visualizationConfig;
+ private OxmEntityLookup oxmEntityLookup;
+
+
+ public BaseVisualizationContextBuilder(ActiveInventoryAdapter aaiAdapter, int numWorkers,
+ VisualizationConfigs visualizationConfig, OxmEntityLookup oxmEntityLookup) {
+ this.aaiAdapter = aaiAdapter;
+ this.executorService = NodeUtils.createNamedExecutor("SLNC-WORKER", numWorkers, LOG);
+ this.visualizationConfig = visualizationConfig;
+ this.oxmEntityLookup = oxmEntityLookup;
+ }
+
+ @Override
+ public VisualizationContext getVisualizationContext() throws Exception {
+ return new BaseVisualizationContext(secureRandom.nextLong(), this.aaiAdapter, executorService,
+ visualizationConfig, oxmEntityLookup);
+
+ }
+
+ @Override
+ public void shutdown() {
+ if (executorService != null) {
+ executorService.shutdown();
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutput.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutput.java
index 9599726..ea63065 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutput.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutput.java
@@ -31,7 +31,6 @@ public class D3VisualizationOutput {
public GraphMeta graphMeta;
public List<SparkyGraphNode> nodes;
public List<SparkyGraphLink> links;
- public InlineMessage inlineMessage;
/**
* Instantiates a new d 3 visualization output.
@@ -39,7 +38,6 @@ public class D3VisualizationOutput {
public D3VisualizationOutput() {
nodes = new ArrayList<SparkyGraphNode>();
links = new ArrayList<SparkyGraphLink>();
- inlineMessage = null;
}
public GraphMeta getGraphMeta() {
@@ -77,13 +75,4 @@ public class D3VisualizationOutput {
this.links.addAll(links);
}
- public InlineMessage getInlineMessage() {
- return inlineMessage;
- }
-
- public void setInlineMessage(InlineMessage inlineMessage) {
- this.inlineMessage = inlineMessage;
- }
-
-
}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/GraphMeta.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/GraphMeta.java
index b827e74..0ccefdb 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/GraphMeta.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/GraphMeta.java
@@ -34,12 +34,8 @@ public class GraphMeta {
private int numLinks;
private long renderTimeInMs;
-
- private int numLinksResolvedSuccessfullyFromCache;
-
- private int numLinksResolvedSuccessfullyFromServer;
-
- private int numLinkResolveFailed;
+
+ private int numNodeWithProcessingErrors;
private EntityTypeAggregation entitySummary;
@@ -67,31 +63,6 @@ public class GraphMeta {
this.aaiEntityNodeDescriptors = aaiEntityNodeDefinitions;
}
- public int getNumLinksResolvedSuccessfullyFromCache() {
- return numLinksResolvedSuccessfullyFromCache;
- }
-
- public void setNumLinksResolvedSuccessfullyFromCache(int numLinksResolvedSuccessfullyFromCache) {
- this.numLinksResolvedSuccessfullyFromCache = numLinksResolvedSuccessfullyFromCache;
- }
-
- public int getNumLinksResolvedSuccessfullyFromServer() {
- return numLinksResolvedSuccessfullyFromServer;
- }
-
- public void setNumLinksResolvedSuccessfullyFromServer(
- int numLinksResolvedSuccessfullyFromServer) {
- this.numLinksResolvedSuccessfullyFromServer = numLinksResolvedSuccessfullyFromServer;
- }
-
- public int getNumLinkResolveFailed() {
- return numLinkResolveFailed;
- }
-
- public void setNumLinkResolveFailed(int numLinkResolveFailed) {
- this.numLinkResolveFailed = numLinkResolveFailed;
- }
-
public int getNumNodes() {
return numNodes;
}
@@ -116,6 +87,14 @@ public class GraphMeta {
this.renderTimeInMs = renderTimeInMs;
}
+ public int getNumNodeWithProcessingErrors() {
+ return numNodeWithProcessingErrors;
+ }
+
+ public void setNumNodeWithProcessingErrors(int numNodeWithProcessingErrors) {
+ this.numNodeWithProcessingErrors = numNodeWithProcessingErrors;
+ }
+
/**
* Peg counter.
*
@@ -125,19 +104,12 @@ public class GraphMeta {
entitySummary.pegCounter(counterName);
}
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
@Override
public String toString() {
- return "GraphMeta ["
- + (aaiEntityNodeDescriptors != null
- ? "aaiEntityNodeDescriptors=" + aaiEntityNodeDescriptors + ", " : "")
- + "numNodes=" + numNodes + ", numLinks=" + numLinks + ", renderTimeInMs=" + renderTimeInMs
- + ", numLinksResolvedSuccessfullyFromCache=" + numLinksResolvedSuccessfullyFromCache
- + ", numLinksResolvedSuccessfullyFromServer=" + numLinksResolvedSuccessfullyFromServer
- + ", numLinkResolveFailed=" + numLinkResolveFailed + ", "
- + (entitySummary != null ? "entitySummary=" + entitySummary : "") + "]";
+ return "GraphMeta [aaiEntityNodeDescriptors=" + aaiEntityNodeDescriptors + ", numNodes="
+ + numNodes + ", numLinks=" + numLinks + ", renderTimeInMs=" + renderTimeInMs
+ + ", numNodeWithProcessingErrors=" + numNodeWithProcessingErrors + ", entitySummary="
+ + entitySummary + "]";
}
}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessage.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessage.java
deleted file mode 100644
index 5ddc20f..0000000
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessage.java
+++ /dev/null
@@ -1,66 +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.aai.sparky.viewandinspect.entity;
-
-/**
- * The Class InlineMessage.
- */
-public class InlineMessage {
-
- private String level;
- private String message;
-
- /**
- * Instantiates a new inline message.
- *
- * @param level the level
- * @param message the message
- */
- public InlineMessage(String level, String message) {
- this.level = level;
- this.message = message;
- }
-
- public String getLevel() {
- return level;
- }
-
- public void setLevel(String level) {
- this.level = level;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- return level + " : " + message;
- }
-
-}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationService.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationService.java
index 17c9072..992e531 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationService.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationService.java
@@ -21,20 +21,14 @@
package org.onap.aai.sparky.viewandinspect.services;
import java.io.IOException;
-import java.security.SecureRandom;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
import javax.servlet.ServletException;
import org.onap.aai.cl.api.Logger;
import org.onap.aai.cl.eelf.LoggerFactory;
import org.onap.aai.restclient.client.OperationResult;
-import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
-import org.onap.aai.sparky.config.oxm.OxmModelLoader;
-import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
-import org.onap.aai.sparky.dal.GizmoAdapter;
import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
import org.onap.aai.sparky.logging.AaiUiMsgs;
import org.onap.aai.sparky.search.SearchServiceAdapter;
@@ -42,6 +36,9 @@ import org.onap.aai.sparky.subscription.config.SubscriptionConfig;
import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
import org.onap.aai.sparky.sync.entity.SearchableEntity;
import org.onap.aai.sparky.util.NodeUtils;
+import org.onap.aai.sparky.viewandinspect.VisualizationContext;
+import org.onap.aai.sparky.viewandinspect.VisualizationContextBuilder;
+import org.onap.aai.sparky.viewandinspect.VisualizationService;
import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs;
import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode;
import org.onap.aai.sparky.viewandinspect.entity.D3VisualizationOutput;
@@ -60,43 +57,30 @@ public class BaseVisualizationService implements VisualizationService {
private static final Logger LOG =
LoggerFactory.getInstance().getLogger(BaseVisualizationService.class);
- private ObjectMapper mapper = new ObjectMapper();
+ protected ObjectMapper mapper = new ObjectMapper();
- private final ActiveInventoryAdapter aaiAdapter;
- private final GizmoAdapter gizmoAdapter;
- private final SearchServiceAdapter searchServiceAdapter;
- private final ExecutorService aaiExecutorService;
+ protected final SearchServiceAdapter searchServiceAdapter;
- private ConcurrentHashMap<Long, VisualizationContext> contextMap;
- private final SecureRandom secureRandom;
-
- private VisualizationConfigs visualizationConfigs;
- private SubscriptionConfig subConfig;
- private RestEndpointConfig endpointConfig;
- private ElasticSearchSchemaConfig schemaEConfig;
- private OxmEntityLookup oxmEntityLookup;
+ protected ConcurrentHashMap<Long, VisualizationContext> contextMap;
+
+ protected VisualizationConfigs visualizationConfigs;
+ protected SubscriptionConfig subConfig;
+ protected RestEndpointConfig endpointConfig;
+ protected ElasticSearchSchemaConfig schemaEConfig;
+
+ protected VisualizationContextBuilder contextBuilder;
- public BaseVisualizationService(OxmModelLoader loader, VisualizationConfigs visualizationConfigs,
- ActiveInventoryAdapter aaiAdapter, GizmoAdapter gizmoAdapter, SearchServiceAdapter searchServiceAdapter,
- RestEndpointConfig endpointConfig, ElasticSearchSchemaConfig schemaConfig,
- int numActiveInventoryWorkers, OxmEntityLookup oxmEntityLookup, SubscriptionConfig subscriptionConfig)
- throws Exception {
+ public BaseVisualizationService(VisualizationContextBuilder contextBuilder,
+ VisualizationConfigs visualizationConfigs, SearchServiceAdapter searchServiceAdapter,
+ RestEndpointConfig endpointConfig, ElasticSearchSchemaConfig schemaConfig,
+ SubscriptionConfig subscriptionConfig) throws Exception {
this.visualizationConfigs = visualizationConfigs;
this.endpointConfig = endpointConfig;
this.schemaEConfig = schemaConfig;
- this.oxmEntityLookup = oxmEntityLookup;
this.subConfig = subscriptionConfig;
+ this.contextBuilder = contextBuilder;
-
- secureRandom = new SecureRandom();
-
- /*
- * Fix constructor with properly wired in properties
- */
-
- this.aaiAdapter = aaiAdapter;
- this.gizmoAdapter = gizmoAdapter;
this.searchServiceAdapter = searchServiceAdapter;
this.mapper = new ObjectMapper();
@@ -104,9 +88,6 @@ public class BaseVisualizationService implements VisualizationService {
this.contextMap = new ConcurrentHashMap<Long, VisualizationContext>();
- this.aaiExecutorService = NodeUtils.createNamedExecutor("SLNC-WORKER",
- numActiveInventoryWorkers, LOG);
-
}
/**
@@ -144,12 +125,12 @@ public class BaseVisualizationService implements VisualizationService {
* @param method the method
* @param opStartTimeInMs the op start time in ms
*/
- private void logOptime(String method, long opStartTimeInMs) {
+ protected void logOptime(String method, long opStartTimeInMs) {
LOG.info(AaiUiMsgs.OPERATION_TIME, method,
String.valueOf(System.currentTimeMillis() - opStartTimeInMs));
}
- private SearchableEntity extractSearchableEntityFromElasticEntity(OperationResult operationResult) {
+ protected SearchableEntity extractSearchableEntityFromElasticEntity(OperationResult operationResult) {
if (operationResult == null || !operationResult.wasSuccessful()) {
// error, return empty collection
return null;
@@ -190,7 +171,8 @@ public class BaseVisualizationService implements VisualizationService {
* @param queryRequest the query request
* @return the operation result
*/
- public OperationResult buildVisualizationUsingGenericQuery(QueryRequest queryRequest) {
+ @Override
+ public OperationResult buildVisualization(QueryRequest queryRequest) {
OperationResult returnValue = new OperationResult();
OperationResult dataCollectionResult;
@@ -263,7 +245,7 @@ public class BaseVisualizationService implements VisualizationService {
* @throws ServletException the servlet exception
* @throws
*/
- private String getVisualizationOutputBasedonGenericQuery(SearchableEntity searchtargetEntity,
+ protected String getVisualizationOutputBasedonGenericQuery(SearchableEntity searchtargetEntity,
QueryParams queryParams, QueryRequest request) throws ServletException {
long opStartTimeInMs = System.currentTimeMillis();
@@ -277,17 +259,12 @@ public class BaseVisualizationService implements VisualizationService {
}
VisualizationContext visContext = null;
- long contextId = secureRandom.nextLong();
+
try {
- if ( visualizationConfigs.isGizmoEnabled()) {
- visContext = new BaseGizmoVisualizationContext(contextId, this.gizmoAdapter, aaiExecutorService,
- this.visualizationConfigs, oxmEntityLookup);
- } else {
- visContext = new BaseVisualizationContext(contextId, this.aaiAdapter, aaiExecutorService,
- this.visualizationConfigs, oxmEntityLookup);
- }
-
- contextMap.putIfAbsent(contextId, visContext);
+
+ visContext = contextBuilder.getVisualizationContext();
+ contextMap.putIfAbsent(visContext.getContextId(), visContext);
+
} catch (Exception e1) {
LOG.error(AaiUiMsgs.EXCEPTION_CAUGHT,
"While building Visualization Context, " + e1.getLocalizedMessage());
@@ -297,7 +274,7 @@ public class BaseVisualizationService implements VisualizationService {
long startTimeInMs = System.currentTimeMillis();
visContext.processSelfLinks(searchtargetEntity, queryParams);
- contextMap.remove(contextId);
+ contextMap.remove(visContext.getContextId());
logOptime("collectSelfLinkNodes()", startTimeInMs);
@@ -323,7 +300,9 @@ public class BaseVisualizationService implements VisualizationService {
LOG.debug(AaiUiMsgs.DEBUG_GENERIC, sb.toString());
}
- transformer.buildFlatNodeArrayFromGraphCollection(cachedNodeMap);
+ GraphMeta graphMeta = new GraphMeta();
+
+ transformer.buildFlatNodeArrayFromGraphCollection(cachedNodeMap, graphMeta);
transformer.buildLinksFromGraphCollection(cachedNodeMap);
/*
@@ -333,20 +312,12 @@ public class BaseVisualizationService implements VisualizationService {
*/
transformer.addSearchTargetAttributesToRootNode();
-
- GraphMeta graphMeta = new GraphMeta();
D3VisualizationOutput output = getD3VisualizationOutput(opStartTimeInMs, transformer, graphMeta);
String jsonResponse = null;
if (output != null) {
- output.setInlineMessage(visContext.getInlineMessage());
- output.getGraphMeta().setNumLinkResolveFailed(visContext.getNumFailedLinkResolve());
- output.getGraphMeta().setNumLinksResolvedSuccessfullyFromCache(
- visContext.getNumSuccessfulLinkResolveFromCache());
- output.getGraphMeta().setNumLinksResolvedSuccessfullyFromServer(
- visContext.getNumSuccessfulLinkResolveFromFromServer());
try {
jsonResponse = transformer.convertVisualizationOutputToJson(output);
@@ -365,7 +336,8 @@ public class BaseVisualizationService implements VisualizationService {
}
- private D3VisualizationOutput getD3VisualizationOutput(long opStartTimeInMs, VisualizationTransformer transformer, GraphMeta graphMeta) throws ServletException {
+ protected D3VisualizationOutput getD3VisualizationOutput(long opStartTimeInMs,
+ VisualizationTransformer transformer, GraphMeta graphMeta) throws ServletException {
D3VisualizationOutput output = null;
try {
output = transformer
@@ -378,7 +350,7 @@ public class BaseVisualizationService implements VisualizationService {
return output;
}
- private JsonNode extractSearchServiceContent(JsonNode returnedData){
+ protected JsonNode extractSearchServiceContent(JsonNode returnedData){
JsonNode searchResults = returnedData.get("searchResult");
JsonNode searchHits = searchResults.get("hits");
@@ -388,8 +360,11 @@ public class BaseVisualizationService implements VisualizationService {
return content;
}
+ @Override
public void shutdown() {
- aaiExecutorService.shutdown();
+ if ( contextBuilder != null ) {
+ contextBuilder.shutdown();
+ }
}
}
diff --git a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationTransformer.java b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationTransformer.java
index 7fcacfe..2d70b92 100644
--- a/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationTransformer.java
+++ b/sparkybe-onap-service/src/main/java/org/onap/aai/sparky/viewandinspect/services/VisualizationTransformer.java
@@ -33,7 +33,6 @@ import org.onap.aai.cl.eelf.LoggerFactory;
import org.onap.aai.sparky.config.SparkyResourceLoader;
import org.onap.aai.sparky.logging.AaiUiMsgs;
import org.onap.aai.sparky.subscription.config.SubscriptionConfig;
-import org.onap.aai.sparky.util.ConfigHelper;
import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs;
import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode;
import org.onap.aai.sparky.viewandinspect.entity.D3VisualizationOutput;
@@ -41,6 +40,7 @@ import org.onap.aai.sparky.viewandinspect.entity.GraphMeta;
import org.onap.aai.sparky.viewandinspect.entity.NodeDebug;
import org.onap.aai.sparky.viewandinspect.entity.SparkyGraphLink;
import org.onap.aai.sparky.viewandinspect.entity.SparkyGraphNode;
+import org.onap.aai.sparky.viewandinspect.enumeration.NodeProcessingState;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -263,13 +263,17 @@ public class VisualizationTransformer {
* Builds the flat node array from graph collection.
*
* @param nodeMap the node map
+ * @param graphMeta information + stats about the graph
*/
/*
* Recursive function to walk multi-graph nodes and children to build a folded resource target
* graph.
*/
- public void buildFlatNodeArrayFromGraphCollection(Map<String, ActiveInventoryNode> nodeMap) {
+ public void buildFlatNodeArrayFromGraphCollection(Map<String, ActiveInventoryNode> nodeMap,
+ GraphMeta graphMeta) {
+ int numNodesWithErrors = 0;
+
for (ActiveInventoryNode n : nodeMap.values()) {
if (n.getNodeDepth() <= this.visualizationConfigs.getMaxSelfLinkTraversalDepth()) {
@@ -277,6 +281,10 @@ public class VisualizationTransformer {
SparkyGraphNode jsonNode = new SparkyGraphNode(n, this.visualizationConfigs, this.subConfig);
jsonNode.getNodeMeta().setClassName(this.visualizationConfigs.getGeneralNodeClassName());
+
+ if (n.getState() == NodeProcessingState.ERROR) {
+ numNodesWithErrors++;
+ }
if (this.visualizationConfigs.isVisualizationDebugEnabled()) {
@@ -296,6 +304,9 @@ public class VisualizationTransformer {
}
}
}
+
+ graphMeta.setNumNodeWithProcessingErrors(numNodesWithErrors);
+
}
}