FELIX-1450: Karaf branding and plugins for Felix webconsole

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@801821 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/assembly/src/main/filtered-resources/features.xml b/karaf/assembly/src/main/filtered-resources/features.xml
index 99c4105..aad78e6 100644
--- a/karaf/assembly/src/main/filtered-resources/features.xml
+++ b/karaf/assembly/src/main/filtered-resources/features.xml
@@ -57,7 +57,10 @@
         </config>
         <bundle>mvn:org.apache.felix/org.apache.felix.metatype/${felix.metatype.version}</bundle>
         <bundle>mvn:org.apache.felix/org.apache.felix.webconsole/${felix.webconsole.version}</bundle>
-        <bundle>mvn:org.apache.felix.karaf/org.apache.felix.karaf.webconsole/${version}</bundle>
+        <bundle>mvn:org.apache.felix.karaf.webconsole/org.apache.felix.karaf.webconsole.plugins/${version}</bundle>
+        <!-- TODO: uncomment when FELIX-1133 is resolved
+        <bundle>mvn:org.apache.felix.karaf.webconsole/org.apache.felix.karaf.webconsole.branding/${version}</bundle>
+        -->
     </feature>
     <feature name="ssh" version="${version}">
         <config name="org.apache.felix.karaf.gshell.ssh">
diff --git a/karaf/pom.xml b/karaf/pom.xml
index 27e0e9a..5bdcf6e 100644
--- a/karaf/pom.xml
+++ b/karaf/pom.xml
@@ -182,6 +182,17 @@
                 <enabled>true</enabled>
             </snapshots>
         </repository>
+
+        <repository>
+            <id>jansi.snapshot.m2</id>
+            <url>http://jansi.fusesource.org/repo/snapshot</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
     </repositories>
 
     <pluginRepositories>
diff --git a/karaf/webconsole/branding/pom.xml b/karaf/webconsole/branding/pom.xml
new file mode 100644
index 0000000..0e6cb76
--- /dev/null
+++ b/karaf/webconsole/branding/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

+

+    <!--

+

+        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.

+    -->

+

+    <modelVersion>4.0.0</modelVersion>

+  

+    <parent>

+        <groupId>org.apache.felix.karaf.webconsole</groupId>

+        <artifactId>webconsole</artifactId>

+        <version>1.2.0-SNAPSHOT</version>

+    </parent>

+

+    <groupId>org.apache.felix.karaf.webconsole</groupId>

+    <artifactId>org.apache.felix.karaf.webconsole.branding</artifactId>

+    <packaging>bundle</packaging>

+    <version>1.2.0-SNAPSHOT</version>

+    <name>Apache Felix Karaf :: Web Console :: Branding</name>

+

+    <description>Apache Felix Karaf branding for the Apache Felix Web Console. This fragment

+        attaches to the org.apache.felix.webconsole bundle to provide branding

+        through the /META-INF/webconsole.properties.

+    </description>

+

+

+    <build>

+        <plugins>

+            <plugin>

+                <groupId>org.apache.felix</groupId>

+                <artifactId>maven-bundle-plugin</artifactId>

+                <extensions>true</extensions>

+                <configuration>

+                    <instructions>

+                        <Bundle-DocURL>http://felix.apache.org/site/apache-felix-karaf.html</Bundle-DocURL>

+                        <Fragment-Host>org.apache.felix.webconsole</Fragment-Host>

+                        <Export-Package>!*</Export-Package>

+                    </instructions>

+                </configuration>

+            </plugin>

+        </plugins>

+    </build>

+

+  

+</project>

