###
# ============LICENSE_START=======================================================
# ECOMP MSO
# ================================================================================
# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Licensed 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.
# ============LICENSE_END=========================================================
###

########################################################################
#Resource key=Error Code|Message text|Resolution text |Description text
#######
# {component}-{subcomponent}-{4-digit code}{classification}
#Newlines can be utilized to add some clarity ensuring continuing line
#has atleast one leading space
#ResourceKey=\
#             ERR0000E\
#             Sample error msg txt\
#             Sample resolution msg\
#             Sample description txt
#
#######
#Error code classification category
#1100-1199	Security/Permission Related
#2100-2199	Availability/Timeout Related
#3100-3199	Data Access/Integrity Related
#4100-4199	Schema Interface Type/Validation
#5100-5199	Business/Flow Processing Related
#6100-6199	Reserved \u2013 do not use
#9100-9199	Unknown Errors
#
######
#{classification} description
# I = Information
# W = Warning
# E = Error
# F = Fatal
########################################################################    
BPMN_GENERAL_INFO=\
                  MSO-BPEL-5100I|\
                  INFO: {0}|\
                  No resolution needed|\
                  General info 
BPMN_GENERAL_WARNING=\
                  MSO-BPEL-5101W|\
                  WARNING: {0}|\
                  Please check other logs for more information|\
                  General warning 
BPMN_AUDIT_EXEC=\
                  MSO-BPEL-5102I|\
                  Executing method: {0}. {1}|\
                  No resolution needed|\
                  Executing method
BPMN_GENERAL_METRICS=\
                  MSO-BPEL-5105I|\
                  Executed method: {0}. {1}|\
                  No resolution needed|\
                  Generate information for Metric events
BPMN_URN_MAPPING_FAIL=\
                  MSO-BPEL-5106E|\
                  URN Mapping Task Failed to execute|\
                  Please check other logs for more information|\
                  URN Mapping Task Failed to execute
BPMN_VARIABLE_NULL=\
                  MSO-BPEL-5107W|\
                  Variable {0} is null; skipped|\
                  No resolution needed|\
                  Variable is null                                                                                                                                            
BPMN_GENERAL_EXCEPTION_ARG=\
                  MSO-BPEL-9100E|\
                  Exception: {0}|\
                  Please check other logs for more information|\
                  General exception with reason
BPMN_GENERAL_EXCEPTION=\
                  MSO-BPEL-9101E|\
                  Exception encountered|\
                  Please check other logs for more information|\
                  Exception encountered        
BPMN_SDNC_CALLBACK_EXCEPTION=\
                  MSO-BPEL-9102E|\
                  {0} Exception occurred during processing of MSO sdncAdapterCallbackService {1}|\
                  Please check other logs for more information|\
                  Exception occurred during processing of MSO sdncAdapterCallbackService                                                                                                         
