###
# ============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 for other components
#1400-1499	Security/Permission Related
#2400-2499	Availability/Timeout Related
#3400-3499	Data Access/Integrity Related
#4400-4499	Schema Interface Type/Validation
#5400-5499	Business/Flow Processing Related
#6400-6499	Reserved \u2013 do not use
#9400-9499	Unknown Errors
#
######
#{classification} description
# I = Information
# W = Warning
# E = Error
# F = Fatal
########################################################################
GENERAL_WARNING=\
                  MSO-GENERAL-5401W|\
                  WARNING: {0}|\
                  Please check other logs for more detailed info|\
                  General warning
AUDIT_EXEC=\
                  MSO-GENERAL-5402I|\
                  Executing method: {0}. {1}|\
                  No resolution needed|\
                  Executing method
GENERAL_METRICS=\
                  MSO-GENERAL-5405I|\
                  Executed method: {0}. {1}|\
                  No resolution needed|\
                  Generate information for Metric events
LOGGER_SETUP=\
                  MSO-GENERAL-5406I|\
                  Request received to update logger level|\
                  No resolution needed|\
                  Request received to update logger level
LOGGER_NOT_FOUND=\
                  MSO-GENERAL-5407I|\
                  Logger Servlet: Logger not found: : {0}|\
                  No resolution needed|\
                  Logger not found
LOGGER_UPDATE_SUC=\
                  MSO-GENERAL-5408I|\
                  Successfully update Logger: {0} from level {1} to level {2}|\
                  No resolution needed|\
                  Generate information for Metric events
LOGGER_UPDATE_DEBUG=\
                  MSO-GENERAL-5409I|\
                  Request received to update debug mode|\
                  No resolution needed|\
                  Request received to update debug mode
LOGGER_UPDATE_DEBUG_SUC=\
                  MSO-GENERAL-5410I|\
                  Successfully {0} debug mode|\
                  No resolution needed|\
                  Successfully updated debug mode
LOAD_PROPERTIES_SUC=\
                  MSO-GENERAL-5411I|\
                  Properties file loaded successfully from file {0}|\
                  No resolution needed|\
                  Properties file loaded successfully
NO_PROPERTIES=\
                  MSO-GENERAL-5412E|\
                  Missing or invalid properties file: {0}|\
                  Please verify whether properties file exist or readable|\
                  Missing or invalid properties file
LOAD_PROPERTIES_FAIL=\
                  MSO-GENERAL-5413E|\
                  Failed loading properties file: {0}|\
                  Please verify whether properties file exist or readable|\
                  Failed loading properties file
INIT_LOGGER=\
                  MSO-GENERAL-5414I|\
                  Prepare to initialize loggers from {0}|\
                  No resolution needed|\
                  Prepare to initialize loggers
MADATORY_PARAM_MISSING=\
                  MSO-GENERAL-5415E|\
                  Not able to get mandatory parameter: {0} from file {1}|\
                  No resolution needed|\
                  Mandatory parameter missing
IDENTITY_SERVICE_NOT_FOUND=\
                  MSO-GENERAL-5416E|\
                  Identity service not found: region={0} ,cloud={1}|\
                  Please check other logs for more detailed info|\
                  Identity service not found
GENERAL_EXCEPTION_ARG=\
                  MSO-GENERAL-9400E|\
                  Exception: {0}|\
                  Please check other logs for more detailed info|\
                  General exception with reason
GENERAL_EXCEPTION=\
                  MSO-GENERAL-9401E|\
                  Exception encountered|\
                  Please check other logs for more detailed info|\
                  Exception encountered
INIT_LOGGER_FAIL=\
                  MSO-GENERAL-9402E|\
                  Failed to initialize loggers|\
                  No resolution|\
                  Failed to initialize loggers
JAXB_EXCEPTION=\
                  MSO-GENERAL-9403E|\
                  JAXB Initialization Error|\
                  Please check other logs for more detailed info|\
                  JAXB Initialization Error
