Skip to content

Commit e3b81d1

Browse files
committed
Added start of V2 API implementation
1 parent d172be8 commit e3b81d1

9 files changed

Lines changed: 253 additions & 70 deletions

File tree

FROST-Server.Core/src/main/java/de/fraunhofer/iosb/ilt/frostserver/json/serialize/JsonWriter.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.time.OffsetDateTime;
3434
import java.util.Date;
3535
import net.time4j.Moment;
36+
import tools.jackson.core.JacksonException;
3637
import tools.jackson.databind.JacksonModule;
3738
import tools.jackson.databind.ObjectMapper;
3839
import tools.jackson.databind.SerializationFeature;
@@ -98,23 +99,23 @@ public static void addModule(JacksonModule module) {
9899
private JsonWriter() {
99100
}
100101

101-
public static <T extends Entity> void writeEntity(Writer writer, T entity) throws IOException {
102+
public static <T extends Entity> void writeEntity(Writer writer, T entity) throws JacksonException {
102103
getObjectMapper().writeValue(writer, entity);
103104
}
104105

105-
public static <T extends Entity> String writeEntity(T entity) throws IOException {
106+
public static <T extends Entity> String writeEntity(T entity) throws JacksonException {
106107
return getObjectMapper().writeValueAsString(entity);
107108
}
108109

109-
public static void writeEntityCollection(Writer writer, EntitySet entityCollection, Query query) throws IOException {
110+
public static void writeEntityCollection(Writer writer, EntitySet entityCollection, Query query) throws JacksonException {
110111
getObjectMapper().writeValue(writer, new EntitySetResult(entityCollection, query));
111112
}
112113

113-
public static String writeEntityCollection(EntitySet entityCollection, Query query) throws IOException {
114+
public static String writeEntityCollection(EntitySet entityCollection, Query query) throws JacksonException {
114115
return getObjectMapper().writeValueAsString(new EntitySetResult(entityCollection, query));
115116
}
116117

117-
public static void writeObject(Writer writer, Object object) throws IOException {
118+
public static void writeObject(Writer writer, Object object) throws JacksonException {
118119
getObjectMapper().writeValue(writer, object);
119120
}
120121

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,14 +296,15 @@ public CoreSettings getSettings() {
296296
private ServiceResponse executeGetCapabilities(ServiceRequest request, ServiceResponse response) {
297297
final Map<String, Object> result = new LinkedHashMap<>();
298298
final Version version = request.getVersion();
299+
final String serviceRootUrl = request.getQueryDefaults().getServiceRootUrl();
300+
final String path = URI.create(serviceRootUrl + '/' + request.getVersion().urlPart + '/')
301+
.normalize()
302+
.toString();
299303

300304
final List<Map<String, String>> capList = new ArrayList<>();
301305
result.put("value", capList);
302-
final String serviceRootUrl = request.getQueryDefaults().getServiceRootUrl();
303306
for (EntityType entityType : modelRegistry.getEntityTypes(request.getUserPrincipal().isAdmin())) {
304-
String collectionUri = URI.create(serviceRootUrl
305-
+ "/" + version.urlPart
306-
+ "/" + entityType.plural).normalize().toString();
307+
String collectionUri = path + entityType.plural;
307308
capList.add(createCapability(entityType.plural, collectionUri));
308309
}
309310

Plugins/CoreModelV2/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/coremodelv2/PluginCoreModelV2.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,9 @@
1717
*/
1818
package de.fraunhofer.iosb.ilt.frostserver.plugin.coremodelv2;
1919

20-
import static de.fraunhofer.iosb.ilt.frostserver.plugin.coremodel.CoreModelSettings.TAG_ENABLE_CORE_MODEL;
2120
import static de.fraunhofer.iosb.ilt.frostserver.service.InitResult.INIT_DELAY;
2221

23-
import de.fraunhofer.iosb.ilt.frostserver.plugin.coremodel.CoreModelSettings;
22+
import de.fraunhofer.iosb.ilt.frostserver.plugin.coremodel.PluginCoreModel;
2423
import de.fraunhofer.iosb.ilt.frostserver.plugin.modelloader.PluginModelLoader;
2524
import de.fraunhofer.iosb.ilt.frostserver.service.InitResult;
2625
import de.fraunhofer.iosb.ilt.frostserver.service.Plugin;
@@ -30,7 +29,7 @@
3029
import de.fraunhofer.iosb.ilt.frostserver.service.ServiceRequest;
3130
import de.fraunhofer.iosb.ilt.frostserver.settings.CoreSettings;
3231
import de.fraunhofer.iosb.ilt.settings.ConfigDefaults;
33-
import de.fraunhofer.iosb.ilt.settings.Settings;
32+
import de.fraunhofer.iosb.ilt.settings.ConfigProvider;
3433
import de.fraunhofer.iosb.ilt.settings.annotation.DefaultValueBoolean;
3534
import java.util.Arrays;
3635
import java.util.LinkedHashMap;
@@ -44,32 +43,36 @@
4443
/**
4544
* The core data model of STA Version 2.0.
4645
*/
47-
public class PluginCoreModelV2 implements Plugin, PluginRootDocument, ConfigDefaults {
46+
public class PluginCoreModelV2 extends ConfigProvider<PluginCoreModelV2> implements Plugin, PluginRootDocument, ConfigDefaults {
4847

4948
private static final Logger LOGGER = LoggerFactory.getLogger(PluginCoreModelV2.class.getName());
49+
5050
private static final List<String> REQUIREMENTS_CORE_MODEL = Arrays.asList(
5151
"http://www.opengis.net/spec/sensorthings/2.0/req-class/datamodel/core");
5252

5353
public static final String CONFORMANCE_CLASS_CORE_MODEL = "http://www.opengis.net/spec/sensorthings/2.0/req-class/datamodel/core";
5454

55+
public static final String SETTINGS_NAMESPACE = "coreModelV2.";
56+
5557
@DefaultValueBoolean(false)
56-
public static final String TAG_ENABLE_PCMV2 = "coreModelV2.enable";
58+
public static final String TAG_ENABLE = "enable";
5759

58-
private CoreSettings settings;
60+
private CoreSettings coreSettings;
5961
private boolean enabled;
6062

6163
@Override
6264
public InitResult init(CoreSettings settings) {
63-
this.settings = settings;
64-
Settings pluginSettings = settings.getPluginSettings();
65-
boolean enabledV1 = pluginSettings.getBoolean(TAG_ENABLE_CORE_MODEL, CoreModelSettings.class);
66-
enabled = pluginSettings.getBoolean(TAG_ENABLE_PCMV2, PluginCoreModelV2.class);
65+
this.coreSettings = settings;
66+
setSettings(settings.getPluginSettings().getSubSettings(SETTINGS_NAMESPACE));
67+
68+
PluginManager pluginManager = settings.getPluginManager();
69+
boolean enabledV1 = pluginManager.isPluginEnabled(PluginCoreModel.class);
70+
enabled = getBoolean(TAG_ENABLE);
6771
if (enabled) {
6872
if (enabledV1) {
6973
LOGGER.error("Can not enable both CoreModelV1 and CoreModelV2");
7074
return InitResult.INIT_FAILED;
7175
}
72-
final PluginManager pluginManager = settings.getPluginManager();
7376
PluginModelLoader pml = pluginManager.getPlugin(PluginModelLoader.class);
7477
if (pml == null || !pml.isEnabled()) {
7578
LOGGER.warn("PluginModelLoader must be enabled first, delaying initialisation...");

Plugins/CoreModelV2/src/main/java/de/fraunhofer/iosb/ilt/frostserver/plugin/coremodelv2/PluginCoreServiceV2.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import de.fraunhofer.iosb.ilt.frostserver.path.EditFeatures;
3939
import de.fraunhofer.iosb.ilt.frostserver.path.Version;
4040
import de.fraunhofer.iosb.ilt.frostserver.plugin.odata.MetaDataGenerator;
41-
import de.fraunhofer.iosb.ilt.frostserver.plugin.odata.PluginResultFormatOData;
4241
import de.fraunhofer.iosb.ilt.frostserver.plugin.odata.deserialize.JsonReaderOData;
4342
import de.fraunhofer.iosb.ilt.frostserver.plugin.odata.serialize.JsonWriterOdata401;
4443
import de.fraunhofer.iosb.ilt.frostserver.service.InitResult;
@@ -52,8 +51,7 @@
5251
import de.fraunhofer.iosb.ilt.frostserver.util.Constants;
5352
import de.fraunhofer.iosb.ilt.frostserver.util.HttpMethod;
5453
import de.fraunhofer.iosb.ilt.frostserver.util.StringHelper;
55-
import de.fraunhofer.iosb.ilt.settings.ConfigDefaults;
56-
import de.fraunhofer.iosb.ilt.settings.Settings;
54+
import de.fraunhofer.iosb.ilt.settings.ConfigProvider;
5755
import de.fraunhofer.iosb.ilt.settings.annotation.DefaultValueBoolean;
5856
import java.util.Arrays;
5957
import java.util.Collection;
@@ -67,7 +65,9 @@
6765
/**
6866
* The API of STA version 2.0.
6967
*/
70-
public class PluginCoreServiceV2 implements PluginRootDocument, PluginService, ConfigDefaults {
68+
public class PluginCoreServiceV2 extends ConfigProvider<PluginCoreServiceV2> implements PluginRootDocument, PluginService {
69+
70+
private static final Logger LOGGER = LoggerFactory.getLogger(PluginCoreServiceV2.class.getName());
7171

7272
private static final EditFeatures INSERT_STA_20 = new EditFeatures(true, false, false);
7373
private static final EditFeatures UPDATE_STA_20 = new EditFeatures(true, true, true);
@@ -86,22 +86,22 @@ public class PluginCoreServiceV2 implements PluginRootDocument, PluginService, C
8686
.registerSytheticProperty(ModelRegistry.EP_SELFLINK)
8787
.build();
8888

89-
@DefaultValueBoolean(true)
90-
public static final String TAG_ENABLE_CORE_SERVICE_V2 = "coreServiceV2.enable";
89+
public static final String SETTINGS_NAMESPACE = "coreServiceV2.";
9190

92-
private static final Logger LOGGER = LoggerFactory.getLogger(PluginCoreServiceV2.class.getName());
91+
@DefaultValueBoolean(true)
92+
public static final String TAG_ENABLE = "enable";
9393

94-
private CoreSettings settings;
94+
private CoreSettings coreSettings;
9595
private boolean enabled;
9696

9797
@Override
9898
public InitResult init(CoreSettings settings) {
99-
this.settings = settings;
100-
final Settings pluginSettings = settings.getPluginSettings();
101-
enabled = pluginSettings.getBoolean(TAG_ENABLE_CORE_SERVICE_V2, PluginCoreServiceV2.class);
99+
this.coreSettings = settings;
100+
setSettings(settings.getPluginSettings().getSubSettings(SETTINGS_NAMESPACE));
101+
enabled = getBoolean(TAG_ENABLE);
102102
if (enabled) {
103103
settings.getPluginManager().registerPlugin(this);
104-
settings.getPluginManager().registerPlugin(new PluginResultFormatOData());
104+
settings.getPluginManager().registerPlugin(new PluginResultFormatV2());
105105
}
106106
return InitResult.INIT_OK;
107107
}
@@ -181,7 +181,7 @@ public ServiceResponse execute(Service mainService, ServiceRequest request, Serv
181181
request.setJsonReader(new JsonReaderOData(request.getCoreSettings().getModelRegistry(), request.getUserPrincipal()));
182182
switch (request.getRequestType()) {
183183
case REQUEST_TYPE_METADATA:
184-
return new MetaDataGenerator(settings).generateMetaData(request, response);
184+
return new MetaDataGenerator(coreSettings).generateMetaData(request, response);
185185

186186
case CREATE:
187187
case UPDATE_ALL:
@@ -211,17 +211,17 @@ public void modifyServiceDocument(ServiceRequest request, Map<String, Object> re
211211

212212
Map<String, Object> serverSettings = (Map<String, Object>) result.computeIfAbsent(KEY_SERVER_SETTINGS, t -> new LinkedHashMap<>());
213213

214-
final Set<Extension> enabledSettings = settings.getEnabledExtensions();
215-
Set<String> extensionList = new TreeSet<>();
216-
serverSettings.put(KEY_CONFORMANCE_LIST, extensionList);
214+
final Set<Extension> enabledSettings = coreSettings.getEnabledExtensions();
215+
Set<String> extensionList = (Set<String>) serverSettings.computeIfAbsent(KEY_CONFORMANCE_LIST, t -> new TreeSet<>());
217216
for (Extension setting : enabledSettings) {
218217
if (setting.isExposedFeature()) {
219218
extensionList.addAll(setting.getRequirements());
220219
}
221220
}
221+
// ToDo: functions
222+
// ToDo: endpoint bindings
222223

223-
settings.getMqttSettings().fillServerSettings(serverSettings);
224-
224+
coreSettings.getMqttSettings().fillServerSettings(serverSettings);
225225
}
226226

227227
}

0 commit comments

Comments
 (0)