use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueTimeWriter in project ma-modules-public by infiniteautomation.
the class PointValueTimeStreamCsvMessageConverter method writeInternal.
@Override
protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
MediaType contentType = outputMessage.getHeaders().getContentType();
JsonEncoding encoding = getJsonEncoding(contentType);
try {
PointValueTimeStream<?, ?> stream = (PointValueTimeStream<?, ?>) object;
stream.setContentType(StreamContentType.CSV);
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(outputMessage.getBody(), encoding);
// Set the schema
CsvSchema.Builder builder = CsvSchema.builder();
builder.setUseHeader(true);
// Setup our rendering parameters
LatestQueryInfo info = stream.getQueryInfo();
if (stream instanceof MultiPointTimeRangeDatabaseStream || stream instanceof MultiPointLatestDatabaseStream) {
if (info.isSingleArray()) {
if (info.isMultiplePointsPerArray()) {
Map<Integer, DataPointVO> voMap = stream.getVoMap();
Iterator<Integer> it = voMap.keySet().iterator();
boolean firstTimestamp = true;
while (it.hasNext()) {
String xid = voMap.get(it.next()).getXid();
for (PointValueField field : info.getFields()) {
if (field == PointValueField.TIMESTAMP) {
if (firstTimestamp)
field.createColumn(builder, xid);
firstTimestamp = false;
} else
field.createColumn(builder, xid);
}
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
} else if (stream instanceof MultiDataPointStatisticsQuantizerStream) {
if (stream.getQueryInfo().isSingleArray()) {
if (stream.getQueryInfo().isMultiplePointsPerArray()) {
Map<Integer, DataPointVO> voMap = stream.getVoMap();
Iterator<Integer> it = voMap.keySet().iterator();
boolean firstTimestamp = true;
while (it.hasNext()) {
String xid = voMap.get(it.next()).getXid();
for (PointValueField field : info.getFields()) {
if (field == PointValueField.TIMESTAMP) {
if (firstTimestamp)
field.createColumn(builder, xid);
firstTimestamp = false;
} else if (field == PointValueField.VALUE) {
if (info.getRollup() == RollupEnum.ALL) {
for (RollupEnum rollup : getAllRollups()) {
builder.addColumn(xid + PointValueTimeWriter.DOT + rollup.name(), ColumnType.NUMBER_OR_STRING);
}
} else {
field.createColumn(builder, xid);
}
} else {
field.createColumn(builder, xid);
}
}
}
} else {
// Single array
if (info.getRollup() == RollupEnum.ALL) {
for (RollupEnum rollup : getAllRollups()) {
builder.addColumn(rollup.name(), ColumnType.NUMBER_OR_STRING);
}
for (PointValueField field : info.getFields()) {
if (field == PointValueField.VALUE)
continue;
field.createColumn(builder, null);
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
}
} else {
if (info.getRollup() == RollupEnum.ALL) {
for (RollupEnum rollup : getAllRollups()) {
builder.addColumn(rollup.name(), ColumnType.NUMBER_OR_STRING);
}
for (PointValueField field : info.getFields()) {
if (field == PointValueField.VALUE)
continue;
field.createColumn(builder, null);
}
} else {
for (PointValueField field : info.getFields()) field.createColumn(builder, null);
}
}
}
generator.setSchema(builder.build());
PointValueTimeWriter writer = new PointValueTimeCsvWriter(stream.getQueryInfo(), stream.getVoMap().size(), generator);
stream.start(writer);
stream.streamData(writer);
stream.finish(writer);
generator.flush();
} catch (JsonProcessingException ex) {
throw new HttpMessageNotWritableException("Could not write content: " + ex.getMessage(), ex);
}
}
use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueTimeWriter in project ma-modules-public by infiniteautomation.
the class PointValueTimeStreamJsonSerializer method serialize.
/* (non-Javadoc)
* @see com.fasterxml.jackson.databind.JsonSerializer#serialize(java.lang.Object, com.fasterxml.jackson.core.JsonGenerator, com.fasterxml.jackson.databind.SerializerProvider)
*/
@Override
public void serialize(PointValueTimeStream<T, INFO> value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
PointValueTimeWriter writer = new PointValueTimeJsonWriter(value.getQueryInfo(), jgen);
value.setContentType(StreamContentType.JSON);
value.start(writer);
value.streamData(writer);
value.finish(writer);
jgen.flush();
}
use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueTimeWriter in project ma-modules-public by infiniteautomation.
the class MultiPointSimplifyTimeRangeDatabaseStream method finish.
/* (non-Javadoc)
* @see com.infiniteautomation.mango.rest.v2.model.pointValue.query.MultiPointLatestDatabaseStream#finish(com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueTimeWriter)
*/
@Override
public void finish(PointValueTimeWriter writer) throws IOException {
// Write out the values after simplifying
Iterator<Integer> it = valuesMap.keySet().iterator();
if (info.isSingleArray() && voMap.size() > 1) {
List<DataPointVOPointValueTimeBookend> sorted = new ArrayList<>();
while (it.hasNext()) {
Integer id = it.next();
BookendPair pair = bookendMap.get(id);
if (pair != null && pair.startBookend != null)
sorted.add(pair.startBookend);
sorted.addAll(simplify(valuesMap.get(id)));
if (// Can be null bookend if limit is hit
pair != null && pair.endBookend != null)
sorted.add(pair.endBookend);
}
// Sort the Sorted List
Collections.sort(sorted, new Comparator<DataPointVOPointValueTimeBookend>() {
@Override
public int compare(DataPointVOPointValueTimeBookend o1, DataPointVOPointValueTimeBookend o2) {
return o1.getPvt().compareTo(o2.getPvt());
}
});
for (DataPointVOPointValueTimeBookend value : sorted) super.writeValue(value);
} else {
while (it.hasNext()) {
Integer id = it.next();
List<DataPointVOPointValueTimeBookend> values = simplify(valuesMap.get(id));
BookendPair pair = bookendMap.get(id);
if (pair != null && pair.startBookend != null)
super.writeValue(pair.startBookend);
for (DataPointVOPointValueTimeBookend value : values) super.writeValue(value);
if (// Can be null bookend if limit is hit
pair != null && pair.endBookend != null)
super.writeValue(pair.endBookend);
}
}
super.finish(writer);
}
use of com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueTimeWriter in project ma-modules-public by infiniteautomation.
the class MultiPointSimplifyLatestDatabaseStream method finish.
/* (non-Javadoc)
* @see com.infiniteautomation.mango.rest.v2.model.pointValue.query.MultiPointLatestDatabaseStream#finish(com.infiniteautomation.mango.rest.v2.model.pointValue.PointValueTimeWriter)
*/
@Override
public void finish(PointValueTimeWriter writer) throws IOException {
// Write out the values after simplifying
Iterator<Integer> it = valuesMap.keySet().iterator();
if (info.isSingleArray() && voMap.size() > 1) {
List<DataPointVOPointValueTimeBookend> sorted = new ArrayList<>();
while (it.hasNext()) sorted.addAll(simplify(valuesMap.get(it.next())));
// Sort the Sorted List
Collections.sort(sorted, new Comparator<DataPointVOPointValueTimeBookend>() {
@Override
public int compare(DataPointVOPointValueTimeBookend o1, DataPointVOPointValueTimeBookend o2) {
return o1.getPvt().compareTo(o2.getPvt());
}
});
for (DataPointVOPointValueTimeBookend value : sorted) super.writeValue(value);
} else {
while (it.hasNext()) {
List<DataPointVOPointValueTimeBookend> values = simplify(valuesMap.get(it.next()));
for (DataPointVOPointValueTimeBookend value : values) super.writeValue(value);
}
}
super.finish(writer);
}
Aggregations