commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ggreg...@apache.org
Subject svn commit: r1157231 [1/5] - in /commons/proper/codec/branches/generics: ./ src/java/org/apache/commons/codec/ src/java/org/apache/commons/codec/binary/ src/java/org/apache/commons/codec/language/ src/java/org/apache/commons/codec/language/bm/ src/java...
Date Fri, 12 Aug 2011 19:50:57 GMT
Author: ggregory
Date: Fri Aug 12 19:50:56 2011
New Revision: 1157231

URL: http://svn.apache.org/viewvc?rev=1157231&view=rev
Log:
Codec 2.0 Generics. See the "Codec2-Migration.html" file for some details.

Added:
    commons/proper/codec/branches/generics/Codec2-Migration.htm
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceDecoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceEncoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricDecoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricEncoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryByteCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCharCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/HexByteCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/HexCharCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/QuotedPrintableBinaryCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/QuotedPrintableStringCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/URLBinaryCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/URLStringCodec.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/BinaryByteCodecTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/BinaryCharCodecTest.java
      - copied, changed from r1157197, commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/BinaryCodecTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/HexByteTest.java
      - copied, changed from r1157197, commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/HexTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/HexCharTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/QuotedPrintableBinaryCodecTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/QuotedPrintableStringCodecTest.java
      - copied, changed from r1157197, commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/QuotedPrintableCodecTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/URLCodecBinaryTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/URLCodecStringTest.java
      - copied, changed from r1157197, commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/URLCodecTest.java
Removed:
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/BinaryCodecTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/HexTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/QuotedPrintableCodecTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/URLCodecTest.java
Modified:
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryDecoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryEncoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Decoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Encoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringDecoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoderComparator.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BaseNCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/Hex.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/language/AbstractCaverphone.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/language/ColognePhonetic.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/language/DoubleMetaphone.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/language/Metaphone.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/language/RefinedSoundex.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/language/Soundex.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/language/bm/BeiderMorseEncoder.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/BCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/QCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/QuotedPrintableCodec.java
    commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/net/URLCodec.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/StringEncoderAbstractTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/StringEncoderComparatorTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/binary/Base64Test.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/language/bm/BeiderMorseEncoderTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/BCodecTest.java
    commons/proper/codec/branches/generics/src/test/org/apache/commons/codec/net/QCodecTest.java

