carnold     2005/02/21 14:46:48

  Modified:    .        build.xml
               include/log4cxx/helpers patternconverter.h patternparser.h
               src      Makefile.am cacheddateformat.cpp
                        patternconverter.cpp patternparser.cpp
                        simpledateformat.cpp
               tests/src/pattern num343patternconverter.cpp
                        num343patternconverter.h patternparsertestcase.cpp
  Added:       include/log4cxx/helpers namedpatternconverter.h
               src      namedpatternconverter.cpp
  Log:
  LOGCXX-49: Pattern parser refresh, Windows iter
  
  Revision  Changes    Path
  1.45      +1 -0      logging-log4cxx/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/build.xml,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- build.xml 18 Feb 2005 17:18:53 -0000      1.44
  +++ build.xml 21 Feb 2005 22:46:48 -0000      1.45
  @@ -812,6 +812,7 @@
                   unless="apriconv.lib.dir"/>
           <libset libs="${cppunit.lib.name}${lib-suffix}" 
dir="${cppunit.lib.dir}" if="cppunit.lib.dir"/>
           <libset libs="${cppunit.lib.name}${lib-suffix}" 
unless="cppunit.lib.dir"/>
  +        <libset libs="advapi32 odbc32 ws2_32" if="is-windows"/>
   
           <includepath path="${include.dir}"/>
           <includepath path="/usr/include/libxml2" if="is-unix"/>
  
  
  
  1.17      +6 -2      
logging-log4cxx/include/log4cxx/helpers/patternconverter.h
  
  Index: patternconverter.h
  ===================================================================
  RCS file: 
