</modules>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
<tag>HEAD</tag>
- <url>https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=summary</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=summary</url>
</scm>
</project>
</modules>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:https://git.opendaylight.org/gerrit/netconf</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf</developerConnection>
<tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=tree</url>
</scm>
</project>
</modules>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
<tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=summary</url>
</scm>
</project>
</modules>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:https://git.opendaylight.org/gerrit/netconf</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf</developerConnection>
<tag>HEAD</tag>
- <url>https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=summary</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=tree</url>
</scm>
</project>
</modules>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
<tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=summary</url>
</scm>
</project>
</plugin>
</plugins>
</build>
+
<scm>
<connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
<developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
// expect
assertTrue(instance1.equals(instance1));
assertFalse(instance1.equals(null));
- assertFalse(instance1.equals(new Long(123456)));
+ assertFalse(instance1.equals(123456L));
assertFalse(instance1.equals(instance2));
assertFalse(instance1.equals(instance3));
assertFalse(instance1.equals(instance4));
package org.opendaylight.netconf.mdsal.connector;
import com.google.common.annotations.Beta;
-import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.FluentFuture;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
* @param transaction
* transaction to be validated
* @return
- * a CheckedFuture containing the result of the validate operation. The future blocks until the validation
+ * a FluentFuture containing the result of the validate operation. The future blocks until the validation
* operation is complete. A successful validate returns nothing. On failure, the Future will fail
* with a {@link ValidationFailedException} or an exception derived from ValidationFailedException.
*/
- CheckedFuture<Void, ValidationFailedException> validate(DOMDataTreeWriteTransaction transaction);
+ FluentFuture<Void> validate(DOMDataTreeWriteTransaction transaction);
/**
* Failed validation of asynchronous transaction. This exception is raised and returned when transaction validation
import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity;
import org.opendaylight.netconf.api.DocumentedException.ErrorTag;
import org.opendaylight.netconf.api.DocumentedException.ErrorType;
-import org.opendaylight.netconf.mdsal.connector.DOMDataTransactionValidator.ValidationFailedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
}
try {
- transactionValidator.validate(candidateTransaction).checkedGet();
- } catch (final ValidationFailedException e) {
+ transactionValidator.validate(candidateTransaction).get();
+ } catch (final InterruptedException | ExecutionException e) {
LOG.debug("Candidate transaction validation {} failed on session {}", candidateTransaction,
netconfSessionIdForReporting, e);
final String cause = e.getCause() != null ? " Cause: " + e.getCause().getMessage() : "";
import static org.opendaylight.netconf.mdsal.connector.ops.AbstractNetconfOperationTest.verifyResponse;
import com.google.common.collect.ImmutableClassToInstanceMap;
-import com.google.common.util.concurrent.Futures;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.netconf.mdsal.connector.DOMDataTransactionValidator;
import org.opendaylight.netconf.mdsal.connector.DOMDataTransactionValidator.ValidationFailedException;
import org.opendaylight.netconf.mdsal.connector.TransactionProvider;
+import org.opendaylight.yangtools.util.concurrent.FluentFutures;
import org.w3c.dom.Document;
public class ValidateTest {
@Before
public void setUp() throws Exception {
initMocks(this);
- doReturn(Futures.immediateCheckedFuture(null)).when(noopValidator).validate(any());
- doReturn(Futures.immediateFailedCheckedFuture(new ValidationFailedException("invalid data")))
+ doReturn(FluentFutures.immediateNullFluentFuture()).when(noopValidator).validate(any());
+ doReturn(FluentFutures.immediateFailedFluentFuture(new ValidationFailedException("invalid data")))
.when(failingValidator).validate(any());
doReturn(readWriteTx).when(dataBroker).newReadWriteTransaction();
XMLUnit.setIgnoreWhitespace(true);
@Override
public String toString() {
- final StringBuffer sb = new StringBuffer("NetconfHelloMessageAdditionalHeader{");
+ final StringBuilder sb = new StringBuilder("NetconfHelloMessageAdditionalHeader{");
sb.append("userName='").append(userName).append('\'');
sb.append(", hostAddress='").append(hostAddress).append('\'');
sb.append(", port='").append(port).append('\'');
@Override
public String toString() {
- final StringBuffer sb = new StringBuffer("TestingNetconfClient{");
+ final StringBuilder sb = new StringBuilder("TestingNetconfClient{");
sb.append("label=").append(label);
sb.append(", sessionId=").append(sessionId);
sb.append('}');
@Override
public String toString() {
- final StringBuffer sb = new StringBuffer(getClass().getSimpleName() + "{");
+ final StringBuilder sb = new StringBuilder(getClass().getSimpleName() + "{");
sb.append("sessionId=").append(sessionId);
sb.append(", channel=").append(channel);
sb.append('}');
final Dictionary<String, String> props = new Hashtable<>();
props.put(NetconfConstants.SERVICE_NAME, NetconfConstants.NETCONF_NOTIFICATION);
netconfNotificationCollectorServiceRegistration = context.registerService(NetconfNotificationCollector.class,
- netconfNotificationManager, new Hashtable<String, Object>());
+ netconfNotificationManager, new Hashtable<>());
final NetconfOperationServiceFactory netconfOperationServiceFactory = new NetconfOperationServiceFactory() {
}
public static void main(String[] args) {
- ProxyHandlerFactory proxyHandlerFactory = new ProxyHandlerFactory() {
- @Override
- public ChannelHandler create(EventLoopGroup bossGroup, LocalAddress localAddress) {
- return new ProxyServerHandler(bossGroup, localAddress);
- }
- };
+ ProxyHandlerFactory proxyHandlerFactory = ProxyServerHandler::new;
start(proxyHandlerFactory);
}
}
private DOMMountPoint awaitMountPoint(final DOMMountPointService mountPointService) {
- await().atMost(5, TimeUnit.SECONDS).until(() -> {
- return mountPointService.getMountPoint(yangNodeInstanceId).isPresent();
- });
+ await().atMost(5, TimeUnit.SECONDS).until(() ->
+ mountPointService.getMountPoint(yangNodeInstanceId).isPresent());
return mountPointService.getMountPoint(yangNodeInstanceId).get();
}
@Override
public String toString() {
- final StringBuffer sb = new StringBuffer(getClass().getName());
+ final StringBuilder sb = new StringBuilder(getClass().getName());
try {
sb.append("{name=").append(getOperationName());
} catch (UnsupportedOperationException e) {
@SuppressWarnings("checkstyle:IllegalCatch")
@Test
public void testCloseAllFail() throws Exception {
- final AutoCloseable failingCloseable = new AutoCloseable() {
- @Override
- public void close() throws Exception {
- throw new RuntimeException("testing failing close");
- }
+ final AutoCloseable failingCloseable = () -> {
+ throw new RuntimeException("testing failing close");
};
try {
</dependencies>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
<tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=summary</url>
</scm>
</project>
import java.net.URI;
import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.opendaylight.netconf.client.NetconfClientSession;
// allows partial matches - assuming parameters are in the same order
public boolean containsPartialNonModuleCapability(final String capability) {
- final Iterator<String> iterator = getNonModuleCaps().iterator();
- while (iterator.hasNext()) {
- if (iterator.next().startsWith(capability)) {
+ for (final String nonModuleCap : getNonModuleCaps()) {
+ if (nonModuleCap.startsWith(capability)) {
LOG.trace("capability {} partially matches {}", capability, nonModuleCaps);
return true;
}
@Override
public String toString() {
- final StringBuffer sb = new StringBuffer("UserPreferences{");
+ final StringBuilder sb = new StringBuilder("UserPreferences{");
sb.append("sessionPreferences=").append(sessionPreferences);
sb.append(", overrideModuleCapabilities=").append(overrideModuleCapabilities);
sb.append(", overrideNonModuleCapabilities=").append(overrideNonModuleCapabilities);
@Override
public @NonNull FluentFuture<DOMRpcResult> invokeRpc(@Nonnull final SchemaPath type,
final NormalizedNode<?, ?> input) {
- final FluentFuture<DOMRpcResult> domRpcResultDOMRpcExceptionCheckedFuture =
- deviceRpc.invokeRpc(type, input);
- Futures.addCallback(domRpcResultDOMRpcExceptionCheckedFuture, resetKeepaliveTask,
- MoreExecutors.directExecutor());
+ final FluentFuture<DOMRpcResult> rpcResultFuture = deviceRpc.invokeRpc(type, input);
+ Futures.addCallback(rpcResultFuture, resetKeepaliveTask, MoreExecutors.directExecutor());
- final RequestTimeoutTask timeoutTask = new RequestTimeoutTask(domRpcResultDOMRpcExceptionCheckedFuture);
+ final RequestTimeoutTask timeoutTask = new RequestTimeoutTask(rpcResultFuture);
executor.schedule(timeoutTask, defaultRequestTimeoutMillis, TimeUnit.MILLISECONDS);
- return domRpcResultDOMRpcExceptionCheckedFuture;
+ return rpcResultFuture;
}
@Override
final List<List<NetconfMessage>> allPreparedMessages = new ArrayList<>(threadAmount);
for (int i = 0; i < threadAmount; i++) {
if (i != threadAmount - 1) {
- allPreparedMessages.add(new ArrayList<NetconfMessage>(requestsPerThread));
+ allPreparedMessages.add(new ArrayList<>(requestsPerThread));
} else {
- allPreparedMessages.add(new ArrayList<NetconfMessage>(requestsPerThread + leftoverRequests));
+ allPreparedMessages.add(new ArrayList<>(requestsPerThread + leftoverRequests));
}
}
@Override
public String toString() {
- final StringBuffer sb = new StringBuffer("Notifications{");
+ final StringBuilder sb = new StringBuilder("Notifications{");
sb.append("notificationList=").append(notificationList);
sb.append('}');
return sb.toString();
@Override
public String toString() {
- final StringBuffer sb = new StringBuffer("Notification{");
+ final StringBuilder sb = new StringBuilder("Notification{");
sb.append("delayInSeconds=").append(delayInSeconds);
sb.append(", times=").append(times);
sb.append(", content='").append(content).append('\'');
</build>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
<tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=summary</url>
</scm>
</project>
</plugin>
</plugins>
</build>
+
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
<tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=summary</url>
</scm>
</project>
if (context.getWriterParameters().isPrettyPrint()) {
xmlWriter = new IndentingXMLStreamWriter(xmlWriter);
}
- } catch (final XMLStreamException e) {
- throw new IllegalStateException(e);
- } catch (final FactoryConfigurationError e) {
+ } catch (final XMLStreamException | FactoryConfigurationError e) {
throw new IllegalStateException(e);
}
final NormalizedNode<?, ?> data = context.getData();
final XMLStreamWriter xmlWriter =
XML_FACTORY.createXMLStreamWriter(entityStream, StandardCharsets.UTF_8.name());
writeDocument(xmlWriter, patchStatusContext);
- } catch (final XMLStreamException e) {
- throw new IllegalStateException(e);
- } catch (final FactoryConfigurationError e) {
+ } catch (final XMLStreamException | FactoryConfigurationError e) {
throw new IllegalStateException(e);
}
}
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
final XMLStreamWriter xmlWriter;
try {
xmlWriter = XML_FACTORY.createXMLStreamWriter(outStream, StandardCharsets.UTF_8.name());
- } catch (final XMLStreamException e) {
- throw new IllegalStateException(e);
- } catch (final FactoryConfigurationError e) {
+ } catch (final XMLStreamException | FactoryConfigurationError e) {
throw new IllegalStateException(e);
}
NormalizedNode<?, ?> data = errorsNode.getData();
private static void writeDataRoot(final OutputStreamWriter outputWriter, final NormalizedNodeWriter nnWriter,
final ContainerNode data) throws IOException {
- final Iterator<DataContainerChild<? extends PathArgument, ?>> iterator = data.getValue().iterator();
- while (iterator.hasNext()) {
- final DataContainerChild<? extends PathArgument, ?> child = iterator.next();
+ for (final DataContainerChild<? extends PathArgument, ?> child : data.getValue()) {
nnWriter.write(child);
nnWriter.flush();
}
Futures.addCallback(f, new FutureCallback<Boolean>() {
@Override
public void onSuccess(@Nonnull final Boolean result) {
- ret.complete(path, result.booleanValue());
+ ret.complete(path, result);
}
@Override
final DataSchemaNode replaySupportSchemaNode = Iterables.getFirst(instanceDataChildrenByName, null);
Preconditions.checkState(replaySupportSchemaNode instanceof LeafSchemaNode);
streamNodeValues.withChild(Builders.leafBuilder((LeafSchemaNode) replaySupportSchemaNode)
- .withValue(Boolean.valueOf(true)).build());
+ .withValue(Boolean.TRUE).build());
instanceDataChildrenByName =
ControllerContext.findInstanceDataChildrenByName(listStreamSchemaNode, "replay-log-creation-time");
jsonReader.beginObject();
final Map<String, LeafVerifier> expectedMap = Maps.newHashMap();
- expectedMap.put("lfnint8Min", new NumberVerifier(Integer.valueOf(-128)));
- expectedMap.put("lfnint8Max", new NumberVerifier(Integer.valueOf(127)));
- expectedMap.put("lfnint16Min", new NumberVerifier(Integer.valueOf(-32768)));
- expectedMap.put("lfnint16Max", new NumberVerifier(Integer.valueOf(32767)));
- expectedMap.put("lfnint32Min", new NumberVerifier(Integer.valueOf(-2147483648)));
- expectedMap.put("lfnint32Max", new NumberVerifier(Long.valueOf(2147483647)));
- expectedMap.put("lfnint64Min", new NumberVerifier(Long.valueOf(-9223372036854775808L)));
- expectedMap.put("lfnint64Max", new NumberVerifier(Long.valueOf(9223372036854775807L)));
- expectedMap.put("lfnuint8Max", new NumberVerifier(Integer.valueOf(255)));
- expectedMap.put("lfnuint16Max", new NumberVerifier(Integer.valueOf(65535)));
- expectedMap.put("lfnuint32Max", new NumberVerifier(Long.valueOf(4294967295L)));
+ expectedMap.put("lfnint8Min", new NumberVerifier(-128));
+ expectedMap.put("lfnint8Max", new NumberVerifier(127));
+ expectedMap.put("lfnint16Min", new NumberVerifier(-32768));
+ expectedMap.put("lfnint16Max", new NumberVerifier(32767));
+ expectedMap.put("lfnint32Min", new NumberVerifier(-2147483648));
+ expectedMap.put("lfnint32Max", new NumberVerifier(2147483647L));
+ expectedMap.put("lfnint64Min", new NumberVerifier(-9223372036854775808L));
+ expectedMap.put("lfnint64Max", new NumberVerifier(9223372036854775807L));
+ expectedMap.put("lfnuint8Max", new NumberVerifier(255));
+ expectedMap.put("lfnuint16Max", new NumberVerifier(65535));
+ expectedMap.put("lfnuint32Max", new NumberVerifier(4294967295L));
expectedMap.put("lfstr", new StringVerifier("lfstr"));
expectedMap.put("lfstr1", new StringVerifier(""));
expectedMap.put("lfbool1", new BooleanVerifier(true));
expectedMap.put("lfbool2", new BooleanVerifier(false));
expectedMap.put("lfbool3", new BooleanVerifier(false));
- expectedMap.put("lfdecimal1", new NumberVerifier(new Double(43.32)));
- expectedMap.put("lfdecimal2", new NumberVerifier(new Double(-0.43)));
- expectedMap.put("lfdecimal3", new NumberVerifier(new Double(43)));
- expectedMap.put("lfdecimal4", new NumberVerifier(new Double(43E3)));
- expectedMap.put("lfdecimal6", new NumberVerifier(new Double(33.12345)));
+ expectedMap.put("lfdecimal1", new NumberVerifier(43.32));
+ expectedMap.put("lfdecimal2", new NumberVerifier(-0.43));
+ expectedMap.put("lfdecimal3", new NumberVerifier(43d));
+ expectedMap.put("lfdecimal4", new NumberVerifier(43E3));
+ expectedMap.put("lfdecimal6", new NumberVerifier(33.12345));
expectedMap.put("lfenum", new StringVerifier("enum3"));
expectedMap.put("lfbits", new StringVerifier("bit3 bit2"));
expectedMap.put("lfbinary", new StringVerifier("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
assertTrue("Expected ContainerNode. Actual " + capturedNode.getValue().getClass(),
capturedNode.getValue() instanceof ContainerNode);
final ContainerNode actualNode = (ContainerNode) capturedNode.getValue();
- verifyLeafNode(actualNode, TOASTER_DONENESS_QNAME, Long.valueOf(10));
+ verifyLeafNode(actualNode, TOASTER_DONENESS_QNAME, 10L);
verifyLeafNode(actualNode, TOASTER_TYPE_QNAME, WHEAT_BREAD_QNAME);
}
@Test
public void binaryKeyTest() {
final List<Byte> al = new ArrayList<>();
- al.add(new Byte((byte) 1));
+ al.add((byte) 1);
binaryKeyTest(al, al);
}
@Test
public void binaryKeyFailTest() {
final List<Byte> al = new ArrayList<>();
- al.add(new Byte((byte) 1));
+ al.add((byte) 1);
final List<Byte> al2 = new ArrayList<>();
try {
binaryKeyTest(al, al2);
final XMLStreamWriter xmlWriter =
XML_FACTORY.createXMLStreamWriter(entityStream, StandardCharsets.UTF_8.name());
writeDocument(xmlWriter, patchStatusContext);
- } catch (final XMLStreamException e) {
- throw new IllegalStateException(e);
- } catch (final FactoryConfigurationError e) {
+ } catch (final XMLStreamException | FactoryConfigurationError e) {
throw new IllegalStateException(e);
}
}
public final class RestconfMappingStreamConstants {
public static final String DESCRIPTION = "DESCRIPTION_PLACEHOLDER";
- public static final Boolean REPLAY_SUPPORT = Boolean.valueOf(true);
+ public static final Boolean REPLAY_SUPPORT = Boolean.TRUE;
public static final String REPLAY_LOG = "";
public static final String EVENTS = "";
assertTrue("Expected ContainerNode. Actual " + capturedNode.getValue().getClass(),
capturedNode.getValue() instanceof ContainerNode);
final ContainerNode actualNode = (ContainerNode) capturedNode.getValue();
- verifyLeafNode(actualNode, TOASTER_DONENESS_QNAME, Long.valueOf(10));
+ verifyLeafNode(actualNode, TOASTER_DONENESS_QNAME, 10L);
verifyLeafNode(actualNode, TOASTER_TYPE_QNAME, WHEAT_BREAD_QNAME);
}
</dependencies>
<scm>
- <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/netconf.git</developerConnection>
<tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
+ <url>https://git.opendaylight.org/gerrit/gitweb?p=netconf.git;a=summary</url>
</scm>
</project>