Search in sources :

Example 16 with Edge

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));
}
Also used : Node(org.codice.alliance.nsili.common.UCO.Node) DAG(org.codice.alliance.nsili.common.UCO.DAG) Edge(org.codice.alliance.nsili.common.UCO.Edge) DirectedAcyclicGraph(org.jgrapht.experimental.dag.DirectedAcyclicGraph) MetacardImpl(ddf.catalog.data.impl.MetacardImpl) Test(org.junit.Test)

Example 17 with Edge

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);
}
Also used : PrintStream(java.io.PrintStream) Node(org.codice.alliance.nsili.common.UCO.Node) DAG(org.codice.alliance.nsili.common.UCO.DAG) IOException(java.io.IOException) Edge(org.codice.alliance.nsili.common.UCO.Edge) File(java.io.File) DirectedAcyclicGraph(org.jgrapht.experimental.dag.DirectedAcyclicGraph) MetacardImpl(ddf.catalog.data.impl.MetacardImpl) Test(org.junit.Test)

Example 18 with Edge

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());
}
Also used : Node(org.codice.alliance.nsili.common.UCO.Node) DAG(org.codice.alliance.nsili.common.UCO.DAG) Edge(org.codice.alliance.nsili.common.UCO.Edge) DirectedAcyclicGraph(org.jgrapht.experimental.dag.DirectedAcyclicGraph) MetacardImpl(ddf.catalog.data.impl.MetacardImpl) Test(org.junit.Test)

Example 19 with Edge

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);
                }
            }
        }
    }
}
Also used : Node(org.codice.alliance.nsili.common.UCO.Node) Edge(org.codice.alliance.nsili.common.UCO.Edge) ArrayDeque(java.util.ArrayDeque)

Example 20 with 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;
}
Also used : DepthFirstIterator(org.jgrapht.traverse.DepthFirstIterator) HashMap(java.util.HashMap) Node(org.codice.alliance.nsili.common.UCO.Node) ArrayList(java.util.ArrayList) ConnectedComponentTraversalEvent(org.jgrapht.event.ConnectedComponentTraversalEvent) Edge(org.codice.alliance.nsili.common.UCO.Edge)

Aggregations

Edge (org.codice.alliance.nsili.common.UCO.Edge)31 Node (org.codice.alliance.nsili.common.UCO.Node)31 DirectedAcyclicGraph (org.jgrapht.experimental.dag.DirectedAcyclicGraph)23 MetacardImpl (ddf.catalog.data.impl.MetacardImpl)21 DAG (org.codice.alliance.nsili.common.UCO.DAG)21 Test (org.junit.Test)19 File (java.io.File)11 IOException (java.io.IOException)11 PrintStream (java.io.PrintStream)11 DepthFirstIterator (org.jgrapht.traverse.DepthFirstIterator)6 ArrayList (java.util.ArrayList)4 Metacard (ddf.catalog.data.Metacard)1 AttributeImpl (ddf.catalog.data.impl.AttributeImpl)1 Serializable (java.io.Serializable)1 ArrayDeque (java.util.ArrayDeque)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Product (org.codice.alliance.nsili.common.UID.Product)1 DijkstraShortestPath (org.jgrapht.alg.DijkstraShortestPath)1 ConnectedComponentTraversalEvent (org.jgrapht.event.ConnectedComponentTraversalEvent)1