kopia lustrzana https://github.com/bertrik/ttnhabbridge
Add listener information doc, listener telemetry doc, payload telemetry doc.
rodzic
5c906241fe
commit
50f46d6158
|
@ -0,0 +1,61 @@
|
||||||
|
package nl.sikken.bertrik.hab.habitat.docs;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author bertrik
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class ListenerDoc {
|
||||||
|
|
||||||
|
private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
|
||||||
|
private final JsonNodeFactory factory = new JsonNodeFactory(false);
|
||||||
|
|
||||||
|
private final String type;
|
||||||
|
private final Date date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param type the document type
|
||||||
|
* @param date the date
|
||||||
|
*/
|
||||||
|
protected ListenerDoc(String type, Date date) {
|
||||||
|
this.type = type;
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the JSON representation
|
||||||
|
*/
|
||||||
|
public String format() {
|
||||||
|
final ObjectNode topNode = factory.objectNode();
|
||||||
|
topNode.set("type", factory.textNode(type));
|
||||||
|
topNode.set("time_created", factory.textNode(dateFormat.format(date)));
|
||||||
|
topNode.set("time_uploaded", factory.textNode(dateFormat.format(date)));
|
||||||
|
topNode.set("data", createDataNode());
|
||||||
|
|
||||||
|
return topNode.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the json node factory
|
||||||
|
*/
|
||||||
|
protected final JsonNodeFactory factory() {
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the sub-type specific 'data' part of the listener doc.
|
||||||
|
*
|
||||||
|
* @return the 'data' node contents
|
||||||
|
*/
|
||||||
|
abstract JsonNode createDataNode();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package nl.sikken.bertrik.hab.habitat.docs;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener information doc.
|
||||||
|
*/
|
||||||
|
public final class ListenerInformationDoc extends ListenerDoc {
|
||||||
|
|
||||||
|
private final String callSign;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param date the date
|
||||||
|
* @param callSign the listener call sign
|
||||||
|
*/
|
||||||
|
public ListenerInformationDoc(Date date, String callSign) {
|
||||||
|
super("listener_information", date);
|
||||||
|
this.callSign = callSign;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected JsonNode createDataNode() {
|
||||||
|
final ObjectNode node = factory().objectNode();
|
||||||
|
node.set("callsign", factory().textNode(callSign));
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package nl.sikken.bertrik.hab.habitat.docs;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
import nl.sikken.bertrik.hab.habitat.IHabReceiver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener telemetry doc.
|
||||||
|
*/
|
||||||
|
public final class ListenerTelemetryDoc extends ListenerDoc {
|
||||||
|
|
||||||
|
private final IHabReceiver receiver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param date the date
|
||||||
|
* @param receiver the receiver info
|
||||||
|
*/
|
||||||
|
public ListenerTelemetryDoc(Date date, IHabReceiver receiver) {
|
||||||
|
super("listener_telemetry", date);
|
||||||
|
this.receiver = receiver;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected JsonNode createDataNode() {
|
||||||
|
final ObjectNode node = factory().objectNode();
|
||||||
|
node.set("callsign", factory().textNode(receiver.getCallsign()));
|
||||||
|
node.set("latitude", factory().numberNode(receiver.getLocation().getLat()));
|
||||||
|
node.set("longitude", factory().numberNode(receiver.getLocation().getLon()));
|
||||||
|
node.set("altitude", factory().numberNode(receiver.getLocation().getAlt()));
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package nl.sikken.bertrik.hab.habitat.docs;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author bertrik
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public final class PayloadTelemetryDoc {
|
||||||
|
|
||||||
|
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
|
||||||
|
|
||||||
|
private final String callSign;
|
||||||
|
private final byte[] rawBytes;
|
||||||
|
private final Date dateCreated;
|
||||||
|
private final Date dateUploaded;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
* @param date the date
|
||||||
|
* @param callSign the receiver call sign
|
||||||
|
* @param rawBytes the raw telemetry string as bytes
|
||||||
|
*/
|
||||||
|
public PayloadTelemetryDoc(Date date, String callSign, byte[] rawBytes) {
|
||||||
|
this.callSign = callSign;
|
||||||
|
this.rawBytes = rawBytes;
|
||||||
|
this.dateCreated = date;
|
||||||
|
this.dateUploaded = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the payload telemetry doc as JSON string
|
||||||
|
*/
|
||||||
|
public String format() {
|
||||||
|
final JsonNodeFactory factory = new JsonNodeFactory(false);
|
||||||
|
final ObjectNode topNode = factory.objectNode();
|
||||||
|
|
||||||
|
// create data node
|
||||||
|
final ObjectNode dataNode = factory.objectNode();
|
||||||
|
dataNode.set("_raw", factory.binaryNode(rawBytes));
|
||||||
|
|
||||||
|
// create receivers node
|
||||||
|
final ObjectNode receiverNode = factory.objectNode();
|
||||||
|
receiverNode.set("time_created", factory.textNode(dateFormat.format(dateCreated)));
|
||||||
|
receiverNode.set("time_uploaded", factory.textNode(dateFormat.format(dateUploaded)));
|
||||||
|
final ObjectNode receiversNode = factory.objectNode();
|
||||||
|
receiversNode.set(callSign, receiverNode);
|
||||||
|
|
||||||
|
// put it together in the top node
|
||||||
|
topNode.set("data", dataNode);
|
||||||
|
topNode.set("receivers", receiversNode);
|
||||||
|
|
||||||
|
return topNode.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package nl.sikken.bertrik.hab.habitat.docs;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit tests for ListenerInfoDoc
|
||||||
|
*/
|
||||||
|
public final class ListenerInfoDocTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies basic formatting.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFormat() {
|
||||||
|
final Date date = new Date();
|
||||||
|
final ListenerInformationDoc doc = new ListenerInformationDoc(date, "BERTRIK");
|
||||||
|
final String json = doc.format();
|
||||||
|
|
||||||
|
Assert.assertNotNull(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package nl.sikken.bertrik.hab.habitat.docs;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import nl.sikken.bertrik.hab.habitat.IHabReceiver;
|
||||||
|
import nl.sikken.bertrik.hab.habitat.Location;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit tests for ListenerTelemetryDoc.
|
||||||
|
*/
|
||||||
|
public final class ListenerTelemetryDocTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verifies basic formatting.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFormat() {
|
||||||
|
final Date date = new Date();
|
||||||
|
final IHabReceiver receiver = createHabReceiver("BERTRIK", new Location(1.23, 4.56, 7.8));
|
||||||
|
final ListenerTelemetryDoc doc = new ListenerTelemetryDoc(date, receiver);
|
||||||
|
final String json = doc.format();
|
||||||
|
|
||||||
|
Assert.assertNotNull(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IHabReceiver createHabReceiver(String callSign, Location location) {
|
||||||
|
return new IHabReceiver() {
|
||||||
|
@Override
|
||||||
|
public Location getLocation() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCallsign() {
|
||||||
|
return callSign;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Ładowanie…
Reference in New Issue