diff --git a/karaf/webconsole/branding/src/main/resources/META-INF/webconsole.properties b/karaf/webconsole/branding/src/main/resources/META-INF/webconsole.properties
new file mode 100644
index 0000000..84b3fc4
--- /dev/null
+++ b/karaf/webconsole/branding/src/main/resources/META-INF/webconsole.properties
@@ -0,0 +1,35 @@
+#
+#  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.
+#
+
+
+#
+# This file contains branding properties to overwrite the defualt
+# branding of the Apache Felix Web Console when deployed in an
+# Apache Felix Karaf application.
+
+webconsole.product.name = Apache Felix Karaf
+webconsole.product.url = http://felix.apache.org/site/apache-felix-karaf.html
+webconsole.product.image = /res/karaf/imgs/logo.png
+
+webconsole.vendor.name = The Apache Software Foundation
+webconsole.vendor.url = http://www.apache.org
+webconsole.vendor.image = /res/karaf/imgs/logo.png
+
+webconsole.favicon = /res/karaf/imgs/favicon.ico
+webconsole.stylesheet = /res/karaf/ui/admin.css
diff --git a/karaf/webconsole/branding/src/main/resources/res/karaf/ui/admin.css b/karaf/webconsole/branding/src/main/resources/res/karaf/ui/admin.css
new file mode 100644
index 0000000..d836abe
--- /dev/null
+++ b/karaf/webconsole/branding/src/main/resources/res/karaf/ui/admin.css
@@ -0,0 +1,677 @@
+/*

+ * 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.

+ */ /* CSS Document */

+

+a {

+    color: black;

+}

+

+#licenseContent {

+    background-color: white;

+    color: black;

+}

+

+#main {

+    font-family: Verdana, Arial, Helvetica, sans-serif;

+    font-size: 10px;

+    color: white;

+    background-color: black;

+    border-collapse: collapse;

+    padding: 0px;

+    margin: 30px;

+    position: absolute;

+    text-align: left;

+    border-color: black;

+}

+

+#lead {

+    /*color: #00678C;*/

+    color: #ffffff; 

+    margin: 0px 0px 26px 0px;

+    padding: 0px;

+    height: 100px;

+}

+

+#lead h1 { /*

+    background-image: url(../imgs/banner_left.jpg);

+    background-repeat: no-repeat;

+    */

+    color: white;

+    margin: 0px;

+    padding: 5px 0 0 8px;

+    font-size: 200%;

+    font-weight: bold;

+    line-height: 120%;

+    height: 95px;

+    /* account for 5px top marging to get a total of 100px */

+    float: left;

+}

+

+#lead br {

+    line-height: 20px;

+}

+

+#lead p { /*

+    background-image: url(../imgs/banner_right.jpg);

+    background-repeat: no-repeat;

+    border-left: 1px solid;

+        */

+    margin: 0px;

+    padding: 0px;

+    height: 100px;

+    float: right;

+}

+

+#technav {

+    border-bottom: 1px solid white; /*6181A9*/

+    border-top: 1px solid white;

+    color: white;

+    background-color: black;

+    font-size: 10px;

+    font-weight: bold;

+    /*

+    border-top: 1px solid black;

+    */

+    line-height: 21px;

+    padding: 0;

+    margin: 0;

+}

+

+#technav a {

+    /*

+    display: block;

+    float: left;

+    */

+    text-decoration: none;

+    padding: 3px 10px 3px 10px;

+    color: white;

+    text-decoration: none;

+}

+

+#technav a:hover {

+    background-color: white;

+    color: black;

+}

+

+#technav .technavat {

+    /*

+    display: block;

+    float: left;

+    */

+    text-decoration: none;

+    padding: 3px 10px 3px 10px;

+    background-color: white;/*#B6CAE4;*/

+    color: black;

+}

+

+#claim {

+    color: white;

+    background-color: black;

+    padding: 2px 10px 2px 10px;

+}

+

+#claim p {

+    margin: 0;

+    padding: 0;

+}

+

+#claim a {

+    color: black;

+    background-color: white;

+    text-decoration: none;

+}

+

+/*

+.claimcell A:link {

+	color: #C5E2EE;

+	text-decoration: none;

+}

+

+.claimcell A:visited {

+	color: #C5E2EE;

+	text-decoration: none;

+}

+*/

+#claim a:hover {

+    color: black;

+    background-color: white;

+    border-bottom: 1px solid;

+}

+

+#claim a:active {

+    color: black;

+}

+

+/* old styles */

+table {

+    text-align: left;

+}

+

+table.content {

+    clear: both;

+    font-size: 10px;

+    line-height: 13px;

+    border: 0px solid #66dd44;

+    border-top: 1px solid white;

+    padding: 0px;

+    margin: 0px;

+    margin-top: 26px;

+    margin-bottom: 26px;

+    text-align: left;

+}

