<?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-api/${pax.web.version}</bundle>
        <bundle>mvn:org.ops4j.pax.web/pax-web-spi/${pax.web.version}</bundle>
        <bundle>mvn:org.ops4j.pax.web/pax-web-runtime/${pax.web.version}</bundle>
        <bundle>mvn:org.ops4j.pax.web/pax-web-jetty/${pax.web.version}</bundle>
    </feature>
    <feature name="war" version="${version}">
        <feature version="${version}">http</feature>
        <bundle>mvn:org.ops4j.pax.web/pax-web-jsp/${pax.web.version}</bundle>
        <bundle>mvn:org.ops4j.pax.web/pax-web-extender-war/${pax.web.version}</bundle>
        <bundle>mvn:org.ops4j.pax.web/pax-web-extender-whiteboard/${pax.web.version}</bundle>
        <bundle>mvn:org.ops4j.pax.url/pax-url-war/${pax.url.version}</bundle>
        <bundle>mvn:org.apache.felix.karaf.deployer/org.apache.felix.karaf.deployer.war/${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>
        <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.apache.aries.jmx/org.apache.aries.jmx/${aries.jmx.version}</bundle>
        <bundle>mvn:org.apache.aries.jmx/org.apache.aries.jmx.blueprint/${aries.jmx.version}</bundle>
    </feature>
    <feature name="woodstox" version="4.0.7">
        <bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.stax-api-1.0/1.4.0</bundle>
        <bundle>mvn:org.codehaus.woodstox/stax2-api/3.0.1</bundle>
        <bundle>mvn:org.codehaus.woodstox/woodstox-core-asl/4.0.7</bundle>
    </feature>
</features>
