Merge "Yang-maven-plugin refactored + fixed bugs. Removed resourceProviders argument...
authorGiovanni Meo <gmeo@cisco.com>
Fri, 7 Jun 2013 16:11:27 +0000 (16:11 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 7 Jun 2013 16:11:27 +0000 (16:11 +0000)
20 files changed:
opendaylight/clustering/test/pom.xml
opendaylight/clustering/test/src/main/java/org/opendaylight/controller/clustering/test/internal/Activator.java [new file with mode: 0644]
opendaylight/clustering/test/src/main/resources/OSGI-INF/component.xml [deleted file]
opendaylight/commons/concepts/src/main/java/org/opendaylight/controller/concepts/tranform/CompositeConditionalTransformer.java
opendaylight/distribution/opendaylight/opendaylight-osgi-launcher-local.launch
opendaylight/distribution/opendaylight/opendaylight-osgi-launcher.launch
opendaylight/distribution/opendaylight/opendaylight.target
opendaylight/hosttracker/api/src/main/java/org/opendaylight/controller/hosttracker/hostAware/HostNodeConnector.java
opendaylight/hosttracker/api/src/test/java/org/opendaylight/controller/hosttracker/hostAware/HostNodeConnectorTest.java
opendaylight/hosttracker/implementation/src/main/java/org/opendaylight/controller/hosttracker/internal/HostTracker.java
opendaylight/northbound/integrationtest/src/test/java/org/opendaylight/controller/northbound/integrationtest/NorthboundIntegrationTest.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/Node.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/packet/ARP.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/packet/IPv4.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/packet/LLDPTLV.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/packet/Packet.java
opendaylight/security/src/main/java/org/opendaylight/controller/security/ControllerCustomRealm.java
opendaylight/switchmanager/implementation/src/main/java/org/opendaylight/controller/switchmanager/internal/SwitchManagerImpl.java
opendaylight/usermanager/src/main/java/org/opendaylight/controller/usermanager/IUserManager.java
opendaylight/usermanager/src/main/java/org/opendaylight/controller/usermanager/internal/UserManagerImpl.java

index 695e939cd3c7b79a20a55de910d0a3c4efead2f8..fb1efbb0f12d6229272200b423c2dd550672700f 100644 (file)
             javax.transaction,
             org.eclipse.osgi.framework.console,
             ch.qos.logback.classic,
-            org.opendaylight.controller.clustering.services
+            org.opendaylight.controller.clustering.services,
+            org.opendaylight.controller.sal.core,
+            org.apache.felix.dm
           </Import-Package>
-          <Service-Component>
-            OSGI-INF/component.xml
-          </Service-Component>
+          <Bundle-Activator>
+            org.opendaylight.controller.clustering.test.internal.Activator
+          </Bundle-Activator>
         </instructions>
         <manifestLocation>${project.basedir}/META-INF</manifestLocation>
       </configuration>
       <artifactId>clustering.services</artifactId>
       <version>0.4.0-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal</artifactId>
+      <version>0.4.0-SNAPSHOT</version>
+    </dependency>
   </dependencies>
 </project>
diff --git a/opendaylight/clustering/test/src/main/java/org/opendaylight/controller/clustering/test/internal/Activator.java b/opendaylight/clustering/test/src/main/java/org/opendaylight/controller/clustering/test/internal/Activator.java
new file mode 100644 (file)
index 0000000..341eacc
--- /dev/null
@@ -0,0 +1,73 @@
+
+/*
+ * 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.clustering.test.internal;
+
+import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
+import org.opendaylight.controller.clustering.services.IClusterServices;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.felix.dm.Component;
+
+public class Activator extends ComponentActivatorAbstractBase {
+    protected static final Logger logger = LoggerFactory
+            .getLogger(Activator.class);
+
+    /**
+     * Function called when the activator starts just after some
+     * initializations are done by the
+     * ComponentActivatorAbstractBase.
+     *
+     */
+    public void init() {
+    }
+
+    /**
+     * Function called when the activator stops just before the
+     * cleanup done by ComponentActivatorAbstractBase
+     *
+     */
+    public void destroy() {
+    }
+
+    /**
+     * Function that is used to communicate to dependency manager the
+     * list of known implementations for services inside a container
+     *
+     *
+     * @return An array containing all the CLASS objects that will be
+     * instantiated in order to get an fully working implementation
+     * Object
+     */
+    public Object[] getGlobalImplementations() {
+        Object[] res = { SimpleClient.class };
+        return res;
+    }
+
+    /**
+     * Function that is called when configuration of the dependencies
+     * is required.
+     *
+     * @param c dependency manager Component object, used for
+     * configuring the dependencies exported and imported
+     * @param imp Implementation class that is being configured,
+     * needed as long as the same routine can configure multiple
+     * implementations
+     */
+    public void configureGlobalInstance(Component c, Object imp) {
+        if (imp.equals(SimpleClient.class)) {
+            // export the service for Apps and Plugins
+            c.setInterface(new String[] { org.eclipse.osgi.framework.console.CommandProvider.class.getName() },
+                           null);
+            c.add(createServiceDependency().setService(IClusterServices.class)
+                  .setCallbacks("setIClusterServices", "unsetIClusterServices")
+                  .setRequired(true));
+        }
+    }
+}
diff --git a/opendaylight/clustering/test/src/main/resources/OSGI-INF/component.xml b/opendaylight/clustering/test/src/main/resources/OSGI-INF/component.xml
deleted file mode 100644 (file)
index df0e388..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" 
-               activate="startUp" 
-               deactivate="shutDown" 
-               name="org.opendaylight.controller.clustering.test.internal.SimpleClient">
-  <implementation class="org.opendaylight.controller.clustering.test.internal.SimpleClient"/>
-  
-  <service>
-    <!-- Exports, can be multiple-->
-    <provide interface="org.eclipse.osgi.framework.console.CommandProvider"/>    
-  </service>
-  
-  <!-- Imports, can be multiple -->
-  <reference name="IClusterServices" 
-             bind="setIClusterServices" 
-             unbind="unsetIClusterServices" 
-             cardinality="1..1" 
-             interface="org.opendaylight.controller.clustering.services.IClusterServices"/>
-</scr:component>
index a31d89637254e7c3a928cceaf64e2ac27397d05c..ad3cdbc180283fe4a5f77e40ec6ffc258153690a 100644 (file)
@@ -17,10 +17,10 @@ import java.util.TreeSet;
 /**\r
  * Composite transformer which aggregates multiple implementation and selects\r
  * the one which accepts the input.\r
- * \r
- * \r
+ *\r
+ *\r
  * @author Tony Tkacik\r
- * \r
+ *\r
  * @param <I>\r
  *            Input class for transformation\r
  * @param <P>\r
@@ -35,7 +35,7 @@ public class CompositeConditionalTransformer<I, P> implements
         @Override\r
         public int compare(TransformerWithPriority<I, P> o1,\r
                 TransformerWithPriority<I, P> o2) {\r
-            return Integer.compare(o1.priority, o2.priority);\r
+            return Integer.valueOf(o1.priority).compareTo(Integer.valueOf(o2.priority));\r
         }\r
 \r
     };\r
@@ -106,13 +106,13 @@ public class CompositeConditionalTransformer<I, P> implements
             SimpleConditionalTransformer<I, P> {\r
         final int priority;\r
         final SimpleConditionalTransformer<I, P> transformer;\r
-    \r
+\r
         public TransformerWithPriority(\r
                 SimpleConditionalTransformer<I, P> transformer, int priority) {\r
             this.priority = priority;\r
             this.transformer = transformer;\r
         }\r
-    \r
+\r
         @Override\r
         public int hashCode() {\r
             final int prime = 31;\r
@@ -121,7 +121,7 @@ public class CompositeConditionalTransformer<I, P> implements
                     + ((transformer == null) ? 0 : transformer.hashCode());\r
             return result;\r
         }\r
-    \r
+\r
         @Override\r
         public boolean equals(Object obj) {\r
             if (this == obj)\r
@@ -138,20 +138,20 @@ public class CompositeConditionalTransformer<I, P> implements
                 return false;\r
             return true;\r
         }\r
-    \r
+\r
         @Override\r
         public boolean isAcceptable(I input) {\r
             return transformer.isAcceptable(input);\r
         }\r
-    \r
+\r
         @Override\r
         public P transform(I input) {\r
             return transformer.transform(input);\r
         }\r
-        \r
-    \r
-    \r
-    \r
-    \r
+\r
+\r
+\r
+\r
+\r
     }\r
 }\r
index 258373558a03b8db73d56688d23d4a6498fff211..af7bd4f951d110fdce418122226541d5340bb8e9 100644 (file)
@@ -11,6 +11,7 @@
 <booleanAttribute key="default" value="true"/>
 <booleanAttribute key="default_auto_start" value="true"/>
 <intAttribute key="default_start_level" value="4"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.opendaylight.controller.clustering.stub,org.opendaylight.controller.protocol_plugins.stub"/>
 <booleanAttribute key="includeOptional" value="false"/>
 <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
 <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
@@ -21,9 +22,9 @@
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true &#10;-Dosgi.noShutdown=true &#10;-Dorg.osgi.framework.system.packages.extra=sun.reflect,sun.reflect.misc,sun.misc&#10;-Dosgi.hook.configurators.include=org.eclipse.virgo.kernel.equinox.extensions.hooks.ExtensionsHookConfigurator&#10;-Dlogback.configurationFile=${project_loc:/distribution.opendaylight}/src/main/resources/configuration/logback.xml&#10;-Dorg.eclipse.gemini.web.tomcat.config.path=${project_loc:/distribution.opendaylight}/src/main/resources/configuration/tomcat-server.xml&#10;-Dosgi.frameworkClassPath=file:${project_loc:/distribution.opendaylight}/../p2site/target/repository/plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar,file:${project_loc:/distribution.opendaylight}/../p2site/target/repository/plugins/org.eclipse.virgo.kernel.equinox.extensions_3.6.0.RELEASE.jar,file:${project_loc:/distribution.opendaylight}/../p2site/target/repository/plugins/org.eclipse.osgi_3.8.1.v20120830-144521.jar"/>
 <stringAttribute key="pde.version" value="3.3"/>
 <booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,chameleon-mbeans@default:default,com.google.gson@default:default,com.springsource.org.aopalliance@default:default,com.sun.jersey.client@default:default,com.sun.jersey.core@default:default,com.sun.jersey.jersey-server@default:default,com.sun.jersey.json@default:default,jackson-core-asl@default:default,jackson-jaxrs@default:default,jackson-mapper-asl@default:default,javax.activation@default:default,javax.annotation@default:default,javax.ejb@default:default,javax.el@default:default,javax.mail.glassfish@default:default,javax.persistence@default:default,javax.servlet.jsp.jstl.impl@default:default,javax.servlet.jsp.jstl@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.xml.rpc@default:default,jcl.over.slf4j@default:default,log4j.over.slf4j@default:default,org.apache.catalina.ha@default:false,org.apache.catalina.tribes@default:false,org.apache.catalina@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.coyote@default:false,org.apache.el@default:default,org.apache.felix.dependencymanager.shell@default:default,org.apache.felix.dependencymanager@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.jasper@default:false,org.apache.juli.extras@default:default,org.apache.tomcat.api@default:default,org.apache.tomcat.util@default:false,org.codehaus.jettison.jettison@default:default,org.eclipse.equinox.cm@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.util@default:default,org.eclipse.gemini.web.core@default:default,org.eclipse.gemini.web.extender@default:default,org.eclipse.gemini.web.tomcat@default:default,org.eclipse.jdt.core.compiler.batch@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.virgo.kernel.equinox.extensions@default:false,org.eclipse.virgo.util.common@default:default,org.eclipse.virgo.util.io@default:default,org.eclipse.virgo.util.math@default:default,org.eclipse.virgo.util.osgi.manifest@default:default,org.eclipse.virgo.util.osgi@default:default,org.eclipse.virgo.util.parser.manifest@default:default,org.jboss.spec.javax.transaction.jboss-transaction-api_1.1_spec@default:default,org.springframework.aop@default:default,org.springframework.asm@default:default,org.springframework.beans@default:default,org.springframework.context.support@default:default,org.springframework.context@default:default,org.springframework.core@default:default,org.springframework.expression@default:default,org.springframework.security.config@default:default,org.springframework.security.core@default:default,org.springframework.security.taglibs@default:default,org.springframework.security.web@default:default,org.springframework.transaction@default:default,org.springframework.web.servlet@default:default,org.springframework.web@default:default,slf4j.api@default:default"/>
+<stringAttribute key="target_bundles" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,chameleon-mbeans@default:default,com.google.gson@default:default,com.springsource.org.aopalliance@default:default,com.sun.jersey.client@1:default,com.sun.jersey.core@1:default,com.sun.jersey.jersey-server@1:default,com.sun.jersey.json@1:default,jackson-core-asl@default:default,jackson-jaxrs@default:default,jackson-mapper-asl@default:default,javax.activation@default:default,javax.annotation@default:default,javax.ejb@default:default,javax.el@default:default,javax.mail.glassfish@default:default,javax.persistence@default:default,javax.servlet.jsp.jstl.impl@default:default,javax.servlet.jsp.jstl@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.xml.rpc@default:default,jcl.over.slf4j@default:default,log4j.over.slf4j@default:default,org.apache.catalina.ha@default:false,org.apache.catalina.tribes@default:false,org.apache.catalina@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.coyote@default:false,org.apache.el@default:default,org.apache.felix.dependencymanager.shell@default:default,org.apache.felix.dependencymanager@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.jasper@default:false,org.apache.juli.extras@default:default,org.apache.tomcat.api@default:default,org.apache.tomcat.util@default:false,org.codehaus.jettison.jettison@default:default,org.eclipse.equinox.cm@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.util@default:default,org.eclipse.gemini.web.core@default:default,org.eclipse.gemini.web.extender@default:default,org.eclipse.gemini.web.tomcat@default:default,org.eclipse.jdt.core.compiler.batch@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.virgo.kernel.equinox.extensions@default:false,org.eclipse.virgo.util.common@default:default,org.eclipse.virgo.util.io@default:default,org.eclipse.virgo.util.math@default:default,org.eclipse.virgo.util.osgi.manifest@default:default,org.eclipse.virgo.util.osgi@default:default,org.eclipse.virgo.util.parser.manifest@default:default,org.jboss.spec.javax.transaction.jboss-transaction-api_1.1_spec@default:default,org.springframework.aop@default:default,org.springframework.asm@default:default,org.springframework.beans@default:default,org.springframework.context.support@default:default,org.springframework.context@default:default,org.springframework.core@default:default,org.springframework.expression@default:default,org.springframework.security.config@default:default,org.springframework.security.core@default:default,org.springframework.security.taglibs@default:default,org.springframework.security.web@default:default,org.springframework.transaction@default:default,org.springframework.web.servlet@default:default,org.springframework.web@default:default,slf4j.api@default:default"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
 <booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.opendaylight.controller.arphandler@default:default,org.opendaylight.controller.clustering.services-implementation@default:default,org.opendaylight.controller.clustering.services@default:default,org.opendaylight.controller.clustering.stub@default:default,org.opendaylight.controller.clustering.test@default:default,org.opendaylight.controller.commons.northbound@default:default,org.opendaylight.controller.configuration.implementation@default:default,org.opendaylight.controller.configuration@default:default,org.opendaylight.controller.containermanager.implementation@default:default,org.opendaylight.controller.containermanager@default:default,org.opendaylight.controller.devices.web@default:default,org.opendaylight.controller.flowprogrammer.northbound@default:default,org.opendaylight.controller.flows.web@default:default,org.opendaylight.controller.forwarding.staticrouting.northbound@default:default,org.opendaylight.controller.forwarding.staticrouting@default:default,org.opendaylight.controller.forwardingrulesmanager.implementation@default:default,org.opendaylight.controller.forwardingrulesmanager@default:default,org.opendaylight.controller.hosttracker.implementation@default:default,org.opendaylight.controller.hosttracker.northbound@default:default,org.opendaylight.controller.hosttracker@default:default,org.opendaylight.controller.logging.bridge@default:default,org.opendaylight.controller.protocol_plugins.openflow@default:default,org.opendaylight.controller.protocol_plugins.stub@default:default,org.opendaylight.controller.routing.dijkstra_implementation@default:default,org.opendaylight.controller.sal.implementation@default:default,org.opendaylight.controller.sal@default:default,org.opendaylight.controller.samples.loadbalancer.northbound@default:default,org.opendaylight.controller.samples.loadbalancer@default:default,org.opendaylight.controller.samples.simpleforwarding@default:default,org.opendaylight.controller.security@default:false,org.opendaylight.controller.statistics.northbound@default:default,org.opendaylight.controller.statisticsmanager.implementation@default:default,org.opendaylight.controller.statisticsmanager@default:default,org.opendaylight.controller.subnets.northbound@default:default,org.opendaylight.controller.switchmanager.implementation@default:default,org.opendaylight.controller.switchmanager.northbound@default:default,org.opendaylight.controller.switchmanager@default:default,org.opendaylight.controller.thirdparty.com.sun.jersey.jersey-servlet@default:default,org.opendaylight.controller.thirdparty.net.sf.jung2@default:default,org.opendaylight.controller.thirdparty.org.openflow.openflowj@default:default,org.opendaylight.controller.topology.northbound@default:default,org.opendaylight.controller.topology.web@default:default,org.opendaylight.controller.topologymanager@default:default,org.opendaylight.controller.troubleshoot.web@default:default,org.opendaylight.controller.usermanager@default:default,org.opendaylight.controller.web@default:default"/>
+<stringAttribute key="workspace_bundles" value="org.opendaylight.controller.arphandler@default:default,org.opendaylight.controller.clustering.services-implementation@default:default,org.opendaylight.controller.clustering.services@default:default,org.opendaylight.controller.clustering.test@default:default,org.opendaylight.controller.commons.northbound@default:default,org.opendaylight.controller.concepts@default:default,org.opendaylight.controller.configuration.implementation@default:default,org.opendaylight.controller.configuration@default:default,org.opendaylight.controller.containermanager.implementation@default:default,org.opendaylight.controller.containermanager@default:default,org.opendaylight.controller.devices.web@default:default,org.opendaylight.controller.flowprogrammer.northbound@default:default,org.opendaylight.controller.flows.web@default:default,org.opendaylight.controller.forwarding.staticrouting.northbound@default:default,org.opendaylight.controller.forwarding.staticrouting@default:default,org.opendaylight.controller.forwardingrulesmanager.implementation@default:default,org.opendaylight.controller.forwardingrulesmanager@default:default,org.opendaylight.controller.hosttracker.implementation@default:default,org.opendaylight.controller.hosttracker.northbound@default:default,org.opendaylight.controller.hosttracker@default:default,org.opendaylight.controller.logging.bridge@default:default,org.opendaylight.controller.protocol_plugins.openflow@default:default,org.opendaylight.controller.routing.dijkstra_implementation@default:default,org.opendaylight.controller.sal.implementation@default:default,org.opendaylight.controller.sal@default:default,org.opendaylight.controller.samples.loadbalancer.northbound@default:default,org.opendaylight.controller.samples.loadbalancer@default:default,org.opendaylight.controller.samples.simpleforwarding@default:default,org.opendaylight.controller.security@default:false,org.opendaylight.controller.statistics.northbound@default:default,org.opendaylight.controller.statisticsmanager.implementation@default:default,org.opendaylight.controller.statisticsmanager@default:default,org.opendaylight.controller.subnets.northbound@default:default,org.opendaylight.controller.switchmanager.implementation@default:default,org.opendaylight.controller.switchmanager.northbound@default:default,org.opendaylight.controller.switchmanager@default:default,org.opendaylight.controller.thirdparty.com.sun.jersey.jersey-servlet@default:default,org.opendaylight.controller.thirdparty.net.sf.jung2@default:default,org.opendaylight.controller.thirdparty.org.openflow.openflowj@default:default,org.opendaylight.controller.topology.northbound@default:default,org.opendaylight.controller.topology.web@default:default,org.opendaylight.controller.topologymanager@default:default,org.opendaylight.controller.troubleshoot.web@default:default,org.opendaylight.controller.usermanager@default:default,org.opendaylight.controller.web@default:default"/>
 </launchConfiguration>
index a802ee36060418107d838bbd2c4109ae9bb492e4..497db69f711e62dc219314a118a046a71420e807 100644 (file)
@@ -11,6 +11,7 @@
 <booleanAttribute key="default" value="true"/>
 <booleanAttribute key="default_auto_start" value="true"/>
 <intAttribute key="default_start_level" value="4"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.opendaylight.controller.clustering.stub,org.opendaylight.controller.protocol_plugins.stub"/>
 <booleanAttribute key="includeOptional" value="false"/>
 <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
 <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
@@ -21,9 +22,9 @@
 <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true &#10;-Dosgi.noShutdown=true &#10;-Dorg.osgi.framework.system.packages.extra=sun.reflect,sun.reflect.misc,sun.misc&#10;-Dosgi.hook.configurators.include=org.eclipse.virgo.kernel.equinox.extensions.hooks.ExtensionsHookConfigurator&#10;-Dlogback.configurationFile=${project_loc:/distribution.opendaylight}/src/main/resources/configuration/logback.xml&#10;-Dorg.eclipse.gemini.web.tomcat.config.path=${project_loc:/distribution.opendaylight}/src/main/resources/configuration/tomcat-server.xml&#10;-Dosgi.frameworkClassPath=file:${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar,file:${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.virgo.kernel.equinox.extensions_3.6.0.RELEASE.jar,file:${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.osgi_3.8.1.v20120830-144521.jar"/>
 <stringAttribute key="pde.version" value="3.3"/>
 <booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,chameleon-mbeans@default:default,com.google.gson@default:default,com.springsource.org.aopalliance@default:default,com.sun.jersey.client@default:default,com.sun.jersey.core@default:default,com.sun.jersey.jersey-server@default:default,com.sun.jersey.json@default:default,jackson-core-asl@default:default,jackson-jaxrs@default:default,jackson-mapper-asl@default:default,javax.activation@default:default,javax.annotation@default:default,javax.ejb@default:default,javax.el@default:default,javax.mail.glassfish@default:default,javax.persistence@default:default,javax.servlet.jsp.jstl.impl@default:default,javax.servlet.jsp.jstl@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.xml.rpc@default:default,jcl.over.slf4j@default:default,log4j.over.slf4j@default:default,org.apache.catalina.ha@default:false,org.apache.catalina.tribes@default:false,org.apache.catalina@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.coyote@default:false,org.apache.el@default:default,org.apache.felix.dependencymanager.shell@default:default,org.apache.felix.dependencymanager@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.jasper@default:false,org.apache.juli.extras@default:default,org.apache.tomcat.api@default:default,org.apache.tomcat.util@default:false,org.codehaus.jettison.jettison@default:default,org.eclipse.equinox.cm@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.util@default:default,org.eclipse.gemini.web.core@default:default,org.eclipse.gemini.web.extender@default:default,org.eclipse.gemini.web.tomcat@default:default,org.eclipse.jdt.core.compiler.batch@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.virgo.kernel.equinox.extensions@default:false,org.eclipse.virgo.util.common@default:default,org.eclipse.virgo.util.io@default:default,org.eclipse.virgo.util.math@default:default,org.eclipse.virgo.util.osgi.manifest@default:default,org.eclipse.virgo.util.osgi@default:default,org.eclipse.virgo.util.parser.manifest@default:default,org.jboss.spec.javax.transaction.jboss-transaction-api_1.1_spec@default:default,org.springframework.aop@default:default,org.springframework.asm@default:default,org.springframework.beans@default:default,org.springframework.context.support@default:default,org.springframework.context@default:default,org.springframework.core@default:default,org.springframework.expression@default:default,org.springframework.security.config@default:default,org.springframework.security.core@default:default,org.springframework.security.taglibs@default:default,org.springframework.security.web@default:default,org.springframework.transaction@default:default,org.springframework.web.servlet@default:default,org.springframework.web@default:default,slf4j.api@default:default"/>
+<stringAttribute key="target_bundles" value="ch.qos.logback.classic@default:default,ch.qos.logback.core@default:default,chameleon-mbeans@default:default,com.google.gson@default:default,com.springsource.org.aopalliance@default:default,com.sun.jersey.client@1:default,com.sun.jersey.core@1:default,com.sun.jersey.jersey-server@1:default,com.sun.jersey.json@1:default,jackson-core-asl@default:default,jackson-jaxrs@default:default,jackson-mapper-asl@default:default,javax.activation@default:default,javax.annotation@default:default,javax.ejb@default:default,javax.el@default:default,javax.mail.glassfish@default:default,javax.persistence@default:default,javax.servlet.jsp.jstl.impl@default:default,javax.servlet.jsp.jstl@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.xml.rpc@default:default,jcl.over.slf4j@default:default,log4j.over.slf4j@default:default,org.apache.catalina.ha@default:false,org.apache.catalina.tribes@default:false,org.apache.catalina@default:default,org.apache.commons.fileupload@default:default,org.apache.commons.io@default:default,org.apache.commons.lang3@default:default,org.apache.coyote@default:false,org.apache.el@default:default,org.apache.felix.dependencymanager.shell@default:default,org.apache.felix.dependencymanager@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.jasper@default:false,org.apache.juli.extras@default:default,org.apache.tomcat.api@default:default,org.apache.tomcat.util@default:false,org.codehaus.jettison.jettison@default:default,org.eclipse.equinox.cm@default:default,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.util@default:default,org.eclipse.gemini.web.core@default:default,org.eclipse.gemini.web.extender@default:default,org.eclipse.gemini.web.tomcat@default:default,org.eclipse.jdt.core.compiler.batch@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.virgo.kernel.equinox.extensions@default:false,org.eclipse.virgo.util.common@default:default,org.eclipse.virgo.util.io@default:default,org.eclipse.virgo.util.math@default:default,org.eclipse.virgo.util.osgi.manifest@default:default,org.eclipse.virgo.util.osgi@default:default,org.eclipse.virgo.util.parser.manifest@default:default,org.jboss.spec.javax.transaction.jboss-transaction-api_1.1_spec@default:default,org.springframework.aop@default:default,org.springframework.asm@default:default,org.springframework.beans@default:default,org.springframework.context.support@default:default,org.springframework.context@default:default,org.springframework.core@default:default,org.springframework.expression@default:default,org.springframework.security.config@default:default,org.springframework.security.core@default:default,org.springframework.security.taglibs@default:default,org.springframework.security.web@default:default,org.springframework.transaction@default:default,org.springframework.web.servlet@default:default,org.springframework.web@default:default,slf4j.api@default:default"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
 <booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.opendaylight.controller.arphandler@default:default,org.opendaylight.controller.clustering.services-implementation@default:default,org.opendaylight.controller.clustering.services@default:default,org.opendaylight.controller.clustering.stub@default:default,org.opendaylight.controller.clustering.test@default:default,org.opendaylight.controller.commons.northbound@default:default,org.opendaylight.controller.configuration.implementation@default:default,org.opendaylight.controller.configuration@default:default,org.opendaylight.controller.containermanager.implementation@default:default,org.opendaylight.controller.containermanager@default:default,org.opendaylight.controller.devices.web@default:default,org.opendaylight.controller.flowprogrammer.northbound@default:default,org.opendaylight.controller.flows.web@default:default,org.opendaylight.controller.forwarding.staticrouting.northbound@default:default,org.opendaylight.controller.forwarding.staticrouting@default:default,org.opendaylight.controller.forwardingrulesmanager.implementation@default:default,org.opendaylight.controller.forwardingrulesmanager@default:default,org.opendaylight.controller.hosttracker.implementation@default:default,org.opendaylight.controller.hosttracker.northbound@default:default,org.opendaylight.controller.hosttracker@default:default,org.opendaylight.controller.logging.bridge@default:default,org.opendaylight.controller.protocol_plugins.openflow@default:default,org.opendaylight.controller.protocol_plugins.stub@default:default,org.opendaylight.controller.routing.dijkstra_implementation@default:default,org.opendaylight.controller.sal.implementation@default:default,org.opendaylight.controller.sal@default:default,org.opendaylight.controller.samples.loadbalancer.northbound@default:default,org.opendaylight.controller.samples.loadbalancer@default:default,org.opendaylight.controller.samples.simpleforwarding@default:default,org.opendaylight.controller.security@default:false,org.opendaylight.controller.statistics.northbound@default:default,org.opendaylight.controller.statisticsmanager.implementation@default:default,org.opendaylight.controller.statisticsmanager@default:default,org.opendaylight.controller.subnets.northbound@default:default,org.opendaylight.controller.switchmanager.implementation@default:default,org.opendaylight.controller.switchmanager.northbound@default:default,org.opendaylight.controller.switchmanager@default:default,org.opendaylight.controller.thirdparty.com.sun.jersey.jersey-servlet@default:default,org.opendaylight.controller.thirdparty.net.sf.jung2@default:default,org.opendaylight.controller.thirdparty.org.openflow.openflowj@default:default,org.opendaylight.controller.topology.northbound@default:default,org.opendaylight.controller.topology.web@default:default,org.opendaylight.controller.topologymanager@default:default,org.opendaylight.controller.troubleshoot.web@default:default,org.opendaylight.controller.usermanager@default:default,org.opendaylight.controller.web@default:default"/>
+<stringAttribute key="workspace_bundles" value="org.opendaylight.controller.arphandler@default:default,org.opendaylight.controller.clustering.services-implementation@default:default,org.opendaylight.controller.clustering.services@default:default,org.opendaylight.controller.commons.northbound@default:default,org.opendaylight.controller.concepts@default:default,org.opendaylight.controller.configuration.implementation@default:default,org.opendaylight.controller.configuration@default:default,org.opendaylight.controller.containermanager.implementation@default:default,org.opendaylight.controller.containermanager@default:default,org.opendaylight.controller.devices.web@default:default,org.opendaylight.controller.flowprogrammer.northbound@default:default,org.opendaylight.controller.flows.web@default:default,org.opendaylight.controller.forwarding.staticrouting.northbound@default:default,org.opendaylight.controller.forwarding.staticrouting@default:default,org.opendaylight.controller.forwardingrulesmanager.implementation@default:default,org.opendaylight.controller.forwardingrulesmanager@default:default,org.opendaylight.controller.hosttracker.implementation@default:default,org.opendaylight.controller.hosttracker.northbound@default:default,org.opendaylight.controller.hosttracker@default:default,org.opendaylight.controller.logging.bridge@default:default,org.opendaylight.controller.protocol_plugins.openflow@default:default,org.opendaylight.controller.routing.dijkstra_implementation@default:default,org.opendaylight.controller.sal.implementation@default:default,org.opendaylight.controller.sal@default:default,org.opendaylight.controller.samples.loadbalancer.northbound@default:default,org.opendaylight.controller.samples.loadbalancer@default:default,org.opendaylight.controller.samples.simpleforwarding@default:default,org.opendaylight.controller.security@default:false,org.opendaylight.controller.statistics.northbound@default:default,org.opendaylight.controller.statisticsmanager.implementation@default:default,org.opendaylight.controller.statisticsmanager@default:default,org.opendaylight.controller.subnets.northbound@default:default,org.opendaylight.controller.switchmanager.implementation@default:default,org.opendaylight.controller.switchmanager.northbound@default:default,org.opendaylight.controller.switchmanager@default:default,org.opendaylight.controller.thirdparty.com.sun.jersey.jersey-servlet@default:default,org.opendaylight.controller.thirdparty.net.sf.jung2@default:default,org.opendaylight.controller.thirdparty.org.openflow.openflowj@default:default,org.opendaylight.controller.topology.northbound@default:default,org.opendaylight.controller.topology.web@default:default,org.opendaylight.controller.topologymanager@default:default,org.opendaylight.controller.troubleshoot.web@default:default,org.opendaylight.controller.usermanager@default:default,org.opendaylight.controller.web@default:default"/>
 </launchConfiguration>
index c714f567164b5dc6b422df49ab8e0df6da3664de..e3d1e5275df29f7efc3f27b9f77dedc09ec0ddc5 100644 (file)
@@ -1,85 +1,85 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="opendaylight" sequenceNumber="3">
+<?pde version="3.8"?><target name="opendaylight" sequenceNumber="4">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="slicer" includeSource="true" type="InstallableUnit">
-<unit id="com.springsource.org.aopalliance" version="1.0.0"/>
+<unit id="org.apache.jasper" version="7.0.32.v201211201952"/>
+<unit id="javax.servlet.jsp.jstl.impl" version="1.2.0.v201210211230"/>
+<unit id="org.springframework.context" version="3.1.3.RELEASE"/>
+<unit id="org.eclipse.gemini.web.extender" version="2.2.0.RELEASE"/>
+<unit id="jackson-jaxrs" version="1.9.8"/>
+<unit id="com.sun.jersey.jersey-server" version="1.17.0"/>
+<unit id="org.eclipse.jdt.core.compiler.batch" version="3.8.0.I20120518-2145"/>
+<unit id="org.springframework.web" version="3.1.3.RELEASE"/>
+<unit id="com.google.gson" version="2.1.0"/>
+<unit id="org.springframework.security.config" version="3.1.3.RELEASE"/>
+<unit id="org.springframework.transaction" version="3.1.3.RELEASE"/>
+<unit id="org.eclipse.virgo.util.math" version="3.6.0.RELEASE"/>
 <unit id="org.apache.el" version="7.0.32.v201211081135"/>
-<unit id="org.apache.felix.dependencymanager" version="3.1.0"/>
+<unit id="org.springframework.web.servlet" version="3.1.3.RELEASE"/>
 <unit id="org.apache.felix.dependencymanager.shell" version="3.0.1"/>
+<unit id="log4j.over.slf4j" version="1.7.2"/>
+<unit id="com.springsource.org.aopalliance" version="1.0.0"/>
+<unit id="javax.annotation" version="1.1.0.v201209060031"/>
+<unit id="jcl.over.slf4j" version="1.7.2"/>
+<unit id="javax.mail.glassfish" version="1.4.1.v201108011116"/>
+<unit id="slf4j.api" version="1.7.2"/>
+<unit id="org.springframework.expression" version="3.1.3.RELEASE"/>
+<unit id="jackson-mapper-asl" version="1.9.8"/>
+<unit id="org.eclipse.gemini.web.tomcat" version="2.2.0.RELEASE"/>
 <unit id="org.apache.felix.gogo.command" version="0.8.0.v201108120515"/>
+<unit id="org.springframework.asm" version="3.1.3.RELEASE"/>
+<unit id="org.eclipse.equinox.ds" version="1.4.0.v20120522-1841"/>
+<unit id="org.eclipse.equinox.console" version="1.0.0.v20120522-1841"/>
+<unit id="org.apache.catalina" version="7.0.32.v201211201336"/>
+<unit id="chameleon-mbeans" version="1.0.0"/>
+<unit id="javax.servlet.jsp.jstl" version="1.2.0.v201105211821"/>
 <unit id="org.apache.felix.gogo.runtime" version="0.8.0.v201108120515"/>
-<unit id="org.apache.felix.gogo.shell" version="0.8.0.v201110170705"/>
+<unit id="org.apache.tomcat.util" version="7.0.32.v201211201952"/>
+<unit id="jackson-core-asl" version="1.9.8"/>
 <unit id="javax.activation" version="1.1.0.v201211130549"/>
-<unit id="org.apache.jasper" version="7.0.32.v201211201952"/>
-<unit id="org.apache.juli.extras" version="7.0.32.v201211081135"/>
+<unit id="org.eclipse.gemini.web.core" version="2.2.0.RELEASE"/>
+<unit id="org.eclipse.virgo.util.osgi" version="3.6.0.RELEASE"/>
+<unit id="org.apache.commons.io" version="2.3.0"/>
+<unit id="javax.servlet.jsp" version="2.2.0.v201112011158"/>
 <unit id="org.apache.tomcat.api" version="7.0.32.v201211081135"/>
-<unit id="org.apache.catalina" version="7.0.32.v201211201336"/>
-<unit id="org.apache.catalina.ha" version="7.0.32.v201211201952"/>
-<unit id="org.apache.catalina.tribes" version="7.0.32.v201211201952"/>
+<unit id="com.sun.jersey.core" version="1.17.0"/>
+<unit id="org.springframework.security.taglibs" version="3.1.3.RELEASE"/>
+<unit id="org.springframework.security.web" version="3.1.3.RELEASE"/>
+<unit id="com.sun.jersey.client" version="1.17.0"/>
+<unit id="org.springframework.aop" version="3.1.3.RELEASE"/>
 <unit id="org.apache.coyote" version="7.0.32.v201211201952"/>
-<unit id="org.apache.tomcat.util" version="7.0.32.v201211201952"/>
+<unit id="org.eclipse.virgo.kernel.equinox.extensions" version="3.6.0.RELEASE"/>
+<unit id="org.eclipse.osgi.services" version="3.3.100.v20120522-1822"/>
 <unit id="org.eclipse.virgo.util.common" version="3.6.0.RELEASE"/>
+<unit id="com.sun.jersey.json" version="1.17.0"/>
+<unit id="org.eclipse.equinox.util" version="1.0.400.v20120522-2049"/>
+<unit id="org.springframework.core" version="3.1.3.RELEASE"/>
 <unit id="org.apache.commons.fileupload" version="1.2.2"/>
-<unit id="org.apache.commons.io" version="2.3.0"/>
+<unit id="org.codehaus.jettison.jettison" version="1.3.3"/>
+<unit id="org.eclipse.virgo.util.io" version="3.6.0.RELEASE"/>
+<unit id="org.apache.felix.gogo.shell" version="0.8.0.v201110170705"/>
 <unit id="org.apache.commons.lang3" version="3.1.0"/>
 <unit id="org.eclipse.equinox.cm" version="1.0.400.v20120522-1841"/>
-<unit id="org.eclipse.equinox.console" version="1.0.0.v20120522-1841"/>
-<unit id="jackson-mapper-asl" version="1.9.8"/>
-<unit id="org.eclipse.equinox.ds" version="1.4.0.v20120522-1841"/>
-<unit id="org.eclipse.jdt.core.compiler.batch" version="3.8.0.I20120518-2145"/>
+<unit id="org.springframework.beans" version="3.1.3.RELEASE"/>
+<unit id="javax.servlet" version="3.0.0.v201112011016"/>
 <unit id="org.eclipse.equinox.launcher" version="1.3.0.v20120522-1813"/>
-<unit id="org.eclipse.virgo.kernel.equinox.extensions" version="3.6.0.RELEASE"/>
-<unit id="org.eclipse.equinox.util" version="1.0.400.v20120522-2049"/>
-<unit id="org.eclipse.gemini.web.core" version="2.2.0.RELEASE"/>
-<unit id="org.eclipse.gemini.web.extender" version="2.2.0.RELEASE"/>
-<unit id="org.eclipse.gemini.web.tomcat" version="2.2.0.RELEASE"/>
-<unit id="com.google.gson" version="2.1.0"/>
-<unit id="org.eclipse.virgo.util.io" version="3.6.0.RELEASE"/>
-<unit id="jackson-core-asl" version="1.9.8"/>
-<unit id="javax.ejb" version="3.1.1.v201204261316"/>
-<unit id="org.eclipse.virgo.util.parser.manifest" version="3.6.0.RELEASE"/>
 <unit id="javax.persistence" version="2.0.4.v201112161009"/>
-<unit id="javax.servlet.jsp.jstl" version="1.2.0.v201105211821"/>
-<unit id="org.jboss.spec.javax.transaction.jboss-transaction-api_1.1_spec" version="1.0.1.Final"/>
-<unit id="javax.servlet.jsp.jstl.impl" version="1.2.0.v201210211230"/>
-<unit id="javax.el" version="2.2.0.v201108011116"/>
-<unit id="javax.annotation" version="1.1.0.v201209060031"/>
-<unit id="javax.mail.glassfish" version="1.4.1.v201108011116"/>
-<unit id="javax.xml.rpc" version="1.1.0.v201005080400"/>
-<unit id="jackson-jaxrs" version="1.9.8"/>
-<unit id="jcl.over.slf4j" version="1.7.2"/>
-<unit id="com.sun.jersey.client" version="1.17.0"/>
-<unit id="com.sun.jersey.core" version="1.17.0"/>
-<unit id="com.sun.jersey.json" version="1.17.0"/>
-<unit id="com.sun.jersey.jersey-server" version="1.17.0"/>
-<unit id="org.codehaus.jettison.jettison" version="1.3.3"/>
-<unit id="javax.servlet.jsp" version="2.2.0.v201112011158"/>
-<unit id="log4j.over.slf4j" version="1.7.2"/>
-<unit id="ch.qos.logback.classic" version="1.0.9"/>
-<unit id="ch.qos.logback.core" version="1.0.9"/>
-<unit id="org.eclipse.virgo.util.math" version="3.6.0.RELEASE"/>
-<unit id="org.eclipse.virgo.util.osgi.manifest" version="3.6.0.RELEASE"/>
-<unit id="org.eclipse.osgi.services" version="3.3.100.v20120522-1822"/>
 <unit id="org.eclipse.osgi" version="3.8.1.v20120830-144521"/>
-<unit id="org.eclipse.virgo.util.osgi" version="3.6.0.RELEASE"/>
-<unit id="chameleon-mbeans" version="1.0.0"/>
-<unit id="javax.servlet" version="3.0.0.v201112011016"/>
-<unit id="slf4j.api" version="1.7.2"/>
-<unit id="org.springframework.aop" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.asm" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.beans" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.context" version="3.1.3.RELEASE"/>
+<unit id="ch.qos.logback.core" version="1.0.9"/>
+<unit id="javax.ejb" version="3.1.1.v201204261316"/>
+<unit id="org.apache.catalina.ha" version="7.0.32.v201211201952"/>
 <unit id="org.springframework.context.support" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.core" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.expression" version="3.1.3.RELEASE"/>
+<unit id="org.eclipse.virgo.util.osgi.manifest" version="3.6.0.RELEASE"/>
+<unit id="javax.xml.rpc" version="1.1.0.v201005080400"/>
+<unit id="ch.qos.logback.classic" version="1.0.9"/>
 <unit id="org.springframework.security.core" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.security.config" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.security.taglibs" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.security.web" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.transaction" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.web" version="3.1.3.RELEASE"/>
-<unit id="org.springframework.web.servlet" version="3.1.3.RELEASE"/>
-<repository location="https://jenkins.opendaylight.org/controller/job/controller-merge/lastSuccessfulBuild/artifact/opendaylight/distribution/p2site/target/repository/"/>
+<unit id="javax.el" version="2.2.0.v201108011116"/>
+<unit id="org.apache.juli.extras" version="7.0.32.v201211081135"/>
+<unit id="org.jboss.spec.javax.transaction.jboss-transaction-api_1.1_spec" version="1.0.1.Final"/>
+<unit id="org.apache.catalina.tribes" version="7.0.32.v201211201952"/>
+<unit id="org.eclipse.virgo.util.parser.manifest" version="3.6.0.RELEASE"/>
+<unit id="org.apache.felix.dependencymanager" version="3.1.0"/>
+<repository location="http://nexus.opendaylight.org/content/repositories/controllerp2site/"/>
 </location>
 </locations>
 </target>
index e7b5745a2ec63c3fc3544d3b538e1d5188154303..243da05869a5edd4ec7d41eedccf61b2b5e1079f 100644 (file)
@@ -82,20 +82,6 @@ public class HostNodeConnector extends Host {
         return this.nodeConnector.getNode();
     }
 
-    /**
-     * @return the NodeId
-     */
-    public Long getnodeconnectornodeId() {
-        return (Long) this.nodeConnector.getNode().getID();
-    }
-
-    /**
-     * @return the port
-     */
-    public Short getnodeconnectorportId() {
-        return (Short) this.nodeConnector.getID();
-    }
-
     /**
      * @return the DataLayerAddress
      */
