<?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.
-->
<features name="karaf-webconsole-${project.version}">

  <repository>mvn:org.ops4j.pax.wicket/features/${ops4j.paxwicket.version}/xml/features</repository>

  <feature name="webconsole-wicket" version="${project.version}" description="Karaf Wicket Webconsole">
    <feature>webconsole-core</feature>
    <feature>webconsole-osgi</feature>
    <feature>webconsole-blueprint</feature>
    <feature>webconsole-karaf</feature>
  </feature>
  <!-- Pax-Wicket Core Feature; loading all required features. Do a feature:install paxwicket and you're ready to go -->
  <feature name="webconsole-core" version="${project.version}" description="Karaf Webconsole Core">
    <details>The Webconsole core package provides the base view required for all bundles</details>
    <feature>wicket-spring</feature>
    <bundle>mvn:org.apache.felix/org.apache.felix.prefs/${felix-prefs.version}</bundle>
    <bundle>mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.core/${project.version}</bundle>
  </feature>

  <feature name="webconsole-osgi" version="${project.version}" description="Karaf Webconsole OSGi">
    <details>Adds support for osgi packages to the webconsole.</details>
    <feature>webconsole-core</feature>
    <bundle>mvn:org.apache.felix/org.apache.felix.metatype/${felix-metatype.version}</bundle>
    <bundle>mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.osgi/${project.version}</bundle>
  </feature>

  <feature name="webconsole-karaf" version="${project.version}" description="Karaf Webconsole Features">
    <details>Karaf bundle will contain all the pages and java classes about content specific to Karaf like features,repositories and obr.</details>
    <feature>webconsole-core</feature>
    <bundle>mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.karaf/${project.version}</bundle>
  </feature>

  <feature name="webconsole-blueprint" version="${project.version}" description="Karaf Webconsole Blueprint">
    <details>Adds support for blueprint specific features to the webconsole.</details>
    <feature>webconsole-core</feature>
    <bundle>mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.blueprint/${project.version}</bundle>
  </feature>

</features>

