private void readColumnSubElement()

in src/main/java/org/apache/ddlutils/io/DataReader.java [392:461]


    private void readColumnSubElement(XMLStreamReader xmlReader, Map data) throws XMLStreamException, DdlUtilsXMLException
    {
        QName   elemQName  = xmlReader.getName();
        Map     attributes = new HashMap();
        boolean usesBase64 = false;

        for (int idx = 0; idx < xmlReader.getAttributeCount(); idx++)
        {
            QName  attrQName = xmlReader.getAttributeName(idx);
            String value     = xmlReader.getAttributeValue(idx);

            if (DatabaseIO.BASE64_ATTR_NAME.equals(attrQName.getLocalPart()))
            {
                if ("true".equalsIgnoreCase(value))
                {
                    usesBase64 = true;
                }
            }
            else
            {
                attributes.put(attrQName.getLocalPart(), value);
            }
        }

        int          eventType = XMLStreamReader.START_ELEMENT;
        StringBuffer content   = new StringBuffer();

        while (eventType != XMLStreamReader.END_ELEMENT)
        {
            eventType = xmlReader.next();
            if (eventType == XMLStreamReader.START_ELEMENT)
            {
                readColumnDataSubElement(xmlReader, attributes);
            }
            else if ((eventType == XMLStreamReader.CHARACTERS) ||
                     (eventType == XMLStreamReader.CDATA) ||
                     (eventType == XMLStreamReader.SPACE) ||
                     (eventType == XMLStreamReader.ENTITY_REFERENCE))
            {
                content.append(xmlReader.getText());
            }
        }

        String value = content.toString().trim();

        if (usesBase64)
        {
            value = new String(Base64.decodeBase64(value.getBytes()));
        }

        String name = elemQName.getLocalPart();

        if ("table-name".equals(name))
        {
            data.put("table-name", value);
        }
        else
        {
            if ("column".equals(name))
            {
                name = (String)attributes.get("column-name");
            }
            if (attributes.containsKey("column-value"))
            {
                value = (String)attributes.get("column-value");
            }
            data.put(name, value);
        }
        consumeRestOfElement(xmlReader);
    }