From: Ed Warnicke Date: Mon, 10 Feb 2014 23:36:04 +0000 (+0000) Subject: Merge "Fix a few eclipse-reported warnings" X-Git-Tag: autorelease-tag-v20140601202136_82eb3f9~495 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=509a8a4d570abc3a9a496837617015b1084c2761;hp=607df672b92e06f36723397481408a257c98564e Merge "Fix a few eclipse-reported warnings" --- diff --git a/opendaylight/commons/opendaylight/pom.xml b/opendaylight/commons/opendaylight/pom.xml index d2e9048027..f2f71084db 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -759,6 +759,12 @@ yang-model-api ${yangtools.version} + + org.opendaylight.yangtools + yang-model-util + ${yangtools.version} + + org.opendaylight.controller hosttracker diff --git a/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ProtocolMessageDecoder.java b/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ProtocolMessageDecoder.java index 725e0a21a7..d8ad8b6202 100644 --- a/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ProtocolMessageDecoder.java +++ b/opendaylight/commons/protocol-framework/src/main/java/org/opendaylight/protocol/framework/ProtocolMessageDecoder.java @@ -52,4 +52,6 @@ public final class ProtocolMessageDecoder extends ByteToMessageDecoder { } in.discardReadBytes(); } + } + diff --git a/opendaylight/configuration/api/src/main/java/org/opendaylight/controller/configuration/ConfigurationObject.java b/opendaylight/configuration/api/src/main/java/org/opendaylight/controller/configuration/ConfigurationObject.java index 720dc7b234..7151e561b1 100644 --- a/opendaylight/configuration/api/src/main/java/org/opendaylight/controller/configuration/ConfigurationObject.java +++ b/opendaylight/configuration/api/src/main/java/org/opendaylight/controller/configuration/ConfigurationObject.java @@ -12,7 +12,7 @@ import java.io.Serializable; public abstract class ConfigurationObject implements Serializable { private static final long serialVersionUID = 1L; - private static final String DEFAULT_REGEX = "^[\\w-=\\+\\*\\/\\.\\(\\)\\[\\]\\@\\|\\:]{1,256}$"; + private static final String DEFAULT_REGEX = "^[\\w-=\\+\\*\\.\\(\\)\\[\\]\\@\\|\\:]{1,256}$"; private static final String REGEX_PROP_NAME = "resourceNameRegularExpression"; private static String regex; diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/adsal/FlowServiceAdapter.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/adsal/FlowServiceAdapter.java index 40de6e5507..84508ca03e 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/adsal/FlowServiceAdapter.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/adsal/FlowServiceAdapter.java @@ -14,9 +14,7 @@ import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.common.util.Futures; import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.compatibility.InventoryMapping; -import org.opendaylight.controller.sal.compatibility.NodeMapping; import org.opendaylight.controller.sal.compatibility.ToSalConversionsUtils; -import org.opendaylight.controller.sal.core.ConstructionException; import org.opendaylight.controller.sal.flowprogrammer.Flow; import org.opendaylight.controller.sal.flowprogrammer.IFlowProgrammerListener; import org.opendaylight.controller.sal.flowprogrammer.IFlowProgrammerService; diff --git a/opendaylight/md-sal/model/model-flow-service/src/main/yang/sal-flow.yang b/opendaylight/md-sal/model/model-flow-service/src/main/yang/sal-flow.yang index 091bd43e19..b3e6e450af 100644 --- a/opendaylight/md-sal/model/model-flow-service/src/main/yang/sal-flow.yang +++ b/opendaylight/md-sal/model/model-flow-service/src/main/yang/sal-flow.yang @@ -4,7 +4,9 @@ module sal-flow { import yang-ext {prefix ext; revision-date "2013-07-09";} import opendaylight-inventory {prefix inv;revision-date "2013-08-19";} - import opendaylight-flow-types {prefix types;revision-date "2013-10-26";} + import opendaylight-flow-types {prefix types;revision-date "2013-10-26";} + import opendaylight-group-types {prefix group-type;revision-date 2013-10-18;} + import opendaylight-meter-types {prefix meter-type;revision-date "2013-09-18";} import flow-capable-transaction {prefix tr;} import flow-errors {prefix error;} @@ -122,6 +124,28 @@ module sal-flow { uses error:error-message; uses tr:transaction-aware; uses tr:transaction-metadata; + choice object-reference { + case flow-ref{ + leaf flow-ref { + type types:flow-ref; + } + } + case group-ref{ + leaf group-ref { + type group-type:group-ref; + } + } + case meter-ref{ + leaf meter-ref { + type meter-type:meter-ref; + } + } + } + leaf node { + ext:context-reference "inv:node-context"; + type inv:node-ref; + } + } notification node-experimenter-error-notification { diff --git a/opendaylight/md-sal/pom.xml b/opendaylight/md-sal/pom.xml index 2f594148c9..8b4e478429 100644 --- a/opendaylight/md-sal/pom.xml +++ b/opendaylight/md-sal/pom.xml @@ -102,24 +102,14 @@ UTF-8 - http://nexus.opendaylight.org/content - - 1.7 - 1.7 2.4.0 - 2.3.2 + 2.5 - 1.7.2 - 14.0.1 - 5.0.0 - 4.8.1 1.9.5 2.4.3 - 2.5 - 0.5.3.201107060350 jacoco @@ -133,82 +123,6 @@ 0.7.1-SNAPSHOT - - - - opendaylight-mirror - opendaylight-mirror - ${nexusproxy}/groups/public/ - - false - - - true - never - - - - - opendaylight-snapshot - opendaylight-snapshot - ${nexusproxy}/repositories/opendaylight.snapshot/ - - true - - - false - - - - - - - - - opendaylight-mirror - opendaylight-mirror - ${nexusproxy}/groups/public/ - - false - - - true - never - - - - - opendaylight-snapshot - opendaylight-snapshot - ${nexusproxy}/repositories/opendaylight.snapshot/ - - true - - - false - - - - - - - - opendaylight-release - ${nexusproxy}/repositories/opendaylight.release/ - - - - opendaylight-snapshot - ${nexusproxy}/repositories/opendaylight.snapshot/ - - - - website - ${sitedeploy} - - - - @@ -217,42 +131,6 @@ 1.4.01 - - - org.opendaylight.yangtools - yang-binding - ${yangtools.version} - - - org.opendaylight.yangtools - yang-model-util - ${yangtools.version} - - - org.opendaylight.yangtools - yang-common - ${yangtools.version} - - - org.opendaylight.yangtools - yang-data-api - ${yangtools.version} - - - org.opendaylight.yangtools - yang-data-impl - ${yangtools.version} - - - org.opendaylight.yangtools - yang-model-api - ${yangtools.version} - - - org.opendaylight.yangtools - yang-data-util - ${yangtools.version} - ${project.groupId} @@ -277,11 +155,6 @@ slf4j-api ${slf4j.version} - - com.google.guava - guava - ${guava.version} - org.eclipse.xtend org.eclipse.xtend.lib @@ -292,19 +165,6 @@ org.osgi.core ${osgi.core.version} - - - junit - junit - ${junit.version} - test - - - org.mockito - mockito-all - ${mockito.version} - test - org.opendaylight.yangtools binding-generator-impl @@ -315,16 +175,19 @@ yang-parser-impl ${yangtools.version} + + + + org.mockito + mockito-all + ${mockito.version} + test + - - org.apache.maven.plugins - maven-release-plugin - ${releaseplugin.version} - org.apache.felix maven-bundle-plugin diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareConsumer.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareConsumer.java index fc145c8b16..02bb6b35b9 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareConsumer.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareConsumer.java @@ -7,10 +7,7 @@ */ package org.opendaylight.controller.sal.binding.api; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; -import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; public abstract class AbstractBindingAwareConsumer extends AbstractBrokerAwareActivator implements BindingAwareConsumer { diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareProvider.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareProvider.java index 9d3bff4ef8..068b6c204f 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareProvider.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/AbstractBindingAwareProvider.java @@ -13,12 +13,10 @@ import java.util.Collections; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.yangtools.yang.binding.RpcService; -import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; public abstract class AbstractBindingAwareProvider extends AbstractBrokerAwareActivator implements BindingAwareProvider { - + @Override protected final void onBrokerAvailable(BindingAwareBroker broker, BundleContext context) { ProviderContext ctx = broker.registerProvider(this, context); @@ -57,13 +55,13 @@ public abstract class AbstractBindingAwareProvider extends AbstractBrokerAwareAc public Collection getImplementations() { return Collections.emptySet(); } - + /** * Initialization of consumer context. - * + * * {@link ProviderContext} is replacement of {@link ConsumerContext} * so this method is not needed in case of Provider. - * + * */ @Deprecated @Override diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationProviderService.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationProviderService.java index c28b03eb65..08029dc52f 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationProviderService.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationProviderService.java @@ -12,7 +12,6 @@ import java.util.concurrent.ExecutorService; import org.opendaylight.controller.md.sal.common.api.notify.NotificationPublishService; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.Notification; public interface NotificationProviderService extends NotificationService, NotificationPublishService { @@ -20,7 +19,7 @@ public interface NotificationProviderService extends NotificationService, Notifi /** * Deprecated. Use {@link #publish(Notification)}. - * + * * @param notification */ @Deprecated @@ -28,7 +27,7 @@ public interface NotificationProviderService extends NotificationService, Notifi /** * Deprecated. Use {@link #publish(Notification,ExecutorService)}. - * + * * @param notification */ @Deprecated @@ -36,17 +35,17 @@ public interface NotificationProviderService extends NotificationService, Notifi /** * Publishes a notification. - * + * * @param Notification * notification to publish. - * + * */ @Override void publish(Notification notification); /** * Publishes a notification, listener calls are done in provided executor. - * + * */ @Override void publish(Notification notification, ExecutorService service); diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java index 10b29f7218..24ca2a3de7 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/NotificationService.java @@ -7,25 +7,23 @@ */ package org.opendaylight.controller.sal.binding.api; -import org.opendaylight.controller.md.sal.common.api.notify.NotificationSubscriptionService; -import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.Notification; public interface NotificationService extends BindingAwareService { /** - * + * * Deprecated: use {@link #addNotificationListener(Class, NotificationListener)} istead. - * + * * @param listener */ @Deprecated void addNotificationListener(Class notificationType, NotificationListener listener); /** - * + * * Deprecated: use {@link #addNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener)} istead. - * + * * @param listener */ @Deprecated @@ -45,10 +43,10 @@ public interface NotificationService extends BindingAwareService { @Deprecated void removeNotificationListener(Class notificationType, NotificationListener listener); - + /** * Register a generic listener for specified notification type only. - * + * * @param notificationType * @param listener * @return Registration for listener. To unregister listener invoke {@link Registration#close()} method. @@ -61,7 +59,7 @@ public interface NotificationService extends BindingAwareService { * Register a listener which implements generated notification interfaces derived from * {@link org.opendaylight.yangtools.yang.binding.NotificationListener}. * Listener is registered for all notifications present in implemented interfaces. - * + * * @param listener * @return Registration for listener. To unregister listener invoke {@link Registration#close()} method. */ diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java index fcf8ed5c9e..c64e24c9c2 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/RpcProviderRegistry.java @@ -11,23 +11,22 @@ import org.opendaylight.controller.md.sal.common.api.routing.RouteChangePublishe import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; -import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.RpcService; /** * Interface defining provider's access to the Rpc Registry which could be used * to register their implementations of service to the MD-SAL. - * + * * @author ttkacik - * + * */ public interface RpcProviderRegistry extends // RpcConsumerRegistry, // RouteChangePublisher> { /** * Registers an global RpcService implementation. - * + * * @param type * @param implementation * @return @@ -36,10 +35,10 @@ public interface RpcProviderRegistry extends // throws IllegalStateException; /** - * + * * Register an Routed RpcService where routing is determined on annotated * (in YANG model) context-reference and value of annotated leaf. - * + * * @param type * Type of RpcService, use generated interface class, not your * implementation clas @@ -47,7 +46,7 @@ public interface RpcProviderRegistry extends // * Implementation of RpcService * @return Registration object for routed Rpc which could be used to close * an - * + * * @throws IllegalStateException */ RoutedRpcRegistration addRoutedRpcImplementation(Class type, T implementation) diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataModificationTransaction.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataModificationTransaction.java index 9ce11c71e4..7190638323 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataModificationTransaction.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataModificationTransaction.java @@ -11,9 +11,9 @@ import java.util.EventListener; import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; +import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -22,28 +22,28 @@ public interface DataModificationTransaction extends DataModification * The {@link Consumer} could initiate a commit of candidate data - * + * *

* The successful commit changes the state of the system and may affect * several components. - * + * *

* The effects of successful commit of data are described in the * specifications and YANG models describing the {@link Provider} components * of controller. It is assumed that {@link Consumer} has an understanding * of this changes. - * - * + * + * * @see DataCommitHandler for further information how two-phase commit is * processed. * @param store @@ -53,12 +53,12 @@ public interface DataModificationTransaction extends DataModification> commit(); - - - + + + /** * Register a listener for transaction - * + * * @param listener * @return */ @@ -68,13 +68,13 @@ public interface DataModificationTransaction extends DataModification, DataObject> { - + /** * Registers a data reader for particular subtree of overal YANG data tree. - * - * Registered data reader is called if anyone tries to read data from + * + * Registered data reader is called if anyone tries to read data from * paths which are nested to provided path. - * + * * @param path Subpath which is handled by registered data reader - * @param reader Instance of reader which + * @param reader Instance of reader which * @return Registration object for reader. Invoking {@link Registration#close()} will unregister reader. */ Registration,DataObject>> registerDataReader(InstanceIdentifier path,DataReader,DataObject> reader); diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataRefresher.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataRefresher.java index f54e1315be..3334f2a037 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataRefresher.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/DataRefresher.java @@ -8,19 +8,18 @@ package org.opendaylight.controller.sal.binding.api.data; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; -import org.opendaylight.controller.sal.binding.api.BindingAwareProvider.ProviderFunctionality; /** * Trigger for refreshing of the data exposed by the {@link Provider} - * - * - * + * + * + * */ public interface DataRefresher extends BindingAwareProvider.ProviderFunctionality { /** * Fired when some component explicitly requested the data refresh. - * + * * The provider which exposed the {@link DataRefresher} should republish its * provided data by editing the data in all affected data stores. */ diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/RuntimeDataProvider.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/RuntimeDataProvider.java index 652e14bfa5..85a2b82ee0 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/RuntimeDataProvider.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/data/RuntimeDataProvider.java @@ -7,23 +7,19 @@ */ package org.opendaylight.controller.sal.binding.api.data; -import java.util.Set; - import org.opendaylight.controller.md.sal.common.api.data.DataReader; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider.ProviderFunctionality; -import org.opendaylight.controller.sal.common.DataStoreIdentifier; import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.DataRoot; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** - * Utility interface which does type capture for BindingAware DataReader. - * - * @author + * Utility interface which does type capture for BindingAware DataReader. + * + * @author * */ public interface RuntimeDataProvider extends ProviderFunctionality,DataReader, DataObject> { - - + + } diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountInstance.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountInstance.java index 844b03a180..b4441601cb 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountInstance.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountInstance.java @@ -12,7 +12,6 @@ import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.RpcService; public interface MountInstance // extends // diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountProviderService.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountProviderService.java index f7b584507a..6af9093fdd 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountProviderService.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/mount/MountProviderService.java @@ -9,21 +9,19 @@ package org.opendaylight.controller.sal.binding.api.mount; import java.util.EventListener; -import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** * Provider MountProviderService, this version allows access to MD-SAL services * specific for this mountpoint and registration / provision of interfaces for * mount point. - * + * * @author ttkacik - * + * */ public interface MountProviderService extends MountService { - + @Override public MountProviderInstance getMountPoint(InstanceIdentifier path); diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/rpc/RpcRouter.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/rpc/RpcRouter.java index 31fed62d87..81fe39c62e 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/rpc/RpcRouter.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/sal/binding/api/rpc/RpcRouter.java @@ -14,17 +14,16 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcR import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; import org.opendaylight.yangtools.yang.binding.BaseIdentity; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.RpcImplementation; import org.opendaylight.yangtools.yang.binding.RpcService; /** * RpcRouter is responsible for selecting RpcService based on provided routing * context identifier {@link RpcRoutingTable#getContextIdentifier()} and path in * overal data tree (@link {@link InstanceIdentifier}. - * - * + * + * * @author Tony Tkacik - * + * * @param * Type of RpcService for which router provides routing information * and route selection. @@ -34,23 +33,23 @@ public interface RpcRouter extends // /** * Returns a type of RpcService which is served by this instance of router. - * + * * @return type of RpcService which is served by this instance of router. */ Class getServiceType(); - - + + /** * Returns a instance of T which is associated with this router instance * and routes messages based on routing tables. - * + * * @return type of RpcService which is served by this instance of router. */ T getInvocationProxy(); /** * Returns a routing table for particular route context - * + * * @param routeContext * @return Routing Table for particular route context. */ @@ -59,7 +58,7 @@ public interface RpcRouter extends // /** * Returns an instance of RpcService which is responsible for processing * particular path. - * + * * @param context * Rpc Routing Context * @param path @@ -72,15 +71,15 @@ public interface RpcRouter extends // /** * Returns a default fallback instance of RpcService which is responsible * for handling all unknown imports. - * + * * @return default instance responsible for processing RPCs. */ T getDefaultService(); Set> getContexts(); - + RoutedRpcRegistration addRoutedRpcImplementation(T service); - + RpcRegistration registerDefaultService(T service); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java index ffc8379228..44a508c0a0 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/BindingBrokerImplModule.java @@ -23,8 +23,6 @@ import org.opendaylight.controller.sal.binding.impl.forward.DomForwardedBindingB import org.opendaylight.controller.sal.binding.impl.forward.DomForwardingUtils; import org.osgi.framework.BundleContext; -import com.google.common.util.concurrent.MoreExecutors; - /** * */ diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java index 0a503d5642..b6c27a6332 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/NotificationBrokerImplModule.java @@ -7,15 +7,10 @@ */ package org.opendaylight.controller.config.yang.md.sal.binding.impl; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; - import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; import org.opendaylight.controller.sal.binding.impl.NotificationBrokerImpl; import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; /** * diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java index 583591615c..0762739c63 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/config/yang/md/sal/binding/impl/RuntimeMappingModule.java @@ -11,8 +11,6 @@ import java.util.Hashtable; import java.util.Map.Entry; import java.util.Set; -import javassist.ClassPool; - import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.sal.binding.generator.impl.RuntimeGeneratedMappingServiceImpl; @@ -115,39 +113,47 @@ public final class RuntimeMappingModule extends this.delegate = Preconditions.checkNotNull(delegate); } + @Override public CodecRegistry getCodecRegistry() { return delegate.getCodecRegistry(); } + @Override public CompositeNode toDataDom(DataObject data) { return delegate.toDataDom(data); } + @Override public Entry toDataDom( Entry, DataObject> entry) { return delegate.toDataDom(entry); } + @Override public InstanceIdentifier toDataDom( org.opendaylight.yangtools.yang.binding.InstanceIdentifier path) { return delegate.toDataDom(path); } + @Override public DataObject dataObjectFromDataDom( org.opendaylight.yangtools.yang.binding.InstanceIdentifier path, CompositeNode result) throws DeserializationException { return delegate.dataObjectFromDataDom(path, result); } + @Override public org.opendaylight.yangtools.yang.binding.InstanceIdentifier fromDataDom(InstanceIdentifier entry) throws DeserializationException { return delegate.fromDataDom(entry); } + @Override public Set getRpcQNamesFor(Class service) { return delegate.getRpcQNamesFor(service); } + @Override public DataContainer dataObjectFromDataDom(Class inputClass, CompositeNode domInput) { return delegate.dataObjectFromDataDom(inputClass, domInput); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRouterCodegenInstance.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRouterCodegenInstance.java index 4f994e5673..5578f75ae2 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRouterCodegenInstance.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRouterCodegenInstance.java @@ -7,29 +7,26 @@ */ package org.opendaylight.controller.sal.binding.codegen.impl; -import org.opendaylight.yangtools.yang.binding.RpcService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; -import org.opendaylight.controller.sal.binding.api.rpc.RpcRouter; -import org.opendaylight.controller.sal.binding.api.rpc.RpcRoutingTable; -import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper; -import org.opendaylight.yangtools.yang.binding.BaseIdentity; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import static org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper.*; +import static org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper.setRoutingTable; +import java.util.HashMap; import java.util.Map; import java.util.Set; -import java.util.HashMap; -import org.opendaylight.yangtools.yang.binding.DataContainer; -import org.opendaylight.yangtools.yang.binding.RpcImplementation; -import org.opendaylight.controller.md.sal.common.api.routing.MutableRoutingTable; import org.opendaylight.controller.md.sal.common.api.routing.RouteChange; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; +import org.opendaylight.controller.sal.binding.api.rpc.RpcRouter; +import org.opendaylight.controller.sal.binding.api.rpc.RpcRoutingTable; +import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.util.ListenerRegistry; +import org.opendaylight.yangtools.yang.binding.BaseIdentity; +import org.opendaylight.yangtools.yang.binding.DataContainer; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.RpcService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,11 +63,11 @@ public class RpcRouterCodegenInstance implements // Map, RpcRoutingTableImpl> mutableRoutingTables = new HashMap<>(); for (Class ctx : contexts) { RpcRoutingTableImpl table = new RpcRoutingTableImpl<>(name,ctx,type); - + @SuppressWarnings("rawtypes") Map invokerView = table.getRoutes(); - - setRoutingTable((RpcService) invocationProxy, ctx, invokerView); + + setRoutingTable(invocationProxy, ctx, invokerView); mutableRoutingTables.put(ctx, table); table.registerRouteChangeListener(this); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRoutingTableImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRoutingTableImpl.java index 500b1b399e..ce159b8f3e 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRoutingTableImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/RpcRoutingTableImpl.java @@ -7,24 +7,21 @@ */ package org.opendaylight.controller.sal.binding.codegen.impl; -import org.opendaylight.controller.sal.binding.api.rpc.RpcRoutingTable; -import org.opendaylight.yangtools.yang.binding.BaseIdentity; -import org.opendaylight.yangtools.yang.binding.RpcService; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - import java.util.Collections; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.controller.md.sal.common.api.routing.RouteChangePublisher; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; +import org.opendaylight.controller.md.sal.common.api.routing.RouteChangePublisher; import org.opendaylight.controller.md.sal.common.impl.routing.RoutingUtils; +import org.opendaylight.controller.sal.binding.api.rpc.RpcRoutingTable; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.Mutable; +import org.opendaylight.yangtools.yang.binding.BaseIdentity; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.RpcService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,7 +41,7 @@ implements // private RouteChangeListener, InstanceIdentifier> listener; private S defaultRoute; - + public RpcRoutingTableImpl(String routerName,Class contextType, Class serviceType) { super(); this.routerName = routerName; @@ -67,9 +64,9 @@ implements // @Override public , InstanceIdentifier>> ListenerRegistration registerRouteChangeListener( L listener) { - return (ListenerRegistration) new SingletonListenerRegistration(listener); + return new SingletonListenerRegistration(listener); } - + @Override public Class getIdentifier() { return contextType; @@ -79,7 +76,7 @@ implements // @SuppressWarnings("unchecked") public void updateRoute(InstanceIdentifier path, S service) { S previous = this.routes.put(path, service); - + LOGGER.debug("Route {} updated to {} in routing table {}",path,service,this); @SuppressWarnings("rawtypes") RouteChangeListener listenerCapture = listener; @@ -88,7 +85,7 @@ implements // } } - + @Override @SuppressWarnings("unchecked") public void removeRoute(InstanceIdentifier path) { @@ -100,7 +97,7 @@ implements // listenerCapture.onRouteChange(RoutingUtils.removalChange(contextType, path)); } } - + public void removeRoute(InstanceIdentifier path, S service) { @SuppressWarnings("rawtypes") RouteChangeListener listenerCapture = listener; @@ -123,12 +120,12 @@ implements // public Map, S> getRoutes() { return unmodifiableRoutes; } - + protected void removeAllReferences(S service) { - + } - - + + @Override public String toString() { diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java index 244e350343..291677a79a 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/SingletonHolder.java @@ -9,9 +9,10 @@ package org.opendaylight.controller.sal.binding.codegen.impl; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; +import javassist.ClassPool; + import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeGenerator; import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory; @@ -19,8 +20,6 @@ import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.ThreadFactoryBuilder; -import javassist.ClassPool; - public class SingletonHolder { public static final ClassPool CLASS_POOL = new ClassPool(); diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java index 3cc66c30c1..ddf67719dc 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataBrokerImpl.java @@ -8,19 +8,18 @@ package org.opendaylight.controller.sal.binding.impl; import java.util.Set; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicLong; - -import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataBroker; -import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; -import org.opendaylight.controller.sal.binding.api.data.DataProviderService; -import org.opendaylight.controller.sal.binding.impl.util.BindingAwareDataReaderRouter; -import org.opendaylight.controller.sal.common.DataStoreIdentifier; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.DataRoot; -import org.opendaylight.yangtools.yang.binding.Identifiable; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.common.RpcResult; +import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicLong; + +import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataBroker; +import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; +import org.opendaylight.controller.sal.binding.api.data.DataProviderService; +import org.opendaylight.controller.sal.binding.impl.util.BindingAwareDataReaderRouter; +import org.opendaylight.controller.sal.common.DataStoreIdentifier; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.DataRoot; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.RpcResult; public class DataBrokerImpl extends AbstractDataBroker, DataObject, DataChangeListener> // @@ -28,7 +27,7 @@ public class DataBrokerImpl extends AbstractDataBroker key, Set> paths) { diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataTransactionImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataTransactionImpl.java index 290ff2232f..1ea2eba87f 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataTransactionImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/DataTransactionImpl.java @@ -10,18 +10,17 @@ package org.opendaylight.controller.sal.binding.impl; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataTransaction; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; -import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction.DataTransactionListener; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.util.ListenerRegistry; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -public class DataTransactionImpl extends AbstractDataTransaction, DataObject> +public class DataTransactionImpl extends AbstractDataTransaction, DataObject> implements DataModificationTransaction { private final ListenerRegistry listeners = new ListenerRegistry(); - - - + + + public DataTransactionImpl(Object identifier,DataBrokerImpl dataBroker) { super(identifier,dataBroker); } @@ -31,6 +30,7 @@ public class DataTransactionImpl extends AbstractDataTransaction listenerRegistration : listeners) { listenerRegistration.getInstance().onStatusUpdated(this, status); diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java index 6844e3845b..e98d5b9942 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/RpcProviderRegistryImpl.java @@ -7,29 +7,28 @@ */ package org.opendaylight.controller.sal.binding.impl; +import static com.google.common.base.Preconditions.checkState; + import java.util.EventListener; +import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.HashMap; import java.util.Set; import java.util.WeakHashMap; -import javax.swing.tree.ExpandVetoException; - import org.opendaylight.controller.md.sal.common.api.routing.RouteChange; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangePublisher; import org.opendaylight.controller.md.sal.common.impl.routing.RoutingUtils; -import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; +import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; import org.opendaylight.controller.sal.binding.api.rpc.RpcRouter; import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeGenerator; import org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper; import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder; -import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; -import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.util.ListenerRegistry; import org.opendaylight.yangtools.yang.binding.BaseIdentity; @@ -38,8 +37,6 @@ import org.opendaylight.yangtools.yang.binding.RpcService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.google.common.base.Preconditions.*; - public class RpcProviderRegistryImpl implements // RpcProviderRegistry, // RouteChangePublisher> { @@ -56,7 +53,7 @@ public class RpcProviderRegistryImpl implements // private final String name; - private ListenerRegistry globalRpcListeners = ListenerRegistry.create(); + private final ListenerRegistry globalRpcListeners = ListenerRegistry.create(); public String getName() { return name; @@ -108,7 +105,7 @@ public class RpcProviderRegistryImpl implements // potentialProxy = (T) publicProxies.get(type); if (potentialProxy != null) { - return (T) potentialProxy; + return potentialProxy; } T proxy = rpcFactory.getDirectProxyFor(type); LOG.debug("Created {} as public proxy for {} in {}", proxy, type.getSimpleName(), this); @@ -150,7 +147,7 @@ public class RpcProviderRegistryImpl implements // LOG.error("Unhandled exception during invoking listener {}", e); } } - + } private void notifyListenersRoutedCreated(RpcRouter router) { @@ -195,7 +192,7 @@ public class RpcProviderRegistryImpl implements // public interface RouterInstantiationListener extends EventListener { void onRpcRouterCreated(RpcRouter router); } - + public ListenerRegistration registerGlobalRpcRegistrationListener(GlobalRpcRegistrationListener listener) { return globalRpcListeners.register(listener); } @@ -203,7 +200,7 @@ public class RpcProviderRegistryImpl implements // public interface GlobalRpcRegistrationListener extends EventListener { void onGlobalRpcRegistered(Class cls); void onGlobalRpcUnregistered(Class cls); - + } private class RouteChangeForwarder implements diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DataModificationTracker.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DataModificationTracker.java index e89797ca2d..8278b36551 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DataModificationTracker.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DataModificationTracker.java @@ -13,19 +13,13 @@ import java.util.concurrent.ConcurrentMap; import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.yangtools.concepts.Path; -import com.google.common.util.concurrent.JdkFutureAdapters; - public final class DataModificationTracker

,D> { - ConcurrentMap> trackedTransactions = new ConcurrentHashMap<>(); - - + public void startTrackingModification(DataModification modification) { trackedTransactions.putIfAbsent(modification.getIdentifier(), modification); - - } - + public boolean containsIdentifier(Object identifier) { return trackedTransactions.containsKey(identifier); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/AbstractDataServiceTest.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/AbstractDataServiceTest.java index 7c38ff2731..6c80f4d739 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/AbstractDataServiceTest.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/AbstractDataServiceTest.java @@ -10,12 +10,11 @@ package org.opendaylight.controller.sal.binding.test; import org.junit.After; import org.junit.Before; import org.opendaylight.controller.sal.binding.api.data.DataProviderService; -import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService; import org.opendaylight.controller.sal.binding.test.util.BindingBrokerTestFactory; import org.opendaylight.controller.sal.binding.test.util.BindingTestContext; import org.opendaylight.controller.sal.core.api.data.DataStore; import org.opendaylight.controller.sal.dom.broker.impl.DataStoreStatsWrapper; -import org.opendaylight.controller.sal.dom.broker.impl.HashMapDataStore; +import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/RuntimeCodeGeneratorTest.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/RuntimeCodeGeneratorTest.java index 76abd833e9..4afbc29842 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/RuntimeCodeGeneratorTest.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/RuntimeCodeGeneratorTest.java @@ -7,22 +7,20 @@ */ package org.opendaylight.controller.sal.binding.test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; import javassist.ClassPool; import org.junit.Before; import org.junit.Test; - -import static org.opendaylight.controller.sal.binding.codegen.RuntimeCodeHelper.*; - -import org.opendaylight.controller.sal.binding.api.NotificationListener; import org.opendaylight.controller.sal.binding.api.rpc.RpcRouter; import org.opendaylight.controller.sal.binding.api.rpc.RpcRoutingTable; import org.opendaylight.controller.sal.binding.codegen.impl.RuntimeCodeGenerator; @@ -30,12 +28,10 @@ import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory; import org.opendaylight.controller.sal.binding.spi.NotificationInvokerFactory.NotificationInvoker; import org.opendaylight.controller.sal.binding.test.mock.BarListener; import org.opendaylight.controller.sal.binding.test.mock.BarUpdate; -import org.opendaylight.controller.sal.binding.test.mock.CompositeListener; import org.opendaylight.controller.sal.binding.test.mock.FlowDelete; import org.opendaylight.controller.sal.binding.test.mock.FooListener; import org.opendaylight.controller.sal.binding.test.mock.FooService; import org.opendaylight.controller.sal.binding.test.mock.FooUpdate; -import org.opendaylight.controller.sal.binding.test.mock.InheritedContextInput; import org.opendaylight.controller.sal.binding.test.mock.ReferencableObject; import org.opendaylight.controller.sal.binding.test.mock.ReferencableObjectKey; import org.opendaylight.controller.sal.binding.test.mock.SimpleInput; @@ -47,8 +43,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; -import static org.mockito.Mockito.*; - public class RuntimeCodeGeneratorTest { private RuntimeCodeGenerator codeGenerator; @@ -84,7 +78,7 @@ public class RuntimeCodeGeneratorTest { NotificationInvoker invokerFoo = invokerFactory.invokerFor(fooListener); - + assertSame(fooListener,invokerFoo.getDelegate()); assertNotNull(invokerFoo.getSupportedNotifications()); assertEquals(1, invokerFoo.getSupportedNotifications().size()); diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingBrokerTestFactory.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingBrokerTestFactory.java index 2b0865ae46..e5b57e3668 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingBrokerTestFactory.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/sal/binding/test/util/BindingBrokerTestFactory.java @@ -11,11 +11,6 @@ import java.util.concurrent.ExecutorService; import javassist.ClassPool; -import org.opendaylight.controller.sal.core.api.data.DataStore; -import org.opendaylight.controller.sal.dom.broker.impl.DataStoreStatsWrapper; -import org.opendaylight.controller.sal.dom.broker.impl.HashMapDataStore; -import org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareDataStoreAdapter; - import com.google.common.base.Preconditions; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; @@ -27,7 +22,7 @@ public class BindingBrokerTestFactory { private ExecutorService executor; private ClassPool classPool; - + public boolean isStartWithParsedSchema() { return startWithParsedSchema; } @@ -55,7 +50,7 @@ public class BindingBrokerTestFactory { if(classPool == null) { return CLASS_POOL; } - + return classPool; } diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug01Test.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug01Test.java index ec8c8372c1..d016754385 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug01Test.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug01Test.java @@ -7,6 +7,10 @@ */ package org.opendaylight.controller.sal.binding.test.bugfix; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -15,17 +19,10 @@ import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; - - - - - - - import org.junit.Test; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; -import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; +import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action; @@ -40,15 +37,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -63,8 +58,6 @@ import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; -import static org.junit.Assert.*; - public class DOMCodecBug01Test extends AbstractDataServiceTest { private static final QName NODE_ID_QNAME = QName.create(Node.QNAME, "id"); @@ -182,7 +175,7 @@ public class DOMCodecBug01Test extends AbstractDataServiceTest { flow.setNode(NODE_REF); InstructionsBuilder instructions = new InstructionsBuilder(); InstructionBuilder instruction = new InstructionBuilder(); - + instruction.setOrder(10); ApplyActionsBuilder applyActions = new ApplyActionsBuilder(); List actionList = new ArrayList<>(); @@ -204,7 +197,7 @@ public class DOMCodecBug01Test extends AbstractDataServiceTest { assertNotNull(ret); assertEquals(TransactionStatus.COMMITED, ret.getResult()); } - + private void createFlow2() throws Exception { DataModificationTransaction modification = baDataService.beginTransaction(); long id = 123; @@ -215,7 +208,7 @@ public class DOMCodecBug01Test extends AbstractDataServiceTest { MatchBuilder match = new MatchBuilder(); match.setLayer4Match(new TcpMatchBuilder().build()); flow.setMatch(match.build()); - + path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, key).toInstance(); // DataObject cls = (DataObject) modification.readConfigurationData(path1); modification.putConfigurationData(path1, flow.build()); diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug02Test.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug02Test.java index 929eb66350..9d60440698 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug02Test.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug02Test.java @@ -7,6 +7,9 @@ */ package org.opendaylight.controller.sal.binding.test.bugfix; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + import java.util.Collections; import java.util.Map; import java.util.concurrent.Callable; @@ -16,29 +19,24 @@ import java.util.concurrent.Future; import javassist.ClassPool; -import org.junit.Ignore; import org.junit.Test; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; +import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest; import org.opendaylight.controller.sal.binding.test.util.BindingBrokerTestFactory; -import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; -import static org.junit.Assert.*; - public class DOMCodecBug02Test extends AbstractDataServiceTest { private static final QName NODE_ID_QNAME = QName.create(Node.QNAME, "id"); @@ -70,10 +68,11 @@ public class DOMCodecBug02Test extends AbstractDataServiceTest { /** * This test is ignored, till found out better way to test generation * of classes without leaking of instances from previous run - * + * * @throws Exception */ - + + @Override public void setUp() { ListeningExecutorService executor = MoreExecutors.sameThreadExecutor(); BindingBrokerTestFactory factory = new BindingBrokerTestFactory(); @@ -82,13 +81,13 @@ public class DOMCodecBug02Test extends AbstractDataServiceTest { factory.setStartWithParsedSchema(getStartWithSchema()); testContext = factory.getTestContext(); testContext.start(); - + baDataService = testContext.getBindingDataBroker(); biDataService = testContext.getDomDataBroker(); dataStore = testContext.getDomDataStore(); mappingService = testContext.getBindingToDomMappingService(); }; - + @Test public void testSchemaContextNotAvailable() throws Exception { @@ -104,11 +103,11 @@ public class DOMCodecBug02Test extends AbstractDataServiceTest { return transaction.commit(); } }); - - + + RpcResult result = future.get().get(); assertEquals(TransactionStatus.COMMITED, result.getResult()); - + Nodes nodes = checkForNodes(); assertNotNull(nodes); @@ -118,7 +117,7 @@ public class DOMCodecBug02Test extends AbstractDataServiceTest { return (Nodes) baDataService.readOperationalData(NODES_INSTANCE_ID_BA); } - + @Override protected boolean getStartWithSchema() { return false; diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug03Test.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug03Test.java index f2576e9960..6a050efb35 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug03Test.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/DOMCodecBug03Test.java @@ -6,7 +6,11 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.sal.binding.test.bugfix; -import java.util.Arrays; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + import java.util.Collections; import java.util.List; import java.util.Map; @@ -14,35 +18,31 @@ import java.util.Map; import org.junit.Test; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; -import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest; import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; +import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.SupportedActions; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.SupportedActionsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.supported.actions.ActionType; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.supported.actions.ActionTypeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.SupportType; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.SupportType; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesKey; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import static org.junit.Assert.*; - public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataChangeListener { private static final QName NODE_ID_QNAME = QName.create(Node.QNAME, "id"); @@ -60,15 +60,15 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh private static final InstanceIdentifier NODE_INSTANCE_ID_BA = InstanceIdentifier// .builder(NODES_INSTANCE_ID_BA) // .child(Node.class, NODE_KEY).toInstance(); - - + + private static final InstanceIdentifier SUPPORTED_ACTIONS_INSTANCE_ID_BA = InstanceIdentifier// .builder(NODES_INSTANCE_ID_BA) // .child(Node.class, NODE_KEY) // .augmentation(FlowCapableNode.class) // .child(SupportedActions.class) .toInstance(); - + private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier NODE_INSTANCE_ID_BI = // org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() // @@ -77,35 +77,35 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh .toInstance(); private static final QName SUPPORTED_ACTIONS_QNAME = QName.create(FlowCapableNode.QNAME, SupportedActions.QNAME.getLocalName()); - + private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier SUPPORTED_ACTIONS_INSTANCE_ID_BI = // org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() // .node(Nodes.QNAME) // .nodeWithKey(Node.QNAME, NODE_KEY_BI) // .node(SUPPORTED_ACTIONS_QNAME) // .toInstance(); - + private DataChangeEvent, DataObject> receivedChangeEvent; - - + + /** * Test for Bug 148 - * + * * @throws Exception */ @Test public void testAugmentSerialization() throws Exception { - + baDataService.registerDataChangeListener(NODES_INSTANCE_ID_BA, this); - + NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setId(new NodeId(NODE_ID)); nodeBuilder.setKey(NODE_KEY); DataModificationTransaction transaction = baDataService.beginTransaction(); - - + + FlowCapableNodeBuilder fnub = new FlowCapableNodeBuilder(); fnub.setHardware("Hardware Foo"); fnub.setManufacturer("Manufacturer Foo"); @@ -116,47 +116,47 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh nodeBuilder.addAugmentation(FlowCapableNode.class, fnu); Node original = nodeBuilder.build(); transaction.putOperationalData(NODE_INSTANCE_ID_BA, original); - + RpcResult result = transaction.commit().get(); assertEquals(TransactionStatus.COMMITED, result.getResult()); - + assertNotNull(receivedChangeEvent); - + verifyNodes((Nodes) receivedChangeEvent.getUpdatedOperationalSubtree(),original); assertBindingIndependentVersion(NODE_INSTANCE_ID_BI); Nodes nodes = checkForNodes(); verifyNodes(nodes,original); - + testAddingNodeConnector(); testNodeRemove(); } - + @Test public void testAugmentNestedSerialization() throws Exception { DataModificationTransaction transaction = baDataService.beginTransaction(); - + SupportedActionsBuilder actions = new SupportedActionsBuilder(); ActionTypeBuilder action = new ActionTypeBuilder(); action.setAction("foo-action"); action.setSupportState(SupportType.Native); List actionTypes = Collections.singletonList(action.build()); actions.setActionType(actionTypes ); - + transaction.putOperationalData(SUPPORTED_ACTIONS_INSTANCE_ID_BA, actions.build()); RpcResult putResult = transaction.commit().get(); assertNotNull(putResult); assertEquals(TransactionStatus.COMMITED, putResult.getResult()); SupportedActions readedTable = (SupportedActions) baDataService.readOperationalData(SUPPORTED_ACTIONS_INSTANCE_ID_BA); assertNotNull(readedTable); - + CompositeNode biSupportedActions = biDataService.readOperationalData(SUPPORTED_ACTIONS_INSTANCE_ID_BI); assertNotNull(biSupportedActions); - + } private void testAddingNodeConnector() throws Exception { - + NodeConnectorId ncId = new NodeConnectorId("openflow:1:bar"); NodeConnectorKey nodeKey = new NodeConnectorKey(ncId ); InstanceIdentifier ncInstanceId = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA).child(NodeConnector.class, nodeKey).toInstance(); @@ -181,7 +181,7 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh transaction.removeOperationalData(NODE_INSTANCE_ID_BA); RpcResult result = transaction.commit().get(); assertEquals(TransactionStatus.COMMITED, result.getResult()); - + Node node = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA); assertNull(node); } @@ -193,13 +193,13 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh Node readedNode = nodes.getNode().get(0); assertEquals(original.getId(), readedNode.getId()); assertEquals(original.getKey(), readedNode.getKey()); - + FlowCapableNode fnu = original.getAugmentation(FlowCapableNode.class); FlowCapableNode readedAugment = readedNode.getAugmentation(FlowCapableNode.class); assertNotNull(fnu); assertEquals(fnu.getDescription(), readedAugment.getDescription()); assertEquals(fnu.getSerialNumber(), readedAugment.getSerialNumber()); - + } private void assertBindingIndependentVersion( @@ -211,7 +211,7 @@ public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataCh private Nodes checkForNodes() { return (Nodes) baDataService.readOperationalData(NODES_INSTANCE_ID_BA); } - + @Override public void onDataChanged(DataChangeEvent, DataObject> change) { receivedChangeEvent = change; diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/PutAugmentationTest.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/PutAugmentationTest.java index 8003e37e4e..598743af90 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/PutAugmentationTest.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/PutAugmentationTest.java @@ -6,46 +6,39 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.sal.binding.test.bugfix; -import java.util.Arrays; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + import java.util.Collections; -import java.util.List; import java.util.Map; import org.junit.Test; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent; -import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest; import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; +import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.SupportedActions; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.SupportedActionsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.supported.actions.ActionType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.supported.actions.ActionTypeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.SupportType; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesKey; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import static org.junit.Assert.*; - public class PutAugmentationTest extends AbstractDataServiceTest implements DataChangeListener { private static final QName NODE_ID_QNAME = QName.create(Node.QNAME, "id"); @@ -63,15 +56,15 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data private static final InstanceIdentifier NODE_INSTANCE_ID_BA = InstanceIdentifier// .builder(NODES_INSTANCE_ID_BA) // .child(Node.class, NODE_KEY).toInstance(); - - + + private static final InstanceIdentifier SUPPORTED_ACTIONS_INSTANCE_ID_BA = InstanceIdentifier// .builder(NODES_INSTANCE_ID_BA) // .child(Node.class, NODE_KEY) // .augmentation(FlowCapableNode.class) // .child(SupportedActions.class) .toInstance(); - + private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier NODE_INSTANCE_ID_BI = // org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() // @@ -80,28 +73,28 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data .toInstance(); private static final QName SUPPORTED_ACTIONS_QNAME = QName.create(FlowCapableNode.QNAME, SupportedActions.QNAME.getLocalName()); - + private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier SUPPORTED_ACTIONS_INSTANCE_ID_BI = // org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() // .node(Nodes.QNAME) // .nodeWithKey(Node.QNAME, NODE_KEY_BI) // .node(SUPPORTED_ACTIONS_QNAME) // .toInstance(); - + private DataChangeEvent, DataObject> receivedChangeEvent; - - + + /** * Test for Bug 148 - * + * * @throws Exception */ @Test public void putNodeAndAugmentation() throws Exception { baDataService.registerDataChangeListener(NODES_INSTANCE_ID_BA, this); - + NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setId(new NodeId(NODE_ID)); nodeBuilder.setKey(NODE_KEY); @@ -113,7 +106,7 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data Node node = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA); assertNotNull(node); assertEquals(NODE_KEY, node.getKey()); - + FlowCapableNodeBuilder fnub = new FlowCapableNodeBuilder(); fnub.setHardware("Hardware Foo"); fnub.setManufacturer("Manufacturer Foo"); @@ -124,11 +117,11 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data InstanceIdentifier augmentIdentifier = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA).augmentation(FlowCapableNode.class).toInstance(); DataModificationTransaction augmentedTransaction = baDataService.beginTransaction(); augmentedTransaction.putOperationalData(augmentIdentifier, fnu); - + result = augmentedTransaction.commit().get(); assertEquals(TransactionStatus.COMMITED, result.getResult()); - - + + Node augmentedNode = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA); assertNotNull(node); assertEquals(NODE_KEY, augmentedNode.getKey()); @@ -139,10 +132,10 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data assertBindingIndependentVersion(NODE_INSTANCE_ID_BI); testNodeRemove(); } - + @Test public void putNodeWithAugmentation() throws Exception { - + NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setId(new NodeId(NODE_ID)); nodeBuilder.setKey(NODE_KEY); @@ -153,41 +146,41 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data fnub.setDescription("Description Foo"); fnub.setSoftware("JUnit emulated"); FlowCapableNode fnu = fnub.build(); - + nodeBuilder.addAugmentation(FlowCapableNode.class, fnu); DataModificationTransaction baseTransaction = baDataService.beginTransaction(); baseTransaction.putOperationalData(NODE_INSTANCE_ID_BA, nodeBuilder.build()); RpcResult result = baseTransaction.commit().get(); assertEquals(TransactionStatus.COMMITED, result.getResult()); - + FlowCapableNode readedAugmentation = (FlowCapableNode) baDataService.readOperationalData(InstanceIdentifier.builder(NODE_INSTANCE_ID_BA).augmentation(FlowCapableNode.class).toInstance()); assertNotNull(readedAugmentation); assertEquals(fnu.getHardware(), readedAugmentation.getHardware()); - + testPutNodeConnectorWithAugmentation(); testNodeRemove(); } - + private void testPutNodeConnectorWithAugmentation() throws Exception { NodeConnectorKey ncKey = new NodeConnectorKey(new NodeConnectorId("test:0:0")); InstanceIdentifier ncPath = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA) .child(NodeConnector.class, ncKey).toInstance(); InstanceIdentifier ncAugmentPath = InstanceIdentifier.builder(ncPath) .augmentation(FlowCapableNodeConnector.class).toInstance(); - + NodeConnectorBuilder nc = new NodeConnectorBuilder(); nc.setKey(ncKey); - + FlowCapableNodeConnectorBuilder fncb = new FlowCapableNodeConnectorBuilder(); fncb.setName("Baz"); nc.addAugmentation(FlowCapableNodeConnector.class, fncb.build()); - + DataModificationTransaction baseTransaction = baDataService.beginTransaction(); baseTransaction.putOperationalData(ncPath, nc.build()); RpcResult result = baseTransaction.commit().get(); assertEquals(TransactionStatus.COMMITED, result.getResult()); - + FlowCapableNodeConnector readedAugmentation = (FlowCapableNodeConnector) baDataService.readOperationalData(ncAugmentPath); assertNotNull(readedAugmentation); assertEquals(fncb.getName(), readedAugmentation.getName()); @@ -198,7 +191,7 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data transaction.removeOperationalData(NODE_INSTANCE_ID_BA); RpcResult result = transaction.commit().get(); assertEquals(TransactionStatus.COMMITED, result.getResult()); - + Node node = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA); assertNull(node); } @@ -210,13 +203,13 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data Node readedNode = nodes.getNode().get(0); assertEquals(original.getId(), readedNode.getId()); assertEquals(original.getKey(), readedNode.getKey()); - + FlowCapableNode fnu = original.getAugmentation(FlowCapableNode.class); FlowCapableNode readedAugment = readedNode.getAugmentation(FlowCapableNode.class); assertNotNull(fnu); assertEquals(fnu.getDescription(), readedAugment.getDescription()); assertEquals(fnu.getSerialNumber(), readedAugment.getSerialNumber()); - + } private void assertBindingIndependentVersion( @@ -228,7 +221,7 @@ public class PutAugmentationTest extends AbstractDataServiceTest implements Data private Nodes checkForNodes() { return (Nodes) baDataService.readOperationalData(NODES_INSTANCE_ID_BA); } - + @Override public void onDataChanged(DataChangeEvent, DataObject> change) { receivedChangeEvent = change; diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/CrossBrokerMountPointTest.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/CrossBrokerMountPointTest.java index ab86836f95..63094ef3cb 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/CrossBrokerMountPointTest.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/CrossBrokerMountPointTest.java @@ -14,11 +14,8 @@ import java.math.BigInteger; import java.util.Collections; import java.util.Map; -import javax.management.Notification; - import org.junit.Before; import org.junit.Test; -import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.md.sal.common.api.data.DataReader; import org.opendaylight.controller.sal.binding.api.mount.MountProviderInstance; import org.opendaylight.controller.sal.binding.api.mount.MountProviderService; @@ -27,11 +24,8 @@ import org.opendaylight.controller.sal.binding.test.util.BindingTestContext; import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance; import org.opendaylight.controller.sal.core.api.mount.MountProvisionService; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupStatistics; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.group.statistics.GroupStatistics; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId; @@ -42,14 +36,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; -import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode; -import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder; -import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.MoreExecutors; public class CrossBrokerMountPointTest { @@ -127,8 +118,8 @@ public class CrossBrokerMountPointTest { assertNotNull(bindingMountPoint); final BigInteger packetCount = BigInteger.valueOf(500L); - - + + DataReader simpleReader = new DataReader() { @Override @@ -136,7 +127,7 @@ public class CrossBrokerMountPointTest { return null; } - + @Override public CompositeNode readOperationalData(org.opendaylight.yangtools.yang.data.api.InstanceIdentifier arg0) { if (arg0.equals(GROUP_STATISTICS_ID_BI)) { @@ -153,7 +144,7 @@ public class CrossBrokerMountPointTest { }; domMountPoint.registerOperationalReader(NODE_INSTANCE_ID_BI, simpleReader); - + GroupStatistics data = (GroupStatistics) bindingMountPoint.readOperationalData(GROUP_STATISTICS_ID_BA); assertNotNull(data); assertEquals(packetCount,data.getPacketCount().getValue()); diff --git a/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java b/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java index 3c5efa5e3a..4e4416777b 100644 --- a/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java +++ b/opendaylight/md-sal/sal-binding-it/src/main/java/org/opendaylight/controller/test/sal/binding/it/TestHelper.java @@ -10,8 +10,6 @@ package org.opendaylight.controller.test.sal.binding.it; import static org.ops4j.pax.exam.CoreOptions.frameworkProperty; import static org.ops4j.pax.exam.CoreOptions.junitBundles; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; -import static org.ops4j.pax.exam.CoreOptions.repository; -import static org.ops4j.pax.exam.CoreOptions.repositories; import static org.ops4j.pax.exam.CoreOptions.systemProperty; import org.ops4j.pax.exam.Option; @@ -91,9 +89,9 @@ public class TestHelper { public static Option bindingAwareSalBundles() { return new DefaultCompositeOption( // mdSalCoreBundles(), - + mavenBundle("org.javassist", "javassist").versionAsInProject(), // // - + mavenBundle(YANGTOOLS, "yang-data-api").versionAsInProject(), // // mavenBundle(YANGTOOLS, "yang-data-impl").versionAsInProject(), // // mavenBundle(YANGTOOLS, "yang-model-api").versionAsInProject(), // // @@ -109,7 +107,7 @@ public class TestHelper { "binding-generator-spi").versionAsInProject(), // mavenBundle(YANGTOOLS, "binding-generator-impl").versionAsInProject(), mavenBundle(YANGTOOLS + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), // // - + mavenBundle(CONTROLLER, "sal-core-api").versionAsInProject().update(), // mavenBundle(CONTROLLER, "sal-binding-api").versionAsInProject(), // // mavenBundle(CONTROLLER, "sal-binding-config").versionAsInProject(), // @@ -118,7 +116,7 @@ public class TestHelper { mavenBundle(CONTROLLER, "sal-common-util").versionAsInProject(), // // - + mavenBundle(CONTROLLER, "sal-broker-impl").versionAsInProject(), // // mavenBundle(CONTROLLER, "sal-core-spi").versionAsInProject().update(), // diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTestProvider.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTestProvider.java index 2aa7493e45..da47b174f1 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTestProvider.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractTestProvider.java @@ -11,7 +11,6 @@ import java.util.Collection; import java.util.Collections; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.yangtools.yang.binding.RpcService; diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java index a55e395c5b..b23ceaaf15 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/NoficationTest.java @@ -19,7 +19,6 @@ import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; -import org.opendaylight.controller.sal.binding.api.BindingAwareProvider.ProviderFunctionality; import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; @@ -38,8 +37,8 @@ import org.opendaylight.yangtools.yang.binding.RpcService; public class NoficationTest extends AbstractTest { - private FlowListener listener1 = new FlowListener(); - private FlowListener listener2 = new FlowListener(); + private final FlowListener listener1 = new FlowListener(); + private final FlowListener listener2 = new FlowListener(); private Registration listener1Reg; private Registration listener2Reg; @@ -53,9 +52,9 @@ public class NoficationTest extends AbstractTest { @Test public void notificationTest() throws Exception { /** - * + * * The registration of the Provider 1. - * + * */ AbstractTestProvider provider1 = new AbstractTestProvider() { @Override @@ -69,10 +68,10 @@ public class NoficationTest extends AbstractTest { assertNotNull(notifyProviderService); /** - * + * * The registration of the Consumer 1. It retrieves Notification Service * from MD-SAL and registers SalFlowListener as notification listener - * + * */ BindingAwareConsumer consumer1 = new BindingAwareConsumer() { @Override @@ -97,7 +96,7 @@ public class NoficationTest extends AbstractTest { /** * Check that one notification was delivered and has correct cookie. - * + * */ assertEquals(1, listener1.addedFlows.size()); assertEquals(0, listener1.addedFlows.get(0).getCookie().intValue()); @@ -107,31 +106,31 @@ public class NoficationTest extends AbstractTest { * registered as notification listener. */ BindingAwareProvider provider = new BindingAwareProvider() { - + @Override public void onSessionInitiated(ProviderContext session) { listener2Reg = session.getSALService(NotificationProviderService.class).registerNotificationListener( listener2); } - + @Override public void onSessionInitialized(ConsumerContext session) { // TODO Auto-generated method stub - + } - + @Override public Collection getImplementations() { // TODO Auto-generated method stub return null; } - + @Override public Collection getFunctionality() { // TODO Auto-generated method stub return null; } - + }; // registerConsumer method calls onSessionInitialized method above @@ -153,19 +152,19 @@ public class NoficationTest extends AbstractTest { /** * Check that 3 notification was delivered to both listeners (first one * received 4 in total, second 3 in total). - * + * */ assertEquals(4, listener1.addedFlows.size()); assertEquals(3, listener2.addedFlows.size()); /** * The second listener is closed (unregistered) - * + * */ listener2Reg.close(); /** - * + * * The notification 5 is published */ notifyProviderService.publish(flowAdded(10)); @@ -180,7 +179,7 @@ public class NoficationTest extends AbstractTest { * Check that first consumer received 5 notifications in total, second * consumer received only three. Last notification was never received by * second consumer because its listener was unregistered. - * + * */ assertEquals(5, listener1.addedFlows.size()); assertEquals(3, listener2.addedFlows.size()); @@ -190,7 +189,7 @@ public class NoficationTest extends AbstractTest { /** * Creates instance of the type FlowAdded. Only cookie value is set. It is * used only for testing purpose. - * + * * @param i * cookie value * @return instance of the type FlowAdded @@ -202,7 +201,7 @@ public class NoficationTest extends AbstractTest { } /** - * + * * Implements * {@link org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowListener * SalFlowListener} and contains attributes which keep lists of objects of @@ -225,7 +224,7 @@ public class NoficationTest extends AbstractTest { @Override public void onFlowRemoved(FlowRemoved notification) { removedFlows.add(notification); - }; + }; @Override public void onFlowUpdated(FlowUpdated notification) { @@ -235,20 +234,20 @@ public class NoficationTest extends AbstractTest { @Override public void onSwitchFlowRemoved(SwitchFlowRemoved notification) { // TODO Auto-generated method stub - + } @Override public void onNodeErrorNotification(NodeErrorNotification notification) { // TODO Auto-generated method stub - + } @Override public void onNodeExperimenterErrorNotification( NodeExperimenterErrorNotification notification) { // TODO Auto-generated method stub - + } } diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java index 8c81987301..befe703764 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceTest.java @@ -15,7 +15,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.math.BigInteger; -import java.util.concurrent.Future; import org.junit.Before; import org.junit.Test; @@ -26,9 +25,7 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; @@ -36,7 +33,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.common.RpcResult; public class RoutedServiceTest extends AbstractTest { @@ -71,7 +67,7 @@ public class RoutedServiceTest extends AbstractTest { /** * Register provider 1 with first implementation of SalFlowService - * service1 - * + * */ broker.registerProvider(provider1, getBundleContext()); assertNotNull("Registration should not be null", firstReg); @@ -89,7 +85,7 @@ public class RoutedServiceTest extends AbstractTest { /** * Register provider 2 with first implementation of SalFlowService - * service2 - * + * */ broker.registerProvider(provider2, getBundleContext()); assertNotNull("Registration should not be null", firstReg); @@ -117,7 +113,7 @@ public class RoutedServiceTest extends AbstractTest { /** * Consumer creates addFlow message for node one and sends it to the * MD-SAL - * + * */ AddFlowInput addFlowFirstMessage = createSampleAddFlow(nodeOne, 1); consumerService.addFlow(addFlowFirstMessage); @@ -125,19 +121,19 @@ public class RoutedServiceTest extends AbstractTest { /** * Verifies that implementation of the first provider received the same * message from MD-SAL. - * + * */ verify(salFlowService1).addFlow(addFlowFirstMessage); /** * Verifies that second instance was not invoked with first message - * + * */ verify(salFlowService2, times(0)).addFlow(addFlowFirstMessage); /** * Provider 2 registers path of node 2 - * + * */ NodeRef nodeTwo = createNodeRef("foo:node:2"); secondReg.registerPath(NodeContext.class, nodeTwo.getValue()); @@ -154,26 +150,26 @@ public class RoutedServiceTest extends AbstractTest { /** * Verifies that second instance was invoked 3 times with second message * and first instance wasn't invoked. - * + * */ verify(salFlowService2, times(3)).addFlow(AddFlowSecondMessage); verify(salFlowService1, times(0)).addFlow(AddFlowSecondMessage); /** * Unregisteration of the path for the node one in the first provider - * + * */ firstReg.unregisterPath(NodeContext.class, nodeOne.getValue()); /** * Provider 2 registers path of node 1 - * + * */ secondReg.registerPath(NodeContext.class, nodeOne.getValue()); /** * A consumer sends third message to node 1 - * + * */ AddFlowInput AddFlowThirdMessage = createSampleAddFlow(nodeOne, 3); consumerService.addFlow(AddFlowThirdMessage); @@ -189,7 +185,7 @@ public class RoutedServiceTest extends AbstractTest { /** * Returns node reference from string which represents path - * + * * @param string * string with key(path) * @return instance of the type NodeRef @@ -204,7 +200,7 @@ public class RoutedServiceTest extends AbstractTest { /** * Creates flow AddFlowInput for which only node and cookie are set - * + * * @param node * NodeRef value * @param cookie diff --git a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalConsumerInstance.java b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalConsumerInstance.java index 0c562f5d33..77b411002b 100644 --- a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalConsumerInstance.java +++ b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalConsumerInstance.java @@ -8,20 +8,14 @@ package org.opendaylight.controller.md.sal.binding.util; import java.util.concurrent.Future; -import java.util.zip.Checksum; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; import org.opendaylight.controller.sal.binding.api.NotificationListener; import org.opendaylight.controller.sal.binding.api.NotificationService; import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; -import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; -import org.opendaylight.controller.sal.binding.api.mount.MountInstance; import org.opendaylight.controller.sal.common.DataStoreIdentifier; -import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -54,7 +48,7 @@ public abstract class AbstractBindingSalConsumerInstance T getRpcService(Class module) { return getRpcRegistryChecked().getRpcService(module); } + @Override @Deprecated public void addNotificationListener(Class notificationType, NotificationListener listener) { getNotificationBrokerChecked().addNotificationListener(notificationType, listener); } + @Override @Deprecated public void addNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener listener) { getNotificationBrokerChecked().addNotificationListener(listener); } + @Override @Deprecated public void removeNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener listener) { getNotificationBrokerChecked().removeNotificationListener(listener); } + @Override @Deprecated public void removeNotificationListener(Class notificationType, NotificationListener listener) { getNotificationBrokerChecked().removeNotificationListener(notificationType, listener); } + @Override public Registration> registerNotificationListener( Class notificationType, NotificationListener listener) { return getNotificationBrokerChecked().registerNotificationListener(notificationType, listener); } + @Override public Registration registerNotificationListener( org.opendaylight.yangtools.yang.binding.NotificationListener listener) { return getNotificationBrokerChecked().registerNotificationListener(listener); } + @Override @Deprecated public T getData(DataStoreIdentifier store, Class rootType) { return getDataBrokerChecked().getData(store, rootType); } + @Override @Deprecated public T getData(DataStoreIdentifier store, T filter) { return getDataBrokerChecked().getData(store, filter); } + @Override @Deprecated public T getCandidateData(DataStoreIdentifier store, Class rootType) { return getDataBrokerChecked().getCandidateData(store, rootType); } + @Override @Deprecated public T getCandidateData(DataStoreIdentifier store, T filter) { return getDataBrokerChecked().getCandidateData(store, filter); } + @Override @Deprecated public RpcResult editCandidateData(DataStoreIdentifier store, DataRoot changeSet) { return getDataBrokerChecked().editCandidateData(store, changeSet); } + @Override @Deprecated public Future> commit(DataStoreIdentifier store) { return getDataBrokerChecked().commit(store); } + @Override @Deprecated public DataObject getData(InstanceIdentifier data) { return getDataBrokerChecked().getData(data); } + @Override @Deprecated public DataObject getConfigurationData(InstanceIdentifier data) { return getDataBrokerChecked().getConfigurationData(data); } + @Override public DataModificationTransaction beginTransaction() { return getDataBrokerChecked().beginTransaction(); } + @Override @Deprecated public void registerChangeListener(InstanceIdentifier path, DataChangeListener changeListener) { getDataBrokerChecked().registerChangeListener(path, changeListener); } + @Override @Deprecated public void unregisterChangeListener(InstanceIdentifier path, DataChangeListener changeListener) { getDataBrokerChecked().unregisterChangeListener(path, changeListener); } + @Override @Deprecated public DataObject readConfigurationData(InstanceIdentifier path) { return getDataBrokerChecked().readConfigurationData(path); } + @Override public DataObject readOperationalData(InstanceIdentifier path) { return getDataBrokerChecked().readOperationalData(path); } + @Override @Deprecated public ListenerRegistration registerDataChangeListener( InstanceIdentifier path, DataChangeListener listener) { diff --git a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalProviderInstance.java b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalProviderInstance.java index c7d6640ce1..efa02e0b30 100644 --- a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalProviderInstance.java +++ b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/AbstractBindingSalProviderInstance.java @@ -19,7 +19,6 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistr import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.controller.sal.binding.api.data.DataProviderService; -import org.opendaylight.controller.sal.binding.api.mount.MountProviderInstance; import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.Registration; @@ -99,7 +98,7 @@ public abstract class AbstractBindingSalProviderInstance registerInterestListener( NotificationInterestListener interestListener) { diff --git a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/BindingContextUtils.java b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/BindingContextUtils.java index d164f82222..dc22891b47 100644 --- a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/BindingContextUtils.java +++ b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/BindingContextUtils.java @@ -7,26 +7,24 @@ */ package org.opendaylight.controller.md.sal.binding.util; -import java.awt.image.SinglePixelPackedSampleModel; +import static com.google.common.base.Preconditions.checkNotNull; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; +import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.controller.sal.binding.api.BindingAwareProvider.ProviderFunctionality; -import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; -import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer; import org.opendaylight.controller.sal.binding.api.BindingAwareService; import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.RpcService; -import static com.google.common.base.Preconditions.*; - import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; @@ -38,7 +36,7 @@ public class BindingContextUtils { checkNotNull(serviceProvider,"Service map should not be null"); return new SingleConsumerContextImpl(serviceProvider); } - + public static ProviderContext createProviderContext(BindingAwareProvider provider, ClassToInstanceMap serviceProvider) { checkNotNull(provider,"Provider should not be null"); @@ -52,7 +50,7 @@ public class BindingContextUtils { consumer.onSessionInitialized(context); return context; } - + public static ProviderContext createProviderContextAndInitialize(BindingAwareProvider provider, ClassToInstanceMap serviceProvider) { ProviderContext context = createProviderContext(provider, serviceProvider); @@ -64,9 +62,9 @@ public class BindingContextUtils { // FIXME: Create Proxy return instance; } - + private static class SingleConsumerContextImpl implements ConsumerContext, AutoCloseable { - + private ClassToInstanceMap alreadyRetrievedServices; private ClassToInstanceMap serviceProvider; @@ -79,7 +77,7 @@ public class BindingContextUtils { public final T getRpcService(Class module) { return getSALService(RpcConsumerRegistry.class).getRpcService(module); } - + @Override public final T getSALService(Class service) { checkNotNull(service,"Service class should not be null."); @@ -89,7 +87,7 @@ public class BindingContextUtils { } return tryToRetrieveSalService(service); } - + private synchronized T tryToRetrieveSalService(Class service) { final T potential = alreadyRetrievedServices.getInstance(service); if(potential != null) { @@ -103,44 +101,44 @@ public class BindingContextUtils { alreadyRetrievedServices.put(service, retrieved); return retrieved; } - + @Override public final void close() throws Exception { alreadyRetrievedServices = null; serviceProvider = null; } } - + private static class SingleProviderContextImpl extends SingleConsumerContextImpl implements ProviderContext { public SingleProviderContextImpl(ClassToInstanceMap serviceProvider) { super(serviceProvider); } - + @Override public >> ListenerRegistration registerRouteChangeListener( L listener) { return getSALService(RpcProviderRegistry.class).registerRouteChangeListener(listener); } - + @Override public RoutedRpcRegistration addRoutedRpcImplementation(Class type, T implementation) throws IllegalStateException { return getSALService(RpcProviderRegistry.class).addRoutedRpcImplementation(type, implementation); } - + @Override public RpcRegistration addRpcImplementation(Class type, T implementation) throws IllegalStateException { return getSALService(RpcProviderRegistry.class).addRpcImplementation(type, implementation); } - + @Deprecated @Override public void registerFunctionality(ProviderFunctionality functionality) { // NOOP } - + @Deprecated @Override public void unregisterFunctionality(ProviderFunctionality functionality) { diff --git a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataChangePublisher.java b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataChangePublisher.java index 1700411df8..66645e5538 100644 --- a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataChangePublisher.java +++ b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataChangePublisher.java @@ -9,10 +9,9 @@ package org.opendaylight.controller.md.sal.common.api.data; import org.opendaylight.yangtools.concepts.ListenerRegistration; + // FIXME: After 0.6 Release of YANGTools refactor to use Path marker interface for arguments. // import org.opendaylight.yangtools.concepts.Path; -import org.opendaylight.yangtools.concepts.Registration; - public interface DataChangePublisher

*/,D, L extends DataChangeListener> { ListenerRegistration registerDataChangeListener(P path, L listener); diff --git a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataModification.java b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataModification.java index 29ba192ba8..00db6064aa 100644 --- a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataModification.java +++ b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/DataModification.java @@ -7,20 +7,18 @@ */ package org.opendaylight.controller.md.sal.common.api.data; -import java.util.Map; -import java.util.Set; import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; -// FIXME: After 0.6 Release of YANGTools refactor to use Path marker interface for arguments. -// import org.opendaylight.yangtools.concepts.Path; import org.opendaylight.yangtools.yang.common.RpcResult; +//FIXME: After 0.6 Release of YANGTools refactor to use Path marker interface for arguments. +//import org.opendaylight.yangtools.concepts.Path; public interface DataModification

*/, D> extends DataChange, DataReader { /** * Returns transaction identifier - * + * * @return Transaction identifier */ Object getIdentifier(); @@ -28,9 +26,9 @@ public interface DataModification

*/, D> extends DataChange< TransactionStatus getStatus(); /** - * + * * @deprecated Use {@link #putOperationalData(Object, Object)} instead. - * + * * @param path * @param data */ @@ -81,7 +79,7 @@ public interface DataModification

*/, D> extends DataChange< /** * @deprecated Use {@link #removeOperationalData(Object)} - * + * * @param path */ @Deprecated @@ -93,18 +91,18 @@ public interface DataModification

*/, D> extends DataChange< /** * Initiates a two-phase commit of modification. - * + * *

* The successful commit changes the state of the system and may affect * several components. - * + * *

* The effects of successful commit of data are described in the * specifications and YANG models describing the Provider components of * controller. It is assumed that Consumer has an understanding of this * changes. - * - * + * + * * @see DataCommitHandler for further information how two-phase commit is * processed. * @param store diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/ListenerRegistry.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/ListenerRegistry.java index fed75f72be..f337b5509e 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/ListenerRegistry.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/ListenerRegistry.java @@ -7,13 +7,12 @@ */ package org.opendaylight.controller.md.sal.common.impl; +import static com.google.common.base.Preconditions.checkNotNull; + import java.util.Collections; import java.util.EventListener; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -import static com.google.common.base.Preconditions.*; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -32,15 +31,15 @@ public class ListenerRegistry { return unmodifiableView; } - + public ListenerRegistration register(T listener) { checkNotNull(listener, "Listener should not be null."); ListenerRegistrationImpl ret = new ListenerRegistrationImpl(listener); listeners.add(ret); return ret; } - - + + @SuppressWarnings("rawtypes") private void remove(ListenerRegistrationImpl registration) { listeners.remove(registration); diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/AbstractLockableDelegator.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/AbstractLockableDelegator.java index bd9748d3c5..4d756f1d67 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/AbstractLockableDelegator.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/AbstractLockableDelegator.java @@ -8,8 +8,6 @@ package org.opendaylight.controller.md.sal.common.impl.util; import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReadWriteLock; -import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock; import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock; @@ -23,8 +21,8 @@ public class AbstractLockableDelegator implements Delegator { private final ReentrantReadWriteLock delegateLock = new ReentrantReadWriteLock(); private final ReadLock delegateReadLock = delegateLock.readLock(); private final WriteLock delegateWriteLock = delegateLock.writeLock(); - - + + protected Lock getDelegateReadLock() { return delegateReadLock; } @@ -60,7 +58,7 @@ public class AbstractLockableDelegator implements Delegator { } /** - * + * * @param newDelegate * @return oldDelegate */ @@ -75,8 +73,8 @@ public class AbstractLockableDelegator implements Delegator { delegateWriteLock.unlock(); } } - - + + protected void onDelegateChanged(T oldDelegate, T newDelegate) { // NOOP in abstract calss; } diff --git a/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/sal/common/util/Rpcs.java b/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/sal/common/util/Rpcs.java index 5565d8b56d..f303941871 100644 --- a/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/sal/common/util/Rpcs.java +++ b/opendaylight/md-sal/sal-common-util/src/main/java/org/opendaylight/controller/sal/common/util/Rpcs.java @@ -8,9 +8,7 @@ package org.opendaylight.controller.sal.common.util; import java.io.Serializable; -import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.common.RpcError; @@ -19,12 +17,12 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import com.google.common.collect.ImmutableList; public class Rpcs { - + public static RpcResult getRpcResult(boolean successful) { RpcResult ret = new RpcResultTO(successful, null, ImmutableList.of()); return ret; } - + public static RpcResult getRpcResult(boolean successful, T result, Collection errors) { RpcResult ret = new RpcResultTO(successful, result, errors); @@ -34,7 +32,7 @@ public class Rpcs { public static RpcResult getRpcResult(boolean successful, Collection errors) { return new RpcResultTO(successful, null, errors); } - + private static class RpcResultTO implements RpcResult, Serializable, Immutable { private static final long serialVersionUID = 1L; private final Collection errors; diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractProvider.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractProvider.java index 1cb1a2bc85..22b0bf25cf 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractProvider.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractProvider.java @@ -10,9 +10,6 @@ package org.opendaylight.controller.sal.core.api; import java.util.Collection; import java.util.Collections; -import javax.naming.Context; - -import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -59,18 +56,18 @@ public abstract class AbstractProvider implements BundleActivator, Provider,Serv broker.registerProvider(this, context); return broker; } - + return null; } - + @Override public void modifiedService(ServiceReference reference, Broker service) { // NOOP } - + @Override public void removedService(ServiceReference reference, Broker service) { stopImpl(context); } - + } diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/data/DataModificationTransaction.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/data/DataModificationTransaction.java index 774de271af..9706bbacdb 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/data/DataModificationTransaction.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/data/DataModificationTransaction.java @@ -8,8 +8,6 @@ package org.opendaylight.controller.sal.core.api.data; import java.util.EventListener; -import java.util.Map; -import java.util.Set; import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; @@ -23,31 +21,28 @@ public interface DataModificationTransaction extends DataModification> commit(); - + ListenerRegistration registerListener(DataTransactionListener listener); - - + public interface DataTransactionListener extends EventListener { - void onStatusUpdated(DataModificationTransaction transaction,TransactionStatus status); - } - - - } diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java index 299fe1b558..29e3b911c1 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/mount/MountProvisionInstance.java @@ -10,7 +10,6 @@ package org.opendaylight.controller.sal.core.api.mount; import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; import org.opendaylight.controller.sal.core.api.data.DataProviderService; import org.opendaylight.controller.sal.core.api.notify.NotificationPublishService; -import com.google.common.base.Optional; import org.opendaylight.yangtools.yang.model.api.SchemaContext; public interface MountProvisionInstance extends // diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/NotificationModule.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/NotificationModule.java index 403f7c8da0..bbe017f009 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/NotificationModule.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/NotificationModule.java @@ -9,14 +9,13 @@ package org.opendaylight.controller.sal.dom.broker; import java.util.Collection; import java.util.Collections; -import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import org.opendaylight.controller.sal.core.api.BrokerService; import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession; import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; +import org.opendaylight.controller.sal.core.api.BrokerService; import org.opendaylight.controller.sal.core.api.Consumer.ConsumerFunctionality; import org.opendaylight.controller.sal.core.api.Provider.ProviderFunctionality; import org.opendaylight.controller.sal.core.api.notify.NotificationListener; @@ -37,7 +36,7 @@ public class NotificationModule implements BrokerModule { private static Logger log = LoggerFactory .getLogger(NotificationModule.class); - private Multimap listeners = HashMultimap + private final Multimap listeners = HashMultimap .create(); private static final Set> PROVIDED_SERVICE_TYPE = ImmutableSet @@ -114,11 +113,12 @@ public class NotificationModule implements BrokerModule { private class NotificationConsumerSessionImpl implements NotificationService { - private Multimap consumerListeners = HashMultimap + private final Multimap consumerListeners = HashMultimap .create(); private boolean closed = false; + @Override public Registration addNotificationListener(QName notification, NotificationListener listener) { checkSessionState(); diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/NotificationRouterImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/NotificationRouterImpl.java index 0b184fc86e..50af3fbfc1 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/NotificationRouterImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/impl/NotificationRouterImpl.java @@ -8,21 +8,8 @@ package org.opendaylight.controller.sal.dom.broker.impl; import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import org.opendaylight.controller.sal.core.api.BrokerService; -import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession; -import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; -import org.opendaylight.controller.sal.core.api.Consumer.ConsumerFunctionality; -import org.opendaylight.controller.sal.core.api.Provider.ProviderFunctionality; import org.opendaylight.controller.sal.core.api.notify.NotificationListener; -import org.opendaylight.controller.sal.core.api.notify.NotificationPublishService; -import org.opendaylight.controller.sal.core.api.notify.NotificationService; -import org.opendaylight.controller.sal.core.spi.BrokerModule; import org.opendaylight.controller.sal.dom.broker.spi.NotificationRouter; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.Registration; @@ -32,16 +19,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.HashMultimap; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; public class NotificationRouterImpl implements NotificationRouter { private static Logger log = LoggerFactory.getLogger(NotificationRouterImpl.class); - private Multimap> listeners = Multimaps.synchronizedSetMultimap(HashMultimap.>create()); + private final Multimap> listeners = Multimaps.synchronizedSetMultimap(HashMultimap.>create()); // private Registration defaultListener; - + private void sendNotification(CompositeNode notification) { final QName type = notification.getNodeType(); final Collection> toNotify = listeners.get(type); @@ -66,7 +52,7 @@ public class NotificationRouterImpl implements NotificationRouter { public void publish(CompositeNode notification) { sendNotification(notification); } - + @Override public Registration addNotificationListener(QName notification, NotificationListener listener) { ListenerRegistration ret = new ListenerRegistration(notification, listener); diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/MountProviderServiceProxy.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/MountProviderServiceProxy.java index 0e63126bb3..24d5430d6d 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/MountProviderServiceProxy.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/osgi/MountProviderServiceProxy.java @@ -7,7 +7,6 @@ */ package org.opendaylight.controller.sal.dom.broker.osgi; -import org.opendaylight.controller.sal.core.api.data.DataBrokerService; import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance; import org.opendaylight.controller.sal.core.api.mount.MountProvisionService; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -16,23 +15,26 @@ import org.osgi.framework.ServiceReference; public class MountProviderServiceProxy extends AbstractBrokerServiceProxy implements MountProvisionService{ - + public MountProviderServiceProxy(ServiceReference ref, MountProvisionService delegate) { super(ref, delegate); } + @Override public MountProvisionInstance getMountPoint(InstanceIdentifier path) { return getDelegate().getMountPoint(path); } + @Override public MountProvisionInstance createMountPoint(InstanceIdentifier path) { return getDelegate().createMountPoint(path); } + @Override public MountProvisionInstance createOrGetMountPoint(InstanceIdentifier path) { return getDelegate().createOrGetMountPoint(path); } - + @Override public ListenerRegistration registerProvisionListener(MountProvisionListener listener) { return getDelegate().registerProvisionListener(listener); diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/spi/RpcRouter.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/spi/RpcRouter.java index 9881be0481..d1523a01d6 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/spi/RpcRouter.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/spi/RpcRouter.java @@ -9,12 +9,10 @@ package org.opendaylight.controller.sal.dom.broker.spi; import java.util.Set; -import org.opendaylight.controller.sal.core.api.RpcImplementation; -import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration; import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration; -import org.opendaylight.controller.sal.core.api.RpcRegistrationListener; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.controller.sal.core.api.RpcImplementation; +import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; @@ -23,14 +21,14 @@ public interface RpcRouter extends RpcProvisionRegistry, RpcImplementation { @Override public RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation); - + @Override public RpcRegistration addRpcImplementation(QName rpcType, RpcImplementation implementation) throws IllegalArgumentException; - + @Override public Set getSupportedRpcs(); - + @Override public RpcResult invokeRpc(QName rpc, CompositeNode input); } diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java index a816819cb9..c16ee170de 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java @@ -7,15 +7,21 @@ */ package org.opendaylight.controller.sal.connect.netconf; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_ACTION_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_CANDIDATE_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_COMMIT_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_CONFIG_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_EDIT_CONFIG_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_RUNNING_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_TARGET_QNAME; + import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; -import org.eclipse.xtext.xbase.lib.IterableExtensions; -import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction; +import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; @@ -28,18 +34,14 @@ import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.collect.Collections2; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.*; - public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransaction { - private NetconfDevice device; + private final NetconfDevice device; private final DataModification modification; - private boolean candidateSupported = true; + private final boolean candidateSupported = true; public NetconfDeviceTwoPhaseCommitTransaction(NetconfDevice device, DataModification modification) { @@ -70,15 +72,15 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac CompositeNodeBuilder builder = configurationRpcBuilder(); builder.setQName(NETCONF_EDIT_CONFIG_QNAME); builder.add(editStructure); - + RpcResult rpcResult = device.invokeRpc(NETCONF_EDIT_CONFIG_QNAME, builder.toInstance()); Preconditions.checkState(rpcResult.isSuccessful(),"Rpc Result was unsuccessful"); - + } private CompositeNodeBuilder configurationRpcBuilder() { CompositeNodeBuilder ret = ImmutableCompositeNode.builder(); - + Node targetNode; if(candidateSupported) { targetNode = ImmutableCompositeNode.create(NETCONF_CANDIDATE_QNAME, ImmutableList.>of()); @@ -106,7 +108,7 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac for (Entry entry : predicates.entrySet()) { builder.addLeaf(entry.getKey(), entry.getValue()); } - + if (isLast) { if (action.isPresent()) { builder.setAttribute(NETCONF_ACTION_QNAME, action.get()); @@ -118,7 +120,7 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac builder.add(child); } } - + } } else { builder.add(previous); diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfRemoteSchemaSourceProvider.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfRemoteSchemaSourceProvider.java index 49f702080c..fa6b6f7ca5 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfRemoteSchemaSourceProvider.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfRemoteSchemaSourceProvider.java @@ -9,7 +9,6 @@ package org.opendaylight.controller.sal.connect.netconf; import java.util.Set; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; @@ -19,7 +18,6 @@ import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder; import org.opendaylight.yangtools.yang.model.util.repo.SchemaSourceProvider; import com.google.common.base.Optional; -import com.google.common.base.Preconditions; class NetconfRemoteSchemaSourceProvider implements SchemaSourceProvider { diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/YangModelInputStreamAdapter.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/YangModelInputStreamAdapter.java index a34aaff757..bc819b6563 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/YangModelInputStreamAdapter.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/YangModelInputStreamAdapter.java @@ -10,13 +10,12 @@ package org.opendaylight.controller.sal.connect.netconf; import java.io.IOException; import java.io.InputStream; import java.io.StringBufferInputStream; -import java.io.StringReader; import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.yang.common.QName; /** - * + * * */ public class YangModelInputStreamAdapter extends InputStream implements Delegator { @@ -24,9 +23,9 @@ public class YangModelInputStreamAdapter extends InputStream implements Delegato final String source; final QName moduleIdentifier; final InputStream delegate; - - - + + + private YangModelInputStreamAdapter(String source, QName moduleIdentifier, InputStream delegate) { super(); this.source = source; @@ -34,46 +33,57 @@ public class YangModelInputStreamAdapter extends InputStream implements Delegato this.delegate = delegate; } + @Override public int read() throws IOException { return delegate.read(); } + @Override public int hashCode() { return delegate.hashCode(); } + @Override public int read(byte[] b) throws IOException { return delegate.read(b); } + @Override public boolean equals(Object obj) { return delegate.equals(obj); } + @Override public int read(byte[] b, int off, int len) throws IOException { return delegate.read(b, off, len); } + @Override public long skip(long n) throws IOException { return delegate.skip(n); } + @Override public int available() throws IOException { return delegate.available(); } + @Override public void close() throws IOException { delegate.close(); } + @Override public void mark(int readlimit) { delegate.mark(readlimit); } + @Override public void reset() throws IOException { delegate.reset(); } + @Override public boolean markSupported() { return delegate.markSupported(); } diff --git a/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/config/yang/md/sal/remote/rpc/ZeroMQServerModule.java b/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/config/yang/md/sal/remote/rpc/ZeroMQServerModule.java index f511ff7e76..95bb62f93b 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/config/yang/md/sal/remote/rpc/ZeroMQServerModule.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/config/yang/md/sal/remote/rpc/ZeroMQServerModule.java @@ -40,8 +40,6 @@ public final class ZeroMQServerModule extends org.opendaylight.controller.config Broker broker = getDomBrokerDependency(); - - final int port = getPort() != null ? getPort() : ZEROMQ_ROUTER_PORT; ServerImpl serverImpl = new ServerImpl(port); @@ -50,7 +48,6 @@ public final class ZeroMQServerModule extends org.opendaylight.controller.config RoutingTableProvider provider = new RoutingTableProvider(bundleContext,serverImpl); - RemoteRpcProvider facade = new RemoteRpcProvider(serverImpl, clientImpl); facade.setRoutingTableProvider(provider ); diff --git a/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ServerImpl.java b/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ServerImpl.java index b5a67ff0df..5c14dd0c45 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ServerImpl.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/implementation/src/main/java/org/opendaylight/controller/sal/connector/remoterpc/ServerImpl.java @@ -40,6 +40,7 @@ import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; /** * ZeroMq based implementation of RpcRouter. It implements RouteChangeListener of RoutingTable @@ -76,10 +77,6 @@ public class ServerImpl implements RemoteRpcServer, RouteChangeListener();// serverPool = Executors.newSingleThreadExecutor();//main server thread @@ -334,12 +353,13 @@ public class ServerImpl implements RemoteRpcServer, RouteChangeListener) Collections.EMPTY_SET, prepareDataSchemaNode(), + Collections.EMPTY_SET, prepareDataSchemaNode(), StructuredDataToJsonProvider.INSTANCE); assertNotNull(jsonOutput); assertTrue(jsonOutput.contains("\"lf1\": \"\"")); diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/cnsn/to/xml/test/CnSnToXmlNotExistingLeafTypeTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/cnsn/to/xml/test/CnSnToXmlNotExistingLeafTypeTest.java index 4218a69d3b..f81c1d63f5 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/cnsn/to/xml/test/CnSnToXmlNotExistingLeafTypeTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/cnsn/to/xml/test/CnSnToXmlNotExistingLeafTypeTest.java @@ -7,12 +7,10 @@ */ package org.opendaylight.controller.sal.restconf.impl.cnsn.to.xml.test; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.Collections; -import java.util.Set; import javax.ws.rs.WebApplicationException; @@ -21,10 +19,12 @@ import org.junit.Test; import org.opendaylight.controller.sal.rest.impl.StructuredDataToXmlProvider; import org.opendaylight.controller.sal.restconf.impl.test.DummyType; import org.opendaylight.controller.sal.restconf.impl.test.TestUtils; -import org.opendaylight.yangtools.yang.data.api.*; +import org.opendaylight.yangtools.yang.data.api.CompositeNode; +import org.opendaylight.yangtools.yang.data.api.ModifyAction; +import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode; +import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode; import org.opendaylight.yangtools.yang.data.impl.NodeFactory; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; -import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.parser.builder.impl.ContainerSchemaNodeBuilder; import org.opendaylight.yangtools.yang.parser.builder.impl.LeafSchemaNodeBuilder; import org.slf4j.Logger; @@ -41,7 +41,7 @@ public class CnSnToXmlNotExistingLeafTypeTest { boolean nullPointerExceptionRaised = false; try { TestUtils.writeCompNodeWithSchemaContextToOutput(prepareCompositeNode(), - (Set) Collections.EMPTY_SET, prepareDataSchemaNode(), StructuredDataToXmlProvider.INSTANCE); + Collections.EMPTY_SET, prepareDataSchemaNode(), StructuredDataToXmlProvider.INSTANCE); } catch (WebApplicationException | IOException e) { LOG.error("WebApplicationException or IOException was raised"); } catch (NullPointerException e) { diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java index f2d6aaf44f..1e01020e78 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java @@ -7,12 +7,11 @@ */ package org.opendaylight.controller.sal.restconf.impl.test; -import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.mockito.Mockito.verify; import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.createUri; import java.io.FileNotFoundException; @@ -23,14 +22,14 @@ import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.ws.rs.core.Response; import javax.ws.rs.core.Application; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.opendaylight.controller.sal.core.api.mount.MountInstance; import org.opendaylight.controller.sal.core.api.mount.MountService; @@ -385,7 +384,7 @@ public class RestGetOperationTest extends JerseyTest { responseBody).find()); String[] split = responseBody.split("\"module\""); assertEquals("\"module\" element is returned more then once",2,split.length); - + response = target(uri).request("application/yang.api+xml").get(); assertEquals(200, response.getStatus()); @@ -396,9 +395,9 @@ public class RestGetOperationTest extends JerseyTest { .find()); split = responseBody.split(" private static final Logger logger = LoggerFactory.getLogger(WebSocketClientHandler.class.toString()); private final WebSocketClientHandshaker handshaker; private ChannelPromise handshakeFuture; - private IClientMessageCallback messageListener; + private final IClientMessageCallback messageListener; public WebSocketClientHandler(WebSocketClientHandshaker handshaker,IClientMessageCallback listener) { diff --git a/opendaylight/md-sal/statistics-manager/pom.xml b/opendaylight/md-sal/statistics-manager/pom.xml index 0f90ecac60..5c3fc2329a 100644 --- a/opendaylight/md-sal/statistics-manager/pom.xml +++ b/opendaylight/md-sal/statistics-manager/pom.xml @@ -39,6 +39,17 @@ org.eclipse.xtend org.eclipse.xtend.lib + + + junit + junit + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + test + diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java index 5f264abc2c..a7c00d4591 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java @@ -127,13 +127,17 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList OpendaylightFlowTableStatisticsListener, OpendaylightQueueStatisticsListener{ - public final static Logger sucLogger = LoggerFactory.getLogger(StatisticsUpdateCommiter.class); + private final static Logger sucLogger = LoggerFactory.getLogger(StatisticsUpdateCommiter.class); private final StatisticsProvider statisticsManager; private final MultipartMessageManager messageManager; private int unaccountedFlowsCounter = 1; + /** + * default ctor + * @param manager + */ public StatisticsUpdateCommiter(final StatisticsProvider manager){ this.statisticsManager = manager; @@ -701,7 +705,7 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList } - private NodeRef getNodeRef(NodeKey nodeKey){ + private static NodeRef getNodeRef(NodeKey nodeKey){ InstanceIdentifierBuilder builder = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey); return new NodeRef(builder.toInstance()); } @@ -861,34 +865,65 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList return true; } - private boolean layer3MatchEquals(Layer3Match statsLayer3Match, Layer3Match storedLayer3Match){ - + protected static boolean layer3MatchEquals(Layer3Match statsLayer3Match, Layer3Match storedLayer3Match){ + boolean verdict = true; if(statsLayer3Match instanceof Ipv4Match && storedLayer3Match instanceof Ipv4Match){ Ipv4Match statsIpv4Match = (Ipv4Match)statsLayer3Match; Ipv4Match storedIpv4Match = (Ipv4Match)storedLayer3Match; - - if (storedIpv4Match.getIpv4Destination()== null) { - if (statsIpv4Match.getIpv4Destination()!= null) { - return false; - } - } else if(!IpAddressEquals(statsIpv4Match.getIpv4Destination(),storedIpv4Match.getIpv4Destination())){ - return false; + + if (verdict) { + verdict = compareNullSafe( + storedIpv4Match.getIpv4Destination(), statsIpv4Match.getIpv4Destination()); } - if (storedIpv4Match.getIpv4Source() == null) { - if (statsIpv4Match.getIpv4Source() != null) { - return false; - } - } else if(!IpAddressEquals(statsIpv4Match.getIpv4Source(),storedIpv4Match.getIpv4Source())) { - return false; + if (verdict) { + verdict = compareNullSafe( + statsIpv4Match.getIpv4Source(), storedIpv4Match.getIpv4Source()); + } + } else { + Boolean nullCheckOut = checkNullValues(storedLayer3Match, statsLayer3Match); + if (nullCheckOut != null) { + verdict = nullCheckOut; + } else { + verdict = storedLayer3Match.equals(statsLayer3Match); } - - return true; - }else{ - return storedLayer3Match.equals(statsLayer3Match); } + + return verdict; } - private boolean IpAddressEquals(Ipv4Prefix statsIpAddress, Ipv4Prefix storedIpAddress) { + private static boolean compareNullSafe(Ipv4Prefix statsIpv4, Ipv4Prefix storedIpv4) { + boolean verdict = true; + Boolean checkDestNullValuesOut = checkNullValues(storedIpv4, statsIpv4); + if (checkDestNullValuesOut != null) { + verdict = checkDestNullValuesOut; + } else if(!IpAddressEquals(statsIpv4, storedIpv4)){ + verdict = false; + } + + return verdict; + } + + private static Boolean checkNullValues(Object v1, Object v2) { + Boolean verdict = null; + if (v1 == null && v2 != null) { + verdict = Boolean.FALSE; + } else if (v1 != null && v2 == null) { + verdict = Boolean.FALSE; + } else if (v1 == null && v2 == null) { + verdict = Boolean.TRUE; + } + + return verdict; + } + + /** + * TODO: why don't we use the default Ipv4Prefix.equals()? + * + * @param statsIpAddress + * @param storedIpAddress + * @return true if IPv4prefixes equals + */ + private static boolean IpAddressEquals(Ipv4Prefix statsIpAddress, Ipv4Prefix storedIpAddress) { IntegerIpAddress statsIpAddressInt = StrIpToIntIp(statsIpAddress.getValue()); IntegerIpAddress storedIpAddressInt = StrIpToIntIp(storedIpAddress.getValue()); @@ -901,19 +936,19 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList return false; } - private boolean IpAndMaskBasedMatch(IntegerIpAddress statsIpAddressInt,IntegerIpAddress storedIpAddressInt){ + private static boolean IpAndMaskBasedMatch(IntegerIpAddress statsIpAddressInt,IntegerIpAddress storedIpAddressInt){ return ((statsIpAddressInt.getIp() & statsIpAddressInt.getMask()) == (storedIpAddressInt.getIp() & storedIpAddressInt.getMask())); } - private boolean IpBasedMatch(IntegerIpAddress statsIpAddressInt,IntegerIpAddress storedIpAddressInt){ + private static boolean IpBasedMatch(IntegerIpAddress statsIpAddressInt,IntegerIpAddress storedIpAddressInt){ return (statsIpAddressInt.getIp() == storedIpAddressInt.getIp()); } - /* + /** * Method return integer version of ip address. Converted int will be mask if * mask specified */ - private IntegerIpAddress StrIpToIntIp(String ipAddresss){ + private static IntegerIpAddress StrIpToIntIp(String ipAddresss){ String[] parts = ipAddresss.split("/"); String ip = parts[0]; @@ -925,23 +960,26 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList prefix = Integer.parseInt(parts[1]); } - Inet4Address addr =null; + IntegerIpAddress integerIpAddress = null; try { - addr = (Inet4Address) InetAddress.getByName(ip); - } catch (UnknownHostException e){} - - byte[] addrBytes = addr.getAddress(); - int ipInt = ((addrBytes[0] & 0xFF) << 24) | - ((addrBytes[1] & 0xFF) << 16) | - ((addrBytes[2] & 0xFF) << 8) | - ((addrBytes[3] & 0xFF) << 0); - - int mask = 0xffffffff << 32 - prefix; + Inet4Address addr = (Inet4Address) InetAddress.getByName(ip); + byte[] addrBytes = addr.getAddress(); + int ipInt = ((addrBytes[0] & 0xFF) << 24) | + ((addrBytes[1] & 0xFF) << 16) | + ((addrBytes[2] & 0xFF) << 8) | + ((addrBytes[3] & 0xFF) << 0); + + int mask = 0xffffffff << 32 - prefix; + + integerIpAddress = new IntegerIpAddress(ipInt, mask); + } catch (UnknownHostException e){ + sucLogger.error("Failed to determine host IP address by name: {}", e.getMessage(), e); + } - return new IntegerIpAddress(ipInt, mask); + return integerIpAddress; } - class IntegerIpAddress{ + static class IntegerIpAddress{ int ip; int mask; public IntegerIpAddress(int ip, int mask) { diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiterTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiterTest.java new file mode 100644 index 0000000000..5da6ef3490 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/test/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiterTest.java @@ -0,0 +1,115 @@ +/** + * Copyright (c) 2014 Cisco Systems, Inc. and others. 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.controller.md.statistics.manager; + +import org.junit.Assert; +import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + */ +public class StatisticsUpdateCommiterTest { + + private static final Logger LOG = LoggerFactory + .getLogger(StatisticsUpdateCommiterTest.class); + + /** + * Test method for {@link org.opendaylight.controller.md.statistics.manager.StatisticsUpdateCommiter#layer3MatchEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match, org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match)}. + */ + @Test + public void testLayer3MatchEquals() { + String[][][] matchSeeds = new String[][][] { + {{"10.1.2.0/24", "10.1.2.0/24"}, {"10.1.2.0/24", "10.1.2.0/24"}}, + {{"10.1.2.0/24", "10.1.2.0/24"}, {"10.1.2.0/24", "10.1.1.0/24"}}, + {{"10.1.1.0/24", "10.1.2.0/24"}, {"10.1.2.0/24", "10.1.2.0/24"}}, + {{"10.1.1.0/24", "10.1.1.0/24"}, {"10.1.2.0/24", "10.1.2.0/24"}}, + + {{"10.1.1.0/24", null}, {"10.1.1.0/24", "10.1.2.0/24"}}, + {{"10.1.1.0/24", null}, {"10.1.2.0/24", "10.1.2.0/24"}}, + {{"10.1.1.0/24", null}, {"10.1.2.0/24", null}}, + {{"10.1.1.0/24", null}, {"10.1.1.0/24", null}}, + + {{null, "10.1.1.0/24"}, {"10.1.2.0/24", "10.1.1.0/24"}}, + {{null, "10.1.1.0/24"}, {"10.1.2.0/24", "10.1.2.0/24"}}, + {{null, "10.1.1.0/24"}, {null, "10.1.2.0/24"}}, + {{null, "10.1.1.0/24"}, {null, "10.1.1.0/24"}}, + + {{null, null}, {null, "10.1.1.0/24"}}, + {{null, null}, {null, null}}, + }; + + boolean[] matches = new boolean[] { + true, + false, + false, + false, + + false, + false, + false, + true, + + false, + false, + false, + true, + + false, + true + }; + + for (int i = 0; i < matches.length; i++) { + checkComparisonOfL3Match( + matchSeeds[i][0][0], matchSeeds[i][0][1], + matchSeeds[i][1][0], matchSeeds[i][1][1], + matches[i]); + } + } + + /** + * @param m1Source match1 - src + * @param m1Destination match1 - dest + * @param m2Source match2 - src + * @param msDestination match2 - dest + * @param matches expected match output + * + */ + private static void checkComparisonOfL3Match(String m1Source, String m1Destination, + String m2Source, String msDestination, boolean matches) { + Ipv4Match m1Layer3 = prepareIPv4Match(m1Source, m1Destination); + Ipv4Match m2Layer3 = prepareIPv4Match(m2Source, msDestination); + boolean comparisonResult; + try { + comparisonResult = StatisticsUpdateCommiter.layer3MatchEquals(m1Layer3, m2Layer3); + Assert.assertEquals("failed to compare: "+m1Layer3+" vs. "+m2Layer3, + matches, comparisonResult); + } catch (Exception e) { + LOG.error("failed to compare: {} vs. {}", m1Layer3, m2Layer3, e); + Assert.fail(e.getMessage()); + } + } + + private static Ipv4Match prepareIPv4Match(String source, String destination) { + Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder(); + if (source != null) { + ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(source)); + } + if (destination != null) { + ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(destination)); + } + + return ipv4MatchBuilder.build(); + } + +} diff --git a/opendaylight/md-sal/statistics-manager/src/test/resources/log4j-test.xml b/opendaylight/md-sal/statistics-manager/src/test/resources/log4j-test.xml new file mode 100644 index 0000000000..bd3bf3cd2c --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/test/resources/log4j-test.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfSshClientDispatcher.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfSshClientDispatcher.java index 06239b2bfd..c1d5b2bdf7 100644 --- a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfSshClientDispatcher.java +++ b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfSshClientDispatcher.java @@ -8,13 +8,15 @@ package org.opendaylight.controller.netconf.client; -import com.google.common.base.Optional; -import io.netty.channel.ChannelHandler; import io.netty.channel.EventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.util.HashedWheelTimer; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.Promise; + +import java.io.IOException; +import java.net.InetSocketAddress; + import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.api.NetconfSession; import org.opendaylight.controller.netconf.api.NetconfTerminationReason; @@ -22,22 +24,17 @@ import org.opendaylight.controller.netconf.util.AbstractChannelInitializer; import org.opendaylight.controller.netconf.util.handler.ssh.SshHandler; import org.opendaylight.controller.netconf.util.handler.ssh.authentication.AuthenticationHandler; import org.opendaylight.controller.netconf.util.handler.ssh.client.Invoker; -import org.opendaylight.controller.netconf.util.messages.NetconfMessageFactory; -import org.opendaylight.protocol.framework.ProtocolHandlerFactory; -import org.opendaylight.protocol.framework.ProtocolMessageDecoder; -import org.opendaylight.protocol.framework.ProtocolMessageEncoder; import org.opendaylight.protocol.framework.ReconnectStrategy; import org.opendaylight.protocol.framework.SessionListener; import org.opendaylight.protocol.framework.SessionListenerFactory; -import java.io.IOException; -import java.net.InetSocketAddress; +import com.google.common.base.Optional; public class NetconfSshClientDispatcher extends NetconfClientDispatcher { - private AuthenticationHandler authHandler; - private HashedWheelTimer timer; - private NetconfClientSessionNegotiatorFactory negotatorFactory; + private final AuthenticationHandler authHandler; + private final HashedWheelTimer timer; + private final NetconfClientSessionNegotiatorFactory negotatorFactory; public NetconfSshClientDispatcher(AuthenticationHandler authHandler, EventLoopGroup bossGroup, EventLoopGroup workerGroup, long connectionTimeoutMillis) { @@ -55,6 +52,7 @@ public class NetconfSshClientDispatcher extends NetconfClientDispatcher { this.negotatorFactory = new NetconfClientSessionNegotiatorFactory(timer, Optional.of(additionalHeader), socketTimeoutMillis); } + @Override public Future createClient(InetSocketAddress address, final NetconfClientSessionListener sessionListener, ReconnectStrategy strat) { return super.createClient(address, strat, new PipelineInitializer() { @@ -69,7 +67,6 @@ public class NetconfSshClientDispatcher extends NetconfClientDispatcher { private static final class NetconfSshClientInitializer extends AbstractChannelInitializer { - private final NetconfHandlerFactory handlerFactory; private final AuthenticationHandler authenticationHandler; private final NetconfClientSessionNegotiatorFactory negotiatorFactory; private final NetconfClientSessionListener sessionListener; @@ -77,7 +74,6 @@ public class NetconfSshClientDispatcher extends NetconfClientDispatcher { public NetconfSshClientInitializer(AuthenticationHandler authHandler, NetconfClientSessionNegotiatorFactory negotiatorFactory, final NetconfClientSessionListener sessionListener) { - this.handlerFactory = new NetconfHandlerFactory(new NetconfMessageFactory()); this.authenticationHandler = authHandler; this.negotiatorFactory = negotiatorFactory; this.sessionListener = sessionListener; @@ -105,21 +101,4 @@ public class NetconfSshClientDispatcher extends NetconfClientDispatcher { } } - - private static final class NetconfHandlerFactory extends ProtocolHandlerFactory { - - public NetconfHandlerFactory(final NetconfMessageFactory msgFactory) { - super(msgFactory); - } - - @Override - public ChannelHandler[] getEncoders() { - return new ChannelHandler[] { new ProtocolMessageEncoder(this.msgFactory) }; - } - - @Override - public ChannelHandler[] getDecoders() { - return new ChannelHandler[] { new ProtocolMessageDecoder(this.msgFactory) }; - } - } } diff --git a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/MessageParserTest.java b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/MessageParserTest.java index baf2d7d761..85bccba14f 100644 --- a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/MessageParserTest.java +++ b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/MessageParserTest.java @@ -13,30 +13,28 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; - -import java.util.Queue; - import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import io.netty.channel.embedded.EmbeddedChannel; +import java.util.Queue; + import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.util.handler.FramingMechanismHandlerFactory; import org.opendaylight.controller.netconf.util.handler.NetconfMessageAggregator; import org.opendaylight.controller.netconf.util.handler.NetconfMessageChunkDecoder; +import org.opendaylight.controller.netconf.util.handler.NetconfMessageToXMLEncoder; +import org.opendaylight.controller.netconf.util.handler.NetconfXMLToMessageDecoder; import org.opendaylight.controller.netconf.util.messages.FramingMechanism; import org.opendaylight.controller.netconf.util.messages.NetconfMessageConstants; -import org.opendaylight.controller.netconf.util.messages.NetconfMessageFactory; import org.opendaylight.controller.netconf.util.messages.NetconfMessageHeader; import org.opendaylight.controller.netconf.util.test.XmlFileLoader; -import org.opendaylight.protocol.framework.ProtocolMessageDecoder; -import org.opendaylight.protocol.framework.ProtocolMessageEncoder; public class MessageParserTest { private NetconfMessage msg; - private NetconfMessageFactory msgFactory = new NetconfMessageFactory(); @Before public void setUp() throws Exception { @@ -47,16 +45,20 @@ public class MessageParserTest { public void testChunkedFramingMechanismOnPipeline() throws Exception { EmbeddedChannel testChunkChannel = new EmbeddedChannel( FramingMechanismHandlerFactory.createHandler(FramingMechanism.CHUNK), - new ProtocolMessageEncoder(msgFactory), + new NetconfMessageToXMLEncoder(), new NetconfMessageAggregator(FramingMechanism.CHUNK), new NetconfMessageChunkDecoder(), - new ProtocolMessageDecoder(msgFactory)); + new NetconfXMLToMessageDecoder()); testChunkChannel.writeOutbound(this.msg); Queue messages = testChunkChannel.outboundMessages(); assertFalse(messages.isEmpty()); - int msgLength = this.msgFactory.put(this.msg).length; + final NetconfMessageToXMLEncoder enc = new NetconfMessageToXMLEncoder(); + final ByteBuf out = Unpooled.buffer(); + enc.encode(null, msg, out); + int msgLength = out.readableBytes(); + int chunkCount = msgLength / NetconfMessageConstants.MAX_CHUNK_SIZE; if ((msgLength % NetconfMessageConstants.MAX_CHUNK_SIZE) != 0) { chunkCount++; @@ -92,8 +94,8 @@ public class MessageParserTest { public void testEOMFramingMechanismOnPipeline() throws Exception { EmbeddedChannel testChunkChannel = new EmbeddedChannel( FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM), - new ProtocolMessageEncoder(msgFactory), new NetconfMessageAggregator( - FramingMechanism.EOM), new ProtocolMessageDecoder(msgFactory)); + new NetconfMessageToXMLEncoder(), new NetconfMessageAggregator( + FramingMechanism.EOM), new NetconfXMLToMessageDecoder()); testChunkChannel.writeOutbound(this.msg); ByteBuf recievedOutbound = (ByteBuf) testChunkChannel.readOutbound(); diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractChannelInitializer.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractChannelInitializer.java index aeee2fb04b..5b4b3d02ea 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractChannelInitializer.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractChannelInitializer.java @@ -10,22 +10,22 @@ package org.opendaylight.controller.netconf.util; import io.netty.channel.socket.SocketChannel; import io.netty.util.concurrent.Promise; + import org.opendaylight.controller.netconf.api.NetconfSession; import org.opendaylight.controller.netconf.util.handler.FramingMechanismHandlerFactory; -import org.opendaylight.controller.netconf.util.handler.NetconfHandlerFactory; import org.opendaylight.controller.netconf.util.handler.NetconfMessageAggregator; +import org.opendaylight.controller.netconf.util.handler.NetconfMessageToXMLEncoder; +import org.opendaylight.controller.netconf.util.handler.NetconfXMLToMessageDecoder; import org.opendaylight.controller.netconf.util.messages.FramingMechanism; -import org.opendaylight.controller.netconf.util.messages.NetconfMessageFactory; public abstract class AbstractChannelInitializer { public void initialize(SocketChannel ch, Promise promise){ - NetconfHandlerFactory handlerFactory = new NetconfHandlerFactory(new NetconfMessageFactory()); ch.pipeline().addLast("aggregator", new NetconfMessageAggregator(FramingMechanism.EOM)); - ch.pipeline().addLast(handlerFactory.getDecoders()); + ch.pipeline().addLast(new NetconfXMLToMessageDecoder()); initializeAfterDecoder(ch, promise); ch.pipeline().addLast("frameEncoder", FramingMechanismHandlerFactory.createHandler(FramingMechanism.EOM)); - ch.pipeline().addLast(handlerFactory.getEncoders()); + ch.pipeline().addLast(new NetconfMessageToXMLEncoder()); } protected abstract void initializeAfterDecoder(SocketChannel ch, Promise promise); diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfHandlerFactory.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfHandlerFactory.java deleted file mode 100644 index d878c5e819..0000000000 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfHandlerFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. 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.controller.netconf.util.handler; - -import io.netty.channel.ChannelHandler; -import org.opendaylight.controller.netconf.api.NetconfMessage; -import org.opendaylight.controller.netconf.util.messages.NetconfMessageFactory; -import org.opendaylight.protocol.framework.ProtocolHandlerFactory; -import org.opendaylight.protocol.framework.ProtocolMessageDecoder; -import org.opendaylight.protocol.framework.ProtocolMessageEncoder; - -public class NetconfHandlerFactory extends ProtocolHandlerFactory { - - public NetconfHandlerFactory(final NetconfMessageFactory msgFactory) { - super(msgFactory); - } - - @Override - public ChannelHandler[] getEncoders() { - return new ChannelHandler[] { new ProtocolMessageEncoder(this.msgFactory) }; - } - - @Override - public ChannelHandler[] getDecoders() { - return new ChannelHandler[] { new ProtocolMessageDecoder(this.msgFactory) }; - } - -} diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageChunkDecoder.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageChunkDecoder.java index 39182263b6..5c00b9b715 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageChunkDecoder.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageChunkDecoder.java @@ -8,19 +8,19 @@ package org.opendaylight.controller.netconf.util.handler; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + import java.nio.charset.Charset; import java.util.List; +import org.opendaylight.controller.netconf.api.NetconfDeserializerException; import org.opendaylight.controller.netconf.util.messages.NetconfMessageConstants; -import org.opendaylight.protocol.framework.DeserializerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageDecoder; - public class NetconfMessageChunkDecoder extends ByteToMessageDecoder { private final static Logger logger = LoggerFactory.getLogger(NetconfMessageChunkDecoder.class); @@ -40,7 +40,7 @@ public class NetconfMessageChunkDecoder extends ByteToMessageDecoder { in.readBytes(byteBufMsg, chunkSize); isParsed = false; } else { - throw new DeserializerException("Unable to parse chunked data or header."); + throw new NetconfDeserializerException("Unable to parse chunked data or header."); } } catch (Exception e) { logger.error("Failed to decode chunked message.", e); diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageToXMLEncoder.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageToXMLEncoder.java new file mode 100644 index 0000000000..31a4225fc8 --- /dev/null +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfMessageToXMLEncoder.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. 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.controller.netconf.util.handler; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; + +import java.nio.ByteBuffer; + +import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.util.xml.XmlUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Comment; +import org.w3c.dom.Document; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Charsets; +import com.google.common.base.Optional; + +public final class NetconfMessageToXMLEncoder extends MessageToByteEncoder { + private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageToXMLEncoder.class); + + private final Optional clientId; + + public NetconfMessageToXMLEncoder() { + this(Optional.absent()); + } + + public NetconfMessageToXMLEncoder(Optional clientId) { + this.clientId = clientId; + } + + @Override + @VisibleForTesting + public void encode(ChannelHandlerContext ctx, NetconfMessage msg, ByteBuf out) throws Exception { + LOG.debug("Sent to encode : {}", msg); + + if (clientId.isPresent()) { + Comment comment = msg.getDocument().createComment("clientId:" + clientId.get()); + msg.getDocument().appendChild(comment); + } + + final ByteBuffer msgBytes; + if(msg.getAdditionalHeader().isPresent()) { + final String header = msg.getAdditionalHeader().get(); + LOG.trace("Header of netconf message parsed \n{}", header); + // FIXME: this can be written in pieces + msgBytes = Charsets.UTF_8.encode(header + xmlToString(msg.getDocument())); + } else { + msgBytes = Charsets.UTF_8.encode(xmlToString(msg.getDocument())); + } + + LOG.trace("Putting message \n{}", xmlToString(msg.getDocument())); + out.writeBytes(msgBytes); + } + + private String xmlToString(Document doc) { + return XmlUtil.toString(doc, false); + } +} diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfXMLToMessageDecoder.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfXMLToMessageDecoder.java new file mode 100644 index 0000000000..62a06e6e20 --- /dev/null +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/handler/NetconfXMLToMessageDecoder.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. 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.controller.netconf.util.handler; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.List; + +import org.opendaylight.controller.netconf.api.NetconfDeserializerException; +import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.util.xml.XmlUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableList; + +public final class NetconfXMLToMessageDecoder extends ByteToMessageDecoder { + private static final Logger LOG = LoggerFactory.getLogger(NetconfXMLToMessageDecoder.class); + + // FIXME: this is funky way of creating arrays + private static final List POSSIBLE_ENDS = ImmutableList.of( + "]\n".getBytes(Charsets.UTF_8), "]\r\n".getBytes(Charsets.UTF_8)); + private static final List POSSIBLE_STARTS = ImmutableList.of( + "[".getBytes(Charsets.UTF_8), "\r\n[".getBytes(Charsets.UTF_8), "\n[".getBytes(Charsets.UTF_8)); + + @Override + @VisibleForTesting + public void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + if (in.readableBytes() == 0) { + LOG.debug("No more content in incoming buffer."); + return; + } + + in.markReaderIndex(); + try { + LOG.trace("Received to decode: {}", ByteBufUtil.hexDump(in)); + byte[] bytes = new byte[in.readableBytes()]; + in.readBytes(bytes); + + logMessage(bytes); + + String additionalHeader = null; + + if (startsWithAdditionalHeader(bytes)) { + // Auth information containing username, ip address... extracted for monitoring + int endOfAuthHeader = getAdditionalHeaderEndIndex(bytes); + if (endOfAuthHeader > -1) { + byte[] additionalHeaderBytes = Arrays.copyOfRange(bytes, 0, endOfAuthHeader + 2); + additionalHeader = additionalHeaderToString(additionalHeaderBytes); + bytes = Arrays.copyOfRange(bytes, endOfAuthHeader + 2, bytes.length); + } + } + NetconfMessage message; + try { + Document doc = XmlUtil.readXmlToDocument(new ByteArrayInputStream(bytes)); + message = new NetconfMessage(doc, additionalHeader); + } catch (final SAXException | IOException | IllegalStateException e) { + throw new NetconfDeserializerException("Could not parse message from " + new String(bytes), e); + } + + out.add(message); + } finally { + in.discardReadBytes(); + } + } + + private int getAdditionalHeaderEndIndex(byte[] bytes) { + for (byte[] possibleEnd : POSSIBLE_ENDS) { + int idx = findByteSequence(bytes, possibleEnd); + + if (idx != -1) { + return idx; + } + } + + return -1; + } + + private static int findByteSequence(final byte[] bytes, final byte[] sequence) { + if (bytes.length < sequence.length) { + throw new IllegalArgumentException("Sequence to be found is longer than the given byte array."); + } + if (bytes.length == sequence.length) { + if (Arrays.equals(bytes, sequence)) { + return 0; + } else { + return -1; + } + } + int j = 0; + for (int i = 0; i < bytes.length; i++) { + if (bytes[i] == sequence[j]) { + j++; + if (j == sequence.length) { + return i - j + 1; + } + } else { + j = 0; + } + } + return -1; + } + + private boolean startsWithAdditionalHeader(byte[] bytes) { + for (byte[] possibleStart : POSSIBLE_STARTS) { + int i = 0; + for (byte b : possibleStart) { + if(bytes[i] != b) + break; + + return true; + } + } + + return false; + }; + + private void logMessage(byte[] bytes) { + String s = Charsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString(); + LOG.debug("Parsing message \n{}", s); + } + + private String additionalHeaderToString(byte[] bytes) { + return Charsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString(); + } + +} diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageFactory.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageFactory.java deleted file mode 100644 index 6f86cc37f9..0000000000 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageFactory.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. 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.controller.netconf.util.messages; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.Arrays; -import java.util.List; - -import org.opendaylight.controller.netconf.api.NetconfDeserializerException; -import org.opendaylight.controller.netconf.api.NetconfMessage; -import org.opendaylight.controller.netconf.util.xml.XmlUtil; -import org.opendaylight.protocol.framework.DeserializerException; -import org.opendaylight.protocol.framework.DocumentedException; -import org.opendaylight.protocol.framework.ProtocolMessageFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Comment; -import org.w3c.dom.Document; -import org.xml.sax.SAXException; - -import com.google.common.base.Charsets; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableList; - -/** - * NetconfMessageFactory for (de)serializing DOM documents. - */ -public final class NetconfMessageFactory implements ProtocolMessageFactory { - - private static final Logger logger = LoggerFactory.getLogger(NetconfMessageFactory.class); - private static final List POSSIBLE_STARTS = ImmutableList.of( - "[".getBytes(Charsets.UTF_8), "\r\n[".getBytes(Charsets.UTF_8), "\n[".getBytes(Charsets.UTF_8)); - private static final List POSSIBLE_ENDS = ImmutableList.of( - "]\n".getBytes(Charsets.UTF_8), "]\r\n".getBytes(Charsets.UTF_8)); - - private final Optional clientId; - - public NetconfMessageFactory() { - clientId = Optional.absent(); - } - - public NetconfMessageFactory(Optional clientId) { - this.clientId = clientId; - } - - @Override - public NetconfMessage parse(byte[] bytes) throws DeserializerException, DocumentedException { - logMessage(bytes); - - String additionalHeader = null; - - if (startsWithAdditionalHeader(bytes)) { - // Auth information containing username, ip address... extracted for monitoring - int endOfAuthHeader = getAdditionalHeaderEndIndex(bytes); - if (endOfAuthHeader > -1) { - byte[] additionalHeaderBytes = Arrays.copyOfRange(bytes, 0, endOfAuthHeader + 2); - additionalHeader = additionalHeaderToString(additionalHeaderBytes); - bytes = Arrays.copyOfRange(bytes, endOfAuthHeader + 2, bytes.length); - } - } - NetconfMessage message; - try { - Document doc = XmlUtil.readXmlToDocument(new ByteArrayInputStream(bytes)); - message = new NetconfMessage(doc, additionalHeader); - } catch (final SAXException | IOException | IllegalStateException e) { - throw new NetconfDeserializerException("Could not parse message from " + new String(bytes), e); - } - return message; - } - - private static int findByteSequence(final byte[] bytes, final byte[] sequence) { - if (bytes.length < sequence.length) { - throw new IllegalArgumentException("Sequence to be found is longer than the given byte array."); - } - if (bytes.length == sequence.length) { - if (Arrays.equals(bytes, sequence)) { - return 0; - } else { - return -1; - } - } - int j = 0; - for (int i = 0; i < bytes.length; i++) { - if (bytes[i] == sequence[j]) { - j++; - if (j == sequence.length) { - return i - j + 1; - } - } else { - j = 0; - } - } - return -1; - } - - private int getAdditionalHeaderEndIndex(byte[] bytes) { - for (byte[] possibleEnd : POSSIBLE_ENDS) { - int idx = findByteSequence(bytes, possibleEnd); - - if (idx != -1) { - return idx; - } - } - - return -1; - } - - private boolean startsWithAdditionalHeader(byte[] bytes) { - for (byte[] possibleStart : POSSIBLE_STARTS) { - int i = 0; - for (byte b : possibleStart) { - if(bytes[i] != b) - break; - - return true; - } - } - - return false; - }; - - private void logMessage(byte[] bytes) { - String s = Charsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString(); - logger.debug("Parsing message \n{}", s); - } - - private String additionalHeaderToString(byte[] bytes) { - return Charsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString(); - } - - @Override - public byte[] put(NetconfMessage netconfMessage) { - if (clientId.isPresent()) { - Comment comment = netconfMessage.getDocument().createComment("clientId:" + clientId.get()); - netconfMessage.getDocument().appendChild(comment); - } - ByteBuffer msgBytes; - if(netconfMessage.getAdditionalHeader().isPresent()) { - String header = netconfMessage.getAdditionalHeader().get(); - logger.trace("Header of netconf message parsed \n{}", header); - msgBytes = Charsets.UTF_8.encode(header + xmlToString(netconfMessage.getDocument())); - } else { - msgBytes = Charsets.UTF_8.encode(xmlToString(netconfMessage.getDocument())); - } - String content = xmlToString(netconfMessage.getDocument()); - - logger.trace("Putting message \n{}", content); - byte[] b = new byte[msgBytes.limit()]; - msgBytes.get(b); - return b; - } - - private String xmlToString(Document doc) { - return XmlUtil.toString(doc, false); - } -} diff --git a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageFactoryTest.java b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageFactoryTest.java index f8c90836b9..c405d9bcb5 100644 --- a/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageFactoryTest.java +++ b/opendaylight/netconf/netconf-util/src/test/java/org/opendaylight/controller/netconf/util/messages/NetconfMessageFactoryTest.java @@ -7,19 +7,26 @@ */ package org.opendaylight.controller.netconf.util.messages; -import com.google.common.io.Files; -import org.junit.Test; +import static org.junit.Assert.assertEquals; +import io.netty.buffer.Unpooled; import java.io.File; +import java.util.ArrayList; +import java.util.List; -public class NetconfMessageFactoryTest { +import org.junit.Test; +import org.opendaylight.controller.netconf.util.handler.NetconfXMLToMessageDecoder; +import com.google.common.io.Files; +public class NetconfMessageFactoryTest { @Test public void testAuth() throws Exception { - NetconfMessageFactory parser = new NetconfMessageFactory(); + NetconfXMLToMessageDecoder parser = new NetconfXMLToMessageDecoder(); File authHelloFile = new File(getClass().getResource("/netconfMessages/client_hello_with_auth.xml").getFile()); - parser.parse(Files.toByteArray(authHelloFile)); + final List out = new ArrayList<>(); + parser.decode(null, Unpooled.wrappedBuffer(Files.toByteArray(authHelloFile)), out); + assertEquals(1, out.size()); } } diff --git a/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronPortsNorthbound.java b/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronPortsNorthbound.java index 642b3bb197..c26e0229d0 100644 --- a/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronPortsNorthbound.java +++ b/opendaylight/northbound/networkconfiguration/neutron/src/main/java/org/opendaylight/controller/networkconfig/neutron/northbound/NeutronPortsNorthbound.java @@ -60,6 +60,8 @@ import org.opendaylight.controller.sal.utils.ServiceHelper; @Path("/ports") public class NeutronPortsNorthbound { + final String mac_regex="^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"; + private NeutronPort extractFields(NeutronPort o, List fields) { return o.extractFields(fields); } @@ -207,7 +209,7 @@ public class NeutronPortsNorthbound { return Response.status(404).build(); } if (singleton.getMacAddress() == null || - !singleton.getMacAddress().matches("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$")) { + !singleton.getMacAddress().matches(mac_regex)) { return Response.status(400).build(); } if (portInterface.macInUse(singleton.getMacAddress())) { @@ -298,7 +300,7 @@ public class NeutronPortsNorthbound { if (!networkInterface.networkExists(test.getNetworkUUID())) { return Response.status(404).build(); } - if (!test.getMacAddress().matches("^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$")) { + if (!test.getMacAddress().matches(mac_regex)) { return Response.status(400).build(); } if (portInterface.macInUse(test.getMacAddress())) { diff --git a/opendaylight/northbound/switchmanager/src/main/java/org/opendaylight/controller/switchmanager/northbound/SwitchNorthbound.java b/opendaylight/northbound/switchmanager/src/main/java/org/opendaylight/controller/switchmanager/northbound/SwitchNorthbound.java index 8eff06a763..662af723ed 100644 --- a/opendaylight/northbound/switchmanager/src/main/java/org/opendaylight/controller/switchmanager/northbound/SwitchNorthbound.java +++ b/opendaylight/northbound/switchmanager/src/main/java/org/opendaylight/controller/switchmanager/northbound/SwitchNorthbound.java @@ -416,7 +416,7 @@ public class SwitchNorthbound { * {@link org.opendaylight.controller.sal.core.Property} attached to * it. * - *
+     * 
      *
      * Example:
      *
@@ -540,8 +540,10 @@ public class SwitchNorthbound {
      *            Type of the node connector being programmed (Eg. 'OF')
      * @param nodeConnectorId
      *            NodeConnector Identifier as specified by
-     *            {@link org.opendaylight.controller.sal.core.NodeConnector}
-     *            (Eg. '2')
+     *            {@link org.opendaylight.controller.sal.core.NodeConnector}.
+     *            (Eg. '2'). If nodeConnecterId contains forward slash(/),
+     *            replace forward slash with underscore(_) in the URL. (Eg. for
+     *            Ethernet1/2, use Ethernet1_2)
      * @param propertyName
      *            Name of the Property specified by
      *            {@link org.opendaylight.controller.sal.core.Property} and its
@@ -552,7 +554,7 @@ public class SwitchNorthbound {
      *            extended classes
      * @return Response as dictated by the HTTP Response Status code
      *
-     *         
+     * 
      *
      * Example:
      *
@@ -592,6 +594,10 @@ public class SwitchNorthbound {
         handleNodeAvailability(containerName, nodeType, nodeId);
         Node node = Node.fromString(nodeType, nodeId);
 
+        if (nodeConnectorId.contains("_")) {
+            nodeConnectorId = nodeConnectorId.replace("_", "/");
+        }
+
         handleNodeConnectorAvailability(containerName, node, nodeConnectorType, nodeConnectorId);
         NodeConnector nc = NodeConnector.fromStringNoNode(nodeConnectorType, nodeConnectorId, node);
 
@@ -625,14 +631,16 @@ public class SwitchNorthbound {
      * @param nodeConnectorId
      *            NodeConnector Identifier as specified by
      *            {@link org.opendaylight.controller.sal.core.NodeConnector}
-     *            (Eg. '1')
+     *            (Eg. '1'). If nodeConnecterId contains forward slash(/),
+     *            replace forward slash with underscore(_) in the URL. (Eg. for
+     *            Ethernet1/2, use Ethernet1_2)
      * @param propertyName
      *            Name of the Property specified by
      *            {@link org.opendaylight.controller.sal.core.Property} and its
      *            extended classes. Property that can be deleted is bandwidth
      * @return Response as dictated by the HTTP Response Status code
      *
-     *         
+     * 
      *
      * Example:
      *
@@ -670,6 +678,10 @@ public class SwitchNorthbound {
         handleNodeAvailability(containerName, nodeType, nodeId);
         Node node = Node.fromString(nodeType, nodeId);
 
+        if (nodeConnectorId.contains("_")) {
+            nodeConnectorId = nodeConnectorId.replace("_", "/");
+        }
+
         handleNodeConnectorAvailability(containerName, node, nodeConnectorType, nodeConnectorId);
         NodeConnector nc = NodeConnector.fromStringNoNode(nodeConnectorType, nodeConnectorId, node);
         Status ret = switchManager.removeNodeConnectorProp(nc, propertyName);
diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
index 6c3424c616..dc341625af 100644
--- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
+++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/utils/NetUtils.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2013-2014 Cisco Systems, Inc. and others.  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,
@@ -482,7 +482,7 @@ public abstract class NetUtils {
      * @return the int variable containing the unsigned byte value
      */
     public static int getUnsignedByte(byte b) {
-        return (b > 0) ? (int) b : (b & 0x7F | 0x80);
+        return b & 0xFF;
     }
 
     /**
@@ -493,7 +493,7 @@ public abstract class NetUtils {
      * @return the int variable containing the unsigned short value
      */
     public static int getUnsignedShort(short s) {
-        return (s > 0) ? (int) s : (s & 0x7FFF | 0x8000);
+        return s & 0xFFFF;
     }
 
     /**
@@ -520,5 +520,4 @@ public abstract class NetUtils {
     public static byte[] getBroadcastMACAddr() {
         return Arrays.copyOf(BroadcastMACAddr, BroadcastMACAddr.length);
     }
-
 }
diff --git a/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/utils/NetUtilsTest.java b/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/utils/NetUtilsTest.java
index b8bc6fb447..a2b12782ac 100644
--- a/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/utils/NetUtilsTest.java
+++ b/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/utils/NetUtilsTest.java
@@ -1,6 +1,5 @@
-
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2013-2014 Cisco Systems, Inc. and others.  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,
@@ -449,4 +448,24 @@ public class NetUtilsTest {
         Assert.assertTrue(NetUtils
                 .isIPAddressValid("2001:420:281:1004:407a:57f4:4d15:c355"));
     }
+
+    @Test
+    public void testGetUnsignedByte() {
+        Assert.assertEquals(0,   NetUtils.getUnsignedByte((byte) 0x00));
+        Assert.assertEquals(1,   NetUtils.getUnsignedByte((byte) 0x01));
+        Assert.assertEquals(127, NetUtils.getUnsignedByte((byte) 0x7f));
+
+        Assert.assertEquals(128, NetUtils.getUnsignedByte((byte) 0x80));
+        Assert.assertEquals(255, NetUtils.getUnsignedByte((byte) 0xff));
+    }
+
+    @Test
+    public void testGetUnsignedShort() {
+        Assert.assertEquals(0,     NetUtils.getUnsignedShort((short) 0x0000));
+        Assert.assertEquals(1,     NetUtils.getUnsignedShort((short) 0x0001));
+        Assert.assertEquals(32767, NetUtils.getUnsignedShort((short) 0x7fff));
+
+        Assert.assertEquals(32768, NetUtils.getUnsignedShort((short) 0x8000));
+        Assert.assertEquals(65535, NetUtils.getUnsignedShort((short) 0xffff));
+    }
 }
diff --git a/opendaylight/switchmanager/api/src/main/java/org/opendaylight/controller/switchmanager/SwitchConfig.java b/opendaylight/switchmanager/api/src/main/java/org/opendaylight/controller/switchmanager/SwitchConfig.java
index de18b021ff..b8d022f30e 100644
--- a/opendaylight/switchmanager/api/src/main/java/org/opendaylight/controller/switchmanager/SwitchConfig.java
+++ b/opendaylight/switchmanager/api/src/main/java/org/opendaylight/controller/switchmanager/SwitchConfig.java
@@ -21,7 +21,7 @@ import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
 
 /**
- * The class describes a switch configuration
+ * The class describes a switch configuration as a collection of properties
  */
 public class SwitchConfig extends ConfigurationObject implements Cloneable, Serializable {
     private static final long serialVersionUID = 1L;
@@ -123,15 +123,20 @@ public class SwitchConfig extends ConfigurationObject implements Cloneable, Seri
     }
 
     private Status validateNodeId() {
-        if (!isValidResourceName(nodeId)) {
-            return new Status(StatusCode.BADREQUEST, "Invalid NodeId");
+        if (nodeId == null || nodeId.trim().isEmpty()) {
+            return new Status(StatusCode.BADREQUEST, "Invalid node id");
         }
         return new Status(StatusCode.SUCCESS);
     }
 
     private Status validateNodeProperties() {
         if (nodeProperties == null) {
-            return new Status(StatusCode.BADREQUEST, "nodeProperties cannot be null");
+            return new Status(StatusCode.BADREQUEST, "Node properties must be specified");
+        }
+        if (nodeProperties.containsKey(Description.propertyName)) {
+            if (!isValidResourceName(((Description)nodeProperties.get(Description.propertyName)).getValue())) {
+                return new Status(StatusCode.BADREQUEST, "Invalid node description");
+            }
         }
         return new Status(StatusCode.SUCCESS);
     }