2 * Copyright (c) 2014 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.test.tool;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.collect.Sets;
14 import java.util.Optional;
16 import org.eclipse.jdt.annotation.NonNull;
17 import org.opendaylight.netconf.api.capability.Capability;
18 import org.opendaylight.netconf.server.api.SessionIdProvider;
19 import org.opendaylight.netconf.server.api.monitoring.CapabilityListener;
20 import org.opendaylight.netconf.server.api.operations.NetconfOperation;
21 import org.opendaylight.netconf.server.api.operations.NetconfOperationService;
22 import org.opendaylight.netconf.server.api.operations.NetconfOperationServiceFactory;
23 import org.opendaylight.netconf.test.tool.rpc.DataList;
24 import org.opendaylight.netconf.test.tool.rpc.SimulatedCommit;
25 import org.opendaylight.netconf.test.tool.rpc.SimulatedCreateSubscription;
26 import org.opendaylight.netconf.test.tool.rpc.SimulatedDiscardChanges;
27 import org.opendaylight.netconf.test.tool.rpc.SimulatedEditConfig;
28 import org.opendaylight.netconf.test.tool.rpc.SimulatedGet;
29 import org.opendaylight.netconf.test.tool.rpc.SimulatedGetConfig;
30 import org.opendaylight.netconf.test.tool.rpc.SimulatedLock;
31 import org.opendaylight.netconf.test.tool.rpc.SimulatedUnLock;
32 import org.opendaylight.yangtools.concepts.Registration;
34 class SimulatedOperationProvider implements NetconfOperationServiceFactory {
35 private final @NonNull Set<Capability> caps;
36 private final SimulatedOperationService simulatedOperationService;
38 SimulatedOperationProvider(final SessionIdProvider idProvider,
39 final Set<Capability> caps,
40 final Optional<File> notificationsFile,
41 final Optional<File> initialConfigXMLFile) {
42 this.caps = requireNonNull(caps);
43 simulatedOperationService = new SimulatedOperationService(
44 idProvider.getCurrentSessionId(), notificationsFile, initialConfigXMLFile);
48 public Set<Capability> getCapabilities() {
53 public Registration registerCapabilityListener(final CapabilityListener listener) {
54 listener.onCapabilitiesChanged(caps, Set.of());
59 public NetconfOperationService createService(
60 final String netconfSessionIdForReporting) {
61 return simulatedOperationService;
64 static class SimulatedOperationService implements NetconfOperationService {
65 private final long currentSessionId;
66 private final Optional<File> notificationsFile;
67 private final Optional<File> initialConfigXMLFile;
69 SimulatedOperationService(final long currentSessionId, final Optional<File> notificationsFile,
70 final Optional<File> initialConfigXMLFile) {
71 this.currentSessionId = currentSessionId;
72 this.notificationsFile = notificationsFile;
73 this.initialConfigXMLFile = initialConfigXMLFile;
77 public Set<NetconfOperation> getNetconfOperations() {
78 final DataList storage = new DataList();
79 final SimulatedGet sGet = new SimulatedGet(String.valueOf(currentSessionId), storage);
80 final SimulatedEditConfig sEditConfig = new SimulatedEditConfig(String.valueOf(currentSessionId), storage);
81 final SimulatedGetConfig sGetConfig = new SimulatedGetConfig(
82 String.valueOf(currentSessionId), storage, initialConfigXMLFile);
83 final SimulatedCommit sCommit = new SimulatedCommit(String.valueOf(currentSessionId));
84 final SimulatedLock sLock = new SimulatedLock(String.valueOf(currentSessionId));
85 final SimulatedUnLock sUnlock = new SimulatedUnLock(String.valueOf(currentSessionId));
86 final SimulatedCreateSubscription sCreateSubs = new SimulatedCreateSubscription(
87 String.valueOf(currentSessionId), notificationsFile);
88 final SimulatedDiscardChanges sDiscardChanges = new SimulatedDiscardChanges(
89 String.valueOf(currentSessionId));
90 return Sets.newHashSet(
91 sGet, sGetConfig, sEditConfig, sCommit, sLock, sUnlock, sCreateSubs, sDiscardChanges);