Skip to content

Commit a254b98

Browse files
committed
Improved STA v2 landing page
1 parent 17dfda8 commit a254b98

7 files changed

Lines changed: 160 additions & 66 deletions

File tree

FROST-Server.Core.Model/src/main/java/de/fraunhofer/iosb/ilt/frostserver/extensions/Extension.java

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,55 +17,28 @@
1717
*/
1818
package de.fraunhofer.iosb.ilt.frostserver.extensions;
1919

20-
import java.util.Arrays;
21-
import java.util.Collections;
22-
import java.util.HashSet;
23-
import java.util.Set;
24-
2520
/**
26-
*
27-
* @author scf
21+
* The list of hard-coded functionality.
2822
*/
2923
public enum Extension {
30-
CORE(
31-
"http://www.opengis.net/spec/iot_sensing/1.1/req/resource-path/resource-path-to-entities",
32-
"http://www.opengis.net/spec/iot_sensing/1.1/req/request-data",
33-
"http://www.opengis.net/spec/iot_sensing/1.1/req/create-update-delete",
34-
"https://fraunhoferiosb.github.io/FROST-Server/extensions/DeepSelect.html",
35-
"https://fraunhoferiosb.github.io/FROST-Server/extensions/SelectDistinct.html",
36-
"https://fraunhoferiosb.github.io/FROST-Server/extensions/ResponseMetadata.html"),
37-
MQTT(
38-
"http://www.opengis.net/spec/iot_sensing/1.1/req/create-observations-via-mqtt/observations-creation",
39-
"http://www.opengis.net/spec/iot_sensing/1.1/req/receive-updates-via-mqtt/receive-updates"),
40-
ENTITY_LINKING(
41-
"https://github.com/INSIDE-information-systems/SensorThingsAPI/blob/master/EntityLinking/Linking.md#NavigationLinks",
42-
"https://github.com/INSIDE-information-systems/SensorThingsAPI/blob/master/EntityLinking/Linking.md#Expand",
43-
"https://github.com/INSIDE-information-systems/SensorThingsAPI/blob/master/EntityLinking/Linking.md#Filter"),
44-
FILTERED_DELETES("https://fraunhoferiosb.github.io/FROST-Server/extensions/FilteredDelete.html"),
45-
MQTT_EXPAND("https://fraunhoferiosb.github.io/FROST-Server/extensions/MqttExpand.html"),
46-
MQTT_FILTER("https://fraunhoferiosb.github.io/FROST-Server/extensions/MqttFilter.html");
24+
CORE,
25+
ENTITY_LINKING,
26+
FILTERED_DELETES,
27+
MQTT,
28+
MQTT_EXPAND,
29+
MQTT_FILTER;
4730

4831
/**
4932
* Flag indicating the server feature should be exposed on the index page.
5033
*/
5134
private final boolean exposedFeature;
52-
/**
53-
* The requirements implemented by this extension.
54-
*/
55-
private final Set<String> requirements;
5635

57-
private Extension(String... requirements) {
36+
private Extension() {
5837
this.exposedFeature = true;
59-
Set<String> reqs = new HashSet<>(Arrays.asList(requirements));
60-
this.requirements = Collections.unmodifiableSet(reqs);
6138
}
6239

6340
public boolean isExposedFeature() {
6441
return exposedFeature;
6542
}
6643

67-
public Set<String> getRequirements() {
68-
return requirements;
69-
}
70-
7144
}

FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/mqtt/subscription/SubscriptionFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
*/
1818
package de.fraunhofer.iosb.ilt.frostserver.mqtt.subscription;
1919

20+
import static de.fraunhofer.iosb.ilt.frostserver.util.Constants.URI_PATH_SEP;
21+
2022
import de.fraunhofer.iosb.ilt.frostserver.mqtt.MqttManager;
2123
import de.fraunhofer.iosb.ilt.frostserver.parser.path.PathParser;
2224
import de.fraunhofer.iosb.ilt.frostserver.path.PathElementEntity;
@@ -33,13 +35,11 @@
3335
import org.slf4j.LoggerFactory;
3436

3537
/**
36-
*
37-
* @author jab
38+
* Factory for subscription instances.
3839
*/
3940
public class SubscriptionFactory {
4041

4142
private static final Logger LOGGER = LoggerFactory.getLogger(SubscriptionFactory.class);
42-
private static final String URI_PATH_SEP = "/";
4343

4444
private final CoreSettings settings;
4545

FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/service/Service.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ public class Service implements AutoCloseable {
112112
* object in the index document.
113113
*/
114114
public static final String KEY_CONFORMANCE_LIST = "conformance";
115+
/**
116+
* The name of the list of implemented functions in the server settings
117+
* object in the index document.
118+
*/
119+
public static final String KEY_FUNCTIONS = "functions";
115120

116121
private static final Logger LOGGER = LoggerFactory.getLogger(Service.class);
117122
private static final String LABEL_REQUEST_TYPE = "requestType";

FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/settings/MqttSettings.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import de.fraunhofer.iosb.ilt.frostserver.extensions.Extension;
2323
import de.fraunhofer.iosb.ilt.frostserver.path.Version;
24+
import de.fraunhofer.iosb.ilt.frostserver.util.StringHelper;
2425
import de.fraunhofer.iosb.ilt.settings.ConfigDefaults;
2526
import de.fraunhofer.iosb.ilt.settings.Settings;
2627
import de.fraunhofer.iosb.ilt.settings.annotation.DefaultValue;
@@ -32,9 +33,7 @@
3233
import java.util.ArrayList;
3334
import java.util.Arrays;
3435
import java.util.Collections;
35-
import java.util.HashMap;
3636
import java.util.List;
37-
import java.util.Map;
3837
import org.slf4j.Logger;
3938
import org.slf4j.LoggerFactory;
4039

@@ -184,7 +183,14 @@ private void init(CoreSettings coreSettings, Settings customSettings) {
184183
}
185184
}
186185

187-
private void searchExposedEndpoints(CoreSettings coreSettings) {
186+
public List<String> getEndpoints() {
187+
if (StringHelper.isNullOrEmpty(endpoints)) {
188+
searchExposedEndpoints();
189+
}
190+
return endpoints;
191+
}
192+
193+
private void searchExposedEndpoints() {
188194
if (!enableMqtt) {
189195
endpoints = Collections.emptyList();
190196
return;
@@ -208,19 +214,6 @@ private void searchExposedEndpoints(CoreSettings coreSettings) {
208214
}
209215
}
210216

211-
public void fillServerSettings(Map<String, Object> target) {
212-
if (enableMqtt) {
213-
if (endpoints == null) {
214-
searchExposedEndpoints(coreSettings);
215-
}
216-
for (String requirement : Extension.MQTT.getRequirements()) {
217-
Map<String, Object> mqttSettings = new HashMap<>();
218-
mqttSettings.put("endpoints", endpoints);
219-
target.put(requirement, mqttSettings);
220-
}
221-
}
222-
}
223-
224217
public boolean isEnableMqtt() {
225218
return enableMqtt;
226219
}

FROST-Server.Util/src/main/java/de/fraunhofer/iosb/ilt/frostserver/util/Constants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class Constants {
4242

4343
public static final String REQUEST_PARAM_FORMAT = "$format";
4444

45+
public static final String URI_PATH_SEP = "/";
46+
4547
public static final String VALUE_ID_TYPE_LONG = "LONG";
4648
public static final String VALUE_ID_TYPE_STRING = "STRING";
4749
public static final String VALUE_ID_TYPE_UUID = "UUID";

Plugins/CoreModel/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/coremodel/PluginCoreService.java

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,20 @@
4646
import de.fraunhofer.iosb.ilt.frostserver.service.ServiceRequest;
4747
import de.fraunhofer.iosb.ilt.frostserver.service.ServiceResponse;
4848
import de.fraunhofer.iosb.ilt.frostserver.settings.CoreSettings;
49+
import de.fraunhofer.iosb.ilt.frostserver.settings.MqttSettings;
4950
import de.fraunhofer.iosb.ilt.frostserver.util.HttpMethod;
5051
import de.fraunhofer.iosb.ilt.frostserver.util.StringHelper;
5152
import de.fraunhofer.iosb.ilt.settings.ConfigDefaults;
5253
import de.fraunhofer.iosb.ilt.settings.Settings;
5354
import de.fraunhofer.iosb.ilt.settings.annotation.DefaultValueBoolean;
5455
import java.util.Arrays;
5556
import java.util.Collection;
57+
import java.util.HashMap;
5658
import java.util.LinkedHashMap;
59+
import java.util.List;
5760
import java.util.Map;
5861
import java.util.Set;
5962
import java.util.TreeSet;
60-
import org.slf4j.Logger;
61-
import org.slf4j.LoggerFactory;
6263

6364
/**
6465
* The API of STA version 1.0 and 1.1.
@@ -96,7 +97,30 @@ public class PluginCoreService implements PluginRootDocument, PluginService, Con
9697
@DefaultValueBoolean(true)
9798
public static final String TAG_ENABLE_CORE_SERVICE = "coreService.enable";
9899

99-
private static final Logger LOGGER = LoggerFactory.getLogger(PluginCoreService.class.getName());
100+
private static final Map<Extension, List<String>> CONFORMANCE_BY_EXTENSION = new HashMap<>();
101+
102+
static {
103+
CONFORMANCE_BY_EXTENSION.put(Extension.CORE, Arrays.asList(
104+
"http://www.opengis.net/spec/iot_sensing/1.1/req/resource-path/resource-path-to-entities",
105+
"http://www.opengis.net/spec/iot_sensing/1.1/req/request-data",
106+
"http://www.opengis.net/spec/iot_sensing/1.1/req/create-update-delete",
107+
"https://fraunhoferiosb.github.io/FROST-Server/extensions/DeepSelect.html",
108+
"https://fraunhoferiosb.github.io/FROST-Server/extensions/SelectDistinct.html",
109+
"https://fraunhoferiosb.github.io/FROST-Server/extensions/ResponseMetadata.html"));
110+
CONFORMANCE_BY_EXTENSION.put(Extension.MQTT, Arrays.asList(
111+
"http://www.opengis.net/spec/iot_sensing/1.1/req/create-observations-via-mqtt/observations-creation",
112+
"http://www.opengis.net/spec/iot_sensing/1.1/req/receive-updates-via-mqtt/receive-updates"));
113+
CONFORMANCE_BY_EXTENSION.put(Extension.MQTT_EXPAND, Arrays.asList(
114+
"https://fraunhoferiosb.github.io/FROST-Server/extensions/MqttExpand.html"));
115+
CONFORMANCE_BY_EXTENSION.put(Extension.MQTT_FILTER, Arrays.asList(
116+
"https://fraunhoferiosb.github.io/FROST-Server/extensions/MqttFilter.html"));
117+
CONFORMANCE_BY_EXTENSION.put(Extension.FILTERED_DELETES, Arrays.asList(
118+
"https://fraunhoferiosb.github.io/FROST-Server/extensions/FilteredDelete.html"));
119+
CONFORMANCE_BY_EXTENSION.put(Extension.ENTITY_LINKING, Arrays.asList(
120+
"https://github.com/INSIDE-information-systems/SensorThingsAPI/blob/master/EntityLinking/Linking.md#NavigationLinks",
121+
"https://github.com/INSIDE-information-systems/SensorThingsAPI/blob/master/EntityLinking/Linking.md#Expand",
122+
"https://github.com/INSIDE-information-systems/SensorThingsAPI/blob/master/EntityLinking/Linking.md#Filter"));
123+
}
100124

101125
private boolean enabled;
102126
private CoreSettings settings;
@@ -131,10 +155,26 @@ public void modifyServiceDocument(ServiceRequest request, Map<String, Object> re
131155
serverSettings.put(KEY_CONFORMANCE_LIST, extensionList);
132156
for (Extension setting : enabledSettings) {
133157
if (setting.isExposedFeature()) {
134-
extensionList.addAll(setting.getRequirements());
158+
final List<String> confList = CONFORMANCE_BY_EXTENSION.get(setting);
159+
if (!StringHelper.isNullOrEmpty(confList)) {
160+
extensionList.addAll(confList);
161+
}
162+
}
163+
}
164+
addMqttData(serverSettings);
165+
}
166+
167+
private void addMqttData(Map<String, Object> target) {
168+
final MqttSettings mqttSettings = settings.getMqttSettings();
169+
boolean enableMqtt = mqttSettings.isEnableMqtt();
170+
if (enableMqtt) {
171+
List<String> endpoints = mqttSettings.getEndpoints();
172+
for (String requirement : CONFORMANCE_BY_EXTENSION.get(Extension.MQTT)) {
173+
Map<String, Object> mqttData = new HashMap<>();
174+
mqttData.put("endpoints", endpoints);
175+
target.put(requirement, mqttData);
135176
}
136177
}
137-
settings.getMqttSettings().fillServerSettings(serverSettings);
138178
}
139179

140180
@Override

0 commit comments

Comments
 (0)