+

+tr {

+    border-left: 1px solid white;

+    border-right: 1px solid white;

+}

+

+td.content {

+    color: black;

+    border: 0px solid white;

+    border-bottom: 1px solid white;

+    vertical-align: middle;

+    padding: 5px;

+}

+

+td.aligntop {

+    vertical-align: top;

+}

+

+td.content img {

+    width: 10px;

+    height: 10px;

+}

+

+td.disabled {

+    color: #999999;

+}

+

+th.content {

+    color: black;

+    border: 0px solid white;

+    border-bottom: 1px solid white;

+    text-align: left;

+    padding: 5px;

+    padding-left: 10px;

+}

+

+.right {

+    text-align: right;

+}

+.center {

+    text-align: center;

+}

+

+th.container {

+    color: white;

+    background-color: black;

+    border: 1px solid white;

+}

+

+th.important {

+    color: #B81833;

+}

+

+.important {

+    color: #B81833;

+}

+

+#maintable { /* postion: absolute; */

+    font-size: 10px;

+    line-height: 13px;

+    border: 1px solid #000000;

+    padding: 0px;

+    margin: 0px;

+}

+

+.toolcell {

+    font-size: 10px;

+    color: #999999;

+    line-height: 10px;

+    background-color: #000000;

+    height: 18px;

+    padding: 0px;

+    padding-bottom: 1px;

+    text-align: left;

+}

+

+.toolcell A:link {

+    color: #C5E2EE;

+    text-decoration: none;

+}

+

+.toolcell A:visited {

+    color: #C5E2EE;

+    text-decoration: none;

+}

+

+.toolcell A:hover {

+    color: #99FF33;

+    text-decoration: none;

+    border-bottom: 1px solid;

+}

+

+.toolcell A:active {

+    color: #FFFFFF;

+    text-decoration: none;

+}

+

+.leadcell {

+    margin: 0px;

+    padding: 0px;

+    border: 0px solid #000000;

+    width: 718px;

+    height: 100px;

+    /*background-image: url(../imgs/banner_left.jpg);*/

+    vertical-align: top;

+}

+

+.leadcelltext {

+    position: absolute;

+    border: 0px solid #000000;

+    font-size: 26px;

+    line-height: 32px;

+    margin-top: 5px;

+    margin-left: 8px;

+    color: #ffffff;

+    vertical-align: top;

+}

+

+.logocell {

+    border-left: 1px solid #000000;

+    width: 239px;

+    /*background-image: url(../imgs/banner_right.jpg);*/

+}

+

+#technavcell {

+    font-size: 10px;

+    font-weight: bold;

+    border: 1px solid #000000;

+    border-top: 1px solid #000000;

+    height: 21px;

+    background-color: black;

+}

+

+/*

+#technav A:link {

+	float: left;

+	display: block;

+	color: #ffffff;

+	border: 0px solid #000000;

+	border-right: 1px solid #000000;

+	height: 21px;

+	text-decoration: none;

+	padding: 0px 10px 0px 10px;

+	background-color: #6181A9;

+}

+

+#technav A:visited {

+	float: left;

+	display: block;

+	color: #ffffff;

+	border-right: 1px solid #000000;

+	height: 21px;

+	text-decoration: none;

+	padding: 0px 10px 0px 10px;

+	background-color: #6181A9;

+}

+

+#technav A:hover {

+	float: left;

+	display: block;

+	color: #ffffff;

+	border-right: 1px solid #000000;

+	height: 21px;

+	text-decoration: none;

+	padding: 0px 10px 0px 10px;

+	background-color: #000000;

+}

+

+#technav A:active {

+	float: left;

+	display: block;

+	color: #ffffff;

+	border-right: 1px solid #000000;

+	height: 21px;

+	text-decoration: none;

+	padding: 0px 10px 0px 10px;

+	background-color: #6181A9;

+}

+*/

+.techcontentcell {

+    border: 0px solid #000000;

+    border-top: 1px solid #000000;

+}

+

+.relatedcell {

+    border-left: 1px solid #000000;

+    border-top: 1px solid #000000;

+    background-color: black;

+}

+

+/* CENTRAL CONTENT AREA STYLING */

