<?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-blueprint</feature>
    <feature>webconsole-core</feature>
    <feature>webconsole-osgi</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.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>

