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

