mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Nicolas Capponi
29.30.2014 a06fd90c9b6bfb5f9130146373ba18e5769593b6
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