node-red-contrib-tak-registration
Version:
A Node-RED node to register to TAK and to help wrap files as datapackages to send to TAK
49 lines (47 loc) • 1.47 kB
JavaScript
import Stack from '../../../../../java/util/Stack'
import Subgraph from '../Subgraph'
import ArrayList from '../../../../../java/util/ArrayList'
import GraphComponent from '../GraphComponent'
export default class ConnectedSubgraphFinder {
constructor() {
ConnectedSubgraphFinder.constructor_.apply(this, arguments)
}
static constructor_() {
this._graph = null
const graph = arguments[0]
this._graph = graph
}
addReachable(startNode, subgraph) {
const nodeStack = new Stack()
nodeStack.add(startNode)
while (!nodeStack.empty()) {
const node = nodeStack.pop()
this.addEdges(node, nodeStack, subgraph)
}
}
findSubgraph(node) {
const subgraph = new Subgraph(this._graph)
this.addReachable(node, subgraph)
return subgraph
}
getConnectedSubgraphs() {
const subgraphs = new ArrayList()
GraphComponent.setVisited(this._graph.nodeIterator(), false)
for (let i = this._graph.edgeIterator(); i.hasNext(); ) {
const e = i.next()
const node = e.getDirEdge(0).getFromNode()
if (!node.isVisited())
subgraphs.add(this.findSubgraph(node))
}
return subgraphs
}
addEdges(node, nodeStack, subgraph) {
node.setVisited(true)
for (let i = node.getOutEdges().iterator(); i.hasNext(); ) {
const de = i.next()
subgraph.add(de.getEdge())
const toNode = de.getToNode()
if (!toNode.isVisited()) nodeStack.push(toNode)
}
}
}