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

#---------------------------------------------------------
# Catalog of log messages
#
# Important: severity level of messages must be encoded
# as ending of the message key (like __SEVERE, __INFO, etc.).
# This is required when mapping messages to OmniFind messages.
#
#---------------------------------------------------------
#
#Messages written to log file by framework implementation 
# (not yet complete coverage)
#---------------------------------------------------------

UIMA_class_in_framework_config_not_found__INFO = Warning: class specified in framework configuration \
  file was not found. (Class name: {0})
  
UIMA_factory_config_parse__WARNING = The factory configuration file cannot be parsed. Reason code: {0} 

UIMA_analysis_engine_process_begin__FINE = AnalysisEngine {0} process begin

UIMA_analysis_engine_process_end__FINE = AnalysisEngine {0} process end

UIMA_analysis_engine_init_begin__CONFIG = AnalysisEngine [{0}] initialization begin

UIMA_analysis_engine_init_successful__CONFIG = AnalysisEngine [{0}] initialization successful

UIMA_analysis_engine_destroyed__CONFIG = AnalysisEngine [{0}] destroyed.

UIMA_asb_init_begin__CONFIG = ASB initialization begin

UIMA_asb_init_successful__CONFIG = ASB initialization successful

UIMA_cas_feature_structure_type__FINE = CAS FEATURE STRUCTURE TYPE: {0}

UIMA_cas_feature_name__FINE = \t\tCAS FEATURE NAME::{0} CAS FEATURE VALUE::{1}

UIMA_return_resource_to_pool__WARNING = The system tried to return a resource to the pool from which it was not checked out.

UIMA_resource_specifier_schema_not_found__WARNING = The resource specifier schema cannot be found. The resource specifier cannot be validated.

UIMA_error_while_getting_name__SEVERE = The error name {0} could not be retrieved.

UIMA_taf_internal_exception__SEVERE = The following internal exception was caught: {0} ({1})

UIMA_return_cas_to_pool__WARNING = The system tried to return a common analysis structure to the pool from which it was not checked out.

UIMA_return_jcas_to_pool__WARNING = The system tried to return a JCas to the pool from which it was not checked out.

UIMA_return_tcas_to_pool__WARNING = The system tried to return a TCAS to the pool from which it was not checked out.

UIMA_trying_resource_class__CONFIG = trying Resource class {0}

UIMA_unmanaged_resource__WARNING = The unmanaged resource {0} was accessed.\
        This feature is deprecated, and support may be removed in future versions.

UIMA_aggregate_param_no_overrides__WARNING = The aggregate text analysis engine "{0}" has declared the parameter {1}, but has not declared any overrides.\
  This usage is deprecated.

UIMA_overridden_resource__CONFIG = The definition of external resource "{0}" in component {1} was overridden in component {2}.

UIMA_duplicate_resource_name__WARNING = The external resource named {0} has been declared multiple times with different definitions. \
  The definition of the resource in component {1} will be used.  The definition in component {2} will be ignored.

UIMA_capabilityLanguageFlow_language_sequence__CONFIG = Precompute capabilityLanguage flow sequence on the default result spec for language {0}. Computed sequence is: {1}.

UIMA_capabilityLanguageFlow_flowTable_node__FINER = Use precomputed capabilityLanguage flow sequence for language {0}. Next sequence node is: {1}.

UIMA_capabilityLanguageFlow_compute_sequence_called__FINER = Compute dynamically capabilityLanguage flow sequence on the current result spec for language {0}. Next sequence node is: {1}

UIMA_capabilityLanguageFlow_compute_sequence_not_called__FINER = Compute dynamically next capabilityLanguage flow sequence node on the current result spec for language {0}. Sequence node {1} was not called.       
       
UIMA_JMX_failed_to_register_mbean__WARNING = JMX failiure: Failed to register MBean.

UIMA_JMX_failed_to_unregister_mbean__WARNING = JMX failiure: Failed to unregister MBean.

UIMA_JMX_platform_mbean_server_not_available__CONFIG = JMX platform MBeanServer not available.

UIMA_continuing_after_exception__FINE = An exception occurred, but the Flow Controller decided that processing can continue.

UIMA_pear_runtime_system_var_already_set__WARNING = UIMA pear runtime: System environment variable "{0}" already set, but was replace with "{1}" by UIMA component {2}.

UIMA_pear_runtime_set_system_var__CONFIG = UIMA pear runtime set system environment variable "{0}" for UIMA component {1}.

UIMA_pear_runtime_set_classpath__CONFIG = UIMA pear runtime set classpath to "{0}" for UIMA component {1}.

UIMA_pear_runtime_set_datapath__CONFIG = UIMA pear runtime set datapath to "{0}" for UIMA component {1}.

UIMA_pear_runtime_create_RM_map = UIMA pear runtime: creating a Map from class "{0}" and data path "{1}" to its resource manager instance.

UIMA_pear_runtime_add_RM_map = UIMA pear runtime: adding an entry to the Map from class "{0}" and data path "{1}" to its resource manager instance.