index ee38fc72e819a1d2d229d7f54525b0ca079ed64c..c29e5b16453407e8999bdbaec21cd9eabc9185a5 100644 (file)
@@ -57,8 +57,7 @@ public class HostNodeConnectorTest extends TestCase {
                        Assert.assertTrue(hostnodeconnector_2.isV6Host());\r
                        Assert.assertTrue(hostnodeconnector_2.getnodeConnector().equals(nc1));\r
                        Assert.assertTrue(hostnodeconnector_2.getnodeconnectorNode().equals(node));\r
-                       Assert.assertTrue(node.getID().equals(hostnodeconnector_2.getnodeconnectornodeId()));\r
-                       Assert.assertTrue(hostnodeconnector_2.getnodeconnectorportId().equals((short)2));\r
+                        Assert.assertTrue(node.equals(hostnodeconnector_2.getnodeconnectorNode()));\r
                } catch (ConstructionException e) {\r
                        Assert.assertTrue(false);\r
                }\r
index f5123eb4d0dc3393cebeb1bdae0b864a626ccc64..f8534e98101702b6ce1039714eb9a647392cf85f 100644 (file)
@@ -140,12 +140,12 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      * wasn't created for this host in the controller. This would cause
      * arphandler not to know where to send the ARP 2. The host facing port is
      * down 3. The IP host doesn't exist or is not responding to ARP requests
