Rewire SwitchConnectionProvider configuration
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / core / SwitchConnectionProviderImpl.java
index 78ae05324b5a57a986ce31f780ba3619652a9f66..cf7a880694df5b25f10fe634df547c285e5bc86f 100755 (executable)
@@ -16,6 +16,7 @@ import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.epoll.Epoll;
+import java.util.Map;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.infrautils.diagstatus.DiagStatusService;
 import org.opendaylight.infrautils.diagstatus.ServiceDescriptor;
@@ -57,6 +58,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow._switch.connection.config.rev160506.SwitchConnectionConfig;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,11 +73,18 @@ import org.slf4j.LoggerFactory;
  * @author mirehak
  * @author michal.polkorab
  */
+@Component(service = SwitchConnectionProvider.class, factory = SwitchConnectionProviderImpl.FACTORY_NAME)
 public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, ConnectionInitializer {
     private static final Logger LOG = LoggerFactory.getLogger(SwitchConnectionProviderImpl.class);
+
     private static final String THREAD_NAME_PREFIX = "OFP-SwitchConnectionProvider-Udp/TcpHandler";
     private static final String OPENFLOW_JAVA_SERVICE_NAME_PREFIX = "OPENFLOW_SERVER";
 
+    // OSGi DS Component Factory name
+    public static final String FACTORY_NAME =
+        "org.opendaylight.openflowjava.protocol.impl.core.SwitchConnectionProviderImpl";
+    public static final String PROP_CONFIG = ".config";
+
     private SwitchConnectionHandler switchConnectionHandler;
     private ServerFacade serverFacade;
     private final ConnectionConfiguration connConfig;
@@ -107,6 +120,17 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider, C
         deserializationFactory = new DeserializationFactory(deserializerRegistry);
     }
 
+    @Activate
+    public SwitchConnectionProviderImpl(@Reference final DiagStatusService diagStatus,
+            final Map<String, Object> props) {
+        this(diagStatus, new ConnectionConfigurationImpl((SwitchConnectionConfig) props.get(PROP_CONFIG)));
+    }
+
+    @Deactivate
+    void deactivate() {
+        diagReg.close();
+    }
+
     // ID based, on configuration, used for diagstatus serviceIdentifier (ServiceDescriptor moduleServiceName)
     private static String createConnectionSuffix(final @Nullable ConnectionConfiguration config) {
         return config == null ? "-null-config" : "_" + config.getPort();