# 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 name and ServiceRankin property as defined for EnhancementEngine and Ranking
#===============================================================================

stanbol.enhancer.chain.name.name=Name
stanbol.enhancer.chain.name.description=The name of the enhancement chain. \
The RESFful API of this chain will be accessible at /enhancer/chain/<name>


#===============================================================================
#EnhancementEngineManagerImpl
#===============================================================================

org.apache.stanbol.enhancer.enginemanager.impl.EnhancementEngineManagerImpl.name=Apache Stanbol Enhancement Engine Manager
org.apache.stanbol.enhancer.enginemanager.impl.EnhancementEngineManagerImpl.description=Service that allows to retrieve active \
EnhancementEngines by name.

#===============================================================================
# ChainManagerImpl
#===============================================================================

org.apache.stanbol.enhancer.chainmanager.impl.ChainManagerImpl.name=Stanbol Enhancer Enhancement Chain Manager
org.apache.stanbol.enhancer.chainmanager.impl.ChainManagerImpl.description=Service that allows to retrieve active \
enhancement Chains by name.

