Skip to content

Commit 5f59b5b

Browse files
[CSAPI] Update JSON property names for control streams and commands (#318). Closes #272
1 parent 0c56710 commit 5f59b5b

File tree

7 files changed

+93
-10
lines changed

7 files changed

+93
-10
lines changed

sensorhub-core/src/main/java/org/sensorhub/api/command/CommandStreamInfo.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public class CommandStreamInfo implements ICommandStreamInfo
4040
protected DataEncoding recordEncoding;
4141
protected DataComponent resultStruct;
4242
protected DataEncoding resultEncoding;
43+
protected DataComponent feasibilityResultStruct;
44+
protected DataEncoding feasibilityResultEncoding;
4345

4446

4547
@Override
@@ -118,6 +120,14 @@ public DataEncoding getResultEncoding()
118120
return resultEncoding;
119121
}
120122

123+
@Override
124+
public DataComponent getFeasibilityResultStructure() {
125+
return feasibilityResultStruct;
126+
}
127+
128+
public DataEncoding getFeasibilityResultEncoding() {
129+
return feasibilityResultEncoding;
130+
}
121131

122132
@Override
123133
public boolean hasResult()
@@ -221,6 +231,16 @@ public B withValidTime(TimeExtent validTime)
221231
return (B)this;
222232
}
223233

234+
public B withFeasibilityResultDescription(DataComponent feasibilityResultStruct) {
235+
instance.feasibilityResultStruct = feasibilityResultStruct;
236+
return (B)this;
237+
}
238+
239+
public B withFeasibilityResultEncoding(DataEncoding feasibilityResultEncoding) {
240+
instance.feasibilityResultEncoding = feasibilityResultEncoding;
241+
return (B)this;
242+
}
243+
224244

225245
@Override
226246
public T build()

sensorhub-core/src/main/java/org/sensorhub/api/command/ICommandStreamInfo.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,28 @@ default boolean hasInlineResult()
113113
* null if no inline result is generated by this command channel.
114114
*/
115115
DataEncoding getResultEncoding();
116-
117-
116+
117+
/**
118+
* @return True if the control stream generate feasibility information
119+
* for commands, false otherwise
120+
*/
121+
default boolean hasFeasibilityResult()
122+
{
123+
return getFeasibilityResultStructure() != null;
124+
}
125+
126+
/**
127+
* @return The structure of the feasibility result data, or null if no
128+
* feasibility information is generated by this command channel.
129+
*/
130+
DataComponent getFeasibilityResultStructure();
131+
132+
/**
133+
* @return The recommended encoding for the feasibility result data, or
134+
* null if no feasibility information is generated by this command channel.
135+
*/
136+
DataEncoding getFeasibilityResultEncoding();
137+
118138
/**
119139
* @return The full name of the controlstream combining the system UID and the input name
120140
*/

sensorhub-core/src/main/java/org/sensorhub/impl/datastore/command/CommandStreamInfoWrapper.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,15 @@ public DataEncoding getResultEncoding()
123123
{
124124
return delegate.getResultEncoding();
125125
}
126+
127+
@Override
128+
public DataComponent getFeasibilityResultStructure()
129+
{
130+
return delegate.getFeasibilityResultStructure();
131+
}
132+
133+
@Override
134+
public DataEncoding getFeasibilityResultEncoding() {
135+
return delegate.getFeasibilityResultEncoding();
136+
}
126137
}

sensorhub-core/src/main/java/org/sensorhub/impl/datastore/mem/InMemoryCommandStreamStore.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import java.util.concurrent.ConcurrentSkipListMap;
2828
import java.util.concurrent.ConcurrentSkipListSet;
2929
import java.util.stream.Stream;
30+
31+
import net.opengis.swe.v20.DataComponent;
3032
import org.sensorhub.api.command.ICommandStreamInfo;
3133
import org.sensorhub.api.common.BigId;
3234
import org.sensorhub.api.datastore.DataStoreException;

sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandBindingJson.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,16 +154,18 @@ public void serialize(BigId key, ICommandData cmd, boolean showLinks, JsonWriter
154154
writer.name("id").value(cmdId);
155155
}
156156

157-
writer.name("control@id").value(controlId);
157+
writer.name("controlstream@id").value(controlId);
158158

159159
if (cmd.hasFoi())
160160
{
161161
var foiId = idEncoders.getFoiIdEncoder().encodeID(cmd.getFoiID());
162-
writer.name("foi@id").value(foiId);
162+
writer.name("samplingFeature@id").value(foiId);
163163
}
164+
165+
// TODO: needs "procedure@link" referencing the associated procdure
164166

