![JAR search and dependency download from the Maven repository](/logo.png)
org.opendaylight.restconf.server.mdsal.MdsalRestconfStreamRegistry Maven / Gradle / Ivy
/*
* Copyright © 2019 FRINX s.r.o. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.restconf.server.mdsal;
import static java.util.Objects.requireNonNull;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.restconf.server.spi.AbstractRestconfStreamRegistry;
import org.opendaylight.restconf.server.spi.RestconfStream;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.monitoring.rev170126.RestconfState;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.monitoring.rev170126.restconf.state.Streams;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.monitoring.rev170126.restconf.state.streams.Stream;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* This singleton class is responsible for creation, removal and searching for {@link RestconfStream}s.
*/
@Singleton
@Component(factory = MdsalRestconfStreamRegistry.FACTORY_NAME, service = RestconfStream.Registry.class)
public final class MdsalRestconfStreamRegistry extends AbstractRestconfStreamRegistry {
public static final String FACTORY_NAME = "org.opendaylight.restconf.nb.rfc8040.streams.ListenersBroker";
private static final YangInstanceIdentifier RESTCONF_STATE_STREAMS = YangInstanceIdentifier.of(
NodeIdentifier.create(RestconfState.QNAME),
NodeIdentifier.create(Streams.QNAME),
NodeIdentifier.create(Stream.QNAME));
private static final String USE_WEBSOCKETS_PROP = ".useWebsockets";
private final DOMDataBroker dataBroker;
public MdsalRestconfStreamRegistry(final DOMDataBroker dataBroker, final boolean useWebsockets) {
super(useWebsockets);
this.dataBroker = requireNonNull(dataBroker);
}
@Inject
public MdsalRestconfStreamRegistry(final DOMDataBroker dataBroker) {
this(dataBroker, false);
}
@Activate
public MdsalRestconfStreamRegistry(@Reference final DOMDataBroker dataBroker, final Map props) {
this(dataBroker, (boolean) requireNonNull(props.get(USE_WEBSOCKETS_PROP)));
}
public static Map props(final boolean useSSE) {
return Map.of(USE_WEBSOCKETS_PROP, !useSSE);
}
@Override
protected ListenableFuture> putStream(final MapEntryNode stream) {
// Now issue a put operation
final var tx = dataBroker.newWriteOnlyTransaction();
tx.put(LogicalDatastoreType.OPERATIONAL, RESTCONF_STATE_STREAMS.node(stream.name()), stream);
return tx.commit();
}
@Override
protected ListenableFuture> deleteStream(final NodeIdentifierWithPredicates streamName) {
// Now issue a delete operation while the name is still protected by being associated in the map.
final var tx = dataBroker.newWriteOnlyTransaction();
tx.delete(LogicalDatastoreType.OPERATIONAL, RESTCONF_STATE_STREAMS.node(streamName));
return tx.commit();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy