package kmlframework.kml; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Kml { protected NetworkLinkControl networkLinkControl; protected Feature feature; protected boolean celestialData = false; protected boolean atomElementsIncluded = false; protected boolean extensionElementsIncluded = false; protected boolean generateObjectIds = true; private PrintWriter printWriter; private int indentLevel = 0; private boolean xmlIndent = false; public Kml() {} public Kml(NetworkLinkControl networkLinkControl, Feature feature) { this.networkLinkControl = networkLinkControl; this.feature = feature; } public void setXmlIndent(boolean xmlIndent) { this.xmlIndent = xmlIndent; } public boolean getXmlIndent() { return xmlIndent; } public NetworkLinkControl getNetworkLinkControl() { return networkLinkControl; } public void setNetworkLinkControl(NetworkLinkControl networkLinkControl) { this.networkLinkControl = networkLinkControl; } public Feature getFeature() { return feature; } public void setFeature(Feature feature) { this.feature = feature; } public boolean isCelestialData() { return celestialData; } public void setCelestialData(boolean celestialData) { this.celestialData = celestialData; } public boolean isAtomElementsIncluded() { return atomElementsIncluded; } public void setAtomElementsIncluded(boolean atomElementsIncluded) { this.atomElementsIncluded = atomElementsIncluded; } public boolean isExtensionElementsIncluded() { return extensionElementsIncluded; } public void setExtensionElementsIncluded(boolean extensionElementsIncluded) { this.extensionElementsIncluded = extensionElementsIncluded; } public boolean isGenerateObjectIds() { return generateObjectIds; } public void setGenerateObjectIds(boolean generateObjectIds) { this.generateObjectIds = generateObjectIds; } public void printNoIndent(String string) { printWriter.print(string); } public void print(String string) { print(string, 0); } public void println(String string) { println(string, 0); } public void print(String string, int indentChangeAfter) { printIndents(); indentLevel += indentChangeAfter; printWriter.print(string); } public void println(String string, int indentChangeAfter) { printIndents(); indentLevel += indentChangeAfter; printWriter.println(string); } public void print(int indentChangeBefore, String string) { indentLevel += indentChangeBefore; printIndents(); printWriter.print(string); } public void println(int indentChangeBefore, String string) { indentLevel += indentChangeBefore; printIndents(); printWriter.println(string); } private void printIndents() { if (xmlIndent) { for (int i = 0; i < indentLevel; i++) { printWriter.print("\t"); } } } public void write(Kml kml) throws KmlException { kml.println("<kml xmlns=\"http://www.opengis.net/kml/2.2\"" + (celestialData ? " hint=\"target=sky\"" : "") + (atomElementsIncluded ? " xmlns:atom=\"http://www.w3.org/2005/Atom\"" : "") + (extensionElementsIncluded ? " xmlns:gx=\"http://www.google.com/kml/ext/2.2\"" : "") + ">", 1); if (networkLinkControl != null) { networkLinkControl.write(kml); } if (feature != null) { feature.write(kml); } kml.println(-1, "</kml>"); } public void createKml(String fileName) throws KmlException, IOException { createKml(new PrintWriter(new BufferedWriter(new FileWriter(fileName)))); } public void createKml(PrintWriter printWriter) throws KmlException, IOException { this.printWriter = printWriter; println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); write(this); this.printWriter.close(); } }