#
#  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.
#
# The feature for Apache Sling
[feature name=sling]

[variables]
    jackrabbit.version=2.12.1

[artifacts]
    commons-collections/commons-collections/3.2.2
    org.apache.commons/commons-collections4/4.1
    commons-codec/commons-codec/1.9
    commons-lang/commons-lang/2.6
    org.apache.commons/commons-lang3/3.4
    org.apache.commons/commons-math/2.2
    org.apache.geronimo.bundles/commons-httpclient/3.1_1
    org.apache.httpcomponents/httpcore-osgi/4.4.1
    org.apache.httpcomponents/httpclient-osgi/4.4.1
    com.google.guava/guava/15.0
    org.apache.sling/org.apache.sling.adapter/2.1.6
    org.apache.sling/org.apache.sling.api/2.11.0
    org.apache.sling/org.apache.sling.auth.core/1.3.14
    org.apache.sling/org.apache.sling.auth.form/1.0.8
    org.apache.sling/org.apache.sling.bundleresource.impl/2.2.0
    org.apache.sling/org.apache.sling.commons.classloader/1.3.2
    org.apache.sling/org.apache.sling.commons.compiler/2.3.0
    org.apache.sling/org.apache.sling.commons.mime/2.1.8
    org.apache.sling/org.apache.sling.commons.osgi/2.4.0
    org.apache.sling/org.apache.sling.commons.scheduler/2.4.14
    org.apache.sling/org.apache.sling.commons.threads/3.2.4
    org.apache.sling/org.apache.sling.discovery.api/1.0.2
    org.apache.sling/org.apache.sling.engine/2.4.6
    org.apache.sling/org.apache.sling.event/4.0.0
    org.apache.sling/org.apache.sling.event.dea/1.0.4
    org.apache.sling/org.apache.sling.fsresource/1.1.4
    org.apache.sling/org.apache.sling.i18n/2.4.6
    org.apache.sling/org.apache.sling.jcr.resource/2.7.4
    org.apache.sling/org.apache.sling.launchpad.content/2.0.8
    org.apache.sling/org.apache.sling.resourceresolver/1.4.12
    org.apache.sling/org.apache.sling.scripting.api/2.1.8
    org.apache.sling/org.apache.sling.scripting.core/2.0.36
    org.apache.sling/org.apache.sling.serviceusermapper/1.2.2
    org.apache.sling/org.apache.sling.servlets.get/2.1.14
    org.apache.sling/org.apache.sling.servlets.post/2.3.12
    org.apache.sling/org.apache.sling.servlets.resolver/2.4.2
    javax.mail/mail/1.4.7
    org.apache.geronimo.bundles/jstl/1.2_1
    org.apache.felix/org.apache.felix.http.whiteboard/3.0.0

[artifacts startLevel=5]
    org.apache.sling/org.apache.sling.extensions.webconsolesecurityprovider/1.0.0
    org.apache.felix/org.apache.felix.inventory/1.0.4
    org.apache.felix/org.apache.felix.prefs/1.0.6
    org.apache.felix/org.apache.felix.webconsole/4.2.14
    org.apache.geronimo.bundles/json/20090211_1
    org.apache.sling/org.apache.sling.commons.json/2.0.16
    org.apache.felix/org.apache.felix.bundlerepository/1.6.4
    org.apache.sling/org.apache.sling.extensions.threaddump/0.2.2
    org.apache.aries.jmx/org.apache.aries.jmx.api/1.1.0
    org.apache.aries.jmx/org.apache.aries.jmx.core/1.1.1
    org.apache.aries.jmx/org.apache.aries.jmx.whiteboard/1.0.0
    commons-io/commons-io/2.4
    commons-fileupload/commons-fileupload/1.3.1

[artifacts startLevel=10]
    org.apache.felix/org.apache.felix.http.sslfilter/1.0.4
    org.apache.felix/org.apache.felix.scr/2.0.2
    org.apache.felix/org.apache.felix.metatype/1.1.2
    org.apache.tika/tika-core/1.11
    org.apache.tika/tika-bundle/1.11

[artifacts startLevel=15]
    org.apache.sling/org.apache.sling.jcr.jcr-wrapper/2.0.0
    org.apache.sling/org.apache.sling.jcr.api/2.3.0
    org.apache.sling/org.apache.sling.jcr.base/2.3.2
    org.apache.sling/org.apache.sling.jcr.registration/1.0.2
    org.apache.jackrabbit/jackrabbit-api/${jackrabbit.version}
    org.apache.jackrabbit/jackrabbit-jcr-commons/${jackrabbit.version}
    org.apache.jackrabbit/jackrabbit-spi/${jackrabbit.version}
    org.apache.jackrabbit/jackrabbit-spi-commons/${jackrabbit.version}
    org.apache.jackrabbit/jackrabbit-webdav/${jackrabbit.version}
    org.apache.jackrabbit/jackrabbit-jcr-rmi/${jackrabbit.version}
    org.apache.jackrabbit/jackrabbit-data/${jackrabbit.version}
    org.apache.sling/org.apache.sling.jcr.webdav/2.3.4
    org.apache.sling/org.apache.sling.jcr.davex/1.3.2
    org.apache.sling/org.apache.sling.jcr.jackrabbit.usermanager/2.2.4
    org.apache.sling/org.apache.sling.jcr.jackrabbit.accessmanager/2.1.2
    org.apache.sling/org.apache.sling.jcr.webconsole/1.0.2

[configurations]
  org.apache.sling.engine.impl.log.RequestLogger
    access.log.enabled=B"true"
    request.log.outputtype=I"0"
    access.log.output="log.access"
    request.log.output="log.request"
    request.log.enabled=B"true"
    access.log.outputtype=I"0"

  org.apache.sling.commons.log.LogManager
    org.apache.sling.commons.log.pattern="%d{dd.MM.yyyy HH:mm:ss.SSS}\ *%level*\ [%thread]\ %logger\ %msg%n"
    org.apache.sling.commons.log.file="logs/error.log"
    org.apache.sling.commons.log.level="info"
    org.apache.sling.commons.log.file.size="'.'yyyy-MM-dd"
    org.apache.sling.commons.log.file.number=I"7"

  org.apache.sling.commons.log.LogManager.factory.config-access.log
    org.apache.sling.commons.log.pattern="%msg%n"
    org.apache.sling.commons.log.names=["log.access"]
    org.apache.sling.commons.log.file="logs/access.log"
    org.apache.sling.commons.log.level="info"

  org.apache.sling.commons.log.LogManager.factory.config-request.log
    org.apache.sling.commons.log.pattern="%msg%n"
    org.apache.sling.commons.log.names=["log.request"]
    org.apache.sling.commons.log.file="logs/request.log"
    org.apache.sling.commons.log.level="info"

  # configure the ScriptCache for scripts used by org.apache.sling.scripting.sightly.js.provider
  org.apache.sling.scripting.core.impl.ScriptCacheImpl
    org.apache.sling.scripting.cache.additional_extensions=["js"]

  # WebDAV servlet requires config now
  org.apache.sling.jcr.webdav.impl.servlets.SimpleWebDavServlet
    dav.root="/dav"

  # DavEx servlet requires config now
  org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet
      alias="/server"

  org.apache.sling.resourceresolver.impl.observation.OsgiObservationBridge
      enabled=B"true"
