diff --git a/src/config/worldwind.xml b/src/config/worldwind.xml index dfe4931bd4..0ebcc607ce 100644 --- a/src/config/worldwind.xml +++ b/src/config/worldwind.xml @@ -100,4 +100,12 @@ jar:file:milstd2525-symbols.zip! (local zip archive) --> + + + + + + + \ No newline at end of file diff --git a/src/gov/nasa/worldwind/formats/gpx/GpxWriter.java b/src/gov/nasa/worldwind/formats/gpx/GpxWriter.java index c7fc5c2bb9..5d2bbb0864 100644 --- a/src/gov/nasa/worldwind/formats/gpx/GpxWriter.java +++ b/src/gov/nasa/worldwind/formats/gpx/GpxWriter.java @@ -6,6 +6,7 @@ package gov.nasa.worldwind.formats.gpx; import gov.nasa.worldwind.util.Logging; +import gov.nasa.worldwind.util.WWXML; import gov.nasa.worldwind.tracks.Track; import gov.nasa.worldwind.tracks.TrackSegment; import gov.nasa.worldwind.tracks.TrackPoint; @@ -153,8 +154,7 @@ private void doWriteTrackPoint(TrackPoint point, org.w3c.dom.Element elem) private void doFlush() throws javax.xml.transform.TransformerException { - javax.xml.transform.TransformerFactory factory = javax.xml.transform.TransformerFactory.newInstance(); - javax.xml.transform.Transformer transformer = factory.newTransformer(); + javax.xml.transform.Transformer transformer = WWXML.createTransformer(); javax.xml.transform.Source source = new javax.xml.transform.dom.DOMSource(this.doc); transformer.transform(source, this.result); } diff --git a/src/gov/nasa/worldwind/util/RestorableSupport.java b/src/gov/nasa/worldwind/util/RestorableSupport.java index f3ef304ecc..370c5cc579 100644 --- a/src/gov/nasa/worldwind/util/RestorableSupport.java +++ b/src/gov/nasa/worldwind/util/RestorableSupport.java @@ -5,6 +5,7 @@ */ package gov.nasa.worldwind.util; +import gov.nasa.worldwind.Configuration; import gov.nasa.worldwind.avlist.*; import gov.nasa.worldwind.geom.*; import gov.nasa.worldwind.render.OffsetsList; @@ -44,7 +45,8 @@ public class RestorableSupport { protected static final String DEFAULT_DOCUMENT_ELEMENT_TAG_NAME = "restorableState"; protected static final String DEFAULT_STATE_OBJECT_TAG_NAME = "stateObject"; - + private static final String PROP_OUTPUTKEY = RestorableSupport.class.getName() + ".outputkey"; + protected org.w3c.dom.Document doc; protected javax.xml.xpath.XPath xpath; protected String stateObjectTagName; @@ -203,14 +205,25 @@ protected static void createDocumentElement(org.w3c.dom.Document doc, String tag */ public String getStateAsXml() { - javax.xml.transform.TransformerFactory transformerFactory = - javax.xml.transform.TransformerFactory.newInstance(); + //Check for any restorablestate ouputkeys for the transformer + Map outputKeys = new HashMap(); + Integer i=1; + String outputKey = PROP_OUTPUTKEY + "." + i; + String value; + while((value = Configuration.getStringValue(outputKey)) != null) + { + String[] parts = value.split(","); + outputKeys.put(parts[0], parts[1]); + i++; + outputKey = PROP_OUTPUTKEY + "." + i; + } + try { // The StringWriter will receive the document xml. java.io.StringWriter stringWriter = new java.io.StringWriter(); // Attempt to write the Document to the StringWriter. - javax.xml.transform.Transformer transformer = transformerFactory.newTransformer(); + javax.xml.transform.Transformer transformer = WWXML.createTransformer(outputKeys); transformer.transform( new javax.xml.transform.dom.DOMSource(this.doc), new javax.xml.transform.stream.StreamResult(stringWriter)); diff --git a/src/gov/nasa/worldwind/util/WWXML.java b/src/gov/nasa/worldwind/util/WWXML.java index 80827c22a4..656eaba799 100644 --- a/src/gov/nasa/worldwind/util/WWXML.java +++ b/src/gov/nasa/worldwind/util/WWXML.java @@ -28,6 +28,7 @@ import java.nio.ByteBuffer; import java.text.*; import java.util.*; +import java.util.Map.Entry; /** * A collection of static methods use for opening, reading and otherwise working with XML files. @@ -38,7 +39,9 @@ public class WWXML { public static final String XLINK_URI = "http://www.w3.org/1999/xlink"; - + private static final String PROP_OUTPUTKEY = WWXML.class.getName() + ".outputkey"; + + /** * Create a DOM builder. * @@ -88,12 +91,49 @@ public static DocumentBuilder createDocumentBuilder(boolean isNamespaceAware) * @throws WWRuntimeException if an error occurs. */ public static Transformer createTransformer() + { + return createTransformer(null); + } + + /** + * Create a XML transformer. + * @parameter outputKeys a map of {@link javax.xml.transform.OutputKeys} settings + * @return a {@link javax.xml.transform.Transformer} + * + * @throws WWRuntimeException if an error occurs. + */ + public static Transformer createTransformer(Map outputKeys) { TransformerFactory transformerFactory = TransformerFactory.newInstance(); try { - return transformerFactory.newTransformer(); + Transformer transformer = transformerFactory.newTransformer(); + + //Check for any globally assigned ouputkeys for the transformer + Integer i=1; + String outputKey = PROP_OUTPUTKEY + "." + i; + String value; + while((value = Configuration.getStringValue(outputKey)) != null) + { + String[] parts = value.split(","); + transformer.setOutputProperty(parts[0], parts[1]); + i++; + outputKey = PROP_OUTPUTKEY + "." + i; + } + + if(outputKeys != null) + { + //Now set any provided outputkeys + Iterator> it = outputKeys.entrySet().iterator(); + while (it.hasNext()) + { + Map.Entry pair = (Map.Entry)it.next(); + transformer.setOutputProperty(pair.getKey().toString(), pair.getValue()); + } + } + + return transformer; } catch (TransformerConfigurationException e) { diff --git a/src/gov/nasa/worldwindx/applications/sar/SARAnnotationWriter.java b/src/gov/nasa/worldwindx/applications/sar/SARAnnotationWriter.java index e3c92682a8..c7a4cd332d 100644 --- a/src/gov/nasa/worldwindx/applications/sar/SARAnnotationWriter.java +++ b/src/gov/nasa/worldwindx/applications/sar/SARAnnotationWriter.java @@ -6,6 +6,7 @@ package gov.nasa.worldwindx.applications.sar; import gov.nasa.worldwind.util.Logging; +import gov.nasa.worldwind.util.WWXML; /** * @author dcollins @@ -138,8 +139,7 @@ private void doWriteAnnotation(SARAnnotation sarAnnotation, org.w3c.dom.Element private void doFlush() throws javax.xml.transform.TransformerException { - javax.xml.transform.TransformerFactory factory = javax.xml.transform.TransformerFactory.newInstance(); - javax.xml.transform.Transformer transformer = factory.newTransformer(); + javax.xml.transform.Transformer transformer = WWXML.createTransformer(); javax.xml.transform.Source source = new javax.xml.transform.dom.DOMSource(this.doc); transformer.transform(source, this.result); } diff --git a/src/gov/nasa/worldwindx/examples/kml/ExportKML.java b/src/gov/nasa/worldwindx/examples/kml/ExportKML.java index d30afc3eb0..dec62ed028 100644 --- a/src/gov/nasa/worldwindx/examples/kml/ExportKML.java +++ b/src/gov/nasa/worldwindx/examples/kml/ExportKML.java @@ -10,6 +10,7 @@ import gov.nasa.worldwind.geom.*; import gov.nasa.worldwind.render.*; import gov.nasa.worldwind.util.Logging; +import gov.nasa.worldwind.util.WWXML; import javax.xml.transform.*; import javax.xml.transform.stream.*; @@ -156,10 +157,11 @@ public static void main(String[] args) String xmlString = stringWriter.toString(); // Set up a transformer to pretty-print the XML - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); - + Map outputKeys = new HashMap(); + outputKeys.put(OutputKeys.INDENT, "yes"); + outputKeys.put("{http://xml.apache.org/xslt}indent-amount", "4"); + Transformer transformer = WWXML.createTransformer(outputKeys); + // Write the pretty-printed document to stdout transformer.transform(new StreamSource(new StringReader(xmlString)), new StreamResult(System.out)); }