{
throw new NullPointerException();
}
final SQLReportDataFactory df = (SQLReportDataFactory) dataFactory;
final String fileName = BundleUtilities.getUniqueName(bundle, state.getFileName(), "datasources/sql-ds{0}.xml");
if (fileName == null)
{
throw new IOException("Unable to generate unique name for SQL-Data-Source");
}
final OutputStream outputStream = bundle.createEntry(fileName, "text/xml");
final DefaultTagDescription tagDescription = new DefaultTagDescription();
tagDescription.setNamespaceHasCData(SQLDataFactoryModule.NAMESPACE, false);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "driver", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "password", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "path", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "property", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "static-query", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "script", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "global-script", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "url", true);
tagDescription.setElementHasCData(SQLDataFactoryModule.NAMESPACE, "username", true);
final XmlWriter xmlWriter = new XmlWriter(new OutputStreamWriter(outputStream, "UTF-8"), tagDescription, " ",
"\n");
final AttributeList rootAttrs = new AttributeList();
rootAttrs.addNamespaceDeclaration("data", SQLDataFactoryModule.NAMESPACE);
xmlWriter.writeTag(SQLDataFactoryModule.NAMESPACE, "sql-datasource", rootAttrs, XmlWriterSupport.OPEN);
final AttributeList configAttrs = new AttributeList();
configAttrs.setAttribute(SQLDataFactoryModule.NAMESPACE, "user-field", df.getUserField());
configAttrs.setAttribute(SQLDataFactoryModule.NAMESPACE, "password-field", df.getPasswordField());
xmlWriter.writeTag(SQLDataFactoryModule.NAMESPACE, "config", configAttrs, XmlWriterSupport.CLOSE);
writeConnectionInfo(bundle, state, xmlWriter, df.getConnectionProvider());
final String globalScript = df.getGlobalScript();
final String globalScriptLanguage = df.getGlobalScriptLanguage();
if (StringUtils.isEmpty(globalScript) == false && StringUtils.isEmpty(globalScriptLanguage) == false)
{
xmlWriter.writeTag
(SQLDataFactoryModule.NAMESPACE, "global-script", "language", globalScriptLanguage, XmlWriterSupport.OPEN);
xmlWriter.writeTextNormalized(globalScript, false);
xmlWriter.writeCloseTag();
}
xmlWriter.writeTag(SQLDataFactoryModule.NAMESPACE, "query-definitions", XmlWriterSupport.OPEN);
final String[] queryNames = df.getQueryNames();
for (int i = 0; i < queryNames.length; i++)
{
final String queryName = queryNames[i];
final String query = df.getQuery(queryName);
xmlWriter.writeTag(SQLDataFactoryModule.NAMESPACE, "query", "name", queryName, XmlWriterSupport.OPEN);
xmlWriter.writeTag(SQLDataFactoryModule.NAMESPACE, "static-query", XmlWriterSupport.OPEN);
xmlWriter.writeTextNormalized(query, false);
xmlWriter.writeCloseTag();
final String queryScriptLanguage = df.getScriptingLanguage(queryName);
final String queryScript = df.getScript(queryName);
if (StringUtils.isEmpty(queryScript) == false &&
(StringUtils.isEmpty(queryScriptLanguage) == false || StringUtils.isEmpty(globalScriptLanguage) == false))
{
if (StringUtils.isEmpty(queryScriptLanguage))