Added: commons/proper/codec/branches/generics/Codec2-Migration.htm
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/Codec2-Migration.htm?rev=1157231&view=auto
==============================================================================
--- commons/proper/codec/branches/generics/Codec2-Migration.htm (added)
+++ commons/proper/codec/branches/generics/Codec2-Migration.htm Fri Aug 12 19:50:56 2011
@@ -0,0 +1,992 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 14">
+<meta name=Originator content="Microsoft Word 14">
+<link rel=File-List href="Codec%202%20Migration_files/filelist.xml">
+<title>Codec 2.0 Migration Guide</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Gary Gregory</o:Author>
+  <o:LastAuthor>Gary Gregory</o:LastAuthor>
+  <o:Revision>2</o:Revision>
+  <o:TotalTime>496</o:TotalTime>
+  <o:Created>2011-08-12T19:46:00Z</o:Created>
+  <o:LastSaved>2011-08-12T19:46:00Z</o:LastSaved>
+  <o:Pages>2</o:Pages>
+  <o:Words>290</o:Words>
+  <o:Characters>1658</o:Characters>
+  <o:Lines>13</o:Lines>
+  <o:Paragraphs>3</o:Paragraphs>
+  <o:CharactersWithSpaces>1945</o:CharactersWithSpaces>
+  <o:Version>14.00</o:Version>
+ </o:DocumentProperties>
+ <o:OfficeDocumentSettings>
+  <o:AllowPNG/>
+ </o:OfficeDocumentSettings>
+</xml><![endif]-->
+<link rel=themeData href="Codec%202%20Migration_files/themedata.thmx">
+<link rel=colorSchemeMapping
+href="Codec%202%20Migration_files/colorschememapping.xml">
+<!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:TrackMoves>false</w:TrackMoves>
+  <w:TrackFormatting/>
+  <w:PunctuationKerning/>
+  <w:ValidateAgainstSchemas/>
+  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+  <w:DoNotPromoteQF/>
+  <w:LidThemeOther>EN-US</w:LidThemeOther>
+  <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
+  <w:Compatibility>
+   <w:BreakWrappedTables/>
+   <w:SnapToGridInCell/>
+   <w:WrapTextWithPunct/>
+   <w:UseAsianBreakRules/>
+   <w:DontGrowAutofit/>
+   <w:SplitPgBreakAndParaMark/>
+   <w:EnableOpenTypeKerning/>
+   <w:DontFlipMirrorIndents/>
+   <w:OverrideTableStyleHps/>
+  </w:Compatibility>
+  <m:mathPr>
+   <m:mathFont m:val="Cambria Math"/>
+   <m:brkBin m:val="before"/>
+   <m:brkBinSub m:val="&#45;-"/>
+   <m:smallFrac m:val="off"/>
+   <m:dispDef/>
+   <m:lMargin m:val="0"/>
+   <m:rMargin m:val="0"/>
+   <m:defJc m:val="centerGroup"/>
+   <m:wrapIndent m:val="1440"/>
+   <m:intLim m:val="subSup"/>
+   <m:naryLim m:val="undOvr"/>
+  </m:mathPr></w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
+  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
+  LatentStyleCount="267">
+  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
+  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
+  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
+  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
+  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
+  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
+  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
+  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
+  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
+  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
+  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Table Grid"/>
+  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
+  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
+  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Shading"/>
+  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light List"/>
+  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Grid"/>
+  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 1"/>
+  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 2"/>
+  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 1"/>
+  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 2"/>
+  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 1"/>
+  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 2"/>
+  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 3"/>
+  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Dark List"/>
+  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Shading"/>
+  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful List"/>
+  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Grid"/>
+  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
+  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light List Accent 1"/>
+  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
+  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
+  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
+  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
+  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
+  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
+  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
+  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
+  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
+  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
+  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
+  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
+  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
+  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
+  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
+  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
+  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
+  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light List Accent 2"/>
+  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
+  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
+  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
+  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
+  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
+  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
+  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
+  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
+  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
+  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
+  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
+  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
+  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
+  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light List Accent 3"/>
+  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
+  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
+  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
+  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
+  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
+  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
+  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
+  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
+  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
+  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
+  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
+  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
+  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
+  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light List Accent 4"/>
+  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
+  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
+  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
+  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
+  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
+  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
+  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
+  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
+  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
+  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
+  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
+  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
+  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
+  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light List Accent 5"/>
+  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
+  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
+  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
+  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
+  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
+  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
+  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
+  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
+  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
+  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
+  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
+  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
+  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
+  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light List Accent 6"/>
+  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
+  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
+  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
+  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
+  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
+  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
+  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
+  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
+  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
+  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
+  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
+  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
+   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
+  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
+  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
+  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
+  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
+  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
+   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
+  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
+  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
+ </w:LatentStyles>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+	{font-family:Wingdings;
+	panose-1:5 0 0 0 0 0 0 0 0 0;
+	mso-font-charset:2;
+	mso-generic-font-family:auto;
+	mso-font-pitch:variable;
+	mso-font-signature:0 268435456 0 0 -2147483648 0;}
+@font-face
+	{font-family:Wingdings;
+	panose-1:5 0 0 0 0 0 0 0 0 0;
+	mso-font-charset:2;
+	mso-generic-font-family:auto;
+	mso-font-pitch:variable;
+	mso-font-signature:0 268435456 0 0 -2147483648 0;}
+@font-face
+	{font-family:Cambria;
+	panose-1:2 4 5 3 5 4 6 3 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:roman;
+	mso-font-pitch:variable;
+	mso-font-signature:-536870145 1073743103 0 0 415 0;}
+@font-face
+	{font-family:Calibri;
+	panose-1:2 15 5 2 2 2 4 3 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:-520092929 1073786111 9 0 415 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-parent:"";
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:0in;
+	line-height:115%;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";
+	mso-ascii-font-family:Calibri;
+	mso-ascii-theme-font:minor-latin;
+	mso-fareast-font-family:Calibri;
+	mso-fareast-theme-font:minor-latin;
+	mso-hansi-font-family:Calibri;
+	mso-hansi-theme-font:minor-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:minor-bidi;}
+h1
+	{mso-style-priority:9;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-link:"Heading 1 Char";
+	mso-style-next:Normal;
+	margin-top:24.0pt;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:0in;
+	margin-bottom:.0001pt;
+	line-height:115%;
+	mso-pagination:widow-orphan lines-together;
+	page-break-after:avoid;
+	mso-outline-level:1;
+	font-size:14.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#365F91;
+	mso-themecolor:accent1;
+	mso-themeshade:191;
+	mso-font-kerning:0pt;}
+p.MsoTitle, li.MsoTitle, div.MsoTitle
+	{mso-style-priority:10;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-link:"Title Char";
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:15.0pt;
+	margin-left:0in;
+	mso-add-space:auto;
+	mso-pagination:widow-orphan;
+	border:none;
+	mso-border-bottom-alt:solid #4F81BD 1.0pt;
+	mso-border-bottom-themecolor:accent1;
+	padding:0in;
+	mso-padding-alt:0in 0in 4.0pt 0in;
+	font-size:26.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#17365D;
+	mso-themecolor:text2;
+	mso-themeshade:191;
+	letter-spacing:.25pt;
+	mso-font-kerning:14.0pt;}
+p.MsoTitleCxSpFirst, li.MsoTitleCxSpFirst, div.MsoTitleCxSpFirst
+	{mso-style-priority:10;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-link:"Title Char";
+	mso-style-next:Normal;
+	mso-style-type:export-only;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-add-space:auto;
+	mso-pagination:widow-orphan;
+	border:none;
+	mso-border-bottom-alt:solid #4F81BD 1.0pt;
+	mso-border-bottom-themecolor:accent1;
+	padding:0in;
+	mso-padding-alt:0in 0in 4.0pt 0in;
+	font-size:26.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#17365D;
+	mso-themecolor:text2;
+	mso-themeshade:191;
+	letter-spacing:.25pt;
+	mso-font-kerning:14.0pt;}
+p.MsoTitleCxSpMiddle, li.MsoTitleCxSpMiddle, div.MsoTitleCxSpMiddle
+	{mso-style-priority:10;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-link:"Title Char";
+	mso-style-next:Normal;
+	mso-style-type:export-only;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-add-space:auto;
+	mso-pagination:widow-orphan;
+	border:none;
+	mso-border-bottom-alt:solid #4F81BD 1.0pt;
+	mso-border-bottom-themecolor:accent1;
+	padding:0in;
+	mso-padding-alt:0in 0in 4.0pt 0in;
+	font-size:26.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#17365D;
+	mso-themecolor:text2;
+	mso-themeshade:191;
+	letter-spacing:.25pt;
+	mso-font-kerning:14.0pt;}
+p.MsoTitleCxSpLast, li.MsoTitleCxSpLast, div.MsoTitleCxSpLast
+	{mso-style-priority:10;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-link:"Title Char";
+	mso-style-next:Normal;
+	mso-style-type:export-only;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:15.0pt;
+	margin-left:0in;
+	mso-add-space:auto;
+	mso-pagination:widow-orphan;
+	border:none;
+	mso-border-bottom-alt:solid #4F81BD 1.0pt;
+	mso-border-bottom-themecolor:accent1;
+	padding:0in;
+	mso-padding-alt:0in 0in 4.0pt 0in;
+	font-size:26.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#17365D;
+	mso-themecolor:text2;
+	mso-themeshade:191;
+	letter-spacing:.25pt;
+	mso-font-kerning:14.0pt;}
+p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
+	{mso-style-priority:11;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-link:"Subtitle Char";
+	mso-style-next:Normal;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:0in;
+	line-height:115%;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#4F81BD;
+	mso-themecolor:accent1;
+	letter-spacing:.75pt;
+	font-style:italic;}
+p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
+	{mso-style-priority:34;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:.5in;
+	mso-add-space:auto;
+	line-height:115%;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";
+	mso-ascii-font-family:Calibri;
+	mso-ascii-theme-font:minor-latin;
+	mso-fareast-font-family:Calibri;
+	mso-fareast-theme-font:minor-latin;
+	mso-hansi-font-family:Calibri;
+	mso-hansi-theme-font:minor-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:minor-bidi;}
+p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst
+	{mso-style-priority:34;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-type:export-only;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.5in;
+	margin-bottom:.0001pt;
+	mso-add-space:auto;
+	line-height:115%;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";
+	mso-ascii-font-family:Calibri;
+	mso-ascii-theme-font:minor-latin;
+	mso-fareast-font-family:Calibri;
+	mso-fareast-theme-font:minor-latin;
+	mso-hansi-font-family:Calibri;
+	mso-hansi-theme-font:minor-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:minor-bidi;}
+p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle
+	{mso-style-priority:34;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-type:export-only;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:0in;
+	margin-left:.5in;
+	margin-bottom:.0001pt;
+	mso-add-space:auto;
+	line-height:115%;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";
+	mso-ascii-font-family:Calibri;
+	mso-ascii-theme-font:minor-latin;
+	mso-fareast-font-family:Calibri;
+	mso-fareast-theme-font:minor-latin;
+	mso-hansi-font-family:Calibri;
+	mso-hansi-theme-font:minor-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:minor-bidi;}
+p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast
+	{mso-style-priority:34;
+	mso-style-unhide:no;
+	mso-style-qformat:yes;
+	mso-style-type:export-only;
+	margin-top:0in;
+	margin-right:0in;
+	margin-bottom:10.0pt;
+	margin-left:.5in;
+	mso-add-space:auto;
+	line-height:115%;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";
+	mso-ascii-font-family:Calibri;
+	mso-ascii-theme-font:minor-latin;
+	mso-fareast-font-family:Calibri;
+	mso-fareast-theme-font:minor-latin;
+	mso-hansi-font-family:Calibri;
+	mso-hansi-theme-font:minor-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:minor-bidi;}
+span.Heading1Char
+	{mso-style-name:"Heading 1 Char";
+	mso-style-priority:9;
+	mso-style-unhide:no;
+	mso-style-locked:yes;
+	mso-style-link:"Heading 1";
+	mso-ansi-font-size:14.0pt;
+	mso-bidi-font-size:14.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#365F91;
+	mso-themecolor:accent1;
+	mso-themeshade:191;
+	font-weight:bold;}
+span.TitleChar
+	{mso-style-name:"Title Char";
+	mso-style-priority:10;
+	mso-style-unhide:no;
+	mso-style-locked:yes;
+	mso-style-link:Title;
+	mso-ansi-font-size:26.0pt;
+	mso-bidi-font-size:26.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#17365D;
+	mso-themecolor:text2;
+	mso-themeshade:191;
+	letter-spacing:.25pt;
+	mso-font-kerning:14.0pt;}
+span.SubtitleChar
+	{mso-style-name:"Subtitle Char";
+	mso-style-priority:11;
+	mso-style-unhide:no;
+	mso-style-locked:yes;
+	mso-style-link:Subtitle;
+	mso-ansi-font-size:12.0pt;
+	mso-bidi-font-size:12.0pt;
+	font-family:"Cambria","serif";
+	mso-ascii-font-family:Cambria;
+	mso-ascii-theme-font:major-latin;
+	mso-fareast-font-family:"Times New Roman";
+	mso-fareast-theme-font:major-fareast;
+	mso-hansi-font-family:Cambria;
+	mso-hansi-theme-font:major-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:major-bidi;
+	color:#4F81BD;
+	mso-themecolor:accent1;
+	letter-spacing:.75pt;
+	font-style:italic;}
+span.SpellE
+	{mso-style-name:"";
+	mso-spl-e:yes;}
+span.GramE
+	{mso-style-name:"";
+	mso-gram-e:yes;}
+.MsoChpDefault
+	{mso-style-type:export-only;
+	mso-default-props:yes;
+	font-family:"Calibri","sans-serif";
+	mso-ascii-font-family:Calibri;
+	mso-ascii-theme-font:minor-latin;
+	mso-fareast-font-family:Calibri;
+	mso-fareast-theme-font:minor-latin;
+	mso-hansi-font-family:Calibri;
+	mso-hansi-theme-font:minor-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:minor-bidi;}
+.MsoPapDefault
+	{mso-style-type:export-only;
+	margin-bottom:10.0pt;
+	line-height:115%;}
+@page WordSection1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.0in 1.0in 1.0in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.WordSection1
+	{page:WordSection1;}
+ /* List Definitions */
+ @list l0
+	{mso-list-id:435290201;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-447071238 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+@list l0:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+@list l0:level2
+	{mso-level-number-format:bullet;
+	mso-level-text:o;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:"Courier New";}
+@list l0:level3
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0A7;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Wingdings;}
+@list l0:level4
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+@list l0:level5
+	{mso-level-number-format:bullet;
+	mso-level-text:o;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:"Courier New";}
+@list l0:level6
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0A7;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Wingdings;}
+@list l0:level7
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+@list l0:level8
+	{mso-level-number-format:bullet;
+	mso-level-text:o;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:"Courier New";}
+@list l0:level9
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0A7;
+	mso-level-tab-stop:none;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Wingdings;}
+ol
+	{margin-bottom:0in;}
+ul
+	{margin-bottom:0in;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-priority:99;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin-top:0in;
+	mso-para-margin-right:0in;
+	mso-para-margin-bottom:10.0pt;
+	mso-para-margin-left:0in;
+	line-height:115%;
+	mso-pagination:widow-orphan;
+	font-size:11.0pt;
+	font-family:"Calibri","sans-serif";
+	mso-ascii-font-family:Calibri;
+	mso-ascii-theme-font:minor-latin;
+	mso-hansi-font-family:Calibri;
+	mso-hansi-theme-font:minor-latin;
+	mso-bidi-font-family:"Times New Roman";
+	mso-bidi-theme-font:minor-bidi;}
+</style>
+<![endif]--><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="1026"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=WordSection1>
+
+<div style='mso-element:para-border-div;border:none;border-bottom:solid #4F81BD 1.0pt;
+mso-border-bottom-themecolor:accent1;padding:0in 0in 4.0pt 0in'>
+
+<p class=MsoTitle>Codec 2.0 Migration</p>
+
+</div>
+
+<p class=MsoSubtitle>Gary Gregory - ggregory@apache.org</p>
+
+<h1>Package Changes</h1>
+
+<p class=MsoNormal>Before the release, the package name MAY change from .codec
+to .codec2.</p>
+
+<h1>Interface Changes</h1>
+
+<p class=MsoNormal>The interface changes are source compatible. <o:p></o:p></p>
+
+<p class=MsoNormal>The interface changes are binary compatible unless call
+sites rely on the exact type hierarchy, for example if the client relies on the
+<span class=SpellE>StringEncoder</span> directly <span class=SpellE>subclassing</span>
+Encoder.<o:p></o:p></p>
+
+<p class=MsoNormal>The following interfaces now support generics and may
+generate compiler warnings: </p>
+
+<p class=MsoListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]>Decoder&lt;I, O&gt;</p>
+
+<p class=MsoListParagraphCxSpLast style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]>Encoder&lt;I, O&gt;<o:p></o:p></p>
+
+<p class=MsoNormal>This version adds interfaces that respectively subclass each
+of the above:<o:p></o:p></p>
+
+<p class=MsoListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE>SymmetricDecoder</span>&lt;T&gt;
+extends Decoder&lt;T, T&gt;<o:p></o:p></p>
+
+<p class=MsoListParagraphCxSpLast style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE>SymmetricEncoder</span>&lt;T&gt;
+extends Encoder&lt;T, T&gt;<o:p></o:p></p>
+
+<p class=MsoNormal>The following interfaces now subclass their respective
+symmetric interfaces:<o:p></o:p></p>
+
+<p class=MsoListParagraphCxSpFirst style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE>StringEncoder</span>&lt;String,
+String&gt;<o:p></o:p></p>
+
+<p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE>StringDecoder</span>&lt;String,
+String&gt;<o:p></o:p></p>
+
+<p class=MsoListParagraphCxSpMiddle style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE>BinaryEncoder</span>&lt; byte[],
+byte[]&gt;<o:p></o:p></p>
+
+<p class=MsoListParagraphCxSpLast style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span
+style='font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:
+Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span></span><![endif]><span class=SpellE>BinaryDecoder</span>&lt; byte[],
+byte[]&gt;</p>
+
+<h1>Class Changes</h1>
+
+<p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'>BinaryCodec</b></span>
+is now abstract and you must replace it with one of its subclasses: <span
+class=SpellE><b style='mso-bidi-font-weight:normal'>BinaryByteCodec</b></span>
+or <span class=SpellE><b style='mso-bidi-font-weight:normal'>BinaryCharCodec</b></span>.
+Option: We could leave this class concrete.<o:p></o:p></p>
+
+<p class=MsoNormal><b style='mso-bidi-font-weight:normal'>Hex</b> is now abstract
+and you must replace it with one of its subclasses: <span class=SpellE><b
+style='mso-bidi-font-weight:normal'>HexByteCodec</b></span> or <span
+class=SpellE><b style='mso-bidi-font-weight:normal'>HexCharCodec</b></span>. Option:
+We could leave this class concrete.<o:p></o:p></p>
+
+<p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'>QuotedPrintableCodec</b></span>
+is now abstract and you must replace it with one of its subclasses: <span
+class=SpellE><b style='mso-bidi-font-weight:normal'>QuotedPrintableBinaryCodec</b></span>
+or <span class=SpellE><b style='mso-bidi-font-weight:normal'>QuotedPrintableCharCodec</b></span>.
+Option: We could leave this class concrete.<o:p></o:p></p>
+
+<p class=MsoNormal><span class=SpellE><b style='mso-bidi-font-weight:normal'>URLCodec</b></span>
+is now abstract and you must replace it with one of its subclasses: <span
+class=SpellE><b style='mso-bidi-font-weight:normal'>URLByteCodec</b></span> or <span
+class=SpellE><b style='mso-bidi-font-weight:normal'>URLCharCodec</b></span>. Option:
+We could leave this class concrete.</p>
+
+<p class=MsoNormal>The abstract class names are not prefixed with Abstract for
+less ugly code that <span class=GramE>use</span> static method.</p>
+
+<p class=MsoNormal>We should move these static methods to their proper
+subclasses, further breaking compatibility.<o:p></o:p></p>
+
+<h1>Method Changes</h1>
+
+<p class=MsoNormal>The Encoder and Decoder interfaces now implement generics.
+This means that there no longer is encode and decode methods that take and
+return <b style='mso-bidi-font-weight:normal'>Objects</b>. Call sites must use
+the proper type, like <b style='mso-bidi-font-weight:normal'>String</b>, <span
+class=GramE><b style='mso-bidi-font-weight:normal'>char[</b></span><b
+style='mso-bidi-font-weight:normal'>]</b>, or <b style='mso-bidi-font-weight:
+normal'>byte[]</b>.</p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryDecoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryDecoder.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryDecoder.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryDecoder.java Fri Aug 12 19:50:56 2011
@@ -23,7 +23,7 @@ package org.apache.commons.codec;
  * @author Apache Software Foundation
  * @version $Id$
  */