/home/cvs/logging-log4cxx/include/log4cxx/helpers/patternconverter.h,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- patternconverter.h        26 Dec 2004 07:31:52 -0000      1.16
  +++ patternconverter.h        21 Feb 2005 22:46:48 -0000      1.17
  @@ -19,7 +19,8 @@
   
   #include <log4cxx/logstring.h>
   #include <log4cxx/helpers/objectptr.h>
  -#include <log4cxx/helpers/objectimpl.h>
  +#include <log4cxx/helpers/objectimpl.h>
  +#include <vector>
   
   namespace log4cxx
   {
  @@ -75,7 +76,10 @@
                           A template method for formatting in a converter 
specific way.
                           */
                           virtual void format(LogString& sbuf,
  -                            const spi::LoggingEventPtr& e, 
log4cxx::helpers::Pool& pool) const;
  +                            const spi::LoggingEventPtr& e, 
log4cxx::helpers::Pool& pool) const;
  +
  +                        void setFormattingInfo(const FormattingInfo&);
  +                        virtual void setOptions(const 
std::vector<LogString>& options);
   
                   }; // class PatternConverter
           }  // namespace helpers
  
  
  
  1.21      +32 -11    logging-log4cxx/include/log4cxx/helpers/patternparser.h
  
  Index: patternparser.h
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/include/log4cxx/helpers/patternparser.h,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- patternparser.h   18 Feb 2005 17:18:53 -0000      1.20
  +++ patternparser.h   21 Feb 2005 22:46:48 -0000      1.21
  @@ -21,7 +21,7 @@
   #include <log4cxx/helpers/objectptr.h>
   #include <log4cxx/helpers/objectimpl.h>
   #include <log4cxx/helpers/formattinginfo.h>
  -#include <log4cxx/helpers/patternconverter.h>
  +#include <log4cxx/helpers/namedpatternconverter.h>
   #include <log4cxx/helpers/dateformat.h>
   #include <log4cxx/helpers/relativetimedateformat.h>
   #include <map>
  @@ -41,10 +41,28 @@
             return new classname(formattingInfo, options);  }   \
   private:                                                      \
   classname(const classname&);                                  \
  -classname& operator=(const classname&);                       \
  +classname& operator=(const classname&);
   
   #define END_DEFINE_PATTERN_CONVERTER(classname)          };
   
  +
  +#define DEFINE_NAMED_PATTERN_CONVERTER(classname)                   \
  +class LOG4CXX_EXPORT classname : public NamedPatternConverter {    \
  +public:                                                       \
  +classname(const FormattingInfo& formattingInfo,               \
  +          const std::vector<LogString>& options);             \
  +virtual LogString getFullyQualifiedName(                      \
  +    const spi::LoggingEventPtr& event) const;                 \
  +static PatternConverter* newInstance(                         \
  +          const FormattingInfo& formattingInfo,               \
  +          const std::vector<LogString>& options) {            \
  +          return new classname(formattingInfo, options);  }   \
  +private:                                                      \
  +classname(const classname&);                                  \
  +classname& operator=(const classname&);
  +
  +#define END_DEFINE_NAMED_PATTERN_CONVERTER(classname)          };
  +
   
   namespace log4cxx
   {
  @@ -72,7 +90,8 @@
                   typedef PatternConverter* (*PatternConverterFactory)(
                        const FormattingInfo& info,
                        const std::vector<LogString>& options);
  -                typedef std::map<LogString, PatternConverterFactory> 
PatternConverterMap;
  +                typedef std::map<LogString, PatternConverterFactory> 
InternalPatternConverterMap;
  +                typedef std::map<LogString, LogString> PatternConverterMap;
   
                   private:
                     enum {
  @@ -83,7 +102,7 @@
                         MIN_STATE = 4,
                         MAX_STATE = 5 } state;
   
  -                  static const PatternConverterMap& getGlobalRulesRegistry();
  +                  static const InternalPatternConverterMap& 
getGlobalRulesRegistry();
   
                     LogString currentLiteral;
                     int patternLength;
  @@ -119,7 +138,9 @@
   
   
                   private:
  -                        PatternConverterFactory findConverterClass(const 
LogString& converterId);
  +                        PatternConverterPtr createConverter(const LogString& 
converterId,
  +                           const FormattingInfo& formattingInfo, 
  +                           const std::vector<LogString>& options) const;
   
                           void finalizeConverter(logchar c);
   
  @@ -130,7 +151,6 @@
   
                           static void logError(const LogString& msg);
                           static void logWarn(const LogString& msg);
  -                        static int getPrecision(const 
std::vector<LogString>& options);
   
   
                   // 
---------------------------------------------------------------------
  @@ -168,12 +188,11 @@
                           
DEFINE_PATTERN_CONVERTER(MethodLocationPatternConverter)
                           
END_DEFINE_PATTERN_CONVERTER(MethodLocationPatternConverter)
   
  -                        DEFINE_PATTERN_CONVERTER(ClassNamePatternConverter)
  -                        
END_DEFINE_PATTERN_CONVERTER(ClassNamePatternConverter)
  +                        
DEFINE_NAMED_PATTERN_CONVERTER(ClassNamePatternConverter)
  +                        
END_DEFINE_NAMED_PATTERN_CONVERTER(ClassNamePatternConverter)
   
  -                        DEFINE_PATTERN_CONVERTER(LoggerPatternConverter)
  -                            int precision;
  -                        END_DEFINE_PATTERN_CONVERTER(LoggerPatternConverter)
  +                        
DEFINE_NAMED_PATTERN_CONVERTER(LoggerPatternConverter)
  +                        
END_DEFINE_NAMED_PATTERN_CONVERTER(LoggerPatternConverter)
   
                           DEFINE_PATTERN_CONVERTER(MessagePatternConverter)
                           END_DEFINE_PATTERN_CONVERTER(MessagePatternConverter)
  @@ -209,5 +228,7 @@
   
   #undef DEFINE_PATTERN_CONVERTER
   #undef END_DEFINE_PATTERN_CONVERTER
  +#undef DEFINE_NAMED_PATTERN_CONVERTER
  +#undef END_DEFINE_NAMED_PATTERN_CONVERTER
   
   #endif //_LOG4CXX_HELPER_PATTERN_PARSER_H
  
  
  
  1.1                  
logging-log4cxx/include/log4cxx/helpers/namedpatternconverter.h
  
  Index: namedpatternconverter.h
  ===================================================================
  /*
   * Copyright 1999,2004 The Apache Software Foundation.
   * 
   * 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.
   */
  
  #ifndef _LOG4CXX_HELPER_NAMED_PATTERN_CONVERTER_H
  #define _LOG4CXX_HELPER_NAMED_PATTERN_CONVERTER_H
  
  #include <log4cxx/helpers/patternconverter.h>
  #include <vector>
  
  namespace log4cxx {
      namespace helpers {
          /**
           * 
           * Base class for other pattern converters which can return only 
parts of their name.
           *  
           * @author Ceki G&uuml;lc&uuml;
           * @author Curt Arnold
           */
          class NamedPatternConverter : public PatternConverter {
          private:
            int precision;
          public:
            DECLARE_ABSTRACT_LOG4CXX_OBJECT(NamedPatternConverter)
            BEGIN_LOG4CXX_CAST_MAP()
                  LOG4CXX_CAST_ENTRY(NamedPatternConverter)
            END_LOG4CXX_CAST_MAP()
  
            NamedPatternConverter();
            NamedPatternConverter(const FormattingInfo& fi, const 
std::vector<LogString>& options);
            virtual void setOptions(const std::vector<LogString>& options);
  
          protected:
              /**
               *  PatternConverter's virtual method.
               *
               */
              virtual void convert(LogString& sbuf,
                  const log4cxx::spi::LoggingEventPtr& event,
                      log4cxx::helpers::Pool& pool) const;
  
              virtual LogString getFullyQualifiedName(const 
log4cxx::spi::LoggingEventPtr& event) const = 0;
  
          };
      }
  }
  
  #endif
  
  
  1.25      +2 -1      logging-log4cxx/src/Makefile.am
  
  Index: Makefile.am
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/Makefile.am,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- Makefile.am       2 Jan 2005 05:40:04 -0000       1.24
  +++ Makefile.am       21 Feb 2005 22:46:48 -0000      1.25
  @@ -43,7 +43,8 @@
           logmanager.cpp \
           mdc.cpp \
           msxml.cpp \
  -        mutex.cpp \
  +        mutex.cpp \
  +        namedpatternconverter.cpp \
           ndc.cpp \
           nteventlogappender.cpp \
           objectimpl.cpp \
  
  
  
  1.12      +2 -1      logging-log4cxx/src/cacheddateformat.cpp
  
  Index: cacheddateformat.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/cacheddateformat.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- cacheddateformat.cpp      19 Feb 2005 01:59:37 -0000      1.11
  +++ cacheddateformat.cpp      21 Feb 2005 22:46:48 -0000      1.12
  @@ -51,7 +51,8 @@
    *  Expected representation of 0 milliseconds.
    */
   const logchar* const CachedDateFormat::zeroString = LOG4CXX_STR("000");
  -
  +
  +#undef min
   
   /**
    *  Creates a new CachedDateFormat object.
  
  
  
  1.14      +8 -0      logging-log4cxx/src/patternconverter.cpp
  
  Index: patternconverter.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/patternconverter.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- patternconverter.cpp      26 Dec 2004 07:31:53 -0000      1.13
  +++ patternconverter.cpp      21 Feb 2005 22:46:48 -0000      1.14
  @@ -33,6 +33,14 @@
   {
   }
   
  +void PatternConverter::setFormattingInfo(const FormattingInfo& fi) {
  +    minChar = fi.minChar;
  +    maxChar = fi.maxChar;
  +    leftAlign = fi.leftAlign;
  +}
  +
  +void PatternConverter::setOptions(const std::vector<LogString>& options) {
  +}
   
   /**
   A template method for formatting in a converter specific way.
  
  
  
  1.31      +120 -180  logging-log4cxx/src/patternparser.cpp
  
  Index: patternparser.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/patternparser.cpp,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- patternparser.cpp 19 Feb 2005 01:59:37 -0000      1.30
  +++ patternparser.cpp 21 Feb 2005 22:46:48 -0000      1.31
  @@ -36,81 +36,55 @@
   using namespace log4cxx::spi;
   using namespace log4cxx::pattern;
   
  -#define ESCAPE_CHAR LOG4CXX_STR('%')
  +#define ESCAPE_CHAR LOG4CXX_STR('%')
  +
  +#define ADD_PATTERN(specifier, classname) \
  
+globalRulesRegistry.insert(InternalPatternConverterMap::value_type(LOG4CXX_STR(specifier),
 classname::newInstance))
   
  -const PatternParser::PatternConverterMap& 
PatternParser::getGlobalRulesRegistry() {
  -  static PatternConverterMap globalRulesRegistry;
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("c"),
  -      LoggerPatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("logger"),
  -      LoggerPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("C"),
  -      ClassNamePatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("class"),
  -      ClassNamePatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("d"),
  -      DatePatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("date"),
  -      DatePatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("F"),
  -     FileLocationPatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("file"),
  -     FileLocationPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("l"),
  -     FullLocationPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("L"),
  -     LineLocationPatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("line"),
  -     LineLocationPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("m"),
  -     MessagePatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("message"),
  -     MessagePatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("n"),
  -     LineSeparatorPatternConverter::newInstance));
  -
  -  globalRulesRegistry.insert(
  -    PatternConverterMap::value_type(LOG4CXX_STR("M"),
  -    MethodLocationPatternConverter::newInstance));
  -  globalRulesRegistry.insert(
  -    PatternConverterMap::value_type(LOG4CXX_STR("method"),
  -    MethodLocationPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("p"),
  -      LevelPatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("level"),
  -      LevelPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("r"),
  -     RelativeTimePatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("relative"),
  -     RelativeTimePatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("t"),
  -     ThreadPatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("thread"),
  -     ThreadPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("x"),
  -     NDCPatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("ndc"),
  -     NDCPatternConverter::newInstance));
  -
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("X"),
  -     PropertiesPatternConverter::newInstance));
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("properties"),
  -     PropertiesPatternConverter::newInstance));
  +const PatternParser::InternalPatternConverterMap& 
PatternParser::getGlobalRulesRegistry() {
  +  static InternalPatternConverterMap globalRulesRegistry;
  +  ADD_PATTERN("c", LoggerPatternConverter);
  +  ADD_PATTERN("logger", LoggerPatternConverter);
   
  +  ADD_PATTERN("C", ClassNamePatternConverter);
  +  ADD_PATTERN("class", ClassNamePatternConverter);
   
  -  
globalRulesRegistry.insert(PatternConverterMap::value_type(LOG4CXX_STR("throwable"),
  -     ThrowableInformationPatternConverter::newInstance));
  +  ADD_PATTERN("d", DatePatternConverter);
  +  ADD_PATTERN("date", DatePatternConverter);
  +
  +  ADD_PATTERN("F", FileLocationPatternConverter);
  +  ADD_PATTERN("file", FileLocationPatternConverter);
  +
  +  ADD_PATTERN("l", FullLocationPatternConverter);
  +
  +  ADD_PATTERN("L", LineLocationPatternConverter);
  +  ADD_PATTERN("line", LineLocationPatternConverter);
  +
  +  ADD_PATTERN("m", MessagePatternConverter);
  +  ADD_PATTERN("message", MessagePatternConverter);
  +
  +  ADD_PATTERN("n", LineSeparatorPatternConverter);
  +
  +  ADD_PATTERN("M", MethodLocationPatternConverter);
  +  ADD_PATTERN("method", MethodLocationPatternConverter);
  +
  +  ADD_PATTERN("p", LevelPatternConverter);
  +  ADD_PATTERN("level", LevelPatternConverter);
  +
  +  ADD_PATTERN("r", RelativeTimePatternConverter);
  +  ADD_PATTERN("relative", RelativeTimePatternConverter);
  +
  +  ADD_PATTERN("t", ThreadPatternConverter);
  +  ADD_PATTERN("thread", ThreadPatternConverter);
  +
  +  ADD_PATTERN("x", NDCPatternConverter);
  +  ADD_PATTERN("ndc", NDCPatternConverter);
  +
  +  ADD_PATTERN("X", PropertiesPatternConverter);
  +  ADD_PATTERN("properties", PropertiesPatternConverter);
  +
  +
  +  ADD_PATTERN("throwable", ThrowableInformationPatternConverter);
   
     return globalRulesRegistry;
   }
  @@ -348,17 +322,23 @@
       return head;
     }
   
  -PatternParser::PatternConverterFactory PatternParser::findConverterClass(
  -     const LogString& converterId) {
  +PatternConverterPtr PatternParser::createConverter(
  +                                                  const LogString& 
converterId,
  +                                                  const FormattingInfo& 
formattingInfo, 
  +                                                  const 
std::vector<LogString>& options) const {
   
       PatternConverterMap::const_iterator r = 
converterRegistry.find(converterId);
  -    if(r != converterRegistry.end()) {
  -       return r->second;
  +    if(r != converterRegistry.end()) {
  +       const Class& converterClass = Class::forName(r->second);
  +       PatternConverterPtr converter = converterClass.newInstance();
  +       converter->setFormattingInfo(formattingInfo);
  +       converter->setOptions(options);
  +       return converter;
       }
   
  -    r = getGlobalRulesRegistry().find(converterId);
  -    if(r != getGlobalRulesRegistry().end()) {
  -       return r->second;
  +    InternalPatternConverterMap::const_iterator r2 = 
getGlobalRulesRegistry().find(converterId);
  +    if(r2 != getGlobalRulesRegistry().end()) {
  +       return (*r2->second)(formattingInfo, options);
       }
   
       return NULL;
  @@ -370,33 +350,32 @@
    * and i points to the character following 'c'.
    */
   void PatternParser::finalizeConverter(logchar c) {
  -  PatternConverterPtr pc;
  -
     LogString converterId(extractConverter(c));
   
  -  PatternConverterFactory factory = findConverterClass(converterId);
  -
  -  std::vector<LogString> options(extractOptions());
  -
  -
  -  //System.out.println("Option is [" + option + "]");
  -  if (factory != NULL) {
  -    pc = (*factory)(formattingInfo, options);
  -    currentLiteral.erase(currentLiteral.begin(), currentLiteral.end());
  -  } else {
  -    std::basic_ostringstream<logchar> os;
  -    if (converterId.empty()) {
  -        os << LOG4CXX_STR("Empty conversion specifier starting at position 
");
  -    } else {
  -        os << LOG4CXX_STR("Unrecognized conversion specifier [")
  -           << converterId
  -           << LOG4CXX_STR("] starting at position ");
  -    }
  -    os << i << LOG4CXX_STR(" in conversion pattern.");
  -    logError(os.str());
  -    pc = new LiteralPatternConverter(currentLiteral);
  -    currentLiteral.erase(currentLiteral.begin(), currentLiteral.end());
  -  }
  +  std::vector<LogString> options(extractOptions());
  +  PatternConverterPtr pc;
  +  try {
  +      pc = createConverter(converterId, formattingInfo, options);
  +      if (pc == NULL) {
  +        std::basic_ostringstream<logchar> os;
  +        if (converterId.empty()) {
  +            os << LOG4CXX_STR("Empty conversion specifier starting at 
position ");
  +        } else {
  +            os << LOG4CXX_STR("Unrecognized conversion specifier [")
  +               << converterId
  +               << LOG4CXX_STR("] starting at position ");
  +        }
  +        os << i << LOG4CXX_STR(" in conversion pattern.");
  +        logError(os.str());
  +        pc = new LiteralPatternConverter(currentLiteral);
  +      }
  +  } catch(ClassNotFoundException& ex) {
  +      LogString msg;
  +      Transcoder::decode(ex.what(), msg);
  +      logError(msg);
  +      pc = new LiteralPatternConverter(currentLiteral);
  +  }
  +  currentLiteral.erase(currentLiteral.begin(), currentLiteral.end());
     addConverter(pc);
   }
   
  @@ -422,20 +401,6 @@
   }
   
   
  -int PatternParser::getPrecision(
  -    const std::vector<LogString>& options) {
  -    int r = 0;
  -    if (options.size() > 0 && !options[0].empty()) {
  -        r = StringHelper::toInt(options[0]);
  -        if (r < 0) {
  -          LogString msg(LOG4CXX_STR("Precision options ("));
  -          msg.append(options[0]);
  -          msg.append(LOG4CXX_STR(") isn't a positive integer."));
  -          PatternParser::logError(msg);
  -        }
  -    }
  -    return r;
  -}
   
   
   // ---------------------------------------------------------------------
  @@ -608,80 +573,55 @@
   {
           const LocationInfo& locInfo = event->getLocationInformation();
           Transcoder::decode(locInfo.getFileName(), sbuf);
  -}
  -
  
-PatternParser::MethodLocationPatternConverter::MethodLocationPatternConverter(
  -    const FormattingInfo& formattingInfo,
  -    const std::vector<LogString>& opions)
  -: PatternConverter(formattingInfo)
  -{
  -}
  +}
  +
  
+PatternParser::MethodLocationPatternConverter::MethodLocationPatternConverter(
  +    const FormattingInfo& formattingInfo,
  +    const std::vector<LogString>& opions)
  +: PatternConverter(formattingInfo)
  +{
  +}
  +
  +void PatternParser::MethodLocationPatternConverter::convert(LogString& sbuf,
  +        const spi::LoggingEventPtr& event, Pool& pool) const
  +{
  +        const LocationInfo& locInfo = event->getLocationInformation();
  +        Transcoder::decode(locInfo.getMethodName(), sbuf);
  +}
  +
  +
  +
  +PatternParser::ClassNamePatternConverter::ClassNamePatternConverter(const 
FormattingInfo&
  +        formattingInfo, const std::vector<LogString>& options)
  +: NamedPatternConverter(formattingInfo, options)
  +{
  +}
  +
  +LogString PatternParser::ClassNamePatternConverter::getFullyQualifiedName(
  +     const spi::LoggingEventPtr& event) const
  +{
  +    LogString sbuf;
  +    const LocationInfo& locInfo = event->getLocationInformation();
  +    Transcoder::decode(locInfo.getClassName(), sbuf);
  +    return sbuf;
  +}
   
  -void PatternParser::MethodLocationPatternConverter::convert(LogString& sbuf,
  -        const spi::LoggingEventPtr& event, Pool& pool) const
  -{
  -        const LocationInfo& locInfo = event->getLocationInformation();
  -        Transcoder::decode(locInfo.getMethodName(), sbuf);
  -}
  -
  -PatternParser::ClassNamePatternConverter::ClassNamePatternConverter(
  -    const FormattingInfo& formattingInfo,
  -    const std::vector<LogString>& opions)
  -: PatternConverter(formattingInfo)
  -{
  -}
  -
  -void PatternParser::ClassNamePatternConverter::convert(LogString& sbuf,
  -        const spi::LoggingEventPtr& event, Pool& pool) const
  -{
  -        const LocationInfo& locInfo = event->getLocationInformation();
  -        Transcoder::decode(locInfo.getClassName(), sbuf);
  -}
   
   
   
   PatternParser::LoggerPatternConverter::LoggerPatternConverter(const 
FormattingInfo&
           formattingInfo, const std::vector<LogString>& options)
  -: PatternConverter(formattingInfo), 
precision(PatternParser::getPrecision(options))
  +: NamedPatternConverter(formattingInfo, options)
   {
   }
   
  -
  -
  -
  -void PatternParser::LoggerPatternConverter::convert(LogString& sbuf,
  -        const spi::LoggingEventPtr& event,
  -        Pool& pool) const
  -{
  -
  -        if(precision <= 0)
  -        {
  -                sbuf.append(event->getLoggerName());
  -        }
  -        else
  -        {
  -                const LogString& n = event->getLoggerName();
  -                LogString::size_type len = n.length();
  -
  -                // We substract 1 from 'len' when assigning to 'end' to 
avoid out of
  -                // bounds exception in return r.substring(end+1, len). This 
can happen if
  -                // precision is 1 and the category name ends with a dot.
  -                LogString::size_type end = len -1 ;
  -                for(int i = precision; i > 0; i--)
  -                {
  -                        end = n.rfind(LOG4CXX_STR('.'), end-1);
  -                        if(end == LogString::npos)
  -                        {
  -                                sbuf.append(n);
  -                                return;
  -                        }
  -                }
  -                sbuf.append(n, end+1, len - (end+1));
  -        }
  +LogString PatternParser::LoggerPatternConverter::getFullyQualifiedName(
  +     const spi::LoggingEventPtr& event) const
  +{
  +    return event->getLoggerName();
   }
   
   
  -
   PatternParser::MessagePatternConverter::MessagePatternConverter(
       const FormattingInfo& formattingInfo,
       const std::vector<LogString>& opions)
  
  
  
  1.12      +2 -3      logging-log4cxx/src/simpledateformat.cpp
  
  Index: simpledateformat.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/simpledateformat.cpp,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- simpledateformat.cpp      15 Feb 2005 23:56:01 -0000      1.11
  +++ simpledateformat.cpp      21 Feb 2005 22:46:48 -0000      1.12
  @@ -91,9 +91,8 @@
             size_t initialLength = s.length();
             StringHelper::toString(getField(tm), p, s);
             size_t finalLength = s.length();
  -          size_t padding = width - (finalLength - initialLength);
  -          if (padding > 0) {
  -            s.insert(initialLength, padding, L'0');
  +          if (initialLength + width > finalLength) {
  +            s.insert(initialLength, (initialLength + width) - finalLength, 
L'0');
             }
           }
   
  
  
  
  1.1                  logging-log4cxx/src/namedpatternconverter.cpp
  
  Index: namedpatternconverter.cpp
  ===================================================================
  /*
   * Copyright 2003-2005 The Apache Software Foundation.
   *
   * 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.
   */
  
  #include <log4cxx/helpers/namedpatternconverter.h>
  #include <log4cxx/helpers/loglog.h>
  #include <log4cxx/helpers/stringhelper.h>
  
  using namespace log4cxx;
  using namespace log4cxx::helpers;
  using namespace log4cxx::spi;
  
  IMPLEMENT_LOG4CXX_OBJECT(NamedPatternConverter)
  
  NamedPatternConverter::NamedPatternConverter(const FormattingInfo& fi, 
                                               const std::vector<LogString>& 
options) :
  PatternConverter(fi), precision(0) {
      setOptions(options);
  }
  
  void NamedPatternConverter::setOptions(const std::vector<LogString>& options) 
{
      if (options.size() > 0) {
          precision = StringHelper::toInt(options[0]);
          if (precision < 0) {
              LogString msg(LOG4CXX_STR("Precision options ("));
              msg += options[0];
              msg += LOG4CXX_STR(") isn't a positive integer.");
              LogLog::error(msg);
              precision = 0;
          }
      }
  }
  
  
  void NamedPatternConverter::convert(LogString& sbuf,
                  const log4cxx::spi::LoggingEventPtr& event,
                  log4cxx::helpers::Pool& pool) const {
      LogString n(getFullyQualifiedName(event));
      if (precision <= 0) {
          sbuf.append(n);
      } else {
          LogString::size_type len = n.length();
  
          // We substract 1 from 'len' when assigning to 'end' to avoid out of
          // bounds exception in return r.substring(end+1, len). This can 
happen if
          // precision is 1 and the category name ends with a dot.
          LogString::size_type end = len -1 ;
          for(int i = precision; i > 0; i--)
          {
                  end = n.rfind(LOG4CXX_STR('.'), end-1);
                  if(end == LogString::npos)
                  {
                          sbuf.append(n);
                          return;
                  }
          }
          sbuf.append(n, end+1, len - (end+1));
      }
  }
  
  
  
  
  1.5       +4 -1      
logging-log4cxx/tests/src/pattern/num343patternconverter.cpp
  
  Index: num343patternconverter.cpp
  ===================================================================
  RCS file: 
/home/cvs/logging-log4cxx/tests/src/pattern/num343patternconverter.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- num343patternconverter.cpp        18 Feb 2005 17:18:54 -0000      1.4
  +++ num343patternconverter.cpp        21 Feb 2005 22:46:48 -0000      1.5
  @@ -18,7 +18,10 @@
   
   using namespace log4cxx;
   using namespace log4cxx::helpers;
  -using namespace log4cxx::pattern;
  +using namespace log4cxx::pattern;
  +
  +IMPLEMENT_LOG4CXX_OBJECT(Num343PatternConverter)
  +
   
   Num343PatternConverter::Num343PatternConverter() {
   }
  
  
  
  1.7       +3 -1      
logging-log4cxx/tests/src/pattern/num343patternconverter.h
  
  Index: num343patternconverter.h
  ===================================================================
  RCS file: 
/home/cvs/logging-log4cxx/tests/src/pattern/num343patternconverter.h,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- num343patternconverter.h  18 Feb 2005 17:18:54 -0000      1.6
  +++ num343patternconverter.h  21 Feb 2005 22:46:48 -0000      1.7
  @@ -22,7 +22,9 @@
      namespace pattern {
        class Num343PatternConverter : public log4cxx::helpers::PatternConverter
        {
  -     public:
  +     public:
  +        DECLARE_LOG4CXX_OBJECT(Num343PatternConverter)
  +
          Num343PatternConverter();
          static log4cxx::helpers::PatternConverter* newInstance(
             const log4cxx::helpers::FormattingInfo& info,
  
  
  
  1.9       +2 -2      
logging-log4cxx/tests/src/pattern/patternparsertestcase.cpp
  
  Index: patternparsertestcase.cpp
  ===================================================================
  RCS file: 
/home/cvs/logging-log4cxx/tests/src/pattern/patternparsertestcase.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- patternparsertestcase.cpp 18 Feb 2005 17:18:54 -0000      1.8
  +++ patternparsertestcase.cpp 21 Feb 2005 22:46:48 -0000      1.9
  @@ -85,7 +85,7 @@
        LogString name(LOG4CXX_STR("z343"));
        ruleRegistry.insert(
           PatternParser::PatternConverterMap::value_type(name,
  -           Num343PatternConverter::newInstance));
  +           LOG4CXX_STR("org.apache.log4j.pattern.Num343PatternConverter")));
   
        patternParser.setConverterRegistry(ruleRegistry);
   
  @@ -108,7 +108,7 @@
        LogString name(LOG4CXX_STR("n343"));
        ruleRegistry.insert(
           PatternParser::PatternConverterMap::value_type(name,
  -           Num343PatternConverter::newInstance));
  +           LOG4CXX_STR("org.apache.log4j.pattern.Num343PatternConverter")));
   
        patternParser.setConverterRegistry(ruleRegistry);
   
  
  
  

Reply via email to