fop 1.1

## org.apache.fop.pdf
Class PDFCMap

    java.lang.Object
      org.apache.fop.pdf.PDFObject
          org.apache.fop.pdf.AbstractPDFStream
              org.apache.fop.pdf.PDFStream
                  org.apache.fop.pdf.PDFCMap

All Implemented Interfaces:
  PDFWritable

Direct Known Subclasses:
  PDFToUnicodeCMap

    public class PDFCMap

extends PDFStream

Class representing the CMap encodings. CMaps are defined in the "Predefined CJK CMap names" table. In section 5.6.4 of PDF reference 1.4.

Field Summary
`protected java.lang.Object` `base` base CMap (String or PDFStream)
`static java.lang.String` `ENC_83PV_RKSJ_H` 83pv-RKSJ-H Mac OS, JIS X 0208 character set with KanjiTalk6 extensions, Shift-JIS encoding, Script Manager code 1
`static java.lang.String` `ENC_90MS_RKSJ_H` 90ms-RKSJ-H Microsoft Code Page 932 (lfCharSet 0x80), JIS X 0208 character set with NEC and IBM extensions
`static java.lang.String` `ENC_90MS_RKSJ_V` 90ms-RKSJ-V Vertical version of 90ms-RKSJ-H
`static java.lang.String` `ENC_90MSP_RKSJ_H` 90msp-RKSJ-H Same as 90ms-RKSJ-H, but replaces half-width Latin characters with proportional forms
`static java.lang.String` `ENC_90MSP_RKSJ_V` 90msp-RKSJ-V Vertical version of 90msp-RKSJ-H
`static java.lang.String` `ENC_90PV_RKSJ_H` 90pv-RKSJ-H Mac OS, JIS X 0208 character set with KanjiTalk7 extensions, Shift-JIS encoding, Script Manager code 1
`static java.lang.String` `ENC_ADD_RKSJ_H` Add-RKSJ-H JIS X 0208 character set with Fujitsu FMR extensions, Shift-JIS encoding
`static java.lang.String` `ENC_ADD_RKSJ_V` Add-RKSJ-V Vertical version of Add-RKSJ-H
`static java.lang.String` `ENC_B5PC_H` B5pc-H Mac OS, Big Five character set, Big Five encoding, Script Manager code 2
`static java.lang.String` `ENC_B5PC_V` B5pc-V Vertical version of B5pc-H
`static java.lang.String` `ENC_CNS_EUC_H` CNS-EUC-H CNS 11643-1992 character set, EUC-TW encoding
`static java.lang.String` `ENC_CNS_EUC_V` CNS-EUC-V Vertical version of CNS-EUC-H
`static java.lang.String` `ENC_ETEN_B5_H` ETen-B5-H Microsoft Code Page 950 (lfCharSet 0x88), Big Five character set with ETen extensions
`static java.lang.String` `ENC_ETEN_B5_V` ETen-B5-V Vertical version of ETen-B5-H
`static java.lang.String` `ENC_ETENMS_B5_H` ETenms-B5-H Same as ETen-B5-H, but replaces half-width Latin characters with proportional forms
`static java.lang.String` `ENC_ETENMS_B5_V` ETenms-B5-V Vertical version of ETenms-B5-H
`static java.lang.String` `ENC_EUC_H` EUC-H JIS X 0208 character set, EUC-JP encoding
`static java.lang.String` `ENC_EUC_V` EUC-V Vertical version of EUC-H
`static java.lang.String` `ENC_EXT_RKSJ_H` Ext-RKSJ-H JIS C 6226 (JIS78) character set with NEC extensions, Shift-JIS encoding
`static java.lang.String` `ENC_EXT_RKSJ_V` Ext-RKSJ-V Vertical version of Ext-RKSJ-H
`static java.lang.String` `ENC_GB_EUC_H` GB-EUC-H Microsoft Code Page 936 (lfCharSet 0x86), GB 2312-80 character set, EUC-CN encoding
`static java.lang.String` `ENC_GB_EUC_V` GB-EUC-V Vertical version of GB-EUC-H
`static java.lang.String` `ENC_GBK_EUC_H` GBK-EUC-H Microsoft Code Page 936 (lfCharSet 0x86), GBK character set, GBK encoding
`static java.lang.String` `ENC_GBK_EUC_V` GBK-EUC-V Vertical version of GBK-EUC-H
`static java.lang.String` `ENC_GBK2K_H` GBK2K-H GB 18030-2000 character set, mixed 1-, 2-, and 4-byte encoding
`static java.lang.String` `ENC_GBK2K_V` GBK2K-V Vertical version of GBK2K-H
`static java.lang.String` `ENC_GBKP_EUC_H` GBKp-EUC-H Same as GBK-EUC-H, but replaces half-width Latin characters with proportional forms and maps character code 0x24 to a dollar sign ($) instead of a yuan symbol
`static java.lang.String` `ENC_GBKP_EUC_V` GBKp-EUC-V Vertical version of GBKp-EUC-H
`static java.lang.String` `ENC_GBPC_EUC_H` GBpc-EUC-H Mac OS, GB 2312-80 character set, EUC-CN encoding, Script Manager code 19
`static java.lang.String` `ENC_GBPC_EUC_V` GBpc-EUC-V Vertical version of GBpc-EUC-H
`static java.lang.String` `ENC_H` H JIS X 0208 character set, ISO-2022-JP encoding
`static java.lang.String` `ENC_HKSCS_B5_H` HKscs-B5-H Hong Kong SCS, an extension to the Big Five character set and encoding
`static java.lang.String` `ENC_HKSCS_B5_V` HKscs-B5-V Vertical version of HKscs-B5-H
`static java.lang.String` `ENC_IDENTITY_H` Identity-H The horizontal identity mapping for 2-byte CIDs; may be used with CIDFonts using any Registry, Ordering, and Supplement values.
`static java.lang.String` `ENC_IDENTTITY_V` Identity-V Vertical version of Identity-H.
`static java.lang.String` `ENC_KSC_EUC_H` KSC-EUC-H KS X 1001:1992 character set, EUC-KR encoding
`static java.lang.String` `ENC_KSC_EUC_V` KSC-EUC-V Vertical version of KSC-EUC-H
`static java.lang.String` `ENC_KSCMS_UHC_H` KSCms-UHC-H Microsoft Code Page 949 (lfCharSet 0x81), KS X 1001:1992 character set plus 8822 additional hangul, Unified Hangul Code (UHC) encoding
`static java.lang.String` `ENC_KSCMS_UHC_HW_H` KSCms-UHC-HW-H Same as KSCms-UHC-H, but replaces proportional Latin characters with half-width forms
`static java.lang.String` `ENC_KSCMS_UHC_HW_V` KSCms-UHC-HW-V Vertical version of KSCms-UHC-HW-H
`static java.lang.String` `ENC_KSCMS_UHC_V` KSCms-UHC-V Vertical version of KSCms-UHC-H
`static java.lang.String` `ENC_KSCPC_EUC_H` KSCpc-EUC-H Mac OS, KS X 1001:1992 character set with Mac OS KH extensions, Script Manager Code 3
`static java.lang.String` `ENC_UNICNS_UCS2_H` UniCNS-UCS2-H Unicode (UCS-2) encoding for the Adobe-CNS1 character collection
`static java.lang.String` `ENC_UNICNS_UCS2_V` UniCNS-UCS2-V Vertical version of UniCNS-UCS2-H
`static java.lang.String` `ENC_UNIGB_UCS2_H` UniGB-UCS2-H Unicode (UCS-2) encoding for the Adobe-GB1 character collection
`static java.lang.String` `ENC_UNIGB_UCS2_V` UniGB-UCS2-V Vertical version of UniGB-UCS2-H
`static java.lang.String` `ENC_UNIJIS_UCS2_H` UniJIS-UCS2-H Unicode (UCS-2) encoding for the Adobe-Japan1 character collection
`static java.lang.String` `ENC_UNIJIS_UCS2_HW_H` UniJIS-UCS2-HW-H Same as UniJIS-UCS2-H, but replaces proportional Latin characters with half-width forms
`static java.lang.String` `ENC_UNIJIS_UCS2_HW_V` UniJIS-UCS2-HW-V Vertical version of UniJIS-UCS2-HW-H
`static java.lang.String` `ENC_UNIJIS_UCS2_V` UniJIS-UCS2-V Vertical version of UniJIS-UCS2-H
`static java.lang.String` `ENC_UNIKSC_UCS2_H` UniKS-UCS2-H Unicode (UCS-2) encoding for the Adobe-Korea1 character collection
`static java.lang.String` `ENC_UNIKSC_UCS2_V` UniKS-UCS2-V Vertical version of UniKS-UCS2-H
`static java.lang.String` `ENC_V` V Vertical version of H
`protected java.lang.String` `name` /CMapName attribute, one of the predefined constants
`protected PDFCIDSystemInfo` `sysInfo` /CIDSystemInfo attribute
`protected byte` `wMode` font's writing direction
`static byte` `WMODE_HORIZONTAL` horizontal writing direction
`static byte` `WMODE_VERTICAL` vertical writing direction

