You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ld...@apache.org on 2011/08/25 13:27:48 UTC

svn commit: r1161511 - in /karaf/sandbox/pieber/karaf-webconsole/trunk: core/src/main/java/org/apache/karaf/webconsole/core/form/ core/src/main/java/org/apache/karaf/webconsole/core/table/ core/src/main/java/org/apache/karaf/webconsole/core/table/map/ ...

Author: ldywicki
Date: Thu Aug 25 11:27:47 2011
New Revision: 1161511

URL: http://svn.apache.org/viewvc?rev=1161511&view=rev
Log:
Add configuration edit posibility, first try

Added:
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/LabelBorder.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/MapEditForm.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/OrdinalColumn.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/EntryModel.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataProvider.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataTable.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/DictionaryUtils.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/form/
    karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/form/LabelBorder.html
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationFilterUtil.java
Removed:
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/DictionaryDataProvider.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/AbstractConfigurationModel.java
Modified:
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationProvider.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationModel.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationsModel.java
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml
    karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.html

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/LabelBorder.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/LabelBorder.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/LabelBorder.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/LabelBorder.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,16 @@
+package org.apache.karaf.webconsole.core.form;
+
+import org.apache.wicket.markup.html.border.Border;
+import org.apache.wicket.model.IModel;
+
+public class LabelBorder extends Border {
+
+    public LabelBorder(String id, IModel<?> model) {
+        super(id, model);
+    }
+
+    public LabelBorder(String id) {
+        super(id);
+    }
+
+}

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/MapEditForm.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/MapEditForm.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/MapEditForm.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/form/MapEditForm.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,34 @@
+package org.apache.karaf.webconsole.core.form;
+
+import java.util.Map;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.repeater.RepeatingView;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+
+public abstract class MapEditForm<K, V> extends Form<Map<K, V>> {
+
+    public MapEditForm(String id, CompoundPropertyModel<Map<K, V>> model) {
+        super(id, model);
+
+        RepeatingView repeatingView = new RepeatingView("entries");
+
+        for (K key : model.getObject().keySet()) {
+            IModel<V> bind = model.bind("" + key);
+            repeatingView.add(populateItem(repeatingView.newChildId(), key, bind));
+        }
+        add(repeatingView);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected Component populateItem(String componentId, K key, IModel<V> value) {
+        LabelBorder border = new LabelBorder(componentId);
+        border.add(new Label("label", "" + key));
+        border.add(new TextField<V>("value", value, (Class<V>) value.getObject().getClass()));
+        return border;
+    }
+}

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/OrdinalColumn.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/OrdinalColumn.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/OrdinalColumn.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/OrdinalColumn.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,38 @@
+package org.apache.karaf.webconsole.core.table;
+
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+/**
+ * Column with ordinal number.
+ */
+public class OrdinalColumn<T> extends AbstractColumn<T> {
+
+    transient int counter = 1;
+
+    public OrdinalColumn(String displayModel, String sortProperty) {
+        super(Model.of(displayModel), sortProperty);
+    }
+
+    public OrdinalColumn(String displayModel) {
+        super(Model.of(displayModel));
+    }
+
+    public OrdinalColumn() {
+        this("No.", "no");
+    }
+
+    public void populateItem(Item<ICellPopulator<T>> cellItem, String componentId, IModel<T> rowModel) {
+        cellItem.add(new Label(componentId, "" + counter++));
+    }
+
+    @Override
+    public void detach() {
+        super.detach();
+        counter = 1;
+    }
+}

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/EntryModel.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/EntryModel.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/EntryModel.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/EntryModel.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,27 @@
+package org.apache.karaf.webconsole.core.table.map;
+
+import java.util.Map.Entry;
+
+import org.apache.wicket.model.IModel;
+
+public class EntryModel<K, V> implements IModel<Entry<K, V>> {
+
+    private Entry<K, V> object;
+
+    public EntryModel(Entry<K, V> object) {
+        this.object = object;
+    }
+
+    public void detach() {
+        this.object = null;
+    }
+
+    public Entry<K, V> getObject() {
+        return object;
+    }
+
+    public void setObject(Entry<K, V> object) {
+        this.object = object;
+    }
+
+}

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataProvider.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataProvider.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataProvider.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataProvider.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,31 @@
+package org.apache.karaf.webconsole.core.table.map;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.model.IModel;
+
+public class MapDataProvider<K, V> extends SortableDataProvider<Entry<K, V>> {
+
+    private final Map<K, V> map;
+
+    public MapDataProvider(Map<K, V> map) {
+        this.map = map;
+    }
+
+    public Iterator<? extends Entry<K, V>> iterator(int first, int count) {
+        return new ArrayList<Entry<K, V>>(map.entrySet()).subList(first, first + count).iterator();
+    }
+
+    public int size() {
+        return map.size();
+    }
+
+    public IModel<Entry<K, V>> model(Entry<K, V> object) {
+        return new EntryModel<K, V>(object);
+    }
+
+}

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataTable.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataTable.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataTable.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/table/map/MapDataTable.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,33 @@
+package org.apache.karaf.webconsole.core.table.map;
+
+import java.util.Arrays;
+import java.util.Map.Entry;
+
+import org.apache.karaf.webconsole.core.table.OrdinalColumn;
+import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
+import org.apache.wicket.markup.repeater.data.IDataProvider;
+
+public class MapDataTable<K, V> extends DefaultDataTable<Entry<K, V>> {
+
+    public MapDataTable(String id, IColumn<Entry<K, V>>[] columns, ISortableDataProvider<Entry<K, V>> dataProvider, int rowsPerPage) {
+        super(id, Arrays.asList(columns), dataProvider, rowsPerPage);
+    }
+
+    public MapDataTable(String id, ISortableDataProvider<Entry<K, V>> dataProvider, int rowsPerPage) {
+        this(id, getDefaultColumns(dataProvider), dataProvider, rowsPerPage);
+    }
+
+    @SuppressWarnings("unchecked")
+    static <K,V> IColumn<Entry<K, V>>[] getDefaultColumns(IDataProvider<Entry<K, V>> provider) {
+        IColumn<Entry<K, V>>[] columns = new IColumn[] {
+            new OrdinalColumn<Entry<K, V>>(),
+            new PropertyColumnExt<Entry<K, V>>("Key", "key"),
+            new PropertyColumnExt<Entry<K, V>>("Value", "value")
+        };
+
+        return columns;
+    }
+}

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/DictionaryUtils.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/DictionaryUtils.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/DictionaryUtils.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/java/org/apache/karaf/webconsole/core/util/DictionaryUtils.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,49 @@
+package org.apache.karaf.webconsole.core.util;
+
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+/**
+ * Utility class to work with dictionaries.
+ */
+public abstract class DictionaryUtils {
+
+    private DictionaryUtils() {
+        System.out.println("How you did that?");
+    }
+
+    /**
+     * Create an map from given dictionary.
+     * 
+     * @param <K> Type of the key.
+     * @param <V> Type of the value.
+     * @param dictionary Dictionary to be converted.
+     * @return Map with copy of elements from dictionary.
+     */
+    public static <K, V> Map<K, V> map(Dictionary<K, V> dictionary) {
+        HashMap<K, V> map = new HashMap<K, V>();
+
+        Enumeration<K> keys = dictionary.keys();
+        while (keys.hasMoreElements()) {
+            K key = keys.nextElement();
+            map.put(key, dictionary.get(key));
+        }
+
+        return map;
+    }
+
+    /**
+     * Create an dictionary from map.
+     * 
+     * @param <K> Type of the key.
+     * @param <V> Type of the value.
+     * @param map Map to be converted.
+     * @return Dictionary with copy of elements from map.
+     */
+    public static <K, V> Dictionary<K, V> dictionary(Map<K, V> map) {
+        return new Hashtable<K, V>(map);
+    }
+}

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/form/LabelBorder.html
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/form/LabelBorder.html?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/form/LabelBorder.html (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/core/src/main/resources/org/apache/karaf/webconsole/core/form/LabelBorder.html Thu Aug 25 11:27:47 2011
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <title>Karaf wicket console</title>
+</head>
+<body>
+
+    <wicket:border>
+        <label class="form-item">
+            <span wicket:id="label">Label</span>
+            <wicket:body />
+        </label>
+    </wicket:border>
+
+</body>
+</html>
\ No newline at end of file

Modified: karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.java?rev=1161511&r1=1161510&r2=1161511&view=diff
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.java (original)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.java Thu Aug 25 11:27:47 2011
@@ -1,28 +1,20 @@
 package org.apache.karaf.webconsole.osgi.internal.configuration;
 
 import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 
+import org.apache.karaf.webconsole.core.form.MapEditForm;
+import org.apache.karaf.webconsole.core.table.map.MapDataProvider;
+import org.apache.karaf.webconsole.core.table.map.MapDataTable;
+import org.apache.karaf.webconsole.core.util.DictionaryUtils;
 import org.apache.karaf.webconsole.osgi.internal.OsgiPage;
 import org.apache.karaf.webconsole.osgi.internal.configuration.model.ConfigurationModel;
 import org.apache.wicket.PageParameters;
+import org.apache.wicket.RequestCycle;
+import org.apache.wicket.Session;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Button;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.form.SubmitLink;
 import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.util.ListModel;
 import org.ops4j.pax.wicket.api.PaxWicketBean;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 import org.osgi.service.cm.Configuration;
@@ -39,59 +31,32 @@ public class ConfigurationEditPage exten
         pid = params.getString("pid");
 
         add(new Label("pid", pid));
+        final Configuration configuration = new ConfigurationModel(pid, configurationAdmin).getObject();
 
-        try {
-            add(form(configurationAdmin.getConfiguration(pid)));
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-    }
-
-    private Form form(Configuration configuration) {
-        CompoundPropertyModel<Configuration> model = new CompoundPropertyModel<Configuration>(null);
-        model.setChainedModel(new ConfigurationModel(pid, configurationAdmin));
+        @SuppressWarnings("unchecked")
+        Map<String, String> properties = DictionaryUtils.map(configuration.getProperties());
+        Map<String, String> system = ConfigurationFilterUtil.filter(properties);
+        CompoundPropertyModel<Map<String, String>> formModel = new CompoundPropertyModel<Map<String, String>>(properties);
 
-        Form<Configuration> form = new Form<Configuration>("edit", model) {
+        MapEditForm<String, String> mapEditForm = new MapEditForm<String, String>("edit", formModel) {
             @Override
-            public void process(IFormSubmittingComponent submittingComponent) {
-                System.out.println("--> " + getModelObject());
-            }
-        };
+            protected void onSubmit() {
+                Map<String, String> map = getModelObject();
 
-        form.add(new TextField<String>("pid") {
-            @Override
-            public boolean isEnabled() {
-                return false;
-            }
-        });
+                try {
+                    configuration.update(DictionaryUtils.dictionary(map));
 
-        Dictionary<String, Serializable> properties = configuration.getProperties();
-        properties.get("service.pid");
-        properties.get("service.factory");
-
-        Map<String, Serializable> map = new LinkedHashMap<String, Serializable>();
-        Enumeration<String> keys = properties.keys();
-        while (keys.hasMoreElements()) {
-            String key = keys.nextElement();
-            map.put(key, properties.get(key));
-        }
-        List<Entry<String, Serializable>> list = new ArrayList<Entry<String, Serializable>>(map.entrySet());
-
-        form.add(new ListView<Entry<String, Serializable>>("properties", new ListModel<Entry<String, Serializable>>(list)) {
-            @Override
-            protected void populateItem(ListItem<Entry<String, Serializable>> item) {
-                item.add(new Label("key", item.getModelObject().getKey()));
-                item.add(new TextField<String>("value", new Model(item.getModelObject().getValue())));
+                    Session.get().info("Configuration " + pid + " updated.");
+                    RequestCycle.get().setResponsePage(ConfigurationsPage.class);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
             }
-            @Override
-            public boolean getReuseItems() {
-                return true;
-            }
-        });
+        };
+        mapEditForm.add(new SubmitLink("submit"));
+        add(mapEditForm);
 
-        form.add(new Button("submit"));
-        return form;
+        add(new MapDataTable<String, String>("system", new MapDataProvider<String, String>(system), 5));
     }
 
 }

Added: karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationFilterUtil.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationFilterUtil.java?rev=1161511&view=auto
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationFilterUtil.java (added)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationFilterUtil.java Thu Aug 25 11:27:47 2011
@@ -0,0 +1,20 @@
+package org.apache.karaf.webconsole.osgi.internal.configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Utility class which removes system properties from configuration dictionary.
+ */
+public abstract class ConfigurationFilterUtil {
+
+    public static <K extends Object, V> Map<String, V> filter(Map<K, V> map) {
+        Map<String, V> system = new HashMap<String, V>();
+        system.put("service.pid", map.remove("service.pid"));
+        system.put("service.factoryPid", map.remove("service.factoryPid"));
+        system.put("service.bundleLocation", map.remove("service.bundleLocation"));
+        system.put("felix.fileinstall.filename", map.remove("felix.fileinstall.filename"));
+
+        return system;
+    }
+}

Modified: karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationProvider.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationProvider.java?rev=1161511&r1=1161510&r2=1161511&view=diff
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationProvider.java (original)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationProvider.java Thu Aug 25 11:27:47 2011
@@ -1,41 +1,35 @@
 package org.apache.karaf.webconsole.osgi.internal.configuration;
 
-import java.io.IOException;
 import java.util.Arrays;
 import java.util.Iterator;
 
 import org.apache.karaf.webconsole.osgi.internal.configuration.model.ConfigurationModel;
+import org.apache.karaf.webconsole.osgi.internal.configuration.model.ConfigurationNotFoundException;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
-import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
-import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
 public class ConfigurationProvider extends SortableDataProvider<Configuration> {
 
     private Configuration[] configurations = new Configuration[0];
-    private final ConfigurationAdmin configurationAdmin;
+    private ConfigurationAdmin configurationAdmin;
 
     public ConfigurationProvider(ConfigurationAdmin configurationAdmin) {
         this.configurationAdmin = configurationAdmin;
         try {
             this.configurations = configurationAdmin.listConfigurations(null);
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (InvalidSyntaxException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+        } catch (Exception e) {
+            throw new ConfigurationNotFoundException(null, e);
         }
     }
 
-    public Iterator<? extends Configuration> iterator(int arg0, int arg1) {
-        return Arrays.asList(Arrays.copyOfRange(configurations, arg0, arg1)).iterator();
+    public Iterator<? extends Configuration> iterator(int from, int count) {
+        return Arrays.asList(Arrays.copyOfRange(configurations, from, count)).iterator();
     }
 
-    public IModel<Configuration> model(Configuration arg0) {
-        return new ConfigurationModel(arg0.getPid(), configurationAdmin);
+    public IModel<Configuration> model(Configuration object) {
+        return new ConfigurationModel(object, configurationAdmin);
     }
 
     public int size() {

Modified: karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationModel.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationModel.java?rev=1161511&r1=1161510&r2=1161511&view=diff
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationModel.java (original)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationModel.java Thu Aug 25 11:27:47 2011
@@ -2,18 +2,26 @@ package org.apache.karaf.webconsole.osgi
 
 import java.io.IOException;
 
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
-public class ConfigurationModel extends AbstractConfigurationModel<Configuration> {
+public class ConfigurationModel extends LoadableDetachableModel<Configuration> {
 
     private String pid;
+    private ConfigurationAdmin configurationAdmin;
 
     public ConfigurationModel(String pid, ConfigurationAdmin configurationAdmin) {
-        super(configurationAdmin);
+        this.configurationAdmin = configurationAdmin;
         this.pid = pid;
     }
 
+    public ConfigurationModel(Configuration configuration, ConfigurationAdmin configurationAdmin) {
+        super(configuration);
+        this.configurationAdmin = configurationAdmin;
+        this.pid = configuration.getPid();
+    }
+
     @Override
     protected Configuration load() {
         try {

Modified: karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationsModel.java
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationsModel.java?rev=1161511&r1=1161510&r2=1161511&view=diff
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationsModel.java (original)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/java/org/apache/karaf/webconsole/osgi/internal/configuration/model/ConfigurationsModel.java Thu Aug 25 11:27:47 2011
@@ -1,12 +1,15 @@
 package org.apache.karaf.webconsole.osgi.internal.configuration.model;
 
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
-public class ConfigurationsModel extends AbstractConfigurationModel<Configuration[]> {
+public class ConfigurationsModel extends LoadableDetachableModel<Configuration[]> {
+
+    private final ConfigurationAdmin configurationAdmin;
 
     public ConfigurationsModel(ConfigurationAdmin configurationAdmin) {
-        super(configurationAdmin);
+        this.configurationAdmin = configurationAdmin;
     }
 
     @Override

Modified: karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml?rev=1161511&r1=1161510&r2=1161511&view=diff
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml (original)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/OSGI-INF/blueprint/osgi.xml Thu Aug 25 11:27:47 2011
@@ -33,6 +33,7 @@
 
     <reference id="configurationAdmin" interface="org.osgi.service.cm.ConfigurationAdmin" availability="optional" />
     <reference id="startLevel" interface="org.osgi.service.startlevel.StartLevel" />
+    <reference id="metaTypeService" interface="org.osgi.service.metatype.MetaTypeService" />
 
     <reference-list id="columnProviders" interface="org.apache.karaf.webconsole.osgi.bundle.IColumnProvider" availability="optional" />
     <reference-list id="actionProviders" interface="org.apache.karaf.webconsole.osgi.bundle.IActionProvider" availability="optional" />

Modified: karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.html
URL: http://svn.apache.org/viewvc/karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.html?rev=1161511&r1=1161510&r2=1161511&view=diff
==============================================================================
--- karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.html (original)
+++ karaf/sandbox/pieber/karaf-webconsole/trunk/osgi/src/main/resources/org/apache/karaf/webconsole/osgi/internal/configuration/ConfigurationEditPage.html Thu Aug 25 11:27:47 2011
@@ -10,21 +10,19 @@
             <h1>Edit <span wicket:id="pid">org.apache.felix.filemount</span></h1>
 
             <form wicket:id="edit">
-                <input type="text" wicket:id="pid" style="width: 100%" />
-
-                <ul style="list-style-type: none;">
-                    <li wicket:id="properties">
-                        <div class="grid_9">
-                            <div class="grid_9">
-                                <span wicket:id="key" style="width: 100%">key</span>
-                            </div>
-                            <input type="text" wicket:id="value" style="width: 100%" />
-                        </div>
+                <ul>
+                    <li wicket:id="entries">
+                        <input type="text" wicket:id="value" />
                     </li>
                 </ul>
-                
                 <input type="submit" wicket:id="submit" value="Confirm" />
             </form>
+
+            <p>
+                System properties (not editable)
+            </p>
+            <table wicket:id="system" class="dataview" />
+
         </wicket:extend>
     </body>
 </html>