KARAF-1786 - Fix serialization issues in scr plugin

Signed-off-by: Lukasz Dywicki <luke@code-house.org>

git-svn-id: https://svn.apache.org/repos/asf/karaf/webconsole/trunk@1379104 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/osgi/scr/pom.xml b/osgi/scr/pom.xml
index 140fb42..7b2da6b 100644
--- a/osgi/scr/pom.xml
+++ b/osgi/scr/pom.xml
@@ -61,7 +61,7 @@
                         </Import-Package>
                         <Export-Package></Export-Package>
                         <Private-Package>org.apache.karaf.webconsole.osgi.scr*,</Private-Package>
-                        <Service-Component>OSGI-INF/column.xml,OSGI-INF/decoration.xml</Service-Component>
+                        <Service-Component>OSGI-INF/column.xml,OSGI-INF/decoration.xml,OSGI-INF/component.xml</Service-Component>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java
index 88052d6..44dfb53 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumn.java
@@ -34,24 +34,20 @@
 
     private static final long serialVersionUID = 1L;
 
-    private ScrService scr;
-
-    public ScrColumn(ScrService scr, String title) {
+    public ScrColumn(String title) {
         super(of(title));
-        this.scr = scr;
     }
 
     public void populateItem(Item<ICellPopulator<Bundle>> cellItem, String componentId, IModel<Bundle> rowModel) {
-        if (scr == null) {
+        ScrService scr = ScrComponent.getScrService();
+
+        Component[] components = null;
+        if (scr == null || (components = scr.getComponents(rowModel.getObject())) == null) {
+            // no scr for this bundle
+            cellItem.add(new Label(componentId));
             return;
         }
 
-        Component[] components = scr.getComponents(rowModel.getObject());
-        if (components != null) {
-            cellItem.add(new ScrColumnPanel(componentId, components));
-        } else {
-            // no scr for this bundle
-            cellItem.add(new Label(componentId));
-        }
+        cellItem.add(new ScrColumnPanel(componentId, components));
     }
 }
\ No newline at end of file
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java
index e1dafba..6b613ed 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnPanel.java
@@ -16,8 +16,6 @@
  */
 package org.apache.karaf.webconsole.osgi.scr;
 
-import static org.apache.wicket.model.Model.of;
-
 import org.apache.felix.scr.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -35,7 +33,7 @@
     public ScrColumnPanel(String id, Component[] components) {
         super(id);
 
-        RepeatingView view = new RepeatingView("components", of(components));
+        RepeatingView view = new RepeatingView("components");
 
         for (Component component : components) {
             MarkupContainer container = new WebMarkupContainer(view.newChildId());
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java
index 29cd5c4..b4bdd3e 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrColumnProvider.java
@@ -23,10 +23,10 @@
 /**
  * Scr column provider, creates a dedicated column.
  */
-public class ScrColumnProvider extends ScrComponent implements IColumnProvider {
+public class ScrColumnProvider implements IColumnProvider {
 
     public IColumn<Bundle> getColumn() {
-        return new ScrColumn(scr, "SCR");
+        return new ScrColumn("SCR");
     }
 
 }
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrComponent.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrComponent.java
index 3dd735f..02a728b 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrComponent.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrComponent.java
@@ -24,14 +24,18 @@
  */
 public class ScrComponent {
 
-    protected ScrService scr;
+    static protected ScrService scr;
 
     public void bind(ScrService service) {
-        this.scr = service;
+        scr = service;
     }
 
     public void unbind(ScrService service) {
-        this.scr = null;
+        scr = null;
+    }
+
+    public static ScrService getScrService() {
+        return scr;
     }
 
 }
\ No newline at end of file
diff --git a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrDecorationProvider.java b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrDecorationProvider.java
index 24760de..2f03339 100644
--- a/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrDecorationProvider.java
+++ b/osgi/scr/src/main/java/org/apache/karaf/webconsole/osgi/scr/ScrDecorationProvider.java
@@ -17,6 +17,7 @@
 
 package org.apache.karaf.webconsole.osgi.scr;
 
+import org.apache.felix.scr.ScrService;
 import org.apache.karaf.webconsole.core.behavior.CssBehavior;
 import org.apache.karaf.webconsole.core.panel.CssImagePanel;
 import org.apache.karaf.webconsole.osgi.core.spi.IDecorationProvider;
@@ -27,10 +28,11 @@
 /**
  * A decoration provider which add scr icon in first column of bundles.
  */
-public class ScrDecorationProvider extends ScrComponent implements IDecorationProvider {
+public class ScrDecorationProvider implements IDecorationProvider {
 
     public Panel getDecoration(String componentId, IModel<Bundle> model) {
         Bundle bundle = model.getObject();
+        ScrService scr = ScrComponent.getScrService();
 
         if (scr == null || scr.getComponents(bundle) == null) {
             return null;
diff --git a/osgi/scr/src/main/resources/OSGI-INF/column.xml b/osgi/scr/src/main/resources/OSGI-INF/column.xml
index d9f006d..9db45e7 100644
--- a/osgi/scr/src/main/resources/OSGI-INF/column.xml
+++ b/osgi/scr/src/main/resources/OSGI-INF/column.xml
@@ -22,5 +22,4 @@
       <provide interface="org.apache.karaf.webconsole.osgi.core.spi.IColumnProvider"/>
    </service>
 
-   <reference name="ScrService" cardinality="1..1" interface="org.apache.felix.scr.ScrService" policy="static" bind="bind" unbind="unbind" />
 </scr:component>
diff --git a/osgi/scr/src/main/resources/OSGI-INF/component.xml b/osgi/scr/src/main/resources/OSGI-INF/component.xml
new file mode 100644
index 0000000..8bfaf85
--- /dev/null
+++ b/osgi/scr/src/main/resources/OSGI-INF/component.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="scr-component">
+   <implementation class="org.apache.karaf.webconsole.osgi.scr.ScrComponent" />
+
+   <reference name="ScrService" cardinality="1..1" interface="org.apache.felix.scr.ScrService" policy="static" bind="bind" unbind="unbind" />
+</scr:component>
diff --git a/osgi/scr/src/main/resources/OSGI-INF/decoration.xml b/osgi/scr/src/main/resources/OSGI-INF/decoration.xml
index b60a1bd..f988316 100644
--- a/osgi/scr/src/main/resources/OSGI-INF/decoration.xml
+++ b/osgi/scr/src/main/resources/OSGI-INF/decoration.xml
@@ -22,5 +22,4 @@
       <provide interface="org.apache.karaf.webconsole.osgi.core.spi.IDecorationProvider"/>
    </service>
 
-   <reference name="ScrService" cardinality="1..1" interface="org.apache.felix.scr.ScrService" policy="static" bind="bind" unbind="unbind" />
 </scr:component>
diff --git a/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css b/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css
index 477ab9f..1e900c1 100644
--- a/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css
+++ b/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/decorator.css
@@ -16,8 +16,8 @@
  */
 
 .scr {
-    background: url("scr.gif");
-    width: 16px;
+    background: url("scr.png");
+    width: 13px;
     height: 16px;
     display: block;
 }
\ No newline at end of file
diff --git a/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/scr.gif b/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/scr.gif
deleted file mode 100644
index cc9cbea..0000000
--- a/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/scr.gif
+++ /dev/null
Binary files differ
diff --git a/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/scr.png b/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/scr.png
new file mode 100644
index 0000000..5ce0d2c
--- /dev/null
+++ b/osgi/scr/src/main/resources/org/apache/karaf/webconsole/osgi/scr/scr.png
Binary files differ