50 |
import javax.xml.transform.TransformerFactoryConfigurationError; |
import javax.xml.transform.TransformerFactoryConfigurationError; |
51 |
import javax.xml.transform.URIResolver; |
import javax.xml.transform.URIResolver; |
52 |
|
|
53 |
|
import javax.xml.transform.dom.DOMResult; |
54 |
|
|
55 |
import javax.xml.transform.stream.StreamResult; |
import javax.xml.transform.stream.StreamResult; |
56 |
import javax.xml.transform.stream.StreamSource; |
import javax.xml.transform.stream.StreamSource; |
57 |
|
|
61 |
|
|
62 |
import org.w3c.dom.Document; |
import org.w3c.dom.Document; |
63 |
import org.w3c.dom.Element; |
import org.w3c.dom.Element; |
64 |
|
import org.w3c.dom.Node; |
65 |
import org.w3c.dom.NodeList; |
import org.w3c.dom.NodeList; |
66 |
|
|
67 |
import org.xml.sax.SAXException; |
import org.xml.sax.SAXException; |
237 |
|
|
238 |
StreamSource in = new StreamSource(new File(xmlSourceDirectory, "index.xml").getAbsolutePath()); |
StreamSource in = new StreamSource(new File(xmlSourceDirectory, "index.xml").getAbsolutePath()); |
239 |
URL resource = new URL(mainResourceURL, fileInfo.getSheet()); |
URL resource = new URL(mainResourceURL, fileInfo.getSheet()); |
240 |
if (null == resource) { |
|
241 |
throw new DocTransletException("Couldn't perform XSLT transformation: stylesheet not found '" + resource + "'"); |
|
|
} |
|
242 |
StreamSource xsltSource = new StreamSource(resource.toExternalForm()); |
StreamSource xsltSource = new StreamSource(resource.toExternalForm()); |
243 |
|
|
244 |
if (null != fileInfo.getInfo()) { |
if (null != fileInfo.getInfo()) { |
297 |
|
|
298 |
OutputStream out = new ByteArrayOutputStream(); |
OutputStream out = new ByteArrayOutputStream(); |
299 |
|
|
300 |
|
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); |
301 |
|
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); |
302 |
|
Document document = documentBuilder.newDocument(); |
303 |
|
DOMResult domResult = new DOMResult(document); |
304 |
{ |
{ |
305 |
StreamSource source = new StreamSource(resource.toExternalForm()); |
StreamSource source = new StreamSource(resource.toExternalForm()); |
306 |
|
|
307 |
TransformerFactory transformerFactory = TransformerFactory.newInstance(); |
TransformerFactory transformerFactory = TransformerFactory.newInstance(); |
308 |
Transformer transformer = (Transformer)transformerFactory.newTransformer(source); |
Transformer transformer = (Transformer)transformerFactory.newTransformer(source); |
309 |
|
|
310 |
transformer.clearParameters(); |
transformer.clearParameters(); |
311 |
for (Iterator pit = parameters.keySet().iterator(); pit.hasNext(); ) { |
for (Iterator pit = parameters.keySet().iterator(); pit.hasNext(); ) { |
312 |
String key = (String)pit.next(); |
String key = (String)pit.next(); |
313 |
String value = (String)parameters.get(key); |
String value = (String)parameters.get(key); |
314 |
transformer.setParameter(key, value); |
transformer.setParameter(key, value); |
315 |
} |
} |
316 |
|
|
317 |
transformer.transform(new StreamSource(new File(xmlSourceDirectory, |
transformer.transform(new StreamSource(new File(xmlSourceDirectory, |
318 |
"index.xml").getAbsolutePath()), |
"index.xml").getAbsolutePath()), |
319 |
new StreamResult(out)); |
domResult); |
320 |
} |
} |
321 |
|
|
322 |
{ |
{ |
|
byte[] transformedIndexBytes = ((ByteArrayOutputStream)out).toByteArray(); |
|
|
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); |
|
|
documentBuilderFactory.setValidating(false); |
|
|
|
|
|
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); |
|
|
Document document = documentBuilder.parse(new ByteArrayInputStream(transformedIndexBytes)); |
|
|
|
|
323 |
NodeList nodeList = document.getElementsByTagName("outputfile"); |
NodeList nodeList = document.getElementsByTagName("outputfile"); |
324 |
result = new ArrayList(nodeList.getLength()); |
result = new ArrayList(nodeList.getLength()); |
325 |
|
|
326 |
for (int i=0; i<nodeList.getLength(); ++i) { |
for (int i=0; i<nodeList.getLength(); ++i) { |
327 |
Element elem = (Element)nodeList.item(i); |
Element elem = (Element)nodeList.item(i); |
328 |
String name = elem.getElementsByTagName("name").item(0).getFirstChild().getNodeValue(); |
String name = getTextContent(elem.getElementsByTagName("name").item(0)); |
329 |
String source |
String source |
330 |
= (null != elem.getElementsByTagName("source").item(0)) |
= (null != elem.getElementsByTagName("source").item(0)) |
331 |
? elem.getElementsByTagName("source").item(0).getFirstChild().getNodeValue() |
? getTextContent(elem.getElementsByTagName("source").item(0)) |
332 |
: null; |
: null; |
333 |
String sheet |
String sheet |
334 |
= (null != elem.getElementsByTagName("sheet").item(0)) |
= (null != elem.getElementsByTagName("sheet").item(0)) |
335 |
? elem.getElementsByTagName("sheet").item(0).getFirstChild().getNodeValue() |
? getTextContent(elem.getElementsByTagName("sheet").item(0)) |
336 |
: null; |
: null; |
337 |
String comment = elem.getElementsByTagName("comment").item(0).getFirstChild().getNodeValue(); |
String comment = getTextContent(elem.getElementsByTagName("comment").item(0)); |
338 |
String info = null; |
String info = null; |
339 |
if (elem.getElementsByTagName("info").getLength() > 0) { |
if (elem.getElementsByTagName("info").getLength() > 0) { |
340 |
if (null != elem.getElementsByTagName("info").item(0).getFirstChild()) { |
if (null != elem.getElementsByTagName("info").item(0).getFirstChild()) { |
341 |
info = elem.getElementsByTagName("info").item(0).getFirstChild().getNodeValue(); |
info = getTextContent(elem.getElementsByTagName("info").item(0)); |
342 |
} |
} |
343 |
else { |
else { |
344 |
info = ""; |
info = ""; |
358 |
catch (ParserConfigurationException e) { |
catch (ParserConfigurationException e) { |
359 |
throw new DocTransletException(e); |
throw new DocTransletException(e); |
360 |
} |
} |
361 |
catch (SAXException e) { |
} |
362 |
throw new DocTransletException(e); |
|
363 |
} |
private String getTextContent(Node elem) |
364 |
catch (IOException e) { |
{ |
365 |
throw new DocTransletException(e); |
StringBuffer result = new StringBuffer(); |
366 |
|
NodeList children = elem.getChildNodes(); |
367 |
|
for (int i=0; i<children.getLength(); ++i) { |
368 |
|
Node item = children.item(i); |
369 |
|
if (null != item) { |
370 |
|
String value = item.getNodeValue(); |
371 |
|
if (null != value) { |
372 |
|
result.append(value); |
373 |
|
} |
374 |
|
} |
375 |
} |
} |
376 |
|
return result.toString(); |
377 |
} |
} |
378 |
|
|
379 |
public void setOptions(DocTransletOptions options) { |
public void setOptions(DocTransletOptions options) { |