Fields inherited from class org.apache.fop.pdf.PDFStream
`data`

Fields inherited from class org.apache.fop.pdf.PDFObject
`log`

Constructor Summary
`PDFCMap(java.lang.String name, PDFCIDSystemInfo sysInfo)` create the /CMap object

Method Summary
`protected CMapBuilder` `createCMapBuilder(java.io.Writer writer)` Creates the CMapBuilder that will build the CMap's content.
`int` `output(java.io.OutputStream stream)` Overload the base object method so we don't have to copy byte arrays around so much Write the PDF represention of this object
`void` `setUseCMap(PDFStream base)` set the base CMap
`void` `setUseCMap(java.lang.String base)` set the base CMap
`void` `setWMode(byte mode)` set the writing direction

Methods inherited from class org.apache.fop.pdf.PDFStream
`add, getBufferOutputStream, getBufferWriter, getDataLength, getSizeHint, outputRawStreamData, setData`

Methods inherited from class org.apache.fop.pdf.AbstractPDFStream
`encodeAndWriteStream, encodeStream, get, getDefaultFilterName, getDictionary, getFilterList, multipleFiltersAllowed, outputStreamData, populateStreamDict, prepareImplicitFilters, put, setDocument, setupFilterList`

Methods inherited from class org.apache.fop.pdf.PDFObject
`contentEquals, encode, encodeBinaryToHexString, encodeString, encodeText, formatObject, getDocument, getDocumentSafely, getGeneration, getObjectID, getObjectNumber, getParent, hasObjectNumber, makeReference, outputInline, referencePDF, setObjectNumber, setParent, toPDF, toPDFString`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### ENC_GB_EUC_H

    public static final java.lang.String ENC_GB_EUC_H

  GB-EUC-H Microsoft Code Page 936 (lfCharSet 0x86), GB 2312-80 character set, EUC-CN encoding

  See Also:
    Constant Field Values

