blob: 96d3a1d2891089953a644104e09fb1fe8d39ea53 [file] [log] [blame]
/*
* 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.cocoon.components.web3.impl;
import com.sap.mw.jco.JCO;
import org.apache.cocoon.components.web3.Web3Streamer;
import org.apache.cocoon.components.web3.Web3;
import org.apache.avalon.excalibur.pool.Poolable;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.ContentHandler;
/**
* TBD
*
* @author <a href="mailto:michael.gerzabek@at.efp.cc">Michael Gerzabek</a>
* @since 2.1
* @version CVS $Id$
*/
public class DefaultWeb3StreamerImpl implements Web3Streamer, Poolable {
public void stream(JCO.Function function,
ContentHandler contentHandler)
throws SAXException {
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute( Web3.URI, Web3.INCLUDE_NAME_ATTR,
Web3.INCLUDE_NAME_ATTR, "CDATA", function.getName().toUpperCase() );
contentHandler.startElement( Web3.URI, Web3.INCLUDE_ELEM,
Web3.INCLUDE_ELEM, attributes );
attributes.clear();
contentHandler.startElement( Web3.URI, Web3.IMPORT_ELEM,
Web3.IMPORT_ELEM, attributes );
streamParameterList( function.getImportParameterList(), contentHandler );
contentHandler.endElement( Web3.URI, Web3.IMPORT_ELEM, Web3.IMPORT_ELEM );
attributes.clear();
contentHandler.startElement( Web3.URI, Web3.EXPORT_ELEM,
Web3.EXPORT_ELEM, attributes );
streamParameterList( function.getExportParameterList(), contentHandler );
contentHandler.endElement( Web3.URI, Web3.EXPORT_ELEM, Web3.EXPORT_ELEM );
JCO.ParameterList tablesParameterList = function.getTableParameterList();
attributes.clear();
contentHandler.startElement( Web3.URI, Web3.TABLES_ELEM,
Web3.TABLES_ELEM, attributes );
if (null != tablesParameterList) {
for (int i = 0; i < tablesParameterList.getFieldCount(); i++) {
attributes.clear();
attributes.addAttribute( Web3.URI, Web3.TABLE_NAME_ATTR,
Web3.TABLE_NAME_ATTR, "CDATA",
tablesParameterList.getName(i).toUpperCase() );
contentHandler.startElement( Web3.URI, Web3.TABLE_ELEM,
Web3.TABLE_ELEM, attributes );
JCO.Table sapTable = tablesParameterList.getTable(i);
if (null != sapTable) {
for (int j = 0; j < sapTable.getNumRows(); j++) {
sapTable.setRow(j);
attributes.clear();
attributes.addAttribute(Web3.URI, Web3.ROW_ID_ATTR,
Web3.ROW_ID_ATTR, "CDATA", "" + (j + 1));
contentHandler.startElement(Web3.URI, Web3.ROW_ELEM,
Web3.ROW_ELEM, attributes);
for (int k = 0; k < sapTable.getFieldCount(); k++) {
attributes.clear();
attributes.addAttribute(Web3.URI,
Web3.FIELD_NAME_ATTR, Web3.FIELD_NAME_ATTR,
"CDATA", sapTable.getName(k).toUpperCase());
contentHandler.startElement(Web3.URI,
Web3.FIELD_ELEM, Web3.FIELD_ELEM, attributes);
String theValue = ( sapTable.getString(k) == null)
? "" : sapTable.getString(k).trim();
contentHandler.characters(theValue.toCharArray(), 0,
theValue.length());
contentHandler.endElement(Web3.URI, Web3.FIELD_ELEM,
Web3.FIELD_ELEM);
}
contentHandler.endElement(Web3.URI, Web3.ROW_ELEM,
Web3.ROW_ELEM);
}
contentHandler.endElement(Web3.URI, Web3.TABLE_ELEM,
Web3.TABLE_ELEM);
}
}
}
contentHandler.endElement(Web3.URI, Web3.TABLES_ELEM, Web3.TABLES_ELEM);
contentHandler.endElement( Web3.URI, Web3.INCLUDE_ELEM,
Web3.INCLUDE_ELEM );
}
protected void streamParameterList(JCO.ParameterList pList,
ContentHandler contentHandler)
throws SAXException {
AttributesImpl attributes = new AttributesImpl();
if (pList != null) {
for (int i = 0; i < pList.getFieldCount(); i++) {
attributes.clear();
JCO.Field theField = pList.getField(i);
if (theField.isStructure()) {
JCO.Structure sapStructure =
pList.getStructure(pList.getName(i));
attributes.addAttribute(Web3.URI, Web3.STRUCTURE_NAME_ATTR,
Web3.STRUCTURE_NAME_ATTR, "CDATA",
pList.getName(i).toUpperCase());
contentHandler.startElement(Web3.URI, Web3.STRUCTURE_ELEM,
Web3.STRUCTURE_ELEM, attributes);
for (int j = 0; j < sapStructure.getFieldCount(); j++) {
attributes.clear();
attributes.addAttribute(Web3.URI, Web3.FIELD_NAME_ATTR,
Web3.FIELD_NAME_ATTR, "CDATA",
sapStructure.getName(j).toUpperCase());
contentHandler.startElement(Web3.URI, Web3.FIELD_ELEM,
Web3.FIELD_ELEM, attributes);
String theValue = (sapStructure.getString(j) == null)
? "" : sapStructure.getString(j).trim();
contentHandler.characters(theValue.toCharArray(), 0,
theValue.length());
contentHandler.endElement(Web3.URI, Web3.FIELD_ELEM,
Web3.FIELD_ELEM);
}
contentHandler.endElement(Web3.URI, Web3.STRUCTURE_ELEM,
Web3.STRUCTURE_ELEM);
} else {
attributes.addAttribute(Web3.URI, Web3.FIELD_NAME_ATTR,
Web3.FIELD_NAME_ATTR, "CDATA",
pList.getName(i).toUpperCase());
contentHandler.startElement(Web3.URI, Web3.FIELD_ELEM,
Web3.FIELD_ELEM, attributes);
String theValue = (pList.getString(i) == null)
? "" : pList.getString(i).trim();
contentHandler.characters(theValue.toCharArray(), 0,
theValue.length());
contentHandler.endElement(Web3.URI, Web3.FIELD_ELEM,
Web3.FIELD_ELEM);
}
}
}
}
}