/** Factory method to produce instance of NetconfOperationRouter */
  public static NetconfOperationRouter createOperationRouter(
      NetconfOperationServiceSnapshot netconfOperationServiceSnapshot,
      CapabilityProvider capabilityProvider,
      DefaultCommitNotificationProducer commitNotifier) {
    NetconfOperationRouterImpl router =
        new NetconfOperationRouterImpl(netconfOperationServiceSnapshot);

    Preconditions.checkNotNull(netconfOperationServiceSnapshot);
    Preconditions.checkNotNull(capabilityProvider);

    final String sessionId = netconfOperationServiceSnapshot.getNetconfSessionIdForReporting();

    final Set<NetconfOperation> defaultNetconfOperations = Sets.newHashSet();
    defaultNetconfOperations.add(new DefaultGetSchema(capabilityProvider, sessionId));
    defaultNetconfOperations.add(new DefaultCloseSession(sessionId, router));
    defaultNetconfOperations.add(new DefaultStartExi(sessionId));
    defaultNetconfOperations.add(new DefaultStopExi(sessionId));
    defaultNetconfOperations.add(
        new DefaultCommit(commitNotifier, capabilityProvider, sessionId, router));

    router.initNetconfOperations(
        getAllNetconfOperations(defaultNetconfOperations, netconfOperationServiceSnapshot));

    return router;
  }