### ENC_GB_EUC_V

    public static final java.lang.String ENC_GB_EUC_V

  GB-EUC-V Vertical version of GB-EUC-H

  See Also:
    Constant Field Values

### ENC_GBPC_EUC_H

    public static final java.lang.String ENC_GBPC_EUC_H

  GBpc-EUC-H Mac OS, GB 2312-80 character set, EUC-CN encoding, Script Manager code 19

  See Also:
    Constant Field Values

### ENC_GBPC_EUC_V

    public static final java.lang.String ENC_GBPC_EUC_V

  GBpc-EUC-V Vertical version of GBpc-EUC-H

  See Also:
    Constant Field Values

### ENC_GBK_EUC_H

    public static final java.lang.String ENC_GBK_EUC_H

  GBK-EUC-H Microsoft Code Page 936 (lfCharSet 0x86), GBK character set, GBK encoding

  See Also:
    Constant Field Values

### ENC_GBK_EUC_V

    public static final java.lang.String ENC_GBK_EUC_V

  GBK-EUC-V Vertical version of GBK-EUC-H

  See Also:
    Constant Field Values

### ENC_GBKP_EUC_H

    public static final java.lang.String ENC_GBKP_EUC_H

  GBKp-EUC-H Same as GBK-EUC-H, but replaces half-width Latin characters with proportional forms and maps character code 0x24 to a dollar sign ($) instead of a yuan symbol

  See Also:
    Constant Field Values

### ENC_GBKP_EUC_V

    public static final java.lang.String ENC_GBKP_EUC_V

  GBKp-EUC-V Vertical version of GBKp-EUC-H

  See Also:
    Constant Field Values

