Add listener information doc, listener telemetry doc, payload telemetry doc.

koppelting
Bertrik Sikken 2017-08-15 23:12:37 +02:00
rodzic 5c906241fe
commit 50f46d6158
6 zmienionych plików z 260 dodań i 0 usunięć

Wyświetl plik

@ -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();
}

Wyświetl plik

@ -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;
}
}

Wyświetl plik

@ -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;
}
}

Wyświetl plik

@ -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();
}
}

Wyświetl plik

@ -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);
}
}

Wyświetl plik

@ -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;
}
};
}
}