-public interface BinaryDecoder extends Decoder {
+public interface BinaryDecoder extends SymmetricDecoder<byte[]> {
 
     /**
      * Decodes a byte array and returns the results as a byte array. 

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryEncoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryEncoder.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryEncoder.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/BinaryEncoder.java Fri Aug 12 19:50:56 2011
@@ -23,7 +23,7 @@ package org.apache.commons.codec;
  * @author Apache Software Foundation
  * @version $Id$
  */
-public interface BinaryEncoder extends Encoder {
+public interface BinaryEncoder extends SymmetricEncoder<byte[]> {
     
     /**
      * Encodes a byte array and return the encoded data

Added: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceDecoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceDecoder.java?rev=1157231&view=auto
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceDecoder.java (added)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceDecoder.java Fri Aug 12 19:50:56 2011
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.commons.codec;
+
+public interface CharSequenceDecoder extends SymmetricDecoder<CharSequence> {
+
+    /**
+     * Decodes a String and returns a String.
+     * 
+     * @param source
+     *            the String to decode
+     * 
+     * @return the encoded String
+     * 
+     * @throws DecoderException
+     *             thrown if there is an error condition during the Encoding process.
+     */
+    CharSequence decode(CharSequence source) throws DecoderException;
+
+}

Added: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceEncoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceEncoder.java?rev=1157231&view=auto
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceEncoder.java (added)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/CharSequenceEncoder.java Fri Aug 12 19:50:56 2011
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.commons.codec;
+
+public interface CharSequenceEncoder extends SymmetricEncoder<CharSequence> {
+
+    /**
+     * Encodes a String and returns a String.
+     * 
+     * @param source
+     *            the String to encode
+     * 
+     * @return the encoded String
+     * 
+     * @throws EncoderException
+     *             thrown if there is an error conidition during the Encoding process.
+     */
+    CharSequence encode(CharSequence source) throws EncoderException;
+
+}

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Decoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Decoder.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Decoder.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Decoder.java Fri Aug 12 19:50:56 2011
@@ -30,7 +30,7 @@ package org.apache.commons.codec;
  * @author Apache Software Foundation
  * @version $Id$
  */
-public interface Decoder {
+public interface Decoder<I, O> {
 
     /**
      * Decodes an "encoded" Object and returns a "decoded"
@@ -50,6 +50,6 @@ public interface Decoder {
      * method is null, a param cannot be cast to the
      * appropriate type for a specific encoder.
      */
-    Object decode(Object source) throws DecoderException;
+    O decode(I source) throws DecoderException;
 }  
 

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Encoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Encoder.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Encoder.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/Encoder.java Fri Aug 12 19:50:56 2011
@@ -26,21 +26,19 @@ package org.apache.commons.codec;
  * @author Apache Software Foundation
  * @version $Id$
  */
-public interface Encoder {
+public interface Encoder<I,O> {
     
     /**
-     * Encodes an "Object" and returns the encoded content 
-     * as an Object.  The Objects here may just be <code>byte[]</code>
-     * or <code>String</code>s depending on the implementation used.
-     *   
-     * @param source An object ot encode
+     * Encodes an "Object" and returns the encoded content as an Object. The Objects here may just be <code>byte[]</code> or
+     * <code>String</code>s depending on the implementation used.
+     * 
+     * @param source
+     *            An object ot encode
      * 
      * @return An "encoded" Object
      * 
-     * @throws EncoderException an encoder exception is
-     *  thrown if the encoder experiences a failure
-     *  condition during the encoding process.
+     * @throws EncoderException
+     *             an encoder exception is thrown if the encoder experiences a failure condition during the encoding process.
      */
-    Object encode(Object source) throws EncoderException;
-}  
-
+    O encode(I source) throws EncoderException;
+}

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringDecoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringDecoder.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringDecoder.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringDecoder.java Fri Aug 12 19:50:56 2011
@@ -23,7 +23,7 @@ package org.apache.commons.codec;
  * @author Apache Software Foundation
  * @version $Id$
  */
-public interface StringDecoder extends Decoder {
+public interface StringDecoder extends SymmetricDecoder<String> {
     
     /**
      * Decodes a String and returns a String.

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoder.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoder.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoder.java Fri Aug 12 19:50:56 2011
@@ -23,7 +23,7 @@ package org.apache.commons.codec;
  * @author Apache Software Foundation
  * @version $Id$
  */
-public interface StringEncoder extends Encoder {
+public interface StringEncoder extends SymmetricEncoder<String> {
     
     /**
      * Encodes a String and returns a String.

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoderComparator.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoderComparator.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoderComparator.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/StringEncoderComparator.java Fri Aug 12 19:50:56 2011
@@ -27,7 +27,7 @@ import java.util.Comparator;
  * @author Apache Software Foundation
  * @version $Id$
  */
-public class StringEncoderComparator implements Comparator {
+public class StringEncoderComparator implements Comparator<String> {
 
     /**
      * Internal encoder instance.
@@ -45,25 +45,25 @@ public class StringEncoderComparator imp
     }
 
     /**
-     * Compares two strings based not on the strings themselves, but on an encoding of the two strings using the
-     * StringEncoder this Comparator was created with.
+     * Compares two strings based not on the strings themselves, but on an encoding of the two strings using the StringEncoder this
+     * Comparator was created with.
      * 
      * If an {@link EncoderException} is encountered, return <code>0</code>.
      * 
      * @param o1
-     *            the object to compare
+     *            the String to compare
      * @param o2
-     *            the object to compare to
+     *            the String to compare to
      * @return the Comparable.compareTo() return code or 0 if an encoding error was caught.
      * @see Comparable
      */
-    public int compare(Object o1, Object o2) {
+    public int compare(String o1, String o2) {
 
         int compareCode = 0;
 
         try {
-            Comparable s1 = (Comparable) this.stringEncoder.encode(o1);
-            Comparable s2 = (Comparable) this.stringEncoder.encode(o2);
+            String s1 = this.stringEncoder.encode(o1);
+            String s2 = this.stringEncoder.encode(o2);
             compareCode = s1.compareTo(s2);
         } catch (EncoderException ee) {
             compareCode = 0;

Added: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricDecoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricDecoder.java?rev=1157231&view=auto
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricDecoder.java (added)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricDecoder.java Fri Aug 12 19:50:56 2011
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.commons.codec;
+
+/**
+ * A decoder where the input and output types are identical.
+ * 
+ * @param <T>
+ *            the input and output type
+ */
+public interface SymmetricDecoder<T> extends Decoder<T, T> {
+    // empty
+}

Added: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricEncoder.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricEncoder.java?rev=1157231&view=auto
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricEncoder.java (added)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/SymmetricEncoder.java Fri Aug 12 19:50:56 2011
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.commons.codec;
+
+/**
+ * An encoder where the input and output types are identical.
+ * 
+ * @param <T>
+ *            the input and output type
+ */
+public interface SymmetricEncoder<T> extends Encoder<T, T> {
+    // empty
+}

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BaseNCodec.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BaseNCodec.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BaseNCodec.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BaseNCodec.java Fri Aug 12 19:50:56 2011
@@ -19,8 +19,6 @@ package org.apache.commons.codec.binary;
 
 import org.apache.commons.codec.BinaryDecoder;
 import org.apache.commons.codec.BinaryEncoder;
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.EncoderException;
 
 /**
  * Abstract superclass for Base-N encoders and decoders.
@@ -248,23 +246,6 @@ public abstract class BaseNCodec impleme
     }
 
     /**
-     * Encodes an Object using the Base-N algorithm. This method is provided in order to satisfy the requirements of the
-     * Encoder interface, and will throw an EncoderException if the supplied object is not of type byte[].
-     *
-     * @param pObject
-     *            Object to encode
-     * @return An object (of type byte[]) containing the Base-N encoded data which corresponds to the byte[] supplied.
-     * @throws EncoderException
-     *             if the parameter supplied is not of type byte[]
-     */
-    public Object encode(Object pObject) throws EncoderException {
-        if (!(pObject instanceof byte[])) {
-            throw new EncoderException("Parameter supplied to Base-N encode is not a byte[]");
-        }
-        return encode((byte[]) pObject);
-    }
-
-    /**
      * Encodes a byte[] containing binary data, into a String containing characters in the Base-N alphabet.
      *
      * @param pArray
@@ -276,26 +257,6 @@ public abstract class BaseNCodec impleme
     }
 
     /**
-     * Decodes an Object using the Base-N algorithm. This method is provided in order to satisfy the requirements of the
-     * Decoder interface, and will throw a DecoderException if the supplied object is not of type byte[] or String.
-     *
-     * @param pObject
-     *            Object to decode
-     * @return An object (of type byte[]) containing the binary data which corresponds to the byte[] or String supplied.
-     * @throws DecoderException
-     *             if the parameter supplied is not of type byte[]
-     */
-    public Object decode(Object pObject) throws DecoderException {        
-        if (pObject instanceof byte[]) {
-            return decode((byte[]) pObject);
-        } else if (pObject instanceof String) {
-            return decode((String) pObject);
-        } else {
-            throw new DecoderException("Parameter supplied to Base-N decode is not a byte[] or a String");
-        }
-    }
-
-    /**
      * Decodes a String containing characters in the Base-N alphabet.
      *
      * @param pArray

Added: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryByteCodec.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryByteCodec.java?rev=1157231&view=auto
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryByteCodec.java (added)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryByteCodec.java Fri Aug 12 19:50:56 2011
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.commons.codec.binary;
+
+import org.apache.commons.codec.BinaryEncoder;
+
+public class BinaryByteCodec extends BinaryCodec implements BinaryEncoder {
+
+    /**
+     * Converts an array of raw binary data into an array of ASCII 0 and 1 characters.
+     * 
+     * @param raw
+     *            the raw binary data to convert
+     * @return 0 and 1 ASCII character bytes one for each bit of the argument
+     * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
+     */
+    public byte[] encode(byte[] raw) {
+        return toAsciiBytes(raw);
+    }
+
+}

Added: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCharCodec.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCharCodec.java?rev=1157231&view=auto
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCharCodec.java (added)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCharCodec.java Fri Aug 12 19:50:56 2011
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.commons.codec.binary;
+
+import org.apache.commons.codec.Encoder;
+
+public class BinaryCharCodec extends BinaryCodec implements Encoder<byte[], char[]> {
+
+    /**
+     * Converts an array of raw binary data into an array of ASCII 0 and 1 chars.
+     * 
+     * @param raw
+     *            the raw binary data to convert
+     * @return 0 and 1 ASCII character chars one for each bit of the argument
+     * @see org.apache.commons.codec.Encoder#encode(Object)
+     */
+    public char[] encode(byte[] raw) {
+        return toAsciiChars(raw);
+    }
+
+}

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCodec.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCodec.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCodec.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/BinaryCodec.java Fri Aug 12 19:50:56 2011
@@ -18,9 +18,6 @@
 package org.apache.commons.codec.binary;
 
 import org.apache.commons.codec.BinaryDecoder;
-import org.apache.commons.codec.BinaryEncoder;
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.EncoderException;
 
 /**
  * Converts between byte arrays and strings of "0"s and "1"s.
@@ -32,7 +29,7 @@ import org.apache.commons.codec.EncoderE
  * @since 1.3
  * @version $Id$
  */
-public class BinaryCodec implements BinaryDecoder, BinaryEncoder {
+public abstract class BinaryCodec implements BinaryDecoder {
     /*
      * tried to avoid using ArrayUtils to minimize dependencies while using these empty arrays - dep is just not worth
      * it.
@@ -70,32 +67,15 @@ public class BinaryCodec implements Bina
     private static final int[] BITS = {BIT_0, BIT_1, BIT_2, BIT_3, BIT_4, BIT_5, BIT_6, BIT_7};
 
     /**
-     * Converts an array of raw binary data into an array of ASCII 0 and 1 characters.
+     * Decodes a byte array where each byte represents an ASCII '0' or '1'.
      * 
-     * @param raw
-     *                  the raw binary data to convert
-     * @return 0 and 1 ASCII character bytes one for each bit of the argument
-     * @see org.apache.commons.codec.BinaryEncoder#encode(byte[])
+     * @param ascii
+     *                  each byte represents an ASCII '0' or '1'
+     * @return the raw encoded binary where each bit corresponds to a byte in the byte array argument
+     * @see org.apache.commons.codec.Decoder#decode(Object)
      */
-    public byte[] encode(byte[] raw) {
-        return toAsciiBytes(raw);
-    }
-
-    /**
-     * Converts an array of raw binary data into an array of ASCII 0 and 1 chars.
-     * 
-     * @param raw
-     *                  the raw binary data to convert
-     * @return 0 and 1 ASCII character chars one for each bit of the argument
-     * @throws EncoderException
-     *                  if the argument is not a byte[]
-     * @see org.apache.commons.codec.Encoder#encode(Object)
-     */
-    public Object encode(Object raw) throws EncoderException {
-        if (!(raw instanceof byte[])) {
-            throw new EncoderException("argument not a byte array");
-        }
-        return toAsciiChars((byte[]) raw);
+    public byte[] decode(byte[] ascii) {
+        return fromAscii(ascii);
     }
 
     /**
@@ -104,24 +84,10 @@ public class BinaryCodec implements Bina
      * @param ascii
      *                  each byte represents an ASCII '0' or '1'
      * @return the raw encoded binary where each bit corresponds to a byte in the byte array argument
-     * @throws DecoderException
-     *                  if argument is not a byte[], char[] or String
      * @see org.apache.commons.codec.Decoder#decode(Object)
      */
-    public Object decode(Object ascii) throws DecoderException {
-        if (ascii == null) {
-            return EMPTY_BYTE_ARRAY;
-        }
-        if (ascii instanceof byte[]) {
-            return fromAscii((byte[]) ascii);
-        }
-        if (ascii instanceof char[]) {
-            return fromAscii((char[]) ascii);
-        }
-        if (ascii instanceof String) {
-            return fromAscii(((String) ascii).toCharArray());
-        }
-        throw new DecoderException("argument not a byte array");
+    public byte[] decode(char[] ascii) {
+        return fromAscii(ascii);
     }
 
     /**
@@ -132,8 +98,11 @@ public class BinaryCodec implements Bina
      * @return the raw encoded binary where each bit corresponds to a byte in the byte array argument
      * @see org.apache.commons.codec.Decoder#decode(Object)
      */
-    public byte[] decode(byte[] ascii) {
-        return fromAscii(ascii);
+    public byte[] decode(String ascii) {
+        if (ascii == null) {
+            return EMPTY_BYTE_ARRAY;
+        }
+        return fromAscii(ascii.toCharArray());
     }
 
     /**
@@ -293,4 +262,4 @@ public class BinaryCodec implements Bina
     public static String toAsciiString(byte[] raw) {
         return new String(toAsciiChars(raw));
     }
-}
+}
\ No newline at end of file

Modified: commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/Hex.java
URL: http://svn.apache.org/viewvc/commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/Hex.java?rev=1157231&r1=1157230&r2=1157231&view=diff
==============================================================================
--- commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/Hex.java (original)
+++ commons/proper/codec/branches/generics/src/java/org/apache/commons/codec/binary/Hex.java Fri Aug 12 19:50:56 2011
@@ -20,7 +20,6 @@ package org.apache.commons.codec.binary;
 import java.io.UnsupportedEncodingException;
 
 import org.apache.commons.codec.BinaryDecoder;
-import org.apache.commons.codec.BinaryEncoder;
 import org.apache.commons.codec.CharEncoding;
 import org.apache.commons.codec.DecoderException;
 import org.apache.commons.codec.EncoderException;
@@ -33,7 +32,7 @@ import org.apache.commons.codec.EncoderE
  * @author Apache Software Foundation
  * @version $Id$
  */
-public class Hex implements BinaryEncoder, BinaryDecoder {
+public abstract class Hex implements BinaryDecoder {
 
     /**
      * Default charset name is {@link CharEncoding#UTF_8}
@@ -45,17 +44,17 @@ public class Hex implements BinaryEncode
     /**
      * Used to build output as Hex
      */
-    private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+    private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
 
     /**
      * Used to build output as Hex
      */
-    private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+    private static final char[] DIGITS_UPPER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 
     /**
-     * Converts an array of characters representing hexadecimal values into an array of bytes of those same values. The
-     * returned array will be half the length of the passed array, as it takes two characters to represent any given
-     * byte. An exception is thrown if the passed char array has an odd number of elements.
+     * Converts an array of characters representing hexadecimal values into an array of bytes of those same values. The returned array will
+     * be half the length of the passed array, as it takes two characters to represent any given byte. An exception is thrown if the passed
+     * char array has an odd number of elements.
      * 
      * @param data
      *            An array of characters containing hexadecimal digits
@@ -86,9 +85,8 @@ public class Hex implements BinaryEncode
     }
 
     /**
-     * Converts an array of bytes into an array of characters representing the hexadecimal values of each byte in order.
-     * The returned array will be double the length of the passed array, as it takes two characters to represent any
-     * given byte.
+     * Converts an array of bytes into an array of characters representing the hexadecimal values of each byte in order. The returned array
+     * will be double the length of the passed array, as it takes two characters to represent any given byte.
      * 
      * @param data
      *            a byte[] to convert to Hex characters
@@ -99,9 +97,8 @@ public class Hex implements BinaryEncode
     }
 
     /**
-     * Converts an array of bytes into an array of characters representing the hexadecimal values of each byte in order.
-     * The returned array will be double the length of the passed array, as it takes two characters to represent any
-     * given byte.
+     * Converts an array of bytes into an array of characters representing the hexadecimal values of each byte in order. The returned array
+     * will be double the length of the passed array, as it takes two characters to represent any given byte.
      * 
      * @param data
      *            a byte[] to convert to Hex characters
@@ -115,9 +112,8 @@ public class Hex implements BinaryEncode
     }
 
     /**
-     * Converts an array of bytes into an array of characters representing the hexadecimal values of each byte in order.
-     * The returned array will be double the length of the passed array, as it takes two characters to represent any
-     * given byte.
+     * Converts an array of bytes into an array of characters representing the hexadecimal values of each byte in order. The returned array
+     * will be double the length of the passed array, as it takes two characters to represent any given byte.
      * 
      * @param data
      *            a byte[] to convert to Hex characters
@@ -138,8 +134,8 @@ public class Hex implements BinaryEncode
     }
 
     /**
-     * Converts an array of bytes into a String representing the hexadecimal values of each byte in order. The returned
-     * String will be double the length of the passed array, as it takes two characters to represent any given byte.
+     * Converts an array of bytes into a String representing the hexadecimal values of each byte in order. The returned String will be
+     * double the length of the passed array, as it takes two characters to represent any given byte.
      * 
      * @param data
      *            a byte[] to convert to Hex characters
@@ -182,18 +178,18 @@ public class Hex implements BinaryEncode
     /**
      * Creates a new codec with the given charset name.
      * 
-     * @param csName
+     * @param charsetName
      *            the charset name.
      * @since 1.4
      */
-    public Hex(String csName) {
-        this.charsetName = csName;
+    public Hex(String charsetName) {
+        this.charsetName = charsetName;
     }
 
     /**
-     * Converts an array of character bytes representing hexadecimal values into an array of bytes of those same values.
-     * The returned array will be half the length of the passed array, as it takes two characters to represent any given
-     * byte. An exception is thrown if the passed char array has an odd number of elements.
+     * Converts an array of character bytes representing hexadecimal values into an array of bytes of those same values. The returned array
+     * will be half the length of the passed array, as it takes two characters to represent any given byte. An exception is thrown if the
+     * passed char array has an odd number of elements.
      * 
      * @param array
      *            An array of character bytes containing hexadecimal digits
@@ -211,21 +207,20 @@ public class Hex implements BinaryEncode
     }
 
     /**
-     * Converts a String or an array of character bytes representing hexadecimal values into an array of bytes of those
-     * same values. The returned array will be half the length of the passed String or array, as it takes two characters
-     * to represent any given byte. An exception is thrown if the passed char array has an odd number of elements.
+     * Converts a String or an array of character bytes representing hexadecimal values into an array of bytes of those same values. The
+     * returned array will be half the length of the passed String or array, as it takes two characters to represent any given byte. An
+     * exception is thrown if the passed char array has an odd number of elements.
      * 
      * @param object
      *            A String or, an array of character bytes containing hexadecimal digits
      * @return A byte array containing binary data decoded from the supplied byte array (representing characters).
      * @throws DecoderException
-     *             Thrown if an odd number of characters is supplied to this function or the object is not a String or
-     *             char[]
+     *             Thrown if an odd number of characters is supplied to this function or the object is not a String or char[]
      * @see #decodeHex(char[])
      */
-    public Object decode(Object object) throws DecoderException {
+    public byte[] decode(String object) throws DecoderException {
         try {
-            char[] charArray = object instanceof String ? ((String) object).toCharArray() : (char[]) object;
+            char[] charArray = object.toCharArray();
             return decodeHex(charArray);
         } catch (ClassCastException e) {
             throw new DecoderException(e.getMessage(), e);
@@ -233,33 +228,30 @@ public class Hex implements BinaryEncode
     }
 
     /**
-     * Converts an array of bytes into an array of bytes for the characters representing the hexadecimal values of each
-     * byte in order. The returned array will be double the length of the passed array, as it takes two characters to
-     * represent any given byte.
-     * <p>
-     * The conversion from hexadecimal characters to the returned bytes is performed with the charset named by
-     * {@link #getCharsetName()}.
-     * </p>
+     * Converts a String or an array of character bytes representing hexadecimal values into an array of bytes of those same values. The
+     * returned array will be half the length of the passed String or array, as it takes two characters to represent any given byte. An
+     * exception is thrown if the passed char array has an odd number of elements.
      * 
-     * @param array
-     *            a byte[] to convert to Hex characters
-     * @return A byte[] containing the bytes of the hexadecimal characters
-     * @throws IllegalStateException
-     *             if the charsetName is invalid. This API throws {@link IllegalStateException} instead of
-     *             {@link UnsupportedEncodingException} for backward compatibility.
-     * @see #encodeHex(byte[])
+     * @param object
+     *            A String or, an array of character bytes containing hexadecimal digits
+     * @return A byte array containing binary data decoded from the supplied byte array (representing characters).
+     * @throws DecoderException
+     *             Thrown if an odd number of characters is supplied to this function or the object is not a String or char[]
+     * @see #decodeHex(char[])
      */
-    public byte[] encode(byte[] array) {
-        return StringUtils.getBytesUnchecked(encodeHexString(array), getCharsetName());
+    public byte[] decode(char[] charArray) throws DecoderException {
+        try {
+            return decodeHex(charArray);
+        } catch (ClassCastException e) {
+            throw new DecoderException(e.getMessage(), e);
+        }
     }
 
     /**
-     * Converts a String or an array of bytes into an array of characters representing the hexadecimal values of each
-     * byte in order. The returned array will be double the length of the passed String or array, as it takes two
-     * characters to represent any given byte.
+     * Converts a String or an array of bytes into an array of characters representing the hexadecimal values of each byte in order. The
+     * returned array will be double the length of the passed String or array, as it takes two characters to represent any given byte.
      * <p>
-     * The conversion from hexadecimal characters to bytes to be encoded to performed with the charset named by
-     * {@link #getCharsetName()}.
+     * The conversion from hexadecimal characters to bytes to be encoded to performed with the charset named by {@link #getCharsetName()}.
      * </p>
      * 
      * @param object
@@ -269,12 +261,9 @@ public class Hex implements BinaryEncode
      *             Thrown if the given object is not a String or byte[]
      * @see #encodeHex(byte[])
      */
-    public Object encode(Object object) throws EncoderException {
+    public char[] encode(String object) throws EncoderException {
         try {
-            byte[] byteArray = object instanceof String ? ((String) object).getBytes(getCharsetName()) : (byte[]) object;
-            return encodeHex(byteArray);
-        } catch (ClassCastException e) {
-            throw new EncoderException(e.getMessage(), e);
+            return encodeHex(object.getBytes(getCharsetName()));
         } catch (UnsupportedEncodingException e) {
             throw new EncoderException(e.getMessage(), e);
         }



Mime
View raw message