### ENC_GBK2K_H

    public static final java.lang.String ENC_GBK2K_H

  GBK2K-H GB 18030-2000 character set, mixed 1-, 2-, and 4-byte encoding

  See Also:
    Constant Field Values

### ENC_GBK2K_V

    public static final java.lang.String ENC_GBK2K_V

  GBK2K-V Vertical version of GBK2K-H

  See Also:
    Constant Field Values

### ENC_UNIGB_UCS2_H

    public static final java.lang.String ENC_UNIGB_UCS2_H

  UniGB-UCS2-H Unicode (UCS-2) encoding for the Adobe-GB1 character collection

  See Also:
    Constant Field Values

### ENC_UNIGB_UCS2_V

    public static final java.lang.String ENC_UNIGB_UCS2_V

  UniGB-UCS2-V Vertical version of UniGB-UCS2-H

  See Also:
    Constant Field Values

### ENC_B5PC_H

    public static final java.lang.String ENC_B5PC_H

  B5pc-H Mac OS, Big Five character set, Big Five encoding, Script Manager code 2

  See Also:
    Constant Field Values

### ENC_B5PC_V

    public static final java.lang.String ENC_B5PC_V

  B5pc-V Vertical version of B5pc-H

  See Also:
    Constant Field Values

### ENC_HKSCS_B5_H

    public static final java.lang.String ENC_HKSCS_B5_H

  HKscs-B5-H Hong Kong SCS, an extension to the Big Five character set and encoding

  See Also:
    Constant Field Values

### ENC_HKSCS_B5_V

    public static final java.lang.String ENC_HKSCS_B5_V

  HKscs-B5-V Vertical version of HKscs-B5-H

  See Also:
    Constant Field Values

### ENC_ETEN_B5_H

    public static final java.lang.String ENC_ETEN_B5_H

  ETen-B5-H Microsoft Code Page 950 (lfCharSet 0x88), Big Five character set with ETen extensions

  See Also:
    Constant Field Values

### ENC_ETEN_B5_V

    public static final java.lang.String ENC_ETEN_B5_V

  ETen-B5-V Vertical version of ETen-B5-H

  See Also:
    Constant Field Values

### ENC_ETENMS_B5_H

    public static final java.lang.String ENC_ETENMS_B5_H

  ETenms-B5-H Same as ETen-B5-H, but replaces half-width Latin characters with proportional forms

  See Also:
    Constant Field Values

### ENC_ETENMS_B5_V

    public static final java.lang.String ENC_ETENMS_B5_V

  ETenms-B5-V Vertical version of ETenms-B5-H

  See Also:
    Constant Field Values

### ENC_CNS_EUC_H

    public static final java.lang.String ENC_CNS_EUC_H

  CNS-EUC-H CNS 11643-1992 character set, EUC-TW encoding

  See Also:
    Constant Field Values

### ENC_CNS_EUC_V

    public static final java.lang.String ENC_CNS_EUC_V

  CNS-EUC-V Vertical version of CNS-EUC-H

  See Also:
    Constant Field Values

### ENC_UNICNS_UCS2_H

    public static final java.lang.String ENC_UNICNS_UCS2_H

  UniCNS-UCS2-H Unicode (UCS-2) encoding for the Adobe-CNS1 character collection

  See Also:
    Constant Field Values

### ENC_UNICNS_UCS2_V

    public static final java.lang.String ENC_UNICNS_UCS2_V

  UniCNS-UCS2-V Vertical version of UniCNS-UCS2-H

  See Also:
    Constant Field Values

### ENC_83PV_RKSJ_H

    public static final java.lang.String ENC_83PV_RKSJ_H

  83pv-RKSJ-H Mac OS, JIS X 0208 character set with KanjiTalk6 extensions, Shift-JIS encoding, Script Manager code 1

  See Also:
    Constant Field Values

### ENC_90MS_RKSJ_H

    public static final java.lang.String ENC_90MS_RKSJ_H

  90ms-RKSJ-H Microsoft Code Page 932 (lfCharSet 0x80), JIS X 0208 character set with NEC and IBM extensions

  See Also:
    Constant Field Values

### ENC_90MS_RKSJ_V

    public static final java.lang.String ENC_90MS_RKSJ_V

  90ms-RKSJ-V Vertical version of 90ms-RKSJ-H

  See Also:
    Constant Field Values

