2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.netconf.client.mdsal;
10 import static java.util.Objects.requireNonNull;
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;
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;
31 public @NonNull NetconfDeviceBuilder setReconnectOnSchemasChange(final boolean reconnectOnSchemasChange) {
32 this.reconnectOnSchemasChange = reconnectOnSchemasChange;
36 public @NonNull NetconfDeviceBuilder setId(final RemoteDeviceId id) {
37 this.id = requireNonNull(id);
41 public @NonNull NetconfDeviceBuilder setSalFacade(final RemoteDeviceHandler salFacade) {
42 this.salFacade = requireNonNull(salFacade);
46 public @NonNull NetconfDeviceBuilder setProcessingExecutor(final Executor processingExecutor) {
47 this.processingExecutor = requireNonNull(processingExecutor);
51 public @NonNull NetconfDeviceBuilder setDeviceActionFactory(final DeviceActionFactory deviceActionFactory) {
52 this.deviceActionFactory = deviceActionFactory;
56 public @NonNull NetconfDeviceBuilder setBaseSchemaProvider(final BaseNetconfSchemaProvider baseSchemaProvider) {
57 this.baseSchemaProvider = requireNonNull(baseSchemaProvider);
61 public @NonNull NetconfDeviceBuilder setDeviceSchemaProvider(
62 final DeviceNetconfSchemaProvider deviceSchemaProvider) {
63 this.deviceSchemaProvider = requireNonNull(deviceSchemaProvider);
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);