Fixed serialisation error

Signed-off-by: Andreas Pieber <anpieber@gmail.com>

git-svn-id: https://svn.apache.org/repos/asf/karaf/sandbox/pieber/karaf-webconsole/trunk@1161353 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java b/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java
index caacac4..1de59c0 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/BasePage.java
@@ -14,6 +14,7 @@
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.util.ListModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 
@@ -28,6 +29,7 @@
     // list of supported Locales - should be replaced by resolver/detector or something similar
     private IModel<List<Locale>> supportedLocales = new ListModel<Locale>(Arrays.asList(Locale.FRENCH, Locale.ENGLISH));
 
+    @SuppressWarnings("serial")
     public BasePage() {
         add(CSSPackageResource.getHeaderContribution(BasePage.class, "style.css"));
         add(CSSPackageResource.getHeaderContribution(BasePage.class, "grid.css"));
@@ -38,7 +40,12 @@
 
         add(new LanguagePanel("languagePanel", supportedLocales));
 
-        add(new NavigationPanel("navigationPanel", new ListModel<ConsoleTab>(tabs)));
+        add(new NavigationPanel("navigationPanel", new LoadableDetachableModel<List<ConsoleTab>>() {
+            @Override
+            protected List<ConsoleTab> load() {
+                return tabs;
+            }
+        }));
 
         for (IBehavior behavior : brandProvider.getBehaviors()) {
             add(behavior);
@@ -48,7 +55,7 @@
     }
 
     public void get() {
-        
+
     }
 
 }
diff --git a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/NavigationPanel.java b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/NavigationPanel.java
index 49681f0..aaf4280 100644
--- a/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/NavigationPanel.java
+++ b/core/src/main/java/org/apache/karaf/webconsole/core/navigation/markup/NavigationPanel.java
@@ -1,9 +1,12 @@
 package org.apache.karaf.webconsole.core.navigation.markup;
 
-import java.util.LinkedList;
+import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map.Entry;
 
 import org.apache.karaf.webconsole.core.navigation.ConsoleTab;
+import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.list.ListItem;
@@ -22,16 +25,22 @@
         add(new ListView<ConsoleTab>("tabs", model) {
             @Override
             protected void populateItem(ListItem<ConsoleTab> item) {
-                final ConsoleTab tab = item.getModelObject();
+                ConsoleTab tab = item.getModelObject();
 
-                item.add(new BookmarkablePageLink("moduleLink", tab.getModuleHomePage()).add(new Label("moduleLabel", tab.getLabel())));
+                item.add(new BookmarkablePageLink("moduleLink", tab.getModuleHomePage()).add(new Label("moduleLabel",
+                    tab.getLabel())));
 
-                List<String> subItems = new LinkedList<String>(tab.getItems().keySet());
-                item.add(new ListView<String>("topLinks", subItems) {
+                List<SimplifiedModel> model = new ArrayList<NavigationPanel.SimplifiedModel>();
+                for (Entry<String, Class<? extends Page>> entries : tab.getItems().entrySet()) {
+                    model.add(new SimplifiedModel(entries.getKey(), entries.getValue()));
+                }
+
+                item.add(new ListView<SimplifiedModel>("topLinks", model) {
                     @Override
-                    protected void populateItem(ListItem<String> item) {
-                        String subItem = item.getModelObject();
-                        item.add(new BookmarkablePageLink("topLink", tab.getItems().get(subItem)).add(new Label("linkLabel", subItem)));
+                    protected void populateItem(ListItem<SimplifiedModel> item) {
+                        SimplifiedModel subItem = item.getModelObject();
+                        item.add(new BookmarkablePageLink("topLink", subItem.getClazz()).add(new Label("linkLabel",
+                            subItem.getName())));
                     }
                 });
             }
@@ -39,4 +48,32 @@
 
     }
 
+    private static class SimplifiedModel implements Serializable {
+
+        private String name;
+        private Class<? extends Page> clazz;
+
+        public SimplifiedModel(String name, Class<? extends Page> clazz) {
+            this.name = name;
+            this.clazz = clazz;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public Class<? extends Page> getClazz() {
+            return clazz;
+        }
+
+        public void setClazz(Class<? extends Page> clazz) {
+            this.clazz = clazz;
+        }
+
+    }
+
 }