<?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-${version}">
    <feature name="spring" version="${spring.version}">
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.aopalliance/${aopalliance.version}</bundle>
        <bundle>mvn:org.springframework/spring-core/${spring.version}</bundle>
        <bundle>mvn:org.springframework/spring-beans/${spring.version}</bundle>
        <bundle>mvn:org.springframework/spring-aop/${spring.version}</bundle>        
        <bundle>mvn:org.springframework/spring-context/${spring.version}</bundle>
        <bundle>mvn:org.springframework/spring-context-support/${spring.version}</bundle>
    </feature>
    <feature name="spring-dm" version="${spring.osgi.version}">
        <feature version="${spring.version}">spring</feature>
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.cglib/${cglib.version}</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-io/${spring.osgi.version}</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-core/${spring.osgi.version}</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-extender/${spring.osgi.version}</bundle>
        <bundle>mvn:org.springframework.osgi/spring-osgi-annotation/${spring.osgi.version}</bundle>
        <bundle>mvn:org.apache.felix.karaf.deployer/org.apache.felix.karaf.deployer.spring/${version}</bundle>
    </feature>
    <feature name="wrapper" version="${version}">
        <bundle>mvn:org.apache.felix.karaf.shell/org.apache.felix.karaf.shell.wrapper/${version}</bundle>
    </feature>
    <feature name="obr" version="${version}">
        <bundle>mvn:org.apache.felix/org.apache.felix.bundlerepository/${felix.bundlerepository.version}</bundle>
        <bundle>mvn:org.apache.felix.karaf.shell/org.apache.felix.karaf.shell.obr/${version}</bundle>
    </feature>
    <feature name="http" version="${version}">
        <config name="org.ops4j.pax.web">
          org.osgi.service.http.port=8181
        </config>
        <bundle>mvn:org.apache.geronimo.specs/geronimo-servlet_2.5_spec/${geronimo.servlet.version}</bundle>
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jetty-bundle/${jetty.bundle.version}</bundle>
        <bundle>mvn:org.ops4j.pax.web/pax-web-bundle/${pax.web.version}</bundle>
    </feature>
    <feature name="webconsole" version="${version}">
        <feature version="${version}">http</feature>
        <config name="org.apache.felix.webconsole.internal.servlet.OsgiManager">
          username=karaf
          password=karaf
        </config>
        <bundle>mvn:org.apache.felix/org.apache.felix.metatype/${felix.metatype.version}</bundle>
        <!-- TODO: add this bundle when upgrading to webconsole 1.2.12
        <bundle>mvn:org.apache.felix.karaf.webconsole/org.apache.felix.karaf.webconsole.branding/${version}</bundle>
        -->
        <bundle>mvn:org.apache.felix/org.apache.felix.webconsole/${felix.webconsole.version}</bundle>
        <bundle>mvn:org.apache.felix.karaf.webconsole/org.apache.felix.karaf.webconsole.admin/${version}</bundle>
        <bundle>mvn:org.apache.felix.karaf.webconsole/org.apache.felix.karaf.webconsole.features/${version}</bundle>
        <bundle>mvn:org.apache.felix.karaf.webconsole/org.apache.felix.karaf.webconsole.gogo/${version}</bundle>
    </feature>
    <feature name="ssh" version="${version}">
        <config name="org.apache.felix.karaf.shell.ssh">
            sshPort=8101
            sshRealm=karaf
        </config>
        <bundle>mvn:org.apache.mina/mina-core/${mina.version}</bundle>
        <bundle>mvn:org.apache.sshd/sshd-core/${sshd.version}</bundle>
        <bundle>mvn:org.apache.felix.karaf.shell/org.apache.felix.karaf.shell.ssh/${version}</bundle>
    </feature>
    <feature name="management" version="${version}">
        <bundle>mvn:org.apache.felix.karaf/org.apache.felix.karaf.management/${version}</bundle>
        <bundle>mvn:org.osgi/org.osgi.impl.bundle.jmx/${osgi.jmx.version}</bundle>
    </feature>
</features>
