From 0bbb2f7f7f74de8b6a43523c88ae7eb8ff8b5e54 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 11 Mar 2014 09:41:21 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1308 Migrate schema support

---
 opendj3-server-dev/replace.rb |  335 +++++++++++++++++++------------------------------------
 1 files changed, 116 insertions(+), 219 deletions(-)

diff --git a/opendj3-server-dev/replace.rb b/opendj3-server-dev/replace.rb
index aca5973..26dbd93 100755
--- a/opendj3-server-dev/replace.rb
+++ b/opendj3-server-dev/replace.rb
@@ -27,26 +27,122 @@
 #
 class Replace
 
-  # Messages map : contains for each message its associated level
-  MESSAGES_MAP = {}
-
-  # Mapping of opendj2 log levels to opendj3 logging method
-  LOG_LEVELS = {
-    'INFO' => 'debug',
-    'MILD_WARN' => 'warn',
-    'SEVERE_WARN' => 'warn',
-    'MILD_ERR' => 'error',
-    'SEVERE_ERR' => 'error',
-    'FATAL_ERR' => 'error',
-    'DEBUG' => 'trace',
-    'NOTICE' => 'info',
-  }
-
   # All directories that contains java code
   JAVA_DIRS = ["src/server", "src/quicksetup", "src/ads", "src/guitools", "tests/unit-tests-testng/src"]
   SNMP_DIR = ["src/snmp/src"]
   DSML_DIR = ["src/dsml/org"]
 
+ # Replacement for new config framework
+  CONFIG_EXC = {
+    :dirs => JAVA_DIRS + SNMP_DIR,
+    :extensions => ["java"],
+    :stopwords => [],
+    :replacements =>
+      [
+        /import org.opends.server.config.ConfigException;/,
+        'import org.forgerock.opendj.config.server.ConfigException;',
+       ]
+  }
+
+
+  # Replacement for new config framework
+  NEW_CONFIG = {
+    :dirs => JAVA_DIRS + SNMP_DIR,
+    :extensions => ["java"],
+    :stopwords => ["org/opends/server/admin", "api/Config", "MatchingRuleConfigManager"],
+    :replacements =>
+      [
+        /import org.opends.server.admin.std.server\.([^;]+);/,
+        'import org.forgerock.opendj.server.config.server.\1;',
+
+        /import org.opends.server.admin.std.meta\.([^;]+);/,
+        'import org.forgerock.opendj.server.config.meta.\1;',
+
+        /import org.opends.server.admin.std.client\.([^;]+);/,
+        'import org.forgerock.opendj.server.config.client.\1;',
+
+        /import org.opends.server.admin.client\.(\w+);/,
+        'import org.forgerock.opendj.config.client.\1;',
+
+        /import org.opends.server.admin.client.ldap\.(\w+);/,
+        'import org.forgerock.opendj.config.client.ldap.\1;',
+
+        /import org.opends.server.admin.client.spi\.(\w+);/,
+        'import org.forgerock.opendj.config.client.spi.\1;',
+
+        /import org.opends.server.admin.server\.([^;]+);/,
+        'import org.forgerock.opendj.config.server.\1;',
+
+        /import org.opends.server.admin\.(\w+);/,
+        'import org.forgerock.opendj.config.\1;',
+
+        /import org.forgerock.opendj.config.client.AuthorizationException;/,
+        'import org.forgerock.opendj.ldap.ErrorResultException;',
+
+        /import org.forgerock.opendj.config.client.CommunicationException;$/,
+        '',
+
+        /catch \(AuthorizationException e\)/,
+        'catch (ErrorResultException e)',
+
+        /catch \(CommunicationException e\)/,
+        'catch (ErrorResultException e)',
+
+        # Now bring back removed imports that have no replacement
+        /import org.forgerock.opendj.config.client.ldap.JNDIDirContextAdaptor;/,
+        'import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;',
+
+        /import org.forgerock.opendj.config.AdministrationConnector;/,
+        'import org.opends.server.admin.AdministrationConnector;',
+
+        /import org.forgerock.opendj.config.AdministrationDataSync;/,
+        'import org.opends.server.admin.AdministrationDataSync;',
+
+        /import org.forgerock.opendj.config.ClassLoaderProvider;/,
+        'import org.forgerock.opendj.config.ConfigurationFramework;',
+
+        /import org.opends.server.types.ConfigChangeResult;/,
+        'import org.forgerock.opendj.config.server.ConfigChangeResult;',
+
+        /public ConfigChangeResult\s/,
+        "public org.forgerock.opendj.config.server.ConfigChangeResult ",
+
+        /new ConfigChangeResult\(/,
+        "new org.forgerock.opendj.config.server.ConfigChangeResult(",
+
+        /rdn\(\).getAttributeValue\(0\).getValue\(\).toString\(\)/,
+        'rdn().getFirstAVA().getAttributeValue().toString()',
+
+        /^(\s+)ServerManagementContext \w+\s*=\s*ServerManagementContext\s*.getInstance\(\);/m,
+        '',
+
+        /^(\s+)RootCfg (\w+)\s+=\s+\w+\.getRootConfiguration\(\);/m,
+        '\1RootCfg \2 = serverContext.getServerManagementContext().getRootConfiguration();',
+
+        /^(\s+)RootCfg (\w+)\s+=\s+ServerManagementContext.getInstance\(\)\.getRootConfiguration\(\);/m,
+        '\1RootCfg \2 = serverContext.getServerManagementContext().getRootConfiguration();',
+
+        #/(config|configuration|cfg|currentConfig)\.dn\(\)/,
+        #'org.forgerock.opendj.adapter.server3x.Converters.to(\1.dn())',
+
+        /(\b\w+\b)\.dn\(\)/,
+        'org.forgerock.opendj.adapter.server3x.Converters.to(\1.dn())',
+
+        /(config|configuration|cfg|currentConfig|configEntry|pluginCfg)\.get(\w+)(DN|DNs|Subtrees)\(\)/,
+        'org.forgerock.opendj.adapter.server3x.Converters.to(\1.get\2\3())',
+
+        /^(\s+)ConfigChangeResult (\b\w+\b);/,
+        '\1org.forgerock.opendj.config.server.ConfigChangeResult \2;',
+
+        /(\s+)AttributeType (\w+) = (configuration|config|cfg|\w+Cfg).get(\w+)Attribute\(\);/,
+        '\1AttributeType \2 = \3.get\4Attribute();',
+
+        /^(\s+)public DN dn\(\)/,
+        '\1public org.forgerock.opendj.ldap.DN dn()',
+
+      ]
+  }
+
 
   # Replacement for types
   TYPES = {
@@ -85,122 +181,6 @@
       ]
   }
 