+.content {

+    position: relative;

+    margin: 25px;

+    font-size: 11px;

+    line-height: 16px;

+    color: black;

+    background-color: white;

+}

+

+.content A:link {

+    color: #336600;

+    text-decoration: underline;

+}

+

+.content A:visited {

+    color: #666666;

+    text-decoration: underline;

+}

+

+.content A:hover {

+    color: blue;

+    background-color: #336600;

+    text-decoration: none;

+}

+

+.content A:active {

+    color: yellow;

+    background-color: white;

+    text-decoration: none;

+}

+

+body {

+	background-color: black;

+    color: white;

+}

+

+/* TEXT STYLING */ /*

+h1, h2, h3, h4, h5, h6, p

+

+	{

+	margin: 0px;

+	margin-bottom: 8px;

+	font-size: 11px;

+	line-height: 16px;

+	font-weight:bold;

+	}

+

+*/ /*

+h1

+	{

+	color: #000000;

+	margin-top: 32px;

+	clear: left;

+	}

+

+

+h2

+	{

+	color: #336699;

+	}

+

+

+h3

+	{

+	color: #336699;

+	}

+*/ /*

+p

+	{

+	font-size: 11px;

+	line-height: 16px;

+	font-weight: normal;

+	color: #000000;

+	}

+*/ /* FORMS */

+form {

+    font-size: 9px;

+    border-top: 1px solid white;

+    border-bottom: 1px solid white;

+    border-left: 1px solid white;

+    border-right: 1px solid white;

+    margin: 0;

+    padding: 0;

+    clear: left;

+}

+

+select,textarea {

+    font-family: Verdana, Arial, Helvetica, san-serif;

+    font-size: 9px;

+    font-weight: normal;

+    display: block;

+    float: left;

+    padding-top: 3px;

+    margin-bottom: 10px;

+}

+

+.input {

+    font-family: Verdana, Arial, Helvetica, san-serif;

+    font-size: 9px;

+    font-weight: normal;

+    color: black;

+    background-color: white;

+    border: 1px solid #999999;

+    /*border-bottom: 1px solid #cccccc;

+    border-right: 1px solid #cccccc;*/

+}

+

+.fileinput {

+    font-family: Verdana, Arial, Helvetica, san-serif;

+    font-size: 9px;

+    font-weight: normal;

+    color: black;

+}

+

+.submit {

+    cursor: default;

+    width: 60px;

+    font-family: Verdana, Arial, Helvetica, san-serif;

+    font-size: 10px;

+    font-weight: bold;

+    background-color: black;

+    color: white;

+    height: 20px;

+    padding: 0px;

+    padding-bottom: 1px;

+    margin: 0px;

+    border: 1px solid #cfcfcf;

+    border-right: 2px solid #4f4f4f;

+    border-bottom: 2px solid #4f4f4f;

+}

+

+input.important {

+    background-color: black;

+    color: white;

+}

+

+select {

+    color: #184054;

+    background-color: #f0f0f0;

+    border: 0px solid #999999;

+}

+

+textarea {

+    color: #184054;

+    background-color: #f0f0f0;

+    width: 234px;

+    height: 100px;

+    border: 1px solid #999999;

+    border-bottom: 1px solid #cccccc;

+    border-right: 1px solid #cccccc;

+}

+

+.clearleft {

+    clear: left;

+}

+

+.clearboth {

+    clear: both;

+}

+

+.checkradio {

+    background-color: black;

+    width: 20px;

+    padding: 0px;

+    padding-bottom: 10px;

+    margin: 0px;

+    margin-top: 2px;

+    border: 0px solid #999999;

+}

+

+.checkradiotext {

+    font-size: 9px;

+    font-weight: normal;

+    line-height: 11px;

+    width: 100px;

+    color: white;

+    padding: 0px;

+    padding-bottom: 10px;

+    margin: 0px;

+    margin-top: 4px;

+    border: 0px solid #999999;

+}

+

+div.buttons {

+    background-color: black;

+    height: 30px;

+    text-align: right;

+    vertical-align: middle;

+    padding-right: 10px;

+    padding-top: 8px;

+    color: white;

+    font-size: 10px;

+}

