<?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-karaf</feature>
    <feature>webconsole-osgi</feature>
    <feature>webconsole-config</feature>
    <feature>webconsole-log</feature>
    <feature>webconsole-event</feature>
    <feature>webconsole-blueprint</feature>
    <feature>webconsole-scr</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 Core">
    <details>Adds support for osgi packages to the webconsole.</details>
    <feature>webconsole-core</feature>
    <bundle>mvn:org.apache.karaf.webconsole.osgi/org.apache.karaf.webconsole.osgi.framework/${project.version}</bundle>
    <bundle>mvn:org.apache.karaf.webconsole.osgi/org.apache.karaf.webconsole.osgi.bundle/${project.version}</bundle>
  </feature>

  <feature name="webconsole-config" version="${project.version}" description="Karaf WebConsole OSGi ConfigurationAdmin">
    <details>Adds support for osgi configuration admin.</details>
    <feature>webconsole-osgi</feature>
    <bundle>mvn:org.apache.felix/org.apache.felix.metatype/${felix-metatype.version}</bundle>
    <bundle>mvn:org.apache.karaf.webconsole.osgi/org.apache.karaf.webconsole.osgi.config/${project.version}</bundle>
  </feature>

  <feature name="webconsole-log" version="${project.version}" description="Karaf WebConsole OSGi LogService">
    <details>Adds support for osgi log service.</details>
    <feature>webconsole-osgi</feature>
    <bundle>mvn:org.apache.karaf.webconsole.osgi/org.apache.karaf.webconsole.osgi.log/${project.version}</bundle>
  </feature>

  <feature name="webconsole-event" version="${project.version}" description="Karaf WebConsole OSGi EventAdmin">
    <details>Adds support for osgi event admin service.</details>
    <feature>webconsole-osgi</feature>
    <bundle>mvn:org.apache.karaf.webconsole.osgi/org.apache.karaf.webconsole.osgi.event/${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.karaf/org.apache.karaf.webconsole.karaf.core/${project.version}</bundle>
    <bundle>mvn:org.apache.karaf.webconsole.karaf/org.apache.karaf.webconsole.karaf.admin/${project.version}</bundle>
    <bundle>mvn:org.apache.karaf.webconsole.karaf/org.apache.karaf.webconsole.karaf.feature/${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-osgi</feature>
    <bundle>mvn:org.apache.karaf.webconsole.osgi/org.apache.karaf.webconsole.osgi.blueprint/${project.version}</bundle>
  </feature>

  <feature name="webconsole-scr" version="${project.version}" description="Karaf WebConsole Felix SCR plugin">
    <details>Adds support for osgi Service Components. This feature also install felix scr runtime.</details>
    <feature>webconsole-osgi</feature>
    <bundle>mvn:org.apache.felix/org.apache.felix.scr/${felix-scr.version}</bundle>
    <bundle>mvn:org.apache.karaf.webconsole.osgi/org.apache.karaf.webconsole.osgi.log/${project.version}</bundle>
  </feature>

</features>

