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
123 lines (114 loc) • 3.86 kB
JavaScript
import StringBuffer from '../../../../java/lang/StringBuffer'
import Location from '../geom/Location'
import Position from './Position'
export default class TopologyLocation {
constructor() {
TopologyLocation.constructor_.apply(this, arguments)
}
static constructor_() {
this.location = null
if (arguments.length === 1) {
if (arguments[0] instanceof Array) {
const location = arguments[0]
this.init(location.length)
} else if (Number.isInteger(arguments[0])) {
const on = arguments[0]
this.init(1)
this.location[Position.ON] = on
} else if (arguments[0] instanceof TopologyLocation) {
const gl = arguments[0]
this.init(gl.location.length)
if (gl !== null)
for (let i = 0; i < this.location.length; i++)
this.location[i] = gl.location[i]
}
} else if (arguments.length === 3) {
const on = arguments[0], left = arguments[1], right = arguments[2]
this.init(3)
this.location[Position.ON] = on
this.location[Position.LEFT] = left
this.location[Position.RIGHT] = right
}
}
setAllLocations(locValue) {
for (let i = 0; i < this.location.length; i++)
this.location[i] = locValue
}
isNull() {
for (let i = 0; i < this.location.length; i++)
if (this.location[i] !== Location.NONE) return false
return true
}
setAllLocationsIfNull(locValue) {
for (let i = 0; i < this.location.length; i++)
if (this.location[i] === Location.NONE) this.location[i] = locValue
}
isLine() {
return this.location.length === 1
}
merge(gl) {
if (gl.location.length > this.location.length) {
const newLoc = new Array(3).fill(null)
newLoc[Position.ON] = this.location[Position.ON]
newLoc[Position.LEFT] = Location.NONE
newLoc[Position.RIGHT] = Location.NONE
this.location = newLoc
}
for (let i = 0; i < this.location.length; i++)
if (this.location[i] === Location.NONE && i < gl.location.length) this.location[i] = gl.location[i]
}
getLocations() {
return this.location
}
flip() {
if (this.location.length <= 1) return null
const temp = this.location[Position.LEFT]
this.location[Position.LEFT] = this.location[Position.RIGHT]
this.location[Position.RIGHT] = temp
}
toString() {
const buf = new StringBuffer()
if (this.location.length > 1) buf.append(Location.toLocationSymbol(this.location[Position.LEFT]))
buf.append(Location.toLocationSymbol(this.location[Position.ON]))
if (this.location.length > 1) buf.append(Location.toLocationSymbol(this.location[Position.RIGHT]))
return buf.toString()
}
setLocations(on, left, right) {
this.location[Position.ON] = on
this.location[Position.LEFT] = left
this.location[Position.RIGHT] = right
}
get(posIndex) {
if (posIndex < this.location.length) return this.location[posIndex]
return Location.NONE
}
isArea() {
return this.location.length > 1
}
isAnyNull() {
for (let i = 0; i < this.location.length; i++)
if (this.location[i] === Location.NONE) return true
return false
}
setLocation() {
if (arguments.length === 1) {
const locValue = arguments[0]
this.setLocation(Position.ON, locValue)
} else if (arguments.length === 2) {
const locIndex = arguments[0], locValue = arguments[1]
this.location[locIndex] = locValue
}
}
init(size) {
this.location = new Array(size).fill(null)
this.setAllLocations(Location.NONE)
}
isEqualOnSide(le, locIndex) {
return this.location[locIndex] === le.location[locIndex]
}
allPositionsEqual(loc) {
for (let i = 0; i < this.location.length; i++)
if (this.location[i] !== loc) return false
return true
}
}