-     * 
+     *
      * Conditions 1 and 2 above can be recovered if ARP is sent when the
      * relevant L3 interface is added or the port facing host comes up. Whenever
      * L3 interface is added or host facing port comes up, ARP will be sent to
      * hosts in this list.
-     * 
+     *
      * We can't recover from condition 3 above
      */
     private ArrayList<ARPPending> failedARPReqList = new ArrayList<HostTracker.ARPPending>();
@@ -591,10 +591,10 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      * When a new Host is learnt by the hosttracker module, it places the
      * directly connected Node in Tier-1 & using this function, updates the Tier
      * value for all other Nodes in the network hierarchy.
-     * 
+     *
      * This is a recursive function and it takes care of updating the Tier value
      * for all the connected and eligible Nodes.
-     * 
+     *
      * @param n
      *            Node that represents one of the Vertex in the Topology Graph.
      * @param currentTier
@@ -643,7 +643,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      * Internal convenience routine to check the eligibility of a Switch for a
      * Tier update. Any Node with Tier=0 or a Tier value that is greater than
      * the new Tier Value is eligible for the update.
-     * 
+     *
      * @param n
      *            Node for which the Tier update eligibility is checked
      * @param tier
@@ -717,7 +717,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      * that returns the Network Hierarchy for a given Host. This API is
      * typically used by applications like Hadoop for Rack Awareness
      * functionality.