+div.buttons select {

+    font-family: Verdana, Arial, Helvetica, san-serif;

+    font-size: 9px;

+    font-weight: normal;

+    display: inline;

+    float:none;

+}

+div.button {

+    display: inline-block;

+    margin-left: 10px;

+}

+div.fullwidth {

+    width: 100%;

+}

+div.statusline {

+    margin-top: 10px;

+    background-color: #3f3f3f;

+    padding-left: 10px;

+    border: 1px solid #cfcfcf;

+    font-family: Verdana, Arial, Helvetica, san-serif;

+    font-size: 11px;

+    font-weight: normal;

+    color: #cfcfcf;

+    line-height: 19px;

+    margin-bottom: 10px;

+}

+div.table {

+	margin-left: 1px;

+}

+div.tablelayout {

+}

+

+/* tables */

+table.tablelayout {

+	border-left: 1px solid white;

+    border-right: 1px solid white;

+    border-collapse: collapse;

+	font-family:arial;

+    background-color: red;

+    font-size: 8pt;

+    width: 100%;

+    text-align: left;

+}

+table.tablelayout tbody tr {

+    border-left: 1px solid #6181A9;

+    border-right: 1px solid #6181A9;

+}

+

+table.tablelayout thead tr th, table.tablelayout tfoot tr th {

+    background-color: #6f6f6f;

+    border: 1px solid #cfcfcf;

+    font-size: 8pt;

+    padding: 4px;

+    color: #cfcfcf;

+}

+table.tablelayout thead tr .header {

+    /*background-image: url(../imgs/bg.gif);*/

+    background-repeat: no-repeat;

+    background-position: center right;

+    cursor: pointer;

+}

+table.tablelayout tbody td {

+    color: black;

+    border: 1px solid #cfcfcf;

+    padding: 4px;

+    background-color: white;

+    vertical-align: top;

+}

+table.tablelayout tbody tr.odd td {

+    background-color: white; /*#F0F0F6*/

+}

+table.tablelayout thead tr .headerSortUp {

+    background-image: url(../imgs/asc.gif);

+}

+table.tablelayout thead tr .headerSortDown {

+    background-image: url(../imgs/desc.gif);

+}

+table.tablelayout thead tr .headerSortDown, table.tablelayout thead tr .headerSortUp {

+background-color: #3f3f3f;/*#8dbdd8*/

+color: #cfcfcf;

+border: 1px solid #cfcfcf;

+}

+.col_Id {

+    width: 40px;

+}

+.col_Status {

+	width: 50px;

+}

+.col_Actions {

+    width: 95px;

+}

+#plugin_content {

+    margin-top: 26px;

+    margin-bottom: 26px;

+}

+.contentheader {

+    border: 0px solid #66dd44;

+    border-bottom: 1px solid black;

+    text-align: left;

+    padding: 5px;

+    padding-left: 10px;

+    color: black;

+    background-color: white;

+}

+.contentline {

+	padding-top: 15px;

+	padding-left:10px;

+    clear: both;

+    width: 100%;

+}

+.contentleft {

+    padding-left: 9px;

+    float: left;

+    width:110px;

+}

+.contentright {

+    display: inline;

+    width: 225px;

+}