### ENC_90MSP_RKSJ_H

    public static final java.lang.String ENC_90MSP_RKSJ_H

  90msp-RKSJ-H Same as 90ms-RKSJ-H, but replaces half-width Latin characters with proportional forms

  See Also:
    Constant Field Values

### ENC_90MSP_RKSJ_V

    public static final java.lang.String ENC_90MSP_RKSJ_V

  90msp-RKSJ-V Vertical version of 90msp-RKSJ-H

  See Also:
    Constant Field Values

### ENC_90PV_RKSJ_H

    public static final java.lang.String ENC_90PV_RKSJ_H

  90pv-RKSJ-H Mac OS, JIS X 0208 character set with KanjiTalk7 extensions, Shift-JIS encoding, Script Manager code 1

  See Also:
    Constant Field Values

### ENC_ADD_RKSJ_H

    public static final java.lang.String ENC_ADD_RKSJ_H

  Add-RKSJ-H JIS X 0208 character set with Fujitsu FMR extensions, Shift-JIS encoding

  See Also:
    Constant Field Values

### ENC_ADD_RKSJ_V

    public static final java.lang.String ENC_ADD_RKSJ_V

  Add-RKSJ-V Vertical version of Add-RKSJ-H

  See Also:
    Constant Field Values

### ENC_EUC_H

    public static final java.lang.String ENC_EUC_H

  EUC-H JIS X 0208 character set, EUC-JP encoding

  See Also:
    Constant Field Values

### ENC_EUC_V

    public static final java.lang.String ENC_EUC_V

  EUC-V Vertical version of EUC-H

  See Also:
    Constant Field Values

### ENC_EXT_RKSJ_H

    public static final java.lang.String ENC_EXT_RKSJ_H

  Ext-RKSJ-H JIS C 6226 (JIS78) character set with NEC extensions, Shift-JIS encoding

  See Also:
    Constant Field Values

### ENC_EXT_RKSJ_V

    public static final java.lang.String ENC_EXT_RKSJ_V

  Ext-RKSJ-V Vertical version of Ext-RKSJ-H

  See Also:
    Constant Field Values

### ENC_H

    public static final java.lang.String ENC_H

  H JIS X 0208 character set, ISO-2022-JP encoding

  See Also:
    Constant Field Values

### ENC_V

    public static final java.lang.String ENC_V

  V Vertical version of H

  See Also:
    Constant Field Values

### ENC_UNIJIS_UCS2_H

    public static final java.lang.String ENC_UNIJIS_UCS2_H

  UniJIS-UCS2-H Unicode (UCS-2) encoding for the Adobe-Japan1 character collection

  See Also:
    Constant Field Values

### ENC_UNIJIS_UCS2_V

    public static final java.lang.String ENC_UNIJIS_UCS2_V

  UniJIS-UCS2-V Vertical version of UniJIS-UCS2-H

  See Also:
    Constant Field Values

### ENC_UNIJIS_UCS2_HW_H

    public static final java.lang.String ENC_UNIJIS_UCS2_HW_H

  UniJIS-UCS2-HW-H Same as UniJIS-UCS2-H, but replaces proportional Latin characters with half-width forms

  See Also:
    Constant Field Values

### ENC_UNIJIS_UCS2_HW_V

    public static final java.lang.String ENC_UNIJIS_UCS2_HW_V

  UniJIS-UCS2-HW-V Vertical version of UniJIS-UCS2-HW-H

  See Also:
    Constant Field Values

### ENC_KSC_EUC_H

    public static final java.lang.String ENC_KSC_EUC_H

  KSC-EUC-H KS X 1001:1992 character set, EUC-KR encoding

  See Also:
    Constant Field Values

### ENC_KSC_EUC_V

    public static final java.lang.String ENC_KSC_EUC_V

  KSC-EUC-V Vertical version of KSC-EUC-H

  See Also:
    Constant Field Values

### ENC_KSCMS_UHC_H

    public static final java.lang.String ENC_KSCMS_UHC_H

  KSCms-UHC-H Microsoft Code Page 949 (lfCharSet 0x81), KS X 1001:1992 character set plus 8822 additional hangul, Unified Hangul Code (UHC) encoding

  See Also:
    Constant Field Values