-     * 
+     *
      * @param hostAddress
      *            IP-Address of the host/node.
      * @return Network Hierarchies represented by an Array of Array (of
@@ -742,7 +742,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      * is used as the network for Hadoop Demos & in order to give a meaningful
      * rack-awareness switch names, the DPID is organized in ASCII Characters
      * and retrieved as string.
-     * 
+     *
      * @param dpid
      *            Switch DataPath Id
      * @return Ascii String represented by the DPID.
@@ -765,7 +765,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
 
     /**
      * A convenient recursive routine to obtain the Hierarchy of Switches.
-     * 
+     *
      * @param node
      *            Current Node in the Recursive routine.
      * @param currHierarchy
@@ -1009,7 +1009,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
     /**
      * Inform the controller IP to MAC binding of a host and its connectivity to
      * an openflow switch in terms of Node, port, and VLAN.
-     * 
+     *
      * @param networkAddr
      *            IP address of the host
      * @param dataLayer
@@ -1020,7 +1020,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      *            Port of the switch to which host is connected
      * @param vlan
      *            Vlan of which this host is member of
-     * 
+     *
      * @return Status The status object as described in {@code Status}
      *         indicating the result of this action.
      */
@@ -1067,7 +1067,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
     /**
      * Update the controller IP to MAC binding of a host and its connectivity to
      * an openflow switch in terms of switch id, switch port, and VLAN.
-     * 
+     *
      * @param networkAddr
      *            IP address of the host
      * @param dataLayer
@@ -1078,7 +1078,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      *            Port of the switch to which host is connected
      * @param vlan
      *            Vlan of which this host is member of
-     * 
+     *
      * @return boolean true if the host was added successfully, false otherwise
      */
     public boolean updateHostReq(InetAddress networkAddr,
@@ -1107,10 +1107,10 @@ public class HostTracker implements IfIptoHost, IfHostListener,
     /**
      * Remove from the controller IP to MAC binding of a host and its
      * connectivity to an openflow switch
-     * 
+     *
      * @param networkAddr
      *            IP address of the host
-     * 
+     *
      * @return boolean true if the host was removed successfully, false
      *         otherwise
      */
@@ -1160,17 +1160,12 @@ public class HostTracker implements IfIptoHost, IfHostListener,
 
         switch (type) {
         case REMOVED:
-            long sid = (Long) node.getID();
-            if (logger.isDebugEnabled()) {
-              logger.debug("Received removedSwitch for sw id {}",
-                      HexEncode.longToHexString(sid));
-            }
+            logger.debug("Received removed node {}", node);
             for (Entry<InetAddress, HostNodeConnector> entry : hostsDB
                     .entrySet()) {
                 HostNodeConnector host = entry.getValue();
-                if (host.getnodeconnectornodeId() == sid) {
-                    logger.debug("Switch: {} is down, remove from Hosts_DB",
-                            sid);
+                if (host.getnodeconnectorNode().equals(node)) {
+                    logger.debug("Node: {} is down, remove from Hosts_DB", node);
                     removeKnownHost(entry.getKey());
                     notifyHostLearnedOrRemoved(host, false);
                 }
@@ -1260,18 +1255,12 @@ public class HostTracker implements IfIptoHost, IfHostListener,
     }
 
     private void handleNodeConnectorStatusDown(NodeConnector nodeConnector) {
-        long sid = (Long) nodeConnector.getNode().getID();
-        short port = (Short) nodeConnector.getID();
-
         logger.debug("handleNodeConnectorStatusDown {}", nodeConnector);
 
         for (Entry<InetAddress, HostNodeConnector> entry : hostsDB.entrySet()) {
             HostNodeConnector host = entry.getValue();
-            if ((host.getnodeconnectornodeId() == sid)
-                    && (host.getnodeconnectorportId() == port)) {
-                logger.debug(
-                        "Switch: {}, Port: {} is down, remove from Hosts_DB",
-                        sid, port);
+            if (host.getnodeConnector().equals(nodeConnector)) {
+                logger.debug(" NodeConnector: {} is down, remove from Hosts_DB", nodeConnector);
                 removeKnownHost(entry.getKey());
                 notifyHostLearnedOrRemoved(host, false);
             }
@@ -1311,7 +1300,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
     /**
      * Function called by the dependency manager when all the required
      * dependencies are satisfied
-     * 
+     *
      */
     void init(Component c) {
         Dictionary<?, ?> props = c.getServiceProperties();
@@ -1329,7 +1318,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      * Function called by the dependency manager when at least one dependency
      * become unsatisfied or when the component is shutting down because for
      * example bundle is being stopped.
-     * 
+     *
      */
     void destroy() {
         destroyCache();
@@ -1338,7 +1327,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
     /**
      * Function called by dependency manager after "init ()" is called and after
      * the services provided by the class are registered in the service registry
-     * 
+     *
      */
     void start() {
     }
@@ -1347,7 +1336,7 @@ public class HostTracker implements IfIptoHost, IfHostListener,
      * Function called by the dependency manager before the services exported by
      * the component are unregistered, this will be followed by a "destroy ()"
      * calls
-     * 
+     *
      */
     void stop() {
     }
index 32a9c5a6fc7bb16705635635e0a52f3b85f96c13..53eb40c4a53e172d87900709be4088bd1b47e1b5 100644 (file)
@@ -5,6 +5,7 @@ import org.slf4j.LoggerFactory;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.Bundle;
 import javax.inject.Inject;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.Before;
@@ -19,10 +20,9 @@ import org.ops4j.pax.exam.util.PathUtils;
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLConnection;
 import java.nio.charset.Charset;
 import java.util.Arrays;
 
@@ -41,6 +41,7 @@ import org.opendaylight.controller.sal.core.UpdateType;
 import org.opendaylight.controller.switchmanager.IInventoryListener;
 import org.opendaylight.controller.usermanager.IUserManager;
 
+
 @RunWith(PaxExam.class)
 public class NorthboundIntegrationTest {
     private Logger log = LoggerFactory
@@ -96,28 +97,31 @@ public class NorthboundIntegrationTest {
 
         r = bc.getServiceReference(IfIptoHost.class.getName());
         if (r != null) {
-            this.invtoryListener = (IInventoryListener)bc.getService(r);
+            this.invtoryListener = (IInventoryListener) bc.getService(r);
         }
 
         // If inventoryListener is null, cannot run hosttracker tests.
         assertNotNull(this.invtoryListener);
-        
+
     }
 
     // static variable to pass response code from getJsonResult()
     private static Integer httpResponseCode = null;
 
     private String getJsonResult(String restUrl) {
-        return getJsonResult(restUrl, "GET");
+        return getJsonResult(restUrl, "GET", null);
     }
 
     private String getJsonResult(String restUrl, String method) {
+        return getJsonResult(restUrl, method, null);
+    }
+
+    private String getJsonResult(String restUrl, String method, String body) {
         // initialize response code to indicate error
         httpResponseCode = 400;
 
         try {
             URL url = new URL(restUrl);
-
             this.users.getAuthorizationList();
             this.users.authenticate("admin", "admin");
             String authString = "admin:admin";
@@ -132,11 +136,20 @@ public class NorthboundIntegrationTest {
             connection.setRequestProperty("Content-Type", "application/json");
             connection.setRequestProperty("Accept", "application/json");
 
+            if (body != null) {
+                connection.setDoOutput(true);
+                OutputStreamWriter wr = new OutputStreamWriter(
+                        connection.getOutputStream());
+                wr.write(body);
+                wr.flush();
+            }
             connection.connect();
             connection.getContentType();
 
             // Response code for success should be 2xx
             httpResponseCode = connection.getResponseCode();
+            if (httpResponseCode > 299)
+                return httpResponseCode.toString();
 
             InputStream is = connection.getInputStream();
             BufferedReader rd = new BufferedReader(new InputStreamReader(is,
@@ -152,7 +165,6 @@ public class NorthboundIntegrationTest {
         } catch (Exception e) {
             return null;
         }
-
     }
 
     @Test
@@ -169,8 +181,8 @@ public class NorthboundIntegrationTest {
             String result = getJsonResult(baseURL + "flowstats");
             JSONTokener jt = new JSONTokener(result);
             JSONObject json = new JSONObject(jt);
-            JSONObject flowStatistics = 
-                    getJsonInstance (json, "flowStatistics", 0xCAFE); 
+            JSONObject flowStatistics = getJsonInstance(json, "flowStatistics",
+                    0xCAFE);
             JSONObject node = flowStatistics.getJSONObject("node");
             // test that node was returned properly
             Assert.assertTrue(node.getInt("@id") == 0xCAFE);
@@ -189,8 +201,8 @@ public class NorthboundIntegrationTest {
             result = getJsonResult(baseURL + "portstats");
             jt = new JSONTokener(result);
             json = new JSONObject(jt);
-            JSONObject portStatistics = 
-                    getJsonInstance (json, "portStatistics", 0xCAFE); 
+            JSONObject portStatistics = getJsonInstance(json, "portStatistics",
+                    0xCAFE);
             JSONObject node2 = portStatistics.getJSONObject("node");
             // test that node was returned properly
             Assert.assertTrue(node2.getInt("@id") == 0xCAFE);
@@ -351,54 +363,126 @@ public class NorthboundIntegrationTest {
         }
     }
 
+    @Test
+    public void testFlowProgrammer() {
+        try {
+            String baseURL = "http://127.0.0.1:8080/controller/nb/v2/flow/default/";
+            // Attempt to get a flow that doesn't exit. Should return 404
+            // status.
+            String result = getJsonResult(baseURL + "STUB/51966/test1", "GET");
+            Assert.assertTrue(result.equals("404"));
+
+            // test add flow1
+            String fc = "{\"dynamic\":\"false\", \"name\":\"test1\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
+            result = getJsonResult(baseURL + "STUB/51966/test1", "POST", fc);
+            Assert.assertTrue(httpResponseCode == 201);
+
+            // test get returns flow that was added.
+            result = getJsonResult(baseURL + "STUB/51966/test1", "GET");
+            // check that result came out fine.
+            Assert.assertTrue(httpResponseCode == 200);
+            JSONTokener jt = new JSONTokener(result);
+            JSONObject json = new JSONObject(jt);
+            Assert.assertTrue(json.getString("name").equals("test1"));
+            Assert.assertTrue(json.getString("actions").equals("DROP"));
+            Assert.assertTrue(json.getString("installInHw").equals("true"));
+            JSONObject node = json.getJSONObject("node");
+            Assert.assertTrue(node.getString("@type").equals("STUB"));
+            Assert.assertTrue(node.getString("@id").equals("51966"));
+            // test adding same flow again fails due to repeat name..return 409
+            // code
+            result = getJsonResult(baseURL + "STUB/51966/test1", "POST", fc);
+            Assert.assertTrue(result.equals("409"));
+
+            fc = "{\"dynamic\":\"false\", \"name\":\"test2\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
+            result = getJsonResult(baseURL + "STUB/51966/test2", "POST", fc);
+            // test should return 500 for error due to same flow being added.
+            Assert.assertTrue(result.equals("500"));
+
+            // add second flow that's different
+            fc = "{\"dynamic\":\"false\", \"name\":\"test2\", \"nwSrc\":\"1.1.1.1\", \"node\":{\"@id\":\"51966\",\"@type\":\"STUB\"}, \"actions\":[\"DROP\"]}";
+            result = getJsonResult(baseURL + "STUB/51966/test2", "POST", fc);
+            Assert.assertTrue(httpResponseCode == 201);
+            
+            // check that request returns both flows given node.
+            result = getJsonResult(baseURL + "STUB/51966/", "GET");
+            jt = new JSONTokener(result);
+            json = new JSONObject(jt);
+            Assert.assertTrue(json.get("flowConfig") instanceof JSONArray);
+            JSONArray ja = json.getJSONArray("flowConfig");
+            Integer count = ja.length();
+            Assert.assertTrue(count == 2);
+
+            // check that request returns both flows given just container.
+            result = getJsonResult(baseURL);
+            jt = new JSONTokener(result);
+            json = new JSONObject(jt);
+            Assert.assertTrue(json.get("flowConfig") instanceof JSONArray);
+            ja = json.getJSONArray("flowConfig");
+            count = ja.length();
+            Assert.assertTrue(count == 2);
+
+            // delete a flow, check that it's no longer in list.
+            result = getJsonResult(baseURL + "STUB/51966/test2", "DELETE");
+            Assert.assertTrue(httpResponseCode == 200);
+
+            result = getJsonResult(baseURL + "STUB/51966/test2", "GET");
+            Assert.assertTrue(result.equals("404"));
+
+        } catch (Exception e) {
+            Assert.assertTrue(false);
+        }
+
+    }
+
     // method to extract a JSONObject with specified node ID from a JSONObject
-    //   that may contain an array of JSONObjects
-    // This is specifically written for  statistics manager northbound REST interface
+    // that may contain an array of JSONObjects
+    // This is specifically written for statistics manager northbound REST
+    // interface
     // array_name should be either "flowStatistics" or "portStatistics"
-    private JSONObject getJsonInstance (JSONObject json, String array_name, Integer nodeId) throws JSONException
-    {
+    private JSONObject getJsonInstance(JSONObject json, String array_name,
+            Integer nodeId) throws JSONException {
         JSONObject result = null;
-        if (json.get(array_name) instanceof JSONArray){
+        if (json.get(array_name) instanceof JSONArray) {
             JSONArray json_array = json.getJSONArray(array_name);
             for (int i = 0; i < json_array.length(); i++) {
                 result = json_array.getJSONObject(i);
                 Integer nid = result.getJSONObject("node").getInt("@id");
-                if ( nid.equals(nodeId) )  break;
+                if (nid.equals(nodeId))
+                    break;
             }
-        }
-        else {
+        } else {
             result = json.getJSONObject(array_name);
             Integer nid = result.getJSONObject("node").getInt("@id");
-            if ( ! nid.equals(nodeId) )  result = null;
+            if (!nid.equals(nodeId))
+                result = null;
         }
         return result;
     }
-    
 
     // a class to construct query parameter for HTTP request
     private class QueryParameter {
         StringBuilder queryString = null;
-        
+
         // constructor
-        QueryParameter (String key, String value) {
+        QueryParameter(String key, String value) {
             queryString = new StringBuilder();
             queryString.append("?").append(key).append("=").append(value);
         }
-        
+
         // method to add more query parameter
-        QueryParameter add (String key, String value){
+        QueryParameter add(String key, String value) {
             this.queryString.append("&").append(key).append("=").append(value);
             return this;
         }
-        
+
         // method to get the query parameter string
-        String getString (){
+        String getString() {
             return this.queryString.toString();
         }
 
     }
-    
-    
+
     @Test
     public void testHostTracker() {
 
@@ -413,8 +497,7 @@ public class NorthboundIntegrationTest {
         String nodeConnectorType_1 = "STUB";
         Integer nodeConnectorId_1 = 12;
         String vlan_1 = "4";
-        
-        
+
         // 2nd host
         String networkAddress_2 = "10.1.1.1";
         String dataLayerAddress_2 = "1A:2B:3C:4D:5E:6F";
@@ -423,81 +506,87 @@ public class NorthboundIntegrationTest {
         String nodeConnectorType_2 = "STUB";
         Integer nodeConnectorId_2 = 34;
         String vlan_2 = "0";
-        
+
         String baseURL = "http://127.0.0.1:8080/controller/nb/v2/host/default";
 
         // test POST method: addHost()
         try {
-            String queryParameter = 
-                    new QueryParameter("dataLayerAddress", dataLayerAddress_1)
-                    .add("nodeType", nodeType_1)
+            String queryParameter = new QueryParameter("dataLayerAddress",
+                    dataLayerAddress_1).add("nodeType", nodeType_1)
                     .add("nodeId", nodeId_1.toString())
                     .add("nodeConnectorType", nodeConnectorType_1)
                     .add("nodeConnectorId", nodeConnectorId_1.toString())
-                    .add("vlan", vlan_1)
-                    .getString();
+                    .add("vlan", vlan_1).getString();
 
-            String result = getJsonResult(baseURL +"/" + networkAddress_1 + queryParameter, "POST");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 201);
-            
-            // vlan is not passed through query parameter but should be defaulted to "0"
-            queryParameter = 
-                    new QueryParameter("dataLayerAddress", dataLayerAddress_2)
-                    .add("nodeType", nodeType_2)
+            String result = getJsonResult(baseURL + "/" + networkAddress_1
+                    + queryParameter, "POST");
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 201);
+
+            // vlan is not passed through query parameter but should be
+            // defaulted to "0"
+            queryParameter = new QueryParameter("dataLayerAddress",
+                    dataLayerAddress_2).add("nodeType", nodeType_2)
                     .add("nodeId", nodeId_2.toString())
                     .add("nodeConnectorType", nodeConnectorType_2)
                     .add("nodeConnectorId", nodeConnectorId_2.toString())
                     .getString();
 
-            result = getJsonResult(baseURL +"/" + networkAddress_2 + queryParameter, "POST");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 201);
+            result = getJsonResult(baseURL + "/" + networkAddress_2
+                    + queryParameter, "POST");
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 201);
         } catch (Exception e) {
             // Got an unexpected exception
             Assert.assertTrue(false);
         }
-        
+
         // define variables for decoding returned strings
         String networkAddress;
         JSONObject host_jo, dl_jo, nc_jo, node_jo;
-        
+
         // the two hosts should be in inactive host DB
         // test GET method: getInactiveHosts()
         try {
-            String result = getJsonResult(baseURL +"/inactive", "GET");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 200);
-            
+            String result = getJsonResult(baseURL + "/inactive", "GET");
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 200);
+
             JSONTokener jt = new JSONTokener(result);
             JSONObject json = new JSONObject(jt);
             // there should be at least two hosts in the DB
-            Assert.assertTrue (json.get("host") instanceof JSONArray);
+            Assert.assertTrue(json.get("host") instanceof JSONArray);
             JSONArray ja = json.getJSONArray("host");
             Integer count = ja.length();
-            Assert.assertTrue (count == 2);
-            
-            for ( int i = 0; i < count; i++) {
+            Assert.assertTrue(count == 2);
+
+            for (int i = 0; i < count; i++) {
                 host_jo = ja.getJSONObject(i);
                 dl_jo = host_jo.getJSONObject("dataLayerAddress");
                 nc_jo = host_jo.getJSONObject("nodeConnector");
                 node_jo = nc_jo.getJSONObject("node");
-                
+
                 networkAddress = host_jo.getString("networkAddress");
                 if (networkAddress.equalsIgnoreCase(networkAddress_1)) {
-                    Assert.assertTrue (dl_jo.getString("macAddress").equalsIgnoreCase(dataLayerAddress_1));
-                    Assert.assertTrue (nc_jo.getString("@type").equalsIgnoreCase(nodeConnectorType_1));
-                    Assert.assertTrue (Integer.parseInt(nc_jo.getString("@id")) == nodeConnectorId_1);
-                    Assert.assertTrue (node_jo.getString("@type").equalsIgnoreCase(nodeType_1));
-                    Assert.assertTrue (Integer.parseInt(node_jo.getString("@id")) == nodeId_1);
-                    Assert.assertTrue (host_jo.getString("vlan").equalsIgnoreCase(vlan_1));
-                }
-                else if (networkAddress.equalsIgnoreCase(networkAddress_2)) {
-                    Assert.assertTrue (dl_jo.getString("macAddress").equalsIgnoreCase(dataLayerAddress_2));
-                    Assert.assertTrue (nc_jo.getString("@type").equalsIgnoreCase(nodeConnectorType_2));
-                    Assert.assertTrue (Integer.parseInt(nc_jo.getString("@id")) == nodeConnectorId_2);
-                    Assert.assertTrue (node_jo.getString("@type").equalsIgnoreCase(nodeType_2));
-                    Assert.assertTrue (Integer.parseInt(node_jo.getString("@id")) == nodeId_2);
-                    Assert.assertTrue (host_jo.getString("vlan").equalsIgnoreCase(vlan_2));
-                }
-                else {
+                    Assert.assertTrue(dl_jo.getString("macAddress")
+                            .equalsIgnoreCase(dataLayerAddress_1));
+                    Assert.assertTrue(nc_jo.getString("@type")
+                            .equalsIgnoreCase(nodeConnectorType_1));
+                    Assert.assertTrue(Integer.parseInt(nc_jo.getString("@id")) == nodeConnectorId_1);
+                    Assert.assertTrue(node_jo.getString("@type")
+                            .equalsIgnoreCase(nodeType_1));
+                    Assert.assertTrue(Integer.parseInt(node_jo.getString("@id")) == nodeId_1);
+                    Assert.assertTrue(host_jo.getString("vlan")
+                            .equalsIgnoreCase(vlan_1));
+                } else if (networkAddress.equalsIgnoreCase(networkAddress_2)) {
+                    Assert.assertTrue(dl_jo.getString("macAddress")
+                            .equalsIgnoreCase(dataLayerAddress_2));
+                    Assert.assertTrue(nc_jo.getString("@type")
+                            .equalsIgnoreCase(nodeConnectorType_2));
+                    Assert.assertTrue(Integer.parseInt(nc_jo.getString("@id")) == nodeConnectorId_2);
+                    Assert.assertTrue(node_jo.getString("@type")
+                            .equalsIgnoreCase(nodeType_2));
+                    Assert.assertTrue(Integer.parseInt(node_jo.getString("@id")) == nodeId_2);
+                    Assert.assertTrue(host_jo.getString("vlan")
+                            .equalsIgnoreCase(vlan_2));
+                } else {
                     Assert.assertTrue(false);
                 }
             }
@@ -505,12 +594,12 @@ public class NorthboundIntegrationTest {
             // Got an unexpected exception
             Assert.assertTrue(false);
         }
-        
+
         // test GET method: getActiveHosts() - no host expected
         try {
             String result = getJsonResult(baseURL, "GET");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 200);
-            
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 200);
+
             JSONTokener jt = new JSONTokener(result);
             JSONObject json = new JSONObject(jt);
             Assert.assertFalse(hostInJson(json, networkAddress_1));
@@ -519,108 +608,112 @@ public class NorthboundIntegrationTest {
             // Got an unexpected exception
             Assert.assertTrue(false);
         }
-        
+
         // put the 1st host into active host DB
         Node nd;
         NodeConnector ndc;
         try {
             nd = new Node(nodeType_1, nodeId_1);
             ndc = new NodeConnector(nodeConnectorType_1, nodeConnectorId_1, nd);
-            this.invtoryListener.notifyNodeConnector(ndc,
-                    UpdateType.ADDED, null);
-        }catch(ConstructionException e){
+            this.invtoryListener.notifyNodeConnector(ndc, UpdateType.ADDED,
+                    null);
+        } catch (ConstructionException e) {
             ndc = null;
             nd = null;
         }
-        
+
         // verify the host shows up in active host DB
         try {
             String result = getJsonResult(baseURL, "GET");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 200);
-            
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 200);
+
             JSONTokener jt = new JSONTokener(result);
             JSONObject json = new JSONObject(jt);
+
             Assert.assertTrue(hostInJson(json, networkAddress_1));
         } catch (Exception e) {
             // Got an unexpected exception
             Assert.assertTrue(false);
         }
-        
-        
+
         // test GET method for getHostDetails()
         try {
-            String result = getJsonResult(baseURL+"/"+networkAddress_1, "GET");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 200);
-            
+            String result = getJsonResult(baseURL + "/" + networkAddress_1,
+                    "GET");
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 200);
+
             JSONTokener jt = new JSONTokener(result);
             JSONObject json = new JSONObject(jt);
 
             Assert.assertFalse(json.length() == 0);
-            
+
             dl_jo = json.getJSONObject("dataLayerAddress");
             nc_jo = json.getJSONObject("nodeConnector");
             node_jo = nc_jo.getJSONObject("node");
-            
-            Assert.assertTrue (json.getString("networkAddress").equalsIgnoreCase(networkAddress_1));
-            Assert.assertTrue (dl_jo.getString("macAddress").equalsIgnoreCase(dataLayerAddress_1));
-            Assert.assertTrue (nc_jo.getString("@type").equalsIgnoreCase(nodeConnectorType_1));
-            Assert.assertTrue (Integer.parseInt(nc_jo.getString("@id")) == nodeConnectorId_1);
-            Assert.assertTrue (node_jo.getString("@type").equalsIgnoreCase(nodeType_1));
-            Assert.assertTrue (Integer.parseInt(node_jo.getString("@id")) == nodeId_1);
-            Assert.assertTrue (json.getString("vlan").equalsIgnoreCase(vlan_1));
+
+            Assert.assertTrue(json.getString("networkAddress")
+                    .equalsIgnoreCase(networkAddress_1));
+            Assert.assertTrue(dl_jo.getString("macAddress").equalsIgnoreCase(
+                    dataLayerAddress_1));
+            Assert.assertTrue(nc_jo.getString("@type").equalsIgnoreCase(
+                    nodeConnectorType_1));
+            Assert.assertTrue(Integer.parseInt(nc_jo.getString("@id")) == nodeConnectorId_1);
+            Assert.assertTrue(node_jo.getString("@type").equalsIgnoreCase(
+                    nodeType_1));
+            Assert.assertTrue(Integer.parseInt(node_jo.getString("@id")) == nodeId_1);
+            Assert.assertTrue(json.getString("vlan").equalsIgnoreCase(vlan_1));
         } catch (Exception e) {
             // Got an unexpected exception
             Assert.assertTrue(false);
         }
-        
+
         // test DELETE method for deleteFlow()
         try {
-            String result = getJsonResult(baseURL+"/"+networkAddress_1, "DELETE");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 200);
-            
+            String result = getJsonResult(baseURL + "/" + networkAddress_1,
+                    "DELETE");
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 200);
+
         } catch (Exception e) {
             // Got an unexpected exception
             Assert.assertTrue(false);
         }
-        
+
         // verify host_1 removed from active host DB
         // test GET method: getActiveHosts() - no host expected
         try {
             String result = getJsonResult(baseURL, "GET");
-            Assert.assertTrue (httpResponseCode.intValue() == (Integer) 200);
-            
+            Assert.assertTrue(httpResponseCode.intValue() == (Integer) 200);
+
             JSONTokener jt = new JSONTokener(result);
             JSONObject json = new JSONObject(jt);
-            
+
             Assert.assertFalse(hostInJson(json, networkAddress_1));
         } catch (Exception e) {
             // Got an unexpected exception
             Assert.assertTrue(false);
         }
-        }
-        
-        private Boolean hostInJson (JSONObject json, String hostIp) throws JSONException  {
-       // input JSONObject may be empty
-        if ( json.length() == 0 ) {
+    }
+
+    private Boolean hostInJson(JSONObject json, String hostIp)
+            throws JSONException {
+        // input JSONObject may be empty
+        if (json.length() == 0) {
             return false;
         }
-        if (json.get("host") instanceof JSONArray){
+        if (json.get("host") instanceof JSONArray) {
             JSONArray ja = json.getJSONArray("host");
             for (int i = 0; i < ja.length(); i++) {
                 String na = ja.getJSONObject(i).getString("networkAddress");
                 if (na.equalsIgnoreCase(hostIp))
                     return true;
-                }
+            }
             return false;
-        } 
-        else {
+        } else {
             String na = json.getJSONObject("host").getString("networkAddress");
             return (na.equalsIgnoreCase(hostIp)) ? true : false;
         }
     }
 
-
     // Configure the OSGi container
     @Configuration
     public Option[] config() {
index ef0c0667aa22eeff199ea83ad3769adfaba7cfb9..5a71ab8a692fce503c7dddb6d3fc768ec25723f4 100644 (file)
@@ -228,8 +228,13 @@ public class Node implements Serializable {
         } else if (typeStr.equals(NodeIDType.PRODUCTION)) {
             this.nodeID = IDStr;
         } else {
-            // We need to lookup via OSGi service registry for an
-            // handler for this
+            //Use plugin's method to get appropriate conversion from IDStr to nodeID
+            INodeFactory f = (INodeFactory) ServiceHelper
+                    .getGlobalInstance(INodeFactory.class, new Node(), "(protocolName="+typeStr+")");
+            if(f!=null){
+                Node n = f.fromString(typeStr, IDStr);
+                this.nodeID = n.nodeID;
+            }
         }
     }
 
index f3aa35f637bdc2e0346beffe8899d0b56b6bb24c..dd51e85f20ee4bd9b6ba2d9e64ac0965a1fc33b2 100644 (file)
@@ -13,8 +13,6 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 
@@ -249,11 +247,27 @@ public class ARP extends Packet {
 
     @Override
     public int hashCode() {
-        return HashCodeBuilder.reflectionHashCode(this);
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result
+                + ((fieldValues == null) ? 0 : fieldValues.hashCode());
+        return result;
     }
 
     @Override
     public boolean equals(Object obj) {
-        return EqualsBuilder.reflectionEquals(this, obj);
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ARP other = (ARP) obj;
+        if (fieldValues == null) {
+            if (other.fieldValues != null)
+                return false;
+        } else if (!fieldValues.equals(other.fieldValues))
+            return false;
+        return true;
     }
 }
index c7b97e9d483370d536559f2618507c3cc0279673..44318aab8c5c1626eb787b960acfaa3ede7bea29 100644 (file)
@@ -542,10 +542,12 @@ public class IPv4 extends Packet {
          * Deriving the Total Length here
          */
         int payloadLength = 0;
-        try {
-            payloadLength = payload.serialize().length;
-        } catch (PacketException e) {
-            logger.error("", e);
+        if (payload != null) {
+            try {
+                payloadLength = payload.serialize().length;
+            } catch (PacketException e) {
+                logger.error("", e);
+            }
         }
 
         this.setTotalLength((short) (this.getHeaderLen() + payloadLength));
index 9254e824c57494a528a8e40bcf2052e0e7ab5fdd..bf674022596d8eb09df2b99bdb72314bdbdaf2cc 100644 (file)
@@ -10,13 +10,11 @@ package org.opendaylight.controller.sal.packet;
 
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
-import java.util.HashMap;
-
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
+
 import org.apache.commons.lang3.tuple.MutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.opendaylight.controller.sal.utils.HexEncode;
@@ -144,12 +142,28 @@ public class LLDPTLV extends Packet {
 
     @Override
     public int hashCode() {
-        return HashCodeBuilder.reflectionHashCode(this);
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result
+                + ((fieldValues == null) ? 0 : fieldValues.hashCode());
+        return result;
     }
 
     @Override
     public boolean equals(Object obj) {
-        return EqualsBuilder.reflectionEquals(this, obj);
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        LLDPTLV other = (LLDPTLV) obj;
+        if (fieldValues == null) {
+            if (other.fieldValues != null)
+                return false;
+        } else if (!fieldValues.equals(other.fieldValues))
+            return false;
+        return true;
     }
 
     @Override
@@ -164,7 +178,7 @@ public class LLDPTLV extends Packet {
 
     /**
      * Returns the size in bits of the whole TLV
-     * 
+     *
      * @return int - size in bits of full TLV
      */
     public int getTLVSize() {
@@ -176,7 +190,7 @@ public class LLDPTLV extends Packet {
     /**
      * Creates the ChassisID TLV value including the subtype and ChassisID
      * string
-     * 
+     *
      * @param nodeId
      *            node identifier string
      * @return the ChassisID TLV value in byte array
@@ -204,7 +218,7 @@ public class LLDPTLV extends Packet {
 
     /**
      * Creates the PortID TLV value including the subtype and PortID string
-     * 
+     *
      * @param portId
      *            port identifier string
      * @return the PortID TLV value in byte array
@@ -221,7 +235,7 @@ public class LLDPTLV extends Packet {
 
     /**
      * Creates the custom TLV value including OUI, subtype and custom string
-     * 
+     *
      * @param portId
      *            port identifier string
      * @return the custom TLV value in byte array
@@ -241,7 +255,7 @@ public class LLDPTLV extends Packet {
 
     /**
      * Retrieves the string from TLV value and returns it in HexString format
-     * 
+     *
      * @param tlvValue
      *            the TLV value
      * @param tlvLen
@@ -257,7 +271,7 @@ public class LLDPTLV extends Packet {
 
     /**
      * Retrieves the string from TLV value
-     * 
+     *
      * @param tlvValue
      *            the TLV value
      * @param tlvLen
@@ -274,7 +288,7 @@ public class LLDPTLV extends Packet {
     /**
      * Retrieves the custom string from the Custom TLV value which includes OUI,
      * subtype and custom string
-     * 
+     *
      * @param customTlvValue
      *            the custom TLV value
      * @param customTlvLen
index b19c0f862b9e559219d5a00e8a3d289122a6c1a8..58b5d3914aa2dc199111dd2f2dc1ff8d5289dcc0 100644 (file)
@@ -77,7 +77,7 @@ public abstract class Packet {
     /**
      * This method deserializes the data bits obtained from the wire into the
      * respective header and payload which are of type Packet
-     * 
+     *
      * @param byte[] data - data from wire to deserialize
      * @param int bitOffset bit position where packet header starts in data
      *        array
@@ -151,7 +151,7 @@ public abstract class Packet {
     /**
      * This method serializes the header and payload from the respective
      * packet class, into a single stream of bytes to be sent on the wire
-     * 
+     *
      * @return The byte array representing the serialized Packet
      * @throws PacketException
      */
@@ -206,7 +206,7 @@ public abstract class Packet {
      * byte stream which cannot be done or cannot be done efficiently during the
      * normal Packet.serialize() path. An example is the checksum computation
      * for IPv4
-     * 
+     *
      * @param byte[] - serialized bytes
      * @throws PacketException
      */
@@ -221,7 +221,7 @@ public abstract class Packet {
      * of checksum varies based on the protocol, this method is overridden.
      * Currently only IPv4 and ICMP do checksum computation and validation. TCP
      * and UDP need to implement these if required.
-     * 
+     *
      * @param byte[] data The byte stream representing the Ethernet frame
      * @param int startBitOffset The bit offset from where the byte array corresponding to this Packet starts in the frame
      * @throws PacketException
@@ -233,7 +233,7 @@ public abstract class Packet {
 
     /**
      * Gets the header length in bits
-     * 
+     *
      * @return int the header length in bits
      */
     public int getHeaderSize() {
@@ -256,7 +256,7 @@ public abstract class Packet {
      * This method fetches the start bit offset for header field specified by
      * 'fieldname'. The offset is present in the hdrFieldCoordMap of the
      * respective packet class
-     * 
+     *
      * @param String
      *            fieldName
      * @return Integer - startOffset of the requested field
@@ -269,7 +269,7 @@ public abstract class Packet {
      * This method fetches the number of bits for header field specified by
      * 'fieldname'. The numBits are present in the hdrFieldCoordMap of the
      * respective packet class
-     * 
+     *
      * @param String
      *            fieldName
      * @return Integer - number of bits of the requested field
@@ -297,7 +297,7 @@ public abstract class Packet {
     /**
      * Returns the raw payload carried by this packet in case payload was not
      * parsed. Caller can call this function in case the getPaylod() returns null.
-     * 
+     *
      * @return The raw payload if not parsable as an array of bytes, null otherwise
      */
     public byte[] getRawPayload() {
@@ -306,7 +306,7 @@ public abstract class Packet {
 
     /**
      * Set a raw payload in the packet class
-     * 
+     *
      * @param payload The raw payload as byte array
      */
     public void setRawPayload(byte[] payload) {
@@ -319,8 +319,8 @@ public abstract class Packet {
      * packet received from wire is not equal to the checksum read from the
      * stream. For the Packet class which do not have a checksum field, this
      * function will always return false.
-     * 
-     * 
+     *
+     *
      * @return true if the deserialized packet's recomputed checksum is not
      *         equal to the packet carried checksum
      */
index f2e339f0c71dbc927ad1fe93964e61bdb3813bca..a988673c7ef91b2f9d2297c4808b44b98986b63b 100644 (file)
@@ -31,8 +31,9 @@ public class ControllerCustomRealm  extends RealmBase {
                 .getGlobalInstance(IUserManager.class, this);
         if (userManager != null) {
             return userManager.getPassword(username);
-        } else
+        } else {
             throw new RuntimeException("User Manager reference is null");
+        }
     }
 
     @Override
@@ -40,14 +41,14 @@ public class ControllerCustomRealm  extends RealmBase {
         IUserManager userManager = (IUserManager) ServiceHelper
                 .getGlobalInstance(IUserManager.class, this);
         if (userManager != null) {
-            final List<String> levels = new ArrayList<String>(); 
-            UserLevel level = userManager.getUserLevel(username);
-            if (level == null) level = UserLevel.NOUSER;
-            levels.add(level.toString());
-            return new GenericPrincipal(username, "", levels);
-        } else
+            List<String> controllerRoles = new ArrayList<String>();
+            for (UserLevel level : userManager.getUserLevels(username)) {
+                controllerRoles.add(level.toString());
+            }
+            return new GenericPrincipal(username, "", controllerRoles);
+        } else {
             throw new RuntimeException("User Manager reference is null");
-
+        }
     }
 
     @Override
@@ -66,8 +67,9 @@ public class ControllerCustomRealm  extends RealmBase {
                 logger.error("Authentication failed for user " + username);
                 return null;
             }
-        } else
+        } else {
             throw new RuntimeException("User Manager reference is null");
+        }
     }
 
 }
index 1b1a47bf231b6613ae49fbe247552ea136c0e1f0..8ea2190f4aca09b1bc37b4889d61e4101904f82a 100644 (file)
@@ -1646,7 +1646,8 @@ CommandProvider {
 
     @Override
     public byte[] getNodeMAC(Node node) {
-        MacAddress mac = (MacAddress) nodeProps.get(MacAddress.name);
+        MacAddress mac = (MacAddress) this.getNodeProp(node,
+                MacAddress.name);
         return (mac != null) ? mac.getMacAddress() : null;
     }
 
index 0ec9445b1eea24c10559a91bbbbe57a19c7f6b7f..ed23b5f067c45ebd000ac52fffc919e9707800ef 100644 (file)
@@ -28,7 +28,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Returns the list of roles associated to the passed user name
-     * 
+     *
      * @param userName
      * @return the role associated to the user name
      */
@@ -37,7 +37,7 @@ public interface IUserManager extends UserDetailsService {
     /**
      * Authenticate user with AAA server and return authentication and
      * authorization info
-     * 
+     *
      * @param username
      *            the username
      * @param password
@@ -49,7 +49,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Add/remove AAA server
-     * 
+     *
      * @param configObject
      *            {@link org.opendaylight.controller.usermanager.internal.ServerConfig}
      *            Server Configuration
@@ -60,7 +60,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Remove AAA server
-     * 
+     *
      * @param configObject
      *            refer to
      *            {@link org.opendaylight.controller.usermanager.internal.ServerConfig}
@@ -72,7 +72,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Add a local user
-     * 
+     *
      * @param configObject
      *            {@link org.opendaylight.controller.usermanager.internal.UserConfig}
      *            User Configuration
@@ -83,7 +83,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Remove a local user
-     * 
+     *
      * @param configObject
      *            {@link org.opendaylight.controller.usermanager.internal.UserConfig}
      *            UserConfig
@@ -94,7 +94,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Remove a local user
-     * 
+     *
      * @param userName
      *            the user name
      * @return {@link org.opendaylight.controller.sal.utils.Status}
@@ -105,7 +105,7 @@ public interface IUserManager extends UserDetailsService {
     /**
      * Add the authorization information for a user that gets authenticated
      * remotely
-     * 
+     *
      * @param AAAconf
      *            {@link org.opendaylight.controller.usermanager.internal.AuthorizationConfig}
      *            Authorization Resources
@@ -117,7 +117,7 @@ public interface IUserManager extends UserDetailsService {
     /**
      * Remove the authorization information for a user that gets authenticated
      * remotely
-     * 
+     *
      * @param AAAconf
      *            {@link org.opendaylight.controller.usermanager.internal.AuthorizationConfig}
      *            Authorization Resource
@@ -128,7 +128,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Return the list of authorization resources
-     * 
+     *
      * @return {@link org.opendaylight.controller.usermanager.internal.AuthorizationConfig}
      *         List of Authorization Resource
      */
@@ -136,14 +136,14 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Returns a list of AAA Providers.
-     * 
+     *
      * @return Set of provider names.
      */
     public Set<String> getAAAProviderNames();
 
     /**
      * Change the current password for a locally configured user
-     * 
+     *
      * @param user
      *            the username
      * @param curPasssword
@@ -158,7 +158,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Return a list of AAA servers currently configured
-     * 
+     *
      * @return {@link org.opendaylight.controller.usermanager.internal.ServerConfig}
      *         List of ServerConfig
      */
@@ -166,7 +166,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Return a list of local users
-     * 
+     *
      * @return {@link org.opendaylight.controller.usermanager.internal.UserConfig}
      *         List of UserConfig
      */
@@ -174,7 +174,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Save the local users to disk
-     * 
+     *
      * @return {@link org.opendaylight.controller.sal.utils.Status}
      *         status of this action
      */
@@ -182,7 +182,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Save the AAA server configurations to disk
-     * 
+     *
      * @return {@link org.opendaylight.controller.sal.utils.Status}
      *         status of this action
      */
@@ -190,7 +190,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Save the Authorization configurations to disk
-     * 
+     *
      * @return {@link org.opendaylight.controller.sal.utils.Status}
      *         status code
      */
@@ -198,7 +198,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Remove user profile when user logs out
-     * 
+     *
      * @param username
      *            the user name
      */
@@ -206,7 +206,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Remove user profile when user times out
-     * 
+     *
      * @param username
      *            the user name
      */
@@ -214,24 +214,24 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Get the list of users currently logged in
-     * 
+     *
      * @return the list of users along with their administrative roles
      */
     public Map<String, List<String>> getUserLoggedIn();
 
     /**
      * Get date and time user was successfully authenticated
-     * 
+     *
      * @param user
      * @return Date in String format
      */
     public String getAccessDate(String user);
 
     /**
-     * Returns the user level for the passed user name. It checks the roles
+     * Returns the highest user level for the passed user name. It checks the roles
      * assigned to this user and checks against the well known Controller user
      * roles to determines the highest user level associated with the user
-     * 
+     *
      * @param userName
      *            the user name
      * @return {@link org.opendaylight.controller.sal.authorization.UserLevel}
@@ -239,9 +239,21 @@ public interface IUserManager extends UserDetailsService {
      */
     public UserLevel getUserLevel(String userName);
 
+    /**
+     * Returns the list of user level for the passed user name. It checks the roles
+     * assigned to this user and checks against the well known Controller user
+     * roles to determines the corresponding list of user level associated with the user
+     *
+     * @param userName
+     *            the user name
+     * @return
+     *          the list of user level for this user
+     */
+    public List<UserLevel> getUserLevels(String userName);
+
     /**
      * Returns the Security Context
-     * 
+     *
      * @returns {@link org.springframework.security.web.context.SecurityContextRepository}
      *          Security Context
      */
@@ -249,7 +261,7 @@ public interface IUserManager extends UserDetailsService {
 
     /**
      * Returns the Session Manager Interface Handler
-     * 
+     *
      * @return {@link org.opendaylight.controller.usermanager.ISessionManager}
      *         session manager interface handler
      */
@@ -257,7 +269,7 @@ public interface IUserManager extends UserDetailsService {
 
     /* non-Javadoc
      * Returns the password for a given user
-     * 
+     *
      * @param username
      *            the user name
      * @return password for the username
index 69c9a1a2a615ee0c435b5fe8fccc7402e019568a..5ddf6be6c54914e9f0cf0047c0dd272ea7813590 100644 (file)
@@ -83,11 +83,11 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
     private ConcurrentMap<String, UserConfig> localUserConfigList;
     private ConcurrentMap<String, ServerConfig> remoteServerConfigList;
     // local authorization info for remotely authenticated users
-    private ConcurrentMap<String, AuthorizationConfig> authorizationConfList; 
+    private ConcurrentMap<String, AuthorizationConfig> authorizationConfList;
     private ConcurrentMap<String, AuthenticatedUser> activeUsers;
     private ConcurrentMap<String, IAAAProvider> authProviders;
     private ConcurrentMap<Long, String> localUserListSaveConfigEvent,
-            remoteServerSaveConfigEvent, authorizationSaveConfigEvent;
+    remoteServerSaveConfigEvent, authorizationSaveConfigEvent;
     private IClusterGlobalServices clusterGlobalService = null;
     private SecurityContextRepository securityContextRepo = new UserSecurityContextRepository();
     private IContainerAuthorization containerAuthorizationClient;
@@ -115,6 +115,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
         return authProviders.get(name);
     }
 
+    @Override
     public Set<String> getAAAProviderNames() {
         return authProviders.keySet();
     }
@@ -272,13 +273,13 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
                 } else if (rcResponse.getStatus() == AuthResultEnum.AUTH_REJECT) {
                     logger.info(
                             "Remote Authentication Rejected User: \"{}\", from Server: {}, Reason:{}",
-                            new Object[] {userName, aaaServer.getAddress(),
-                            rcResponse.getStatus().toString()});
+                            new Object[] { userName, aaaServer.getAddress(),
+                                    rcResponse.getStatus().toString() });
                 } else {
                     logger.info(
                             "Remote Authentication Failed for User: \"{}\", from Server: {}, Reason:{}",
-                            new Object[] {userName, aaaServer.getAddress(),
-                            rcResponse.getStatus().toString()});
+                            new Object[] { userName, aaaServer.getAddress(),
+                                    rcResponse.getStatus().toString() });
                 }
             }
         }
@@ -363,7 +364,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
         putUserInActiveList(userName, result);
         if (authorized) {
             logger.info("User \"{}\" authorized for the following role(s): {}",
-                        userName, result.getUserRoles());
+                    userName, result.getUserRoles());
         } else {
             logger.info("User \"{}\" Not Authorized for any role ", userName);
         }
@@ -390,6 +391,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
         activeUsers.remove(user);
     }
 
+    @Override
     public Status saveLocalUserList() {
         // Publish the save config event to the cluster nodes
         localUserListSaveConfigEvent.put(new Date().getTime(), SAVE);
@@ -402,6 +404,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
                 localUserConfigList), usersFileName);
     }
 
+    @Override
     public Status saveAAAServerList() {
         // Publish the save config event to the cluster nodes
         remoteServerSaveConfigEvent.put(new Date().getTime(), SAVE);
@@ -414,6 +417,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
                 remoteServerConfigList), serversFileName);
     }
 
+    @Override
     public Status saveAuthorizationList() {
         // Publish the save config event to the cluster nodes
         authorizationSaveConfigEvent.put(new Date().getTime(), SAVE);
@@ -628,7 +632,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
             return status;
         }
         // Trigger cluster update
-        localUserConfigList.put(user, targetConfigEntry); 
+        localUserConfigList.put(user, targetConfigEntry);
 
         logger.info("Password changed for User \"{}\"", user);
 
@@ -703,7 +707,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
         String userName = ci.nextArgument();
         String password = ci.nextArgument();
         String role = ci.nextArgument();
-        
+
         List<String> roles = new ArrayList<String>();
         while (role != null) {
             if (!role.trim().isEmpty()) {
@@ -734,7 +738,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
         if (target == null) {
             ci.println("User not found");
             return;
-        }       
+        }
         ci.println(this.removeLocalUser(target));
     }
 
@@ -815,7 +819,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
     /**
      * Function called by the dependency manager when all the required
      * dependencies are satisfied
-     * 
+     *
      */
     void init() {
     }
@@ -824,7 +828,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
      * Function called by the dependency manager when at least one dependency
      * become unsatisfied or when the component is shutting down because for
      * example bundle is being stopped.
-     * 
+     *
      */
     void destroy() {
     }
@@ -832,7 +836,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
     /**
      * Function called by dependency manager after "init ()" is called and after
      * the services provided by the class are registered in the service registry
-     * 
+     *
      */
     void start() {
         authProviders = new ConcurrentHashMap<String, IAAAProvider>();
@@ -855,7 +859,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
      * Function called by the dependency manager before the services exported by
      * the component are unregistered, this will be followed by a "destroy ()"
      * calls
-     * 
+     *
      */
     void stop() {
     }
@@ -919,6 +923,58 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
         return UserLevel.NOUSER;
     }
 
+
+    @Override
+    public List<UserLevel> getUserLevels(String username) {
+        // Returns the controller well-know user levels for the passed user
+        List<String> rolesNames = null;
+        List<UserLevel> levels = new ArrayList<UserLevel>();
+
+        if (activeUsers.containsKey(username)) {
+            List<String> roles = activeUsers.get(username).getUserRoles();
+            rolesNames = (roles == null || roles.isEmpty()) ? null : roles;
+        } else if (localUserConfigList.containsKey(username)) {
+            UserConfig config = localUserConfigList.get(username);
+            rolesNames = (config == null) ? null : config.getRoles();
+        }
+
+        if (rolesNames == null) {
+            return levels;
+        }
+
+        // Check against the well known controller roles first
+        if (rolesNames.contains(UserLevel.SYSTEMADMIN.toString())) {
+            levels.add(UserLevel.SYSTEMADMIN);
+        }
+        if (rolesNames.contains(UserLevel.NETWORKADMIN.toString())) {
+            levels.add(UserLevel.NETWORKADMIN);
+        }
+        if (rolesNames.contains(UserLevel.NETWORKOPERATOR.toString())) {
+            levels.add(UserLevel.NETWORKOPERATOR);
+        }
+        // Check if container user now
+        if (containerAuthorizationClient != null) {
+            for (String roleName : rolesNames) {
+                if (containerAuthorizationClient.isApplicationRole(roleName)) {
+                    levels.add(UserLevel.CONTAINERUSER);
+                    break;
+                }
+            }
+        }
+        // Finally check if application user
+        if (applicationAuthorizationClients != null) {
+            for (String roleName : rolesNames) {
+                for (IResourceAuthorization client : this.applicationAuthorizationClients) {
+                    if (client.isApplicationRole(roleName)) {
+                        levels.add(UserLevel.APPUSER);
+                        break;
+                    }
+                }
+            }
+        }
+        return levels;
+    }
+
     @Override
     public Status saveConfiguration() {
         boolean success = true;
@@ -958,8 +1014,9 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
                     .getPassword(), enabled, accountNonExpired,
                     credentialsNonExpired, accountNonLocked,
                     user.getGrantedAuthorities(getUserLevel(username)));
-        } else
+        } else {
             throw new UsernameNotFoundException("User not found " + username);
+        }
     }
 
     @Override
@@ -1011,9 +1068,10 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
                             .getName())));
             return authentication;
 
-        } else
+        } else {
             throw new BadCredentialsException(
                     "Username or credentials did not match");
+        }
 
     }
 
@@ -1057,6 +1115,7 @@ public class UserManagerImpl implements IUserManager, IObjectReader,
         this.sessionMgr = sessionMgr;
     }
 
+    @Override
     public String getPassword(String username) {
         return localUserConfigList.get(username).getPassword();
     }