migrate TepShowState from deprecated OsgiCommandSupport to Action 04/72204/5
authorMichael Vorburger <vorburger@redhat.com>
Wed, 23 May 2018 18:19:54 +0000 (20:19 +0200)
committerMichael Vorburger <vorburger@redhat.com>
Thu, 31 May 2018 11:45:32 +0000 (11:45 +0000)
nota bene https://issues.apache.org/jira/browse/KARAF-5767

Change-Id: I99133078466bd400d912e6d20de11b1dcf633e69
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
itm/itm-api/src/main/java/org/opendaylight/genius/itm/api/IITMProvider.java
itm/itm-impl/pom.xml
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cache/TunnelStateCache.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepShowState.java
itm/itm-impl/src/main/java/org/opendaylight/genius/itm/impl/ItmProvider.java
itm/itm-impl/src/main/resources/org/opendaylight/blueprint/itm.xml

index cf989527fdf53b64da03e22c78db9a33270f1d5c..49bfd3faac83181874e2cf6f80f2909a565ba7e5 100644 (file)
@@ -29,7 +29,7 @@ public interface IITMProvider {
 
     void showTeps(CommandSession session);
 
-    void showState(Collection<StateTunnelList> tunnels, CommandSession session);
+    void showState(Collection<StateTunnelList> tunnels);
 
     void showCache(String cacheName);
 
index 5e07b2be5a25a49431f355385843066ddf65367a..454303c55bfb79207737bb88098034736557118f 100644 (file)
@@ -6,7 +6,9 @@ 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
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
@@ -74,7 +76,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.apache.karaf.shell</groupId>
-      <artifactId>org.apache.karaf.shell.console</artifactId>
+      <artifactId>org.apache.karaf.shell.core</artifactId>
     </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
@@ -132,7 +134,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>com.google.truth</groupId>
       <artifactId>truth</artifactId>
-      </dependency>
+    </dependency>
     <dependency>
       <groupId>org.powermock</groupId>
       <artifactId>powermock-api-mockito</artifactId>
@@ -200,7 +202,15 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
         <groupId>org.eclipse.xtend</groupId>
         <artifactId>xtend-maven-plugin</artifactId>
       </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <Karaf-Commands>org.opendaylight.genius.itm.cli*</Karaf-Commands>
+          </instructions>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
-
 </project>
index bbd0af9b992640076daddcab86dc9de4185efd93..fccf6d0ceca03826215f8cc712182766b2a82059 100644 (file)
@@ -21,6 +21,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.Tun
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.ops4j.pax.cdi.api.OsgiServiceProvider;
 
 /**
  * Caches StateTunnelList objects.
@@ -28,6 +29,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  * @author Thomas Pantelis
  */
 @Singleton
+@OsgiServiceProvider(classes = TunnelStateCache.class) // only because TepShowState needs a @Reference to this
 public class TunnelStateCache extends InstanceIdDataObjectCache<StateTunnelList> {
 
     @Inject
index 8aae61adf4cf871bb1e535bc18c716b67fbeb228..e0f482cbe14383bc60b235e3bc5cc256f48b05aa 100644 (file)
@@ -70,6 +70,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
+@SuppressWarnings("checkstyle:RegexpSingleLineJava")
 public class TepCommandHelper {
 
     private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class);
@@ -136,26 +137,26 @@ public class TepCommandHelper {
         try {
             ipAddressObj = IpAddressBuilder.getDefaultInstance(ipAddress);
             gatewayIpObj = IpAddressBuilder.getDefaultInstance("0.0.0.0");
-            if ((gatewayIp != null) && !gatewayIp.isEmpty()
-                    && !("null".equals(gatewayIp)) || ("0.0.0.0".equals(gatewayIp))) {
+            if (gatewayIp != null && !gatewayIp.isEmpty()
+                    && !"null".equals(gatewayIp) || "0.0.0.0".equals(gatewayIp)) {
                 gatewayIpObj = IpAddressBuilder.getDefaultInstance(gatewayIp);
             } else {
                 LOG.debug("gateway is null");
                 gatewayIp = null;
             }
         } catch (RuntimeException e) {
-            handleError("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255", session);
+            handleError("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255");
             return;
         }
         try {
             subnetMaskObj = IpPrefixBuilder.getDefaultInstance(subnetMask);
         } catch (Exception e) {
-            handleError("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32", session);
+            handleError("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32");
             return;
         }
 
         if (!validateIPs(ipAddress, subnetMask, gatewayIp)) {
-            handleError("IpAddress and gateWayIp should belong to the subnet provided", session);
+            handleError("IpAddress and gateWayIp should belong to the subnet provided");
             return;
         }
 
@@ -455,7 +456,7 @@ public class TepCommandHelper {
         if (transportZonesOptional.isPresent()) {
             TransportZones transportZones = transportZonesOptional.get();
             if (transportZones.getTransportZone() == null || transportZones.getTransportZone().isEmpty()) {
-                handleError("No teps configured", session);
+                handleError("No teps configured");
                 return;
             }
             List<String> result = new ArrayList<>();
@@ -567,25 +568,25 @@ public class TepCommandHelper {
         try {
             ipAddressObj = IpAddressBuilder.getDefaultInstance(ipAddress);
             gatewayIpObj = IpAddressBuilder.getDefaultInstance("0.0.0.0");
-            if (!("null".equals(gatewayIp)) || ("0.0.0.0".equals(gatewayIp)) && (gatewayIp != null)) {
+            if (!"null".equals(gatewayIp) || "0.0.0.0".equals(gatewayIp) && gatewayIp != null) {
                 gatewayIpObj = IpAddressBuilder.getDefaultInstance(gatewayIp);
             } else {
                 LOG.debug("gateway is null");
                 gatewayIp = null;
             }
         } catch (RuntimeException e) {
-            handleError("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255", session);
+            handleError("Invalid IpAddress. Expected: 1.0.0.0 to 254.255.255.255");
             return;
         }
         try {
             subnetMaskObj = IpPrefixBuilder.getDefaultInstance(subnetMask);
         } catch (Exception e) {
-            handleError("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32", session);
+            handleError("Invalid Subnet Mask. Expected: 0.0.0.0/0 to 255.255.255.255/32");
             return;
         }
 
         if (!validateIPs(ipAddress, subnetMask, gatewayIp)) {
-            handleError("IpAddress and gateWayIp should belong to the subnet provided", session);
+            handleError("IpAddress and gateWayIp should belong to the subnet provided");
             return;
         }
         SubnetsKey subnetsKey = new SubnetsKey(subnetMaskObj);
@@ -720,16 +721,13 @@ public class TepCommandHelper {
     }
 
     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
-    public void showState(Collection<StateTunnelList> tunnelLists, boolean tunnelMonitorEnabled,
-                          CommandSession session) throws TepException {
+    public void showState(Collection<StateTunnelList> tunnelLists, boolean tunnelMonitorEnabled) throws TepException {
         if (tunnelLists == null || tunnelLists.isEmpty()) {
-            handleError("No Internal Tunnels Exist", session);
+            handleError("No Internal Tunnels Exist");
             return;
         }
         if (!tunnelMonitorEnabled) {
-            if (session != null) {
-                session.getConsole().println("Tunnel Monitoring is Off");
-            }
+            System.out.println("Tunnel Monitoring is Off");
         }
         String displayFormat = "%-16s  %-16s  %-16s  %-16s  %-16s  %-10s  %-10s";
         System.out.println(String.format(displayFormat, "Tunnel Name", "Source-DPN",
@@ -939,12 +937,7 @@ public class TepCommandHelper {
         }
     }
 
-    public void handleError(String errorMessage, CommandSession session) throws TepException {
-        if (session != null) {
-            session.getConsole().println(errorMessage);
-        } else {
-            throw new TepException(errorMessage);
-        }
-
+    public void handleError(String errorMessage) throws TepException {
+        throw new TepException(errorMessage);
     }
 }
index 78f52350e05ccc7c9c381029c3a6508ac8e16a46..c59dca03de7b16b2e6448dbaaa8e7ca5c1e9d285 100644 (file)
@@ -8,31 +8,29 @@
 package org.opendaylight.genius.itm.cli;
 
 import java.util.Collection;
-import org.apache.karaf.shell.commands.Command;
-import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.opendaylight.genius.itm.api.IITMProvider;
 import org.opendaylight.genius.itm.cache.TunnelStateCache;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList;
 
+@Service
 @Command(scope = "tep", name = "show-state", description = "Monitors tunnel state")
+public class TepShowState implements Action {
 
-public class TepShowState extends OsgiCommandSupport {
-
-    private final IITMProvider itmProvider;
-    private final TunnelStateCache tunnelStateCache;
-
-    public TepShowState(IITMProvider itmProvider, TunnelStateCache tunnelStateCache) {
-        this.itmProvider = itmProvider;
-        this.tunnelStateCache = tunnelStateCache;
-    }
+    private @Reference IITMProvider itmProvider;
+    private @Reference TunnelStateCache tunnelStateCache;
 
     @Override
-    protected Object doExecute() {
+    @SuppressWarnings("checkstyle:RegexpSingleLineJava")
+    public Object execute() throws Exception {
         Collection<StateTunnelList> tunnels = tunnelStateCache.getAllPresent();
         if (!tunnels.isEmpty()) {
-            itmProvider.showState(tunnels, session);
+            itmProvider.showState(tunnels);
         } else {
-            session.getConsole().println("No Internal Tunnels configured on the switch");
+            System.out.println("No Internal Tunnels configured on the switch");
         }
         return null;
     }
index 3cb0fdc061661394de694f8789203aac6c9e8794..cdce34d54968f913a4af26cdd95d7099777cc00a 100644 (file)
@@ -59,10 +59,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.A
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.RemoveExternalTunnelEndpointInputBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.ops4j.pax.cdi.api.OsgiServiceProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Singleton
+@OsgiServiceProvider
 public class ItmProvider implements AutoCloseable, IITMProvider /*,ItmStateService */ {
 
     private static final Logger LOG = LoggerFactory.getLogger(ItmProvider.class);
@@ -231,10 +233,10 @@ public class ItmProvider implements AutoCloseable, IITMProvider /*,ItmStateServi
     }
 
     @Override
-    public void showState(Collection<StateTunnelList> tunnels,CommandSession session) {
+    public void showState(Collection<StateTunnelList> tunnels) {
         if (tunnels != null) {
             try {
-                tepCommandHelper.showState(tunnels, tunnelMonitoringConfig.isTunnelMonitoringEnabled(), session);
+                tepCommandHelper.showState(tunnels, tunnelMonitoringConfig.isTunnelMonitoringEnabled());
             } catch (TepException e) {
                 LOG.error("show state failed", e);
             }
@@ -347,7 +349,7 @@ public class ItmProvider implements AutoCloseable, IITMProvider /*,ItmStateServi
 
     @Override
     public boolean validateIP(final String ip) {
-        if ((ip == null) || ip.isEmpty() || "null".equals(ip) || "0.0.0.0".equals(ip)) {
+        if (ip == null || ip.isEmpty() || "null".equals(ip) || "0.0.0.0".equals(ip)) {
             return false;
         }
         final String PTRN =
index 0b34e14a7d7354079edbb20b25a06228e0b3eb9a..6e02a121f7aecc24ba191142601b4caa960bdff4 100644 (file)
@@ -42,9 +42,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 
     <odl:rpc-implementation ref="itmManagerRpcService" />
 
-    <service ref="itmProvider"
-             interface="org.opendaylight.genius.itm.api.IITMProvider" />
-
     <odl:clustered-app-config id="itmConfig"
                               binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.ItmConfig"
                               default-config-file-name="genius-itm-config.xml"
@@ -77,12 +74,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
                 <property name="itmProvider" ref="itmProvider" />
             </action>
         </command>
-        <command>
-            <action class="org.opendaylight.genius.itm.cli.TepShowState">
-                <argument ref="itmProvider" />
-                <argument ref="tunnelStateCache" />
-            </action>
-        </command>
         <command>
             <action class="org.opendaylight.genius.itm.cli.TepConfigureTunnelType">
                 <property name="itmProvider" ref="itmProvider" />