### ENC_KSCMS_UHC_V

    public static final java.lang.String ENC_KSCMS_UHC_V

  KSCms-UHC-V Vertical version of KSCms-UHC-H

  See Also:
    Constant Field Values

### ENC_KSCMS_UHC_HW_H

    public static final java.lang.String ENC_KSCMS_UHC_HW_H

  KSCms-UHC-HW-H Same as KSCms-UHC-H, but replaces proportional Latin characters with half-width forms

  See Also:
    Constant Field Values

### ENC_KSCMS_UHC_HW_V

    public static final java.lang.String ENC_KSCMS_UHC_HW_V

  KSCms-UHC-HW-V Vertical version of KSCms-UHC-HW-H

  See Also:
    Constant Field Values

### ENC_KSCPC_EUC_H

    public static final java.lang.String ENC_KSCPC_EUC_H

  KSCpc-EUC-H Mac OS, KS X 1001:1992 character set with Mac OS KH extensions, Script Manager Code 3

  See Also:
    Constant Field Values

### ENC_UNIKSC_UCS2_H

    public static final java.lang.String ENC_UNIKSC_UCS2_H

  UniKS-UCS2-H Unicode (UCS-2) encoding for the Adobe-Korea1 character collection

  See Also:
    Constant Field Values

### ENC_UNIKSC_UCS2_V

    public static final java.lang.String ENC_UNIKSC_UCS2_V

  UniKS-UCS2-V Vertical version of UniKS-UCS2-H

  See Also:
    Constant Field Values

### ENC_IDENTITY_H

    public static final java.lang.String ENC_IDENTITY_H

  Identity-H The horizontal identity mapping for 2-byte CIDs; may be used with CIDFonts using any Registry, Ordering, and Supplement values. It maps 2-byte character codes ranging from 0 to 65,535 to the same 2-byte CID value, interpreted high-order byte first.

  See Also:
    Constant Field Values

### ENC_IDENTTITY_V

    public static final java.lang.String ENC_IDENTTITY_V

  Identity-V Vertical version of Identity-H. The mapping is the same as for Identity-H.

  See Also:
    Constant Field Values

### name

    protected java.lang.String name

  /CMapName attribute, one of the predefined constants

### sysInfo

    protected PDFCIDSystemInfo sysInfo

  /CIDSystemInfo attribute

### WMODE_HORIZONTAL

    public static final byte WMODE_HORIZONTAL

  horizontal writing direction

  See Also:
    Constant Field Values

### WMODE_VERTICAL

    public static final byte WMODE_VERTICAL

  vertical writing direction

  See Also:
    Constant Field Values

### wMode

    protected byte wMode

  font's writing direction

### base

    protected java.lang.Object base

  base CMap (String or PDFStream)

Constructor Detail

### PDFCMap

    public PDFCMap(java.lang.String name,
                   PDFCIDSystemInfo sysInfo)

  create the /CMap object

  Parameters:
    `name` - one the registered names (see Table 7.20 on p 215)
    `sysInfo` - the attributes of the character collection of the CIDFont

Method Detail

### setWMode

    public void setWMode(byte mode)

  set the writing direction

  Parameters:
    `mode` - is either `WMODE_HORIZONTAL` or `WMODE_VERTICAL`

### setUseCMap

    public void setUseCMap(java.lang.String base)

  set the base CMap

  Parameters:
    `base` - the name of the base CMap

### setUseCMap

    public void setUseCMap(PDFStream base)

  set the base CMap

  Parameters:
    `base` - the stream to be used as base CMap

### createCMapBuilder

    protected CMapBuilder createCMapBuilder(java.io.Writer writer)

  Creates the CMapBuilder that will build the CMap's content.

  Parameters:
    `writer` - a Writer to write the CMap's contents to
  Returns:
    the newly created CMapBuilder

### output

    public int output(java.io.OutputStream stream)
               throws java.io.IOException

  Overload the base object method so we don't have to copy byte arrays around so much Write the PDF represention of this object

  Overrides:
    `output` in class `PDFStream`
  Parameters:
    `stream` - the stream to write the PDF to
  Returns:
    the number of bytes written
  Throws:
    `java.io.IOException` - if there is an error writing to the stream

fop 1.1

Copyright 1999-2012 The Apache Software Foundation. All Rights Reserved.