-  # Replacement for exceptions
-  # Modify 36 files, for a total of 134 replacements - leaves 1277 compilation errors but mostly from generated config
-  EXCEPTIONS = {
-    :dirs => JAVA_DIRS,
-    :extensions => ["java"],
-    :replacements =>
-      [
-        /import org.opends.server.admin.client.AuthorizationException;/,
-        'import org.forgerock.opendj.ldap.ErrorResultException;',
-
-        /\bAuthorizationException\b/,
-        'ErrorResultException',
-
-        /import org.opends.server.admin.client.CommunicationException;\n/,
-        '',
-
-        /throws CommunicationException\b, /,
-        'throws ',
-
-        /, CommunicationException\b(, )?/,
-        '\1',
-
-        /\bCommunicationException\b/,
-        'ErrorResultException',
-      ]
-  }
-
-  # Replacement for loggers
-  # Modify 454 files, for a total of 2427 replacements - leaves 72 compilation errors
-  # TODO: add I18N loggers
-  LOGGERS = {
-    :dirs => SNMP_DIR,
-    :stopwords => ['src/server/org/opends/server/loggers', 'DebugLogPublisher'],
-    :extensions => ["java"],
-    :replacements =>
-      [
-        /import org.opends.server.loggers.debug.DebugTracer;/,
-        "import org.forgerock.i18n.LocalizableMessage;\nimport org.forgerock.i18n.slf4j.LocalizedLogger;",
-
-        /import java.util.logging.Logger;/,
-        "import org.forgerock.i18n.LocalizableMessage;\nimport org.forgerock.i18n.slf4j.LocalizedLogger;",
-
-        /import java.util.logging.Level;/,
-        '',
-
-        /import org.opends.server.types.DebugLogLevel;\n/,
-        '',
-
-        #/import (static )?org.opends.server.loggers.debug.DebugLogger.*;\n/,
-        #'',
-
-        /DebugTracer TRACER = (DebugLogger.)?getTracer\(\)/,
-        "LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass()",
-
-        /^\s*\/\*\*\n.*The tracer object for the debug logger.\n\s*\*\/$\n/,
-        '',
-
-        /^\s*\/\/\s*The tracer object for the debug logger.$\n/,
-        '',
-
-        /if \(debugEnabled\(\)\)\s*{\s* TRACER.debugCaught\(DebugLogLevel.ERROR, (\b.*\b)\);\s*\n\s*}$/,
-        'logger.traceException(\1);',
-
-        /TRACER\.debugCaught\(DebugLogLevel.ERROR, (\b.*\b)\);/,
-        'logger.traceException(\1);',
-
-        /TRACER.debug[^(]+\(/,
-        'logger.trace(',
-
-        /logger.trace\(DebugLogLevel.\b\w+\b, ?/,
-        'logger.trace(',
-
-        /logger.trace\((e|de)\)/,
-        'logger.traceException(\1)',
-
-        /(DebugLogger\.|\b)debugEnabled\(\)/,
-        'logger.isTraceEnabled()',
-
-        /(LOG|logger).log\((Level.)?WARNING, ?/,
-        'logger.warn(',
-
-        /(LOG|logger).log\((Level.)?CONFIG, ?/,
-        'logger.info(',
-
-        /(LOG|logger).log\((Level.)?INFO, ?/,
-        'logger.debug(',
-
-        /(LOG|logger).log\((Level.)?SEVERE, ?/,
-        'logger.error(',
-
-        /(LOG|logger).log\((Level.)?FINE, ?/,
-        'logger.trace(',
-
-        /logger.(warn|info|error|debug)([^;]+);/,
-        'logger.\1(LocalizableMessage.raw\2);',
-
-        /(private static final|static private final) Logger LOG =[^;]+;/,
-        'private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();',
-      ]
-  }
-
-  I18N_LOGGERS = {
-    :dirs => JAVA_DIRS,
-    :extensions => ["java"],
-    :replacements =>
-      [
-         # Message message = ERR_REFINT_UNABLE_TO_EVALUATE_TARGET_CONDITION.get(mo
-         #                    .getManagedObjectDefinition().getUserFriendlyName(), String
-         #                    .valueOf(mo.getDN()), StaticUtils.getExceptionMessage(e));
-         # ErrorLogger.logError(message);
-        /\bMessage\b \b(\w+)\b = (\w+\.)?\b(\w+)\b\s*.\s*get([^;]+);\n(\s+)ErrorLogger.logError\(\1\);/m,
-        "    Message message = \\2.get\\4;\n" +
-        "LocalizedLogger logger = LocalizedLogger.getLocalizedLogger(\\3.resourceName());\n\\5logger.error(\\1);",
-     ]
-  }
-
   MSG_ARGN_TOSTRING = {
     :dirs => JAVA_DIRS,
     :extensions => ["java"],
@@ -293,7 +273,7 @@
   }
 
   # List of replacements to run
-  REPLACEMENTS = [ COLLAPSE_LOCALIZABLE_MESSAGE_TO_LOGGER_ONLY, LOGGER_AND_ARGN_TO_LOGGER_ONLY ]
+  REPLACEMENTS = [ CONFIG_EXC ]
 
 
   ################################### Processing methods ########################################
@@ -335,10 +315,11 @@
         pattern, replace = replacements[index], replacements[index+1]
         replace = replace.gsub('{CLASSNAME}', classname(file))
         is_replaced = true
-        while is_replaced
+        #while is_replaced
+          #puts "pattern: " + pattern.to_s
           is_replaced = contents.gsub!(pattern, replace)
           if is_replaced then count += 1 end
-        end
+        #end
       }
       File.open(file + ".copy", "w+") { |f| f.write(contents) }
     }
@@ -360,7 +341,7 @@
     dirs.each { |directory|
       files = files_under_directory(directory, extensions)
       files.each { |file|
-        #puts file.to_s
+        puts file.to_s + "  stopwords:" + stopwords.to_s
         exclude_file = stopwords.any? { |stopword| file.include?(stopword) }
         next if exclude_file
         count = yield file # call the block
@@ -387,97 +368,13 @@
     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|
-      line = line.chomp
-      next if line.size==0 || line[0..0]=="#" || line[0..0]==" " || line[0..0]!=line[0..0].upcase || line[0..5]=="global"
-      token = line.split("=")
-      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_", '').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.run_messages
 Replace.new.run

--
Gitblit v1.10.0