165167
writer.name("issueTime").value(cmd.getIssueTime().toString());
166-
writer.name("userId").value(cmd.getSenderID());
168+
writer.name("sender").value(cmd.getSenderID());
167169

168170
// print out current status
169171
if (key != null)
@@ -174,11 +176,11 @@ public void serialize(BigId key, ICommandData cmd, boolean showLinks, JsonWriter
174176
.build())
175177
.findFirst().orElse(null);
176178
if (status != null)
177-
writer.name("status").value(status.getStatusCode().toString());
179+
writer.name("currentStatus").value(status.getStatusCode().toString());
178180
}
179181

180182
// create or reuse existing params writer and write param data
181-
writer.name("params");
183+
writer.name("parameters");
182184
var paramWriter = paramsWriters.computeIfAbsent(cmd.getCommandStreamID(),
183185
k -> getSweCommonWriter(k, writer, ctx.getPropertyFilter()) );
184186

sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/task/CommandStreamSchemaBindingJson.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ public ICommandStreamInfo deserialize(JsonReader reader) throws IOException
7575
{
7676
DataComponent commandStruct = null;
7777
DataComponent resultStruct = null;
78+
DataComponent feasibilityResultStruct = null;
7879
DataEncoding commandEncoding = new TextEncodingImpl();
7980
DataEncoding resultEncoding = new TextEncodingImpl();
81+
DataEncoding feasibilityResultEncoding = new TextEncodingImpl();
8082

8183
try
8284
{
@@ -89,7 +91,7 @@ public ICommandStreamInfo deserialize(JsonReader reader) throws IOException
8991
{
9092
var prop = reader.nextName();
9193

92-
if ("paramsSchema".equals(prop))
94+
if ("parametersSchema".equals(prop))
9395
{
9496
commandStruct = sweBindings.readDataComponent(reader);
9597
commandStruct.setName(SWECommonUtils.NO_NAME);
@@ -107,6 +109,16 @@ else if ("resultEncoding".equals(prop))
107109
{
108110
resultEncoding = sweBindings.readEncoding(reader);
109111
}
112+
else if("feasibilityResultSchema".equals(prop))
113+
{
114+
// TODO: feasibility results are dropped currently
115+
feasibilityResultStruct = sweBindings.readDataComponent(reader);
116+
feasibilityResultStruct.setName(SWECommonUtils.NO_NAME);
117+
}
118+
else if("feasibilityResultEncoding".equals(prop))
119+
{
120+
feasibilityResultEncoding = sweBindings.readEncoding(reader);
121+
}
110122
else
111123
reader.skipValue();
112124
}
@@ -128,6 +140,8 @@ else if ("resultEncoding".equals(prop))
128140
.withRecordEncoding(commandEncoding)
129141
.withResultDescription(resultStruct)
130142
.withResultEncoding(resultEncoding)
143+
.withFeasibilityResultDescription(feasibilityResultStruct)
144+
.withFeasibilityResultEncoding(feasibilityResultEncoding)
131145
.build();
132146
}
133147

@@ -141,7 +155,7 @@ public void serialize(CommandStreamKey key, ICommandStreamInfo dsInfo, boolean s
141155
// param structure & encoding
142156
try
143157
{
144-
writer.name("paramsSchema");
158+
writer.name("parametersSchema");
145159
sweBindings.writeDataComponent(writer, dsInfo.getRecordStructure(), false);
146160
}
147161
catch (Exception e)
@@ -162,6 +176,20 @@ public void serialize(CommandStreamKey key, ICommandStreamInfo dsInfo, boolean s
162176
throw new IOException("Error writing command structure", e);
163177
}
164178
}
179+
180+
// feasibility result schema
181+
if (dsInfo.hasFeasibilityResult())
182+
{
183+
try
184+
{
185+
writer.name("feasibilityResultSchema");
186+
sweBindings.writeDataComponent(writer, dsInfo.getFeasibilityResultStructure(), false);
187+
}
188+
catch (Exception e)
189+
{
190+
throw new IOException("Error writing feasibility result structure", e);
191+
}
192+
}
165193

166194
writer.endObject();
167195
writer.flush();

sensorhub-service-consys/src/test/java/org/sensorhub/impl/service/consys/TestControlStreams.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ protected JsonObject createControlJson(DataComponent paramStruct) throws Excepti
109109
{
110110
var sweBindings = new SWEJsonBindings();
111111
writer.name("schema").beginObject();
112-
writer.name("paramsSchema");
112+
writer.name("parametersSchema");
113113
sweBindings.writeDataComponent(writer, paramStruct, false);
114114

115115
writer.endObject();

0 commit comments

Comments
 (0)