From a06fd90c9b6bfb5f9130146373ba18e5769593b6 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Wed, 29 Jan 2014 11:30:37 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1288 : Migrate I18n and logging support to i18n framework and SLF4J
---
opendj3-server-dev/replace.rb | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 107 insertions(+), 4 deletions(-)
diff --git a/opendj3-server-dev/replace.rb b/opendj3-server-dev/replace.rb
index 2170e3a..a2116cf 100755
--- a/opendj3-server-dev/replace.rb
+++ b/opendj3-server-dev/replace.rb
@@ -259,12 +259,113 @@
if name.nil? then '' else name end
end
+ # Process provided directories
+ # Expects a processing block accepting a file as argument and returning a count of changes dones
+ def process_dirs(dirs, stopwords, extensions)
+ count_files = 0
+ count_total = 0
+ dirs.each { |directory|
+ files = files_under_directory(directory, extensions)
+ files.each { |file|
+ #puts file.to_s
+ exclude_file = stopwords.any? { |stopword| file.include?(stopword) }
+ next if exclude_file
+ count = yield file # call the block
+ if count > 0
+ count_files += 1
+ count_total += count
+ end
+ }
+ }
+ puts "Replaced in #{count_files} files, for a total of #{count_total} replacements"
+ end
+
+ # Process provided file
+ # Expects a processing block accepting a source string as argument and returning a count of changes + a new
+ # content
+ def process_file(file)
+ count = 0
+ File.open(file) { |source|
+ contents = source.read
+ count, new_contents = yield contents
+ File.open(file + ".copy", "w+") { |f| f.write(new_contents) }
+ }
+ FileUtils.mv(file + ".copy", file, :verbose => false)
+ count
+ end
+
+
# Return all files with provided extensions under the provided directory
# and all its subdirectories recursively
def files_under_directory(directory, extensions)
Dir[directory + '/**/*.{' + extensions.join(",") + '}']
end
+ def run_messages
+ prepare_messages
+ process_dirs(JAVA_DIRS, ["--nostopword--"], ['java']) { |file|
+ process_file(file) { |content|
+ count, new_content = process_message(content)
+ next count, new_content
+ }
+ }
+ end
+
+ def process_message(content)
+ has_logger = /LocalizedLogger\.getLoggerForThisClass/ =~ content
+ needs_logger = /logError/ =~ content
+ count = 0
+ if needs_logger && has_logger.nil?
+ count = 1
+
+ content.sub!(/class ([^{]+){/,
+ "class \\1{\n\n " +
+ "private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();\n")
+
+ content.sub!(/import (.*);/,
+ "import \\1;\nimport org.forgerock.i18n.slf4j.LocalizedLogger;")
+ end
+
+ if needs_logger
+ count = 1
+ pattern = /(final )?(LocalizableMessage )?message\s*=\s*(\w+)\s*.\s*get\(\s*([^;]*)\);\s+(ErrorLogger\.)?logError\(\w+\);/m
+ mdata = pattern.match(content)
+ while !mdata.nil? do
+ msg = mdata[3]
+ args = if mdata[4].nil? || mdata[4]=="" then "" else ", " + mdata[4] end
+ level = MESSAGES_MAP[msg]
+ puts "1... #{level} - #{msg}"
+ content.sub!(pattern, "logger.#{level}(#{msg}#{args});")
+ mdata = pattern.match(content)
+ end
+
+ pattern = /logError\((\w+).get\s*\(\s*/m
+ mdata = pattern.match(content)
+ stop = {}
+ while !mdata.nil? do
+ msg = mdata[1]
+ break if !stop[msg].nil?
+ stop[msg] = msg
+ level = MESSAGES_MAP[msg]
+ puts "2... #{level} - #{msg}"
+ if !level.nil?
+ content.sub!(pattern, "logger.#{level}(#{msg}.get(")
+ end
+ mdata = pattern.match(content)
+ end
+
+ # all remaining patterns
+ content.gsub!(/(ErrorLogger\.)?logError\(/, 'logger.error(')
+
+ end
+ return count, content
+ end
+
+ def prepare_messages
+ files = Dir['src/messages/messages/*.properties']
+ files.each do |file| messages(file) end
+ end
+
# Build a map of error messages and error level
def messages(message_file)
File.open(message_file).each { |line|
@@ -274,14 +375,16 @@
first, *rest = token[0].split "_"
level_label = if %w(INFO DEBUG NOTICE).include?(first) then first else first.to_s + "_" + rest[0].to_s end
level = LOG_LEVELS[level_label]
- label = first + rest.join("_")
- label = label.gsub("MILD", "").gsub("SEVERE", "").gsub("FATAL", "")
- puts "level #{level}, label #{label}"
+ label = first + "_" + rest.join("_")
+ label = label.gsub("MILD_", '').gsub("SEVERE_", '').gsub("FATAL_", '').gsub("NOTICE_", 'NOTE_').gsub(/_\d+$/, '')
+ MESSAGES_MAP[label] = level
+ #puts "#{label}=#{level} #{token}"
}
end
end
# Launch all replacements defined in the REPLACEMENTS constant
-Replace.new.messages("src/messages/messages/admin.properties")
+#Replace.new.messages("src/messages/messages/admin.properties")
+Replace.new.run_messages
#Replace.new.run
--
Gitblit v1.10.0