use of org.codice.alliance.nsili.common.UCO.Edge in project alliance by codice.
the class DAGConverterTest method testBadEnumValues.
@Test
public void testBadEnumValues() {
DAG dag = new DAG();
DirectedAcyclicGraph<Node, Edge> graph = new DirectedAcyclicGraph<>(Edge.class);
Node productNode = createRootNode();
graph.addVertex(productNode);
addCardNode(graph, productNode);
addFileNode(graph, productNode);
addStreamNode(graph, productNode);
addMetadataSecurity(graph, productNode);
addSecurityNode(graph, productNode);
addBadImageryNode(graph, productNode);
addBadVideoPart(graph, productNode);
addBadCxpNode(graph, productNode);
addBadRFINode(graph, productNode);
addBadTaskNode(graph, productNode);
addBadExpoloitationInfoNode(graph, productNode);
addBadSdsNode(graph, productNode);
addBadApprovalNode(graph, productNode);
addBadReportNode(graph, productNode);
graph.addVertex(productNode);
NsiliCommonUtils.setUCOEdgeIds(graph);
NsiliCommonUtils.setUCOEdges(productNode, graph);
dag.edges = NsiliCommonUtils.getEdgeArrayFromGraph(graph);
dag.nodes = NsiliCommonUtils.getNodeArrayFromGraph(graph);
MetacardImpl metacard = dagConverter.convertDAG(dag, false, SOURCE_ID);
// Check top-level meta-card attributes
assertThat(metacard.getId(), is(CARD_ID));
}
use of org.codice.alliance.nsili.common.UCO.Edge in project alliance by codice.
the class DAGConverterTest method testGmtiViewConversion.
/**
* Test the GMTI View DAG to Metacard
*
* <p>NSIL_PRODUCT NSIL_APPROVAL NSIL_CARD NSIL_FILE NSIL_STREAM NSIL_METADATASECURITY
* NSIL_RELATED_FILE NSIL_SECURITY NSIL_PART NSIL_SECURITY NSIL_COMMON NSIL_COVERAGE
* NSIL_EXPLOITATION_INFO NSIL_GMTI NSIL_ASSOCIATION NSIL_RELATION NSIL_SOURCE NSIL_CARD
* NSIL_DESTINATION NSIL_CARD
*/
@Test
public void testGmtiViewConversion() {
DAG dag = new DAG();
DirectedAcyclicGraph<Node, Edge> graph = new DirectedAcyclicGraph<>(Edge.class);
Node productNode = createRootNode();
graph.addVertex(productNode);
addCardNode(graph, productNode);
addStreamNode(graph, productNode);
addMetadataSecurity(graph, productNode);
addSecurityNode(graph, productNode);
addGmtiPart(graph, productNode);
graph.addVertex(productNode);
NsiliCommonUtils.setUCOEdgeIds(graph);
NsiliCommonUtils.setUCOEdges(productNode, graph);
dag.edges = NsiliCommonUtils.getEdgeArrayFromGraph(graph);
dag.nodes = NsiliCommonUtils.getNodeArrayFromGraph(graph);
MetacardImpl metacard = dagConverter.convertDAG(dag, false, SOURCE_ID);
if (SHOULD_PRINT_CARD) {
File file = new File("/tmp/output-gmti.txt");
if (file.exists()) {
file.delete();
}
try (PrintStream outStream = new PrintStream(file)) {
printMetacard(metacard, outStream);
} catch (IOException ioe) {
// Ignore the error
}
}
// Check top-level meta-card attributes
assertThat(metacard.getId(), is(CARD_ID));
assertThat(metacard.getCreatedDate(), notNullValue());
assertThat(metacard.getEffectiveDate(), notNullValue());
assertThat(metacard.getModifiedDate(), is(cal.getTime()));
assertThat(metacard.getDescription(), is(COM_DESCRIPTION_ABSTRACT));
assertThat(metacard.getLocation(), is(WKT_LOCATION));
assertThat(metacard.getAttribute(Core.RESOURCE_URI).getValue().toString(), is(STREAM_SOURCE_URL));
checkCommonAttributes(metacard);
checkExploitationInfoAttributes(metacard);
checkStreamAttributes(metacard);
checkGmtiAttributes(metacard);
checkSecurityAttributes(metacard);
checkCoverageAttributes(metacard);
}
use of org.codice.alliance.nsili.common.UCO.Edge in project alliance by codice.
the class DAGConverterTest method testDAGNoEdges.
@Test
public void testDAGNoEdges() {
DAG dag = new DAG();
DirectedAcyclicGraph<Node, Edge> graph = new DirectedAcyclicGraph<>(Edge.class);
// Create invalid root node
Node rootNode = createRootNode();
graph.addVertex(rootNode);
dag.nodes = NsiliCommonUtils.getNodeArrayFromGraph(graph);
MetacardImpl metacard = dagConverter.convertDAG(dag, false, SOURCE_ID);
assertThat(metacard, nullValue());
}
use of org.codice.alliance.nsili.common.UCO.Edge in project alliance by codice.
the class NsiliCommonUtils method setUCOEdges.
/**
* Set the UCO.Edges of the DAG according to the NSILI Spec. This requires the ids of the Nodes to
* be set in DFS order.
*
* @param root - the root node of the graph (NSIL_PRODUCT)
* @param graph - the graph representation of the DAG
*/
public static void setUCOEdges(Node root, Graph<Node, Edge> graph) {
if (graph != null) {
Deque<Node> stack = new ArrayDeque<>();
Deque<Node> visitorStack = new ArrayDeque<>();
stack.push(root);
while (!stack.isEmpty()) {
Node currNode = stack.pop();
if (!visitorStack.contains(currNode)) {
visitorStack.push(currNode);
for (Edge edge : graph.edgesOf(currNode)) {
processEdges(graph, stack, edge);
}
}
}
}
}
use of org.codice.alliance.nsili.common.UCO.Edge in project alliance by codice.
the class ResultDAGConverter method getAttributeMap.
public static Map<String, String> getAttributeMap(DAG dag) {
Map<String, String> attributes = new HashMap<>();
Map<Integer, Node> nodeMap = createNodeMap(dag.nodes);
DirectedAcyclicGraph<Node, Edge> graph = getNodeEdgeDirectedAcyclicGraph(dag, nodeMap);
DepthFirstIterator<Node, Edge> graphIT = new DepthFirstIterator<>(graph, nodeMap.get(0));
List<String> nodeStack = new ArrayList<>();
graphIT.addTraversalListener(new TraversalListener<Node, Edge>() {
@Override
public void connectedComponentFinished(ConnectedComponentTraversalEvent connectedComponentTraversalEvent) {
// This method is not expected to be called
}
@Override
public void connectedComponentStarted(ConnectedComponentTraversalEvent connectedComponentTraversalEvent) {
// This method is not expected to be called
}
@Override
public void edgeTraversed(EdgeTraversalEvent<Node, Edge> edgeTraversalEvent) {
// This method is not expected to be called
}
@Override
public void vertexTraversed(VertexTraversalEvent<Node> vertexTraversalEvent) {
Node node = vertexTraversalEvent.getVertex();
if (node.node_type != NodeType.ATTRIBUTE_NODE) {
nodeStack.add(node.attribute_name);
}
}
@Override
public void vertexFinished(VertexTraversalEvent<Node> vertexTraversalEvent) {
Node node = vertexTraversalEvent.getVertex();
if (node.node_type == NodeType.ATTRIBUTE_NODE) {
StringBuilder attribute = new StringBuilder();
int currEntry = 0;
int size = nodeStack.size();
for (String nodeEntry : nodeStack) {
attribute.append(nodeEntry);
if (currEntry < (size - 1)) {
attribute.append(":");
} else {
attribute.append(".");
}
currEntry++;
}
attribute.append(node.attribute_name);
attributes.put(attribute.toString(), CorbaUtils.getNodeValue(node.value));
} else {
int lastIdx = nodeStack.size() - 1;
nodeStack.remove(lastIdx);
}
}
});
Node rootNode = null;
while (graphIT.hasNext()) {
graphIT.setCrossComponentTraversal(false);
Node node = graphIT.next();
if (rootNode == null) {
rootNode = node;
}
}
return attributes;
}
Aggregations