Introduce restconf.server.{api,spi,mdsal}
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / RestconfApplication.java
index a1ca028d31cbf979714d06fee0952f86eb3a83c8..584e93e7059f26bfbb4c5e6a04dc4f17ef501768 100644 (file)
@@ -7,54 +7,54 @@
  */
 package org.opendaylight.restconf.nb.rfc8040;
 
-import java.util.List;
-import javax.inject.Inject;
-import javax.inject.Singleton;
+import java.util.Set;
+import javax.ws.rs.core.Application;
 import org.opendaylight.mdsal.dom.api.DOMActionService;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMNotificationService;
-import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
-import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
-import org.opendaylight.restconf.nb.rfc8040.handlers.SchemaContextHandler;
-import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfStreamsSubscriptionService;
+import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.JsonNormalizedNodeBodyWriter;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.JsonPatchStatusBodyWriter;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.XmlNormalizedNodeBodyWriter;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.XmlPatchStatusBodyWriter;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.YangSchemaExportBodyWriter;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.YinSchemaExportBodyWriter;
+import org.opendaylight.restconf.nb.rfc8040.jersey.providers.errors.RestconfDocumentedExceptionMapper;
+import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.MdsalRestconfServer;
 import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfDataServiceImpl;
 import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfImpl;
 import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfInvokeOperationsServiceImpl;
 import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfOperationsServiceImpl;
 import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfSchemaServiceImpl;
-import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfStreamsSubscriptionServiceImpl;
-import org.opendaylight.restconf.nb.rfc8040.streams.Configuration;
 
-@Singleton
-public class RestconfApplication extends AbstractRestconfApplication {
-    private RestconfApplication(final SchemaContextHandler schemaContextHandler,
-            final DOMMountPointService mountPointService, final RestconfStreamsSubscriptionService streamSubscription,
-            final DOMDataBroker dataBroker, final DOMRpcService rpcService, final DOMActionService actionService,
-            final DOMNotificationService notificationService, final DOMSchemaService domSchemaService,
-            final Configuration configuration) {
-        super(schemaContextHandler, mountPointService, List.of(
-            streamSubscription,
-            new RestconfDataServiceImpl(schemaContextHandler, dataBroker, mountPointService, streamSubscription,
-                actionService, configuration),
-            new RestconfInvokeOperationsServiceImpl(rpcService, schemaContextHandler),
-            new RestconfOperationsServiceImpl(schemaContextHandler, mountPointService),
-            new RestconfSchemaServiceImpl(schemaContextHandler, mountPointService,
-                domSchemaService.getExtensions().getInstance(DOMYangTextSourceProvider.class)),
-            new RestconfImpl(schemaContextHandler)));
+final class RestconfApplication extends Application {
+    private final Set<Object> singletons;
 
+    RestconfApplication(final DatabindProvider databindProvider, final MdsalRestconfServer server,
+            final DOMMountPointService mountPointService, final DOMDataBroker dataBroker,
+            final DOMActionService actionService, final DOMNotificationService notificationService,
+            final DOMSchemaService domSchemaService) {
+        singletons = Set.of(
+            new RestconfDocumentedExceptionMapper(databindProvider),
+            new RestconfDataServiceImpl(databindProvider, server, actionService),
+            new RestconfInvokeOperationsServiceImpl(server),
+            new RestconfOperationsServiceImpl(server),
+            new RestconfSchemaServiceImpl(domSchemaService, mountPointService),
+            new RestconfImpl(databindProvider));
     }
 
-    @Inject
-    public RestconfApplication(final SchemaContextHandler schemaContextHandler,
-            final DOMMountPointService mountPointService, final DOMDataBroker dataBroker,
-            final DOMRpcService rpcService, final DOMActionService actionService,
-            final DOMNotificationService notificationService,
-            final DOMSchemaService domSchemaService, final Configuration configuration) {
-        this(schemaContextHandler, mountPointService,
-            new RestconfStreamsSubscriptionServiceImpl(dataBroker, notificationService, schemaContextHandler,
-                configuration),
-            dataBroker, rpcService, actionService, notificationService, domSchemaService, configuration);
+    @Override
+    public Set<Class<?>> getClasses() {
+        return Set.of(
+            JsonNormalizedNodeBodyWriter.class, XmlNormalizedNodeBodyWriter.class,
+            YinSchemaExportBodyWriter.class, YangSchemaExportBodyWriter.class,
+            JsonPatchStatusBodyWriter.class, XmlPatchStatusBodyWriter.class);
+    }
+
+    @Override
+    public Set<Object> getSingletons() {
+        return singletons;
     }
 }