Eliminate SchemaResourcesDTO
[netconf.git] / plugins / netconf-client-mdsal / src / main / java / org / opendaylight / netconf / client / mdsal / NetconfDeviceBuilder.java
index e97b231317dcb9d2a2cb96ead782e2b7ab68f7fd..40701654a88ce1648920d7c177b19148bf06445a 100644 (file)
@@ -10,67 +10,67 @@ package org.opendaylight.netconf.client.mdsal;
 import static java.util.Objects.requireNonNull;
 
 import java.util.concurrent.Executor;
-import org.opendaylight.netconf.client.mdsal.NetconfDevice.SchemaResourcesDTO;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.netconf.client.mdsal.api.BaseNetconfSchemaProvider;
 import org.opendaylight.netconf.client.mdsal.api.DeviceActionFactory;
+import org.opendaylight.netconf.client.mdsal.api.DeviceNetconfSchemaProvider;
 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceHandler;
 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
 
-public class NetconfDeviceBuilder {
+// FIXME: everything except DeviceActionFactory is mandatory, hence this builder is a superfluous indirection
+public final class NetconfDeviceBuilder {
     private boolean reconnectOnSchemasChange;
-    private SchemaResourcesDTO schemaResourcesDTO;
+    private DeviceNetconfSchemaProvider deviceSchemaProvider;
     private RemoteDeviceId id;
     private RemoteDeviceHandler salFacade;
-    private Executor globalProcessingExecutor;
+    // FIXME: this should not be here
+    private Executor processingExecutor;
     private DeviceActionFactory deviceActionFactory;
-    private BaseNetconfSchemaProvider baseSchemas;
+    private BaseNetconfSchemaProvider baseSchemaProvider;
 
-    public NetconfDeviceBuilder setReconnectOnSchemasChange(final boolean reconnectOnSchemasChange) {
+    public @NonNull NetconfDeviceBuilder setReconnectOnSchemasChange(final boolean reconnectOnSchemasChange) {
         this.reconnectOnSchemasChange = reconnectOnSchemasChange;
         return this;
     }
 
-    public NetconfDeviceBuilder setId(final RemoteDeviceId id) {
-        this.id = id;
+    public @NonNull NetconfDeviceBuilder setId(final RemoteDeviceId id) {
+        this.id = requireNonNull(id);
         return this;
     }
 
-    public NetconfDeviceBuilder setSchemaResourcesDTO(final SchemaResourcesDTO schemaResourcesDTO) {
-        this.schemaResourcesDTO = schemaResourcesDTO;
+    public @NonNull NetconfDeviceBuilder setSalFacade(final RemoteDeviceHandler salFacade) {
+        this.salFacade = requireNonNull(salFacade);
         return this;
     }
 
-    public NetconfDeviceBuilder setSalFacade(final RemoteDeviceHandler salFacade) {
-        this.salFacade = salFacade;
+    public @NonNull NetconfDeviceBuilder setProcessingExecutor(final Executor processingExecutor) {
+        this.processingExecutor = requireNonNull(processingExecutor);
         return this;
     }
 
-    public NetconfDeviceBuilder setGlobalProcessingExecutor(final Executor globalProcessingExecutor) {
-        this.globalProcessingExecutor = globalProcessingExecutor;
-        return this;
-    }
-
-    public NetconfDeviceBuilder setDeviceActionFactory(final DeviceActionFactory deviceActionFactory) {
+    public @NonNull NetconfDeviceBuilder setDeviceActionFactory(final DeviceActionFactory deviceActionFactory) {
         this.deviceActionFactory = deviceActionFactory;
         return this;
     }
 
-    public NetconfDeviceBuilder setBaseSchemas(final BaseNetconfSchemaProvider baseSchemas) {
-        this.baseSchemas = requireNonNull(baseSchemas);
+    public @NonNull NetconfDeviceBuilder setBaseSchemaProvider(final BaseNetconfSchemaProvider baseSchemaProvider) {
+        this.baseSchemaProvider = requireNonNull(baseSchemaProvider);
         return this;
     }
 
-    public NetconfDevice build() {
-        validation();
-        return new NetconfDevice(schemaResourcesDTO, baseSchemas, id, salFacade,
-            globalProcessingExecutor, reconnectOnSchemasChange, deviceActionFactory);
+    public @NonNull NetconfDeviceBuilder setDeviceSchemaProvider(
+            final DeviceNetconfSchemaProvider deviceSchemaProvider) {
+        this.deviceSchemaProvider = requireNonNull(deviceSchemaProvider);
+        return this;
     }
 
-    private void validation() {
-        requireNonNull(baseSchemas, "BaseSchemas is not initialized");
-        requireNonNull(id, "RemoteDeviceId is not initialized");
-        requireNonNull(salFacade, "RemoteDeviceHandler is not initialized");
-        requireNonNull(globalProcessingExecutor, "ExecutorService is not initialized");
-        requireNonNull(schemaResourcesDTO, "SchemaResourceDTO is not initialized");
+    public @NonNull NetconfDevice build() {
+        return new NetconfDevice(
+            requireNonNull(id, "RemoteDeviceId is not initialized"),
+            requireNonNull(baseSchemaProvider, "BaseNetconfSchemaProvider is not initialized"),
+            requireNonNull(deviceSchemaProvider, "DeviceNetconfSchemaProvider is not initialized"),
+            requireNonNull(salFacade, "RemoteDeviceHandler is not initialized"),
+            requireNonNull(processingExecutor, "Executor is not initialized"),
+            reconnectOnSchemasChange, deviceActionFactory);
     }
 }