package LinGUIne.extensions; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.Map.Entry; import LinGUIne.model.IProjectData; import LinGUIne.model.KeyValueResult; import LinGUIne.model.KeyValueResultContents; import LinGUIne.model.Result; import LinGUIne.model.ResultData; /** * Exporter to create an XML file from a KeyValueResult. * Keys are XML tags surrounding their associated Values. * * @author Kyle Mullins */ public class XMLExporter implements IFileExporter { @Override public String getFileType() { return "Extensible Markup Language (XML)"; } @Override public String getFileMask() { return "*.xml"; } @Override public Collection<Class<? extends Result>> getSupportedSourceDataTypes() { LinkedList<Class<? extends Result>> supportedTypes = new LinkedList<Class<? extends Result>>(); supportedTypes.add(KeyValueResult.class); return supportedTypes; } @Override public void exportResult(Result sourceResult, Collection<IProjectData> associatedData, File destFile) throws IOException { if(sourceResult instanceof KeyValueResult){ KeyValueResult keyValueSource = (KeyValueResult)sourceResult; KeyValueResultContents sourceContents = (KeyValueResultContents)keyValueSource.getContents(); String xmlContent = ""; for(HashMap<String, ResultData> pairs: sourceContents){ for(Entry<String, ResultData> pair: pairs.entrySet()){ xmlContent += "<" + pair.getKey() + ">" + pair.getValue().getAsString() + "</" + pair.getKey() + ">"; } xmlContent += "\n"; } try(BufferedWriter writer = Files.newBufferedWriter( destFile.toPath(), Charset.defaultCharset())){ writer.write(xmlContent); } catch(IOException ioe){ //Catch and rethrow the exception so the twr can close the stream throw ioe; } } else{ throw new IllegalArgumentException("Parameter sourceResult must be" + " of type KeyValueResult"); } } }