diff --git a/karaf/webconsole/plugins/pom.xml b/karaf/webconsole/plugins/pom.xml
new file mode 100644
index 0000000..7025e4d
--- /dev/null
+++ b/karaf/webconsole/plugins/pom.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <!--
+
+        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.
+    -->
+
+  <modelVersion>4.0.0</modelVersion>
+  
+  <parent>
+    <groupId>org.apache.felix.karaf.webconsole</groupId>
+    <artifactId>webconsole</artifactId>
+    <version>1.2.0-SNAPSHOT</version>
+  </parent>
+
+  <groupId>org.apache.felix.karaf.webconsole</groupId>
+  <artifactId>org.apache.felix.karaf.webconsole.plugins</artifactId>
+  <packaging>bundle</packaging>
+  <version>1.2.0-SNAPSHOT</version>
+  <name>Apache Felix Karaf :: Web Console :: Plugins</name>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.apache.felix.webconsole</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.felix.karaf.gshell</groupId>
+      <artifactId>org.apache.felix.karaf.gshell.features</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicemix.bundles</groupId>
+      <artifactId>org.apache.servicemix.bundles.junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.json</groupId>
+      <artifactId>json</artifactId>
+      <version>20070829</version>
+      <scope>compile</scope>
+      <optional>true</optional>
+    </dependency>
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <Export-Package>org.apache.felix.karaf.webconsole;version=${pom.version}</Export-Package>
+            <Embed-Dependency>
+               <!-- Required for JSON data transfer -->
+               <!-- TODO: this needs to be put in a common place for reuse. -->
+               json
+            </Embed-Dependency>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  
+</project>
diff --git a/karaf/webconsole/src/main/java/org/apache/felix/karaf/webconsole/Feature.java b/karaf/webconsole/plugins/src/main/java/org/apache/felix/karaf/webconsole/Feature.java
similarity index 100%
rename from karaf/webconsole/src/main/java/org/apache/felix/karaf/webconsole/Feature.java
rename to karaf/webconsole/plugins/src/main/java/org/apache/felix/karaf/webconsole/Feature.java
diff --git a/karaf/webconsole/src/main/java/org/apache/felix/karaf/webconsole/FeaturesPlugin.java b/karaf/webconsole/plugins/src/main/java/org/apache/felix/karaf/webconsole/FeaturesPlugin.java
similarity index 100%
rename from karaf/webconsole/src/main/java/org/apache/felix/karaf/webconsole/FeaturesPlugin.java
rename to karaf/webconsole/plugins/src/main/java/org/apache/felix/karaf/webconsole/FeaturesPlugin.java
diff --git a/karaf/webconsole/src/main/resources/OSGI-INF/blueprint/webconsole.xml b/karaf/webconsole/plugins/src/main/resources/OSGI-INF/blueprint/webconsole.xml
similarity index 100%
rename from karaf/webconsole/src/main/resources/OSGI-INF/blueprint/webconsole.xml
rename to karaf/webconsole/plugins/src/main/resources/OSGI-INF/blueprint/webconsole.xml
diff --git a/karaf/webconsole/src/main/resources/res/ui/features.js b/karaf/webconsole/plugins/src/main/resources/res/ui/features.js
similarity index 100%
rename from karaf/webconsole/src/main/resources/res/ui/features.js
rename to karaf/webconsole/plugins/src/main/resources/res/ui/features.js
diff --git a/karaf/webconsole/pom.xml b/karaf/webconsole/pom.xml
index 857fadf..225c074 100644
--- a/karaf/webconsole/pom.xml
+++ b/karaf/webconsole/pom.xml
@@ -28,73 +28,15 @@
     <version>1.2.0-SNAPSHOT</version>
   </parent>
 
-  <groupId>org.apache.felix.karaf</groupId>
-  <artifactId>org.apache.felix.karaf.webconsole</artifactId>
-  <packaging>bundle</packaging>
+  <groupId>org.apache.felix.karaf.webconsole</groupId>
+  <artifactId>webconsole</artifactId>
+  <packaging>pom</packaging>
   <version>1.2.0-SNAPSHOT</version>
-  <name>Apache Felix Karaf :: Web Console Features Plugin</name>
+  <name>Apache Felix Karaf :: Web Console</name>
   
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.osgi.core</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.osgi.compendium</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.apache.felix.webconsole</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.felix.karaf.gshell</groupId>
-      <artifactId>org.apache.felix.karaf.gshell.features</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.servicemix.bundles</groupId>
-      <artifactId>org.apache.servicemix.bundles.junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.json</groupId>
-      <artifactId>json</artifactId>
-      <version>20070829</version>
-      <scope>compile</scope>
-      <optional>true</optional>
-    </dependency>
-  </dependencies>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <configuration>
-          <instructions>
-            <Export-Package>org.apache.felix.karaf.webconsole;version=${pom.version}</Export-Package>
-            <Embed-Dependency>
-               <!-- Required for JSON data transfer -->
-               <!-- TODO: this needs to be put in a common place for reuse. -->
-               json
-            </Embed-Dependency>
-          </instructions>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+  <modules>
+    <module>plugins</module>
+    <module>branding</module>
+  </modules>
   
 </project>