do not filter optional dependencies from DS


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1407155 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole-plugins/servicediagnostics/changelog.txt b/webconsole-plugins/servicediagnostics/changelog.txt
index 5fa9803..bc3f516 100644
--- a/webconsole-plugins/servicediagnostics/changelog.txt
+++ b/webconsole-plugins/servicediagnostics/changelog.txt
@@ -1,13 +1,20 @@
-Changes from 3.0.0 to 3.0.1
+Changes from 0.1.1 to 0.2.0
 ---------------------------
 
 ** Bug
 
-   [FELIX-3005] - Compatibility API does not add components in DependencyManager
-
 ** Improvement
 
-Release 3.0.0
+* complete rewrite
+* support for service properties
+* detection of circular dependencies
+* doesn't embedd scala and json anymore
+
+** Backward compatibility
+
+* broken: plugin API changed
+
+Release 0.1.1
 -------------
 
 Initial version.
diff --git a/webconsole-plugins/servicediagnostics/core/src/main/resources/html/index.html b/webconsole-plugins/servicediagnostics/core/src/main/resources/html/index.html
index 85a2f84..8883bcb 100644
--- a/webconsole-plugins/servicediagnostics/core/src/main/resources/html/index.html
+++ b/webconsole-plugins/servicediagnostics/core/src/main/resources/html/index.html
@@ -64,7 +64,7 @@
   // show unresolved
   var unresolved = json.unresolved
   if (unresolved) for (s in unresolved) {
-    $("#warning").html("unresolvable components detected!");
+    $("#warning").html("circular dependencies detected!");
     for (i = 0; i < unresolved[s].length; i++) {
       g.addEdge(s, unresolved[s][i], { directed : true } );
     }
diff --git a/webconsole-plugins/servicediagnostics/core/src/main/scala/servicediagnostics/impl/DSNotAvail.scala b/webconsole-plugins/servicediagnostics/core/src/main/scala/servicediagnostics/impl/DSNotAvail.scala
index f29885c..9a44cdb 100644
--- a/webconsole-plugins/servicediagnostics/core/src/main/scala/servicediagnostics/impl/DSNotAvail.scala
+++ b/webconsole-plugins/servicediagnostics/core/src/main/scala/servicediagnostics/impl/DSNotAvail.scala
@@ -45,7 +45,6 @@
             comp <- Option(scrService.getComponents).flatten.map(_.asInstanceOf[Component])
             service <- Option(comp.getServices).flatten
             deps = Option(comp.getReferences).flatten
-                          .filterNot(_.isOptional)
                           .map(dep => new Dependency(dep.getServiceName,
                                                      dep.getTarget,
                                                      dep.isSatisfied)).toList
diff --git a/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDM.scala b/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDM.scala
index f0dde6b..d0c3a18 100644
--- a/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDM.scala
+++ b/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDM.scala
@@ -100,7 +100,7 @@
                 .setCallbacks(null, null, null)
                 .setRequired(true)))
 
-        // test3: loop
+        // test3: loop (required)
         // DML1 -> DSL1 -> DML2 -> DML1
 
         dm.add(createComponent
@@ -131,6 +131,22 @@
                 .setAutoConfig(false)
                 .setCallbacks(null, null, null)
                 .setRequired(true)))
+
+        // test4: loop (optional)
+        // DSL2 -(opt)-> DML3 --> DSL3 -> DSL2
+
+        dm.add(createComponent
+            .setInterface(classOf[DML3].getName, new jHT[String,String]() {{
+              put("p", "3")
+              put("q", "3")
+            }})
+            .setImplementation(classOf[DML3])
+            .add(createServiceDependency
+                .setService(classOf[DSL3], "(q=3)")
+                .setAutoConfig(false)
+                .setCallbacks(null, null, null)
+                .setRequired(true)))
+
     }
 
     override def destroy(bc:BundleContext, dm:DependencyManager) = {}
@@ -152,3 +168,4 @@
 class DMP
 class DML1
 class DML2
+class DML3
diff --git a/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDS.scala b/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDS.scala
index 1a830cf..71fa40f 100644
--- a/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDS.scala
+++ b/webconsole-plugins/servicediagnostics/sample/src/main/scala/servicediagnostics/sample/TestDS.scala
@@ -48,15 +48,15 @@
     @Reference(target="(p=2)") def bind(s:DML2) = {}
 }
 
-/* DSL2 -> DML2 -x-> DSL3 -> DSL2
-@Component(provide=Array(classOf[DSL2]), properties=Array("p=1","q=0")) 
+// DSL2 -(opt)-> DML3 --> DSL3 -> DSL2
+@Component(provide=Array(classOf[DSL2]), properties=Array("p=1","q=2")) 
 class DSL2 
 {
-    @Reference(target="(p=2)") def bind(s:DML2) = {}
+    @Reference(target="(p=3)", optional=true, dynamic=true) def bind(s:DML3) = {}
 }
-@Component(provide=Array(classOf[DSL3]), properties=Array("p=1","q=0")) 
+@Component(provide=Array(classOf[DSL3]), properties=Array("p=0","q=3")) 
 class DSL3 
 {
-    @Reference(target="(q=0)") def bind(s:DSL2) = {}
-}*/
+    @Reference(target="(q=2)") def bind(s:DSL2) = {}
+}