2929import static de .fraunhofer .iosb .ilt .frostserver .service .RequestTypeUtils .UPDATE_ALL ;
3030import static de .fraunhofer .iosb .ilt .frostserver .service .RequestTypeUtils .UPDATE_CHANGES ;
3131import static de .fraunhofer .iosb .ilt .frostserver .service .RequestTypeUtils .UPDATE_CHANGESET ;
32+ import static de .fraunhofer .iosb .ilt .frostserver .service .Service .KEY_CONFORMANCE_LIST ;
33+ import static de .fraunhofer .iosb .ilt .frostserver .service .Service .KEY_SERVER_SETTINGS ;
3234import static de .fraunhofer .iosb .ilt .frostserver .util .Constants .CONTENT_TYPE_APPLICATION_JSONPATCH ;
3335import static de .fraunhofer .iosb .ilt .frostserver .util .Constants .REQUEST_PARAM_FORMAT ;
3436
37+ import de .fraunhofer .iosb .ilt .frostserver .extensions .Extension ;
3538import de .fraunhofer .iosb .ilt .frostserver .model .ModelRegistry ;
3639import de .fraunhofer .iosb .ilt .frostserver .path .EditFeatures ;
3740import de .fraunhofer .iosb .ilt .frostserver .path .Version ;
3841import de .fraunhofer .iosb .ilt .frostserver .service .InitResult ;
42+ import de .fraunhofer .iosb .ilt .frostserver .service .PluginRootDocument ;
3943import de .fraunhofer .iosb .ilt .frostserver .service .PluginService ;
4044import de .fraunhofer .iosb .ilt .frostserver .service .RequestTypeUtils ;
4145import de .fraunhofer .iosb .ilt .frostserver .service .Service ;
4953import de .fraunhofer .iosb .ilt .frostserver .util .StringHelper ;
5054import java .util .Arrays ;
5155import java .util .Collection ;
56+ import java .util .LinkedHashMap ;
57+ import java .util .Map ;
58+ import java .util .Set ;
59+ import java .util .TreeSet ;
5260import org .slf4j .Logger ;
5361import org .slf4j .LoggerFactory ;
5462
5563/**
56- *
57- * @author hylke
64+ * The API of STA version 1.0 and 1.1.
5865 */
59- public class PluginCoreService implements PluginService , ConfigDefaults {
66+ public class PluginCoreService implements PluginRootDocument , PluginService , ConfigDefaults {
6067
6168 private static final EditFeatures INSERT_STA_11 = new EditFeatures (true , false , false );
6269 private static final EditFeatures UPDATE_STA_11 = new EditFeatures (false , false , false );
@@ -92,12 +99,14 @@ public class PluginCoreService implements PluginService, ConfigDefaults {
9299 private static final Logger LOGGER = LoggerFactory .getLogger (PluginCoreService .class .getName ());
93100
94101 private boolean enabled ;
102+ private CoreSettings settings ;
95103
96104 @ Override
97105 public InitResult init (CoreSettings settings ) {
98106 final Settings pluginSettings = settings .getPluginSettings ();
99107 enabled = pluginSettings .getBoolean (TAG_ENABLE_CORE_SERVICE , PluginCoreService .class );
100108 if (enabled ) {
109+ this .settings = settings ;
101110 settings .getPluginManager ().registerPlugin (this );
102111 settings .getPluginManager ().registerPlugin (new PluginResultFormatSta ());
103112 }
@@ -109,6 +118,25 @@ public boolean isEnabled() {
109118 return enabled ;
110119 }
111120
121+ @ Override
122+ public void modifyServiceDocument (ServiceRequest request , Map <String , Object > result ) {
123+ Version version = request .getVersion ();
124+ if (version != PluginCoreService .V_1_1 ) {
125+ return ;
126+ }
127+ Map <String , Object > serverSettings = (Map <String , Object >) result .computeIfAbsent (KEY_SERVER_SETTINGS , t -> new LinkedHashMap <>());
128+
129+ final Set <Extension > enabledSettings = settings .getEnabledExtensions ();
130+ Set <String > extensionList = new TreeSet <>();
131+ serverSettings .put (KEY_CONFORMANCE_LIST , extensionList );
132+ for (Extension setting : enabledSettings ) {
133+ if (setting .isExposedFeature ()) {
134+ extensionList .addAll (setting .getRequirements ());
135+ }
136+ }
137+ settings .getMqttSettings ().fillServerSettings (serverSettings );
138+ }
139+
112140 @ Override
113141 public Collection <Version > getVersions () {
114142 return Arrays .asList (V_1_0 , V_1_1 );
0 commit comments