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


#
# This file contains localization strings for configuration labels and
# descriptions as used in the metatype.xml descriptor generated by the
# the SCR plugin

jcrinstall.name = Apache Sling JCR Installer
jcrinstall.description = Installs OSGi bundles and configurations found \
 in the JCR Repository. 
 
sling.jcrinstall.folder.max.depth.name = Max hierarchy depth of install folders
sling.jcrinstall.folder.max.depth.description = Folders that are nested deeper than \
  this value under the repository root are ignored
  
sling.jcrinstall.folder.name.regexp.name = Installation folders name regexp
sling.jcrinstall.folder.name.regexp.description = JCRInstall looks in repository folders \
  having a name that match this regular expression (under the root paths, which are defined \
  by the ResourceResolver search path) for resources to install. Folders having names \
  that match this expression, followed by dotted run mode selectors (like "install.author.production") \
  are also included.   
  
sling.jcrinstall.search.path.name = Search Path
sling.jcrinstall.search.path.description = List of paths under which jcrinstall looks \
  for installable resources. Combined with the installations folders name regexp \
  to select folders for scanning. Each path is followed by a colon and the priority \
  of resources found under that path, resources with higher values override resources \
  with lower values which represent the same OSGi entity (configuration, bundle, etc). 
  
sling.jcrinstall.new.config.path.name = New Config Path
sling.jcrinstall.new.config.path.description = New configurations are stored at this location. If this path \
 is relative, the resource resolver search path with highest priority is prepended. Otherwise this path \
 is used as is.

sling.jcrinstall.enable.writeback.name = Enable Write Back
sling.jcrinstall.enable.writeback.description = Enable writing back of changes done through other \
 tools like writing back configurations changed in the web console etc.
 
handler.schemes.name = Schemes
handler.schemes.description = For these schemes this installer writes back configurations.

service.ranking.name = Ranking
service.ranking.description = Ranking of this service.

sling.jcrinstall.signal.path.name = Signal Node Path
sling.jcrinstall.signal.path.description = Path of the node in repository whose children would be \
  watched for determining if the watch folder scanning has to be performed or not. If any child node is found \
  at this path then scanning would be paused.