Migrate OSGI compendium reference
[controller.git] / opendaylight / md-sal / sal-binding-api / src / main / java / org / opendaylight / controller / sal / binding / api / BindingAwareConsumer.java
index 4327451d2126fa51b6a3a7767e0c2fbd0781703c..7d364958d871519a2b888d3d23d05e1e3a0de3f2 100644 (file)
@@ -10,31 +10,84 @@ package org.opendaylight.controller.sal.binding.api;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
 
 /**
+ * A developer implemented component that gets registered with the Broker.
  *
- * Defines the component of controller and supplies additional metadata. A
- * component of the controller or application supplies a concrete implementation
- * of this interface.
+ * <p>
+ * Semantically, a consumer may:
  *
- * A user-implemented component (application) which facilitates the SAL and SAL
- * services to access infrastructure services or providers' functionality.
+ * <ol>
+ *   <li>Subscribe for Notifications </li>
+ *   <li>Invoke RPCs</li>
+ *   <li>Read from either the operational or config data tree</li>
+ *   <li>Write to the config data tree</li>
+ * </ol>
+ * If you need to:
+ * <ol>
+ *   <li> Emit Notifications</li>
+ *   <li> Provide the implementation of RPCs </li>
+ *   <li> Write to the operational data tree </li>
+ * </ol>
  *
+ * <p>
+ * Consider using a BindingAwareProvider
  *
+ * <p>
+ * Examples:
  *
- */
+ * <p>
+ * To get a NotificationService:
+ *
+ * <p>
+ * {code
+ * public void onSessionInitiated(ProviderContext session) {
+ *      NotificationProviderService notificationService = session.getSALService(NotificationProviderService.class);
+ *      notificationService.publish(notification)
+ * }
+ * where notification is an instance of a modeled Notification.
+ * For more information on sending notifications via the NotificationProviderService
+ * see org.opendaylight.controller.sal.binding.api.NotificationProviderService
+ *
+ * <p>
+ * A consumer can *invoke* and RPC ( ie, call foo(fooArgs)) but it cannot register an RPC
+ * implementation with the MD-SAL that others can invoke(call).
+ * To get an invokable RPC:
+ *
+ * <p>
+ * {code
+ * public void onSessionInitiated(ProviderContext session) {
+ *    MyService rpcFlowSalService = session.getRpcService(MyService.class);
+ * }
+ *
+ * <p>
+ * Where MyService.class is a Service interface generated from a yang model with RPCs modeled in it.  The returned
+ * rpcFlowSalService can be used like any other object by invoking its methods.  Note, nothing special needs to be done
+ * for RoutedRPCs.  They just work.
+ *
+ * <p>
+ * To get a DataBroker to allow access to the data tree:
+ *
+ * <p>
+ * {code
+ * public void onSessionInitiated(final ProviderContext session) {
+ *      DataBroker databroker = session.getSALService(BindingDataBroker.class);
+ * }
+ * }
+*/
+@Deprecated(forRemoval = true)
 public interface BindingAwareConsumer {
 
     /**
      * Callback signaling initialization of the consumer session to the SAL.
      *
+     * <p>
      * The consumer MUST use the session for all communication with SAL or
      * retrieving SAL infrastructure services.
      *
-     * This method is invoked by
-     * {@link BindingAwareBroker#registerConsumer(BindingAwareConsumer)}
+     * <p>
+     * This method is invoked by {@link BindingAwareBroker#registerConsumer(BindingAwareConsumer)}
      *
      * @param session
      *            Unique session between consumer and SAL.
      */
     void onSessionInitialized(ConsumerContext session);
-
 }