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
220 lines (212 loc) • 5.84 kB
JavaScript
import NumberUtil from '../util/NumberUtil'
import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'
import Double from '../../../../java/lang/Double'
import Comparable from '../../../../java/lang/Comparable'
import Cloneable from '../../../../java/lang/Cloneable'
import Comparator from '../../../../java/util/Comparator'
import Serializable from '../../../../java/io/Serializable'
import Assert from '../util/Assert'
const kBuf = new ArrayBuffer(8)
const kBufAsF64 = new Float64Array(kBuf)
const kBufAsI32 = new Int32Array(kBuf)
export default class Coordinate {
constructor() {
Coordinate.constructor_.apply(this, arguments)
}
static constructor_() {
this.x = null
this.y = null
this.z = null
if (arguments.length === 0) {
Coordinate.constructor_.call(this, 0.0, 0.0)
} else if (arguments.length === 1) {
const c = arguments[0]
Coordinate.constructor_.call(this, c.x, c.y, c.getZ())
} else if (arguments.length === 2) {
const x = arguments[0], y = arguments[1]
Coordinate.constructor_.call(this, x, y, Coordinate.NULL_ORDINATE)
} else if (arguments.length === 3) {
const x = arguments[0], y = arguments[1], z = arguments[2]
this.x = x
this.y = y
this.z = z
}
}
static hashCode(n) {
kBufAsF64[0] = n
return kBufAsI32[0] ^ kBufAsI32[1]
}
getM() {
return Double.NaN
}
setOrdinate(ordinateIndex, value) {
switch (ordinateIndex) {
case Coordinate.X:
this.x = value
break
case Coordinate.Y:
this.y = value
break
case Coordinate.Z:
this.setZ(value)
break
default:
throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
}
}
equals2D() {
if (arguments.length === 1) {
const other = arguments[0]
if (this.x !== other.x)
return false
if (this.y !== other.y)
return false
return true
} else if (arguments.length === 2) {
const c = arguments[0], tolerance = arguments[1]
if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance))
return false
if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance))
return false
return true
}
}
setM(m) {
throw new IllegalArgumentException('Invalid ordinate index: ' + Coordinate.M)
}
getZ() {
return this.z
}
getOrdinate(ordinateIndex) {
switch (ordinateIndex) {
case Coordinate.X:
return this.x
case Coordinate.Y:
return this.y
case Coordinate.Z:
return this.getZ()
}
throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
}
equals3D(other) {
return this.x === other.x && this.y === other.y && (this.getZ() === other.getZ() || Double.isNaN(this.getZ()) && Double.isNaN(other.getZ()))
}
equals(other) {
if (!(other instanceof Coordinate))
return false
return this.equals2D(other)
}
equalInZ(c, tolerance) {
return NumberUtil.equalsWithTolerance(this.getZ(), c.getZ(), tolerance)
}
setX(x) {
this.x = x
}
compareTo(o) {
const other = o
if (this.x < other.x) return -1
if (this.x > other.x) return 1
if (this.y < other.y) return -1
if (this.y > other.y) return 1
return 0
}
getX() {
return this.x
}
setZ(z) {
this.z = z
}
clone() {
try {
const coord = null
return coord
} catch (e) {
if (e instanceof CloneNotSupportedException) {
Assert.shouldNeverReachHere('this shouldn\'t happen because this class is Cloneable')
return null
} else {
throw e
}
} finally {}
}
copy() {
return new Coordinate(this)
}
toString() {
return '(' + this.x + ', ' + this.y + ', ' + this.getZ() + ')'
}
distance3D(c) {
const dx = this.x - c.x
const dy = this.y - c.y
const dz = this.getZ() - c.getZ()
return Math.sqrt(dx * dx + dy * dy + dz * dz)
}
getY() {
return this.y
}
setY(y) {
this.y = y
}
distance(c) {
const dx = this.x - c.x
const dy = this.y - c.y
return Math.sqrt(dx * dx + dy * dy)
}
hashCode() {
let result = 17
result = 37 * result + Coordinate.hashCode(this.x)
result = 37 * result + Coordinate.hashCode(this.y)
return result
}
setCoordinate(other) {
this.x = other.x
this.y = other.y
this.z = other.getZ()
}
get interfaces_() {
return [Comparable, Cloneable, Serializable]
}
}
class DimensionalComparator {
constructor() {
DimensionalComparator.constructor_.apply(this, arguments)
}
static constructor_() {
this._dimensionsToTest = 2
if (arguments.length === 0) {
DimensionalComparator.constructor_.call(this, 2)
} else if (arguments.length === 1) {
const dimensionsToTest = arguments[0]
if (dimensionsToTest !== 2 && dimensionsToTest !== 3) throw new IllegalArgumentException('only 2 or 3 dimensions may be specified')
this._dimensionsToTest = dimensionsToTest
}
}
static compare(a, b) {
if (a < b) return -1
if (a > b) return 1
if (Double.isNaN(a)) {
if (Double.isNaN(b)) return 0
return -1
}
if (Double.isNaN(b)) return 1
return 0
}
compare(c1, c2) {
const compX = DimensionalComparator.compare(c1.x, c2.x)
if (compX !== 0) return compX
const compY = DimensionalComparator.compare(c1.y, c2.y)
if (compY !== 0) return compY
if (this._dimensionsToTest <= 2) return 0
const compZ = DimensionalComparator.compare(c1.getZ(), c2.getZ())
return compZ
}
get interfaces_() {
return [Comparator]
}
}
Coordinate.DimensionalComparator = DimensionalComparator
Coordinate.NULL_ORDINATE = Double.NaN
Coordinate.X = 0
Coordinate.Y = 1
Coordinate.Z = 2
Coordinate.M = 3