Eliminate SchemaResourcesDTO
[netconf.git] / plugins / netconf-client-mdsal / src / main / java / org / opendaylight / netconf / client / mdsal / NetconfDeviceBuilder.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netconf.client.mdsal;
9
10 import static java.util.Objects.requireNonNull;
11
12 import java.util.concurrent.Executor;
13 import org.eclipse.jdt.annotation.NonNull;
14 import org.opendaylight.netconf.client.mdsal.api.BaseNetconfSchemaProvider;
15 import org.opendaylight.netconf.client.mdsal.api.DeviceActionFactory;
16 import org.opendaylight.netconf.client.mdsal.api.DeviceNetconfSchemaProvider;
17 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceHandler;
18 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
19
20 // FIXME: everything except DeviceActionFactory is mandatory, hence this builder is a superfluous indirection
21 public final class NetconfDeviceBuilder {
22     private boolean reconnectOnSchemasChange;
23     private DeviceNetconfSchemaProvider deviceSchemaProvider;
24     private RemoteDeviceId id;
25     private RemoteDeviceHandler salFacade;
26     // FIXME: this should not be here
27     private Executor processingExecutor;
28     private DeviceActionFactory deviceActionFactory;
29     private BaseNetconfSchemaProvider baseSchemaProvider;
30
31     public @NonNull NetconfDeviceBuilder setReconnectOnSchemasChange(final boolean reconnectOnSchemasChange) {
32         this.reconnectOnSchemasChange = reconnectOnSchemasChange;
33         return this;
34     }
35
36     public @NonNull NetconfDeviceBuilder setId(final RemoteDeviceId id) {
37         this.id = requireNonNull(id);
38         return this;
39     }
40
41     public @NonNull NetconfDeviceBuilder setSalFacade(final RemoteDeviceHandler salFacade) {
42         this.salFacade = requireNonNull(salFacade);
43         return this;
44     }
45
46     public @NonNull NetconfDeviceBuilder setProcessingExecutor(final Executor processingExecutor) {
47         this.processingExecutor = requireNonNull(processingExecutor);
48         return this;
49     }
50
51     public @NonNull NetconfDeviceBuilder setDeviceActionFactory(final DeviceActionFactory deviceActionFactory) {
52         this.deviceActionFactory = deviceActionFactory;
53         return this;
54     }
55
56     public @NonNull NetconfDeviceBuilder setBaseSchemaProvider(final BaseNetconfSchemaProvider baseSchemaProvider) {
57         this.baseSchemaProvider = requireNonNull(baseSchemaProvider);
58         return this;
59     }
60
61     public @NonNull NetconfDeviceBuilder setDeviceSchemaProvider(
62             final DeviceNetconfSchemaProvider deviceSchemaProvider) {
63         this.deviceSchemaProvider = requireNonNull(deviceSchemaProvider);
64         return this;
65     }
66
67     public @NonNull NetconfDevice build() {
68         return new NetconfDevice(
69             requireNonNull(id, "RemoteDeviceId is not initialized"),
70             requireNonNull(baseSchemaProvider, "BaseNetconfSchemaProvider is not initialized"),
71             requireNonNull(deviceSchemaProvider, "DeviceNetconfSchemaProvider is not initialized"),
72             requireNonNull(salFacade, "RemoteDeviceHandler is not initialized"),
73             requireNonNull(processingExecutor, "Executor is not initialized"),
74             reconnectOnSchemasChange, deviceActionFactory);
75     }
76 }