/* * RomRaider Open-Source Tuning, Logging and Reflashing * Copyright (C) 2006-2014 RomRaider.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.romraider.xml; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Collection; import java.util.Map; import java.util.Vector; import javax.imageio.metadata.IIOMetadataNode; import com.romraider.Settings; import com.romraider.logger.external.phidget.interfacekit.io.IntfKitSensor; import com.romraider.swing.JProgressPane; import com.sun.org.apache.xml.internal.serialize.OutputFormat; import com.sun.org.apache.xml.internal.serialize.XMLSerializer; public final class DOMSettingsBuilder { public void buildSettings(Settings settings, File output, JProgressPane progress, String versionNumber) throws IOException { IIOMetadataNode settingsNode = new IIOMetadataNode("settings"); // create settings progress.update("Saving window settings...", 15); settingsNode.appendChild(buildWindow(settings)); progress.update("Saving file settings...", 30); settingsNode.appendChild(buildFiles(settings)); progress.update("Saving options...", 45); settingsNode.appendChild(buildOptions(settings, versionNumber)); progress.update("Saving display settings...", 60); settingsNode.appendChild(buildTableDisplay(settings)); progress.update("Saving logger settings...", 75); settingsNode.appendChild(buildLogger(settings)); progress.update("Saving table clipboard format settings...", 80); settingsNode.appendChild(buildTableClipboardFormat(settings)); progress.update("Saving icon scale settings...", 85); settingsNode.appendChild(buildIcons(settings)); OutputFormat of = new OutputFormat("XML", "ISO-8859-1", true); of.setIndent(1); of.setIndenting(true); progress.update("Writing to file...", 90); FileOutputStream fos = new FileOutputStream(output); try { XMLSerializer serializer = new XMLSerializer(fos, of); serializer.serialize(settingsNode); fos.flush(); } finally { fos.close(); } } private IIOMetadataNode buildWindow(Settings settings) { IIOMetadataNode windowSettings = new IIOMetadataNode("window"); // window maximized IIOMetadataNode maximized = new IIOMetadataNode("maximized"); maximized.setAttribute("value", String.valueOf((settings.isWindowMaximized()))); windowSettings.appendChild(maximized); // window size IIOMetadataNode size = new IIOMetadataNode("size"); size.setAttribute("x", String.valueOf(((int) settings.getWindowSize().getHeight()))); size.setAttribute("y", String.valueOf(((int) settings.getWindowSize().getWidth()))); windowSettings.appendChild(size); // window location IIOMetadataNode location = new IIOMetadataNode("location"); location.setAttribute("x", String.valueOf(((int) settings.getWindowLocation().getX()))); location.setAttribute("y", String.valueOf(((int) settings.getWindowLocation().getY()))); windowSettings.appendChild(location); // splitpane location IIOMetadataNode splitpane = new IIOMetadataNode("splitpane"); splitpane.setAttribute("location", String.valueOf(settings.getSplitPaneLocation())); windowSettings.appendChild(splitpane); return windowSettings; } private IIOMetadataNode buildFiles(Settings settings) { IIOMetadataNode files = new IIOMetadataNode("files"); // image directory IIOMetadataNode imageDir = new IIOMetadataNode("image_dir"); imageDir.setAttribute("path", settings.getLastImageDir().getAbsolutePath()); files.appendChild(imageDir); // repository directory IIOMetadataNode repositoryDir = new IIOMetadataNode(Settings.REPOSITORY_ELEMENT_NAME); repositoryDir.setAttribute(Settings.REPOSITORY_ATTRIBUTE_NAME, settings.getLastRepositoryDir().getAbsolutePath()); files.appendChild(repositoryDir); // ecu definition files Vector<File> defFiles = settings.getEcuDefinitionFiles(); for (File defFile : defFiles) { IIOMetadataNode ecuDef = new IIOMetadataNode("ecudefinitionfile"); ecuDef.setAttribute("name", defFile.getAbsolutePath()); files.appendChild(ecuDef); } return files; } private IIOMetadataNode buildOptions(Settings settings, String versionNumber) { IIOMetadataNode options = new IIOMetadataNode("options"); // obsolete warning IIOMetadataNode obsoleteWarning = new IIOMetadataNode("obsoletewarning"); obsoleteWarning.setAttribute("value", String.valueOf(settings.isObsoleteWarning())); options.appendChild(obsoleteWarning); // calcultion conflicting warning IIOMetadataNode calcConflictWarning = new IIOMetadataNode("calcconflictwarning"); calcConflictWarning.setAttribute("value", String.valueOf(settings.isCalcConflictWarning())); options.appendChild(calcConflictWarning); // debug mode IIOMetadataNode debug = new IIOMetadataNode("debug"); debug.setAttribute("value", String.valueOf(settings.isDebug())); options.appendChild(debug); // userlevel IIOMetadataNode userLevel = new IIOMetadataNode("userlevel"); userLevel.setAttribute("value", String.valueOf(settings.getUserLevel())); options.appendChild(userLevel); // table click count IIOMetadataNode tableClickCount = new IIOMetadataNode("tableclickcount"); tableClickCount.setAttribute("value", String.valueOf(settings.getTableClickCount())); options.appendChild(tableClickCount); // table click behavior IIOMetadataNode tableClickBehavior = new IIOMetadataNode("tableclickbehavior"); tableClickBehavior.setAttribute("value", String.valueOf(settings.getTableClickBehavior())); options.appendChild(tableClickBehavior); // last version used IIOMetadataNode version = new IIOMetadataNode("version"); version.setAttribute("value", versionNumber); options.appendChild(version); // save debug level tables IIOMetadataNode saveDebugTables = new IIOMetadataNode("savedebugtables"); saveDebugTables.setAttribute("value", String.valueOf(settings.isSaveDebugTables())); options.appendChild(saveDebugTables); // display tables higher than userlevel IIOMetadataNode displayHighTables = new IIOMetadataNode("displayhightables"); displayHighTables.setAttribute("value", String.valueOf(settings.isDisplayHighTables())); options.appendChild(displayHighTables); // warning when exceeding limits IIOMetadataNode valueLimitWarning = new IIOMetadataNode("valuelimitwarning"); valueLimitWarning.setAttribute("value", String.valueOf(settings.isValueLimitWarning())); options.appendChild(valueLimitWarning); // color axis IIOMetadataNode colorAxis = new IIOMetadataNode("coloraxis"); colorAxis.setAttribute("value", String.valueOf(settings.isColorAxis())); options.appendChild(colorAxis); // show table toolbar border IIOMetadataNode showTableToolbarBorder = new IIOMetadataNode("showtabletoolbarborder"); showTableToolbarBorder.setAttribute("value", String.valueOf(settings.isShowTableToolbarBorder())); options.appendChild(showTableToolbarBorder); // open top level rom node expanded IIOMetadataNode openRomExpanded = new IIOMetadataNode("openromexpanded"); openRomExpanded.setAttribute("value", String.valueOf(settings.isOpenExpanded())); options.appendChild(openRomExpanded); // always open at 0 IIOMetadataNode alwaysOpenTableAtZero = new IIOMetadataNode("alwaysopentableatzero"); alwaysOpenTableAtZero.setAttribute("value", String.valueOf(settings.isAlwaysOpenTableAtZero())); options.appendChild(alwaysOpenTableAtZero); // defaultScale IIOMetadataNode defaultScale = new IIOMetadataNode("defaultscale"); defaultScale.setAttribute("value", String.valueOf(settings.getDefaultScale())); options.appendChild(defaultScale); // scale headers with data IIOMetadataNode scaleHeaderAndData = new IIOMetadataNode("scaleHeadersAndData"); scaleHeaderAndData.setAttribute("value", String.valueOf(settings.isScaleHeadersAndData())); options.appendChild(scaleHeaderAndData); return options; } private IIOMetadataNode buildTableDisplay(Settings settings) { IIOMetadataNode tableDisplay = new IIOMetadataNode("tabledisplay"); // font IIOMetadataNode font = new IIOMetadataNode("font"); font.setAttribute("face", settings.getTableFont().getName()); font.setAttribute("size", String.valueOf(settings.getTableFont().getSize())); font.setAttribute("decoration", String.valueOf(settings.getTableFont().getStyle())); tableDisplay.appendChild(font); // table cell size IIOMetadataNode cellSize = new IIOMetadataNode("cellsize"); cellSize.setAttribute("height", String.valueOf((int) settings.getCellSize().getHeight())); cellSize.setAttribute("width", String.valueOf(((int) settings.getCellSize().getWidth()))); tableDisplay.appendChild(cellSize); // colors IIOMetadataNode colors = new IIOMetadataNode("colors"); // max IIOMetadataNode max = new IIOMetadataNode("max"); max.setAttribute("r", String.valueOf(settings.getMaxColor().getRed())); max.setAttribute("g", String.valueOf(settings.getMaxColor().getGreen())); max.setAttribute("b", String.valueOf(settings.getMaxColor().getBlue())); colors.appendChild(max); // min IIOMetadataNode min = new IIOMetadataNode("min"); min.setAttribute("r", String.valueOf(settings.getMinColor().getRed())); min.setAttribute("g", String.valueOf(settings.getMinColor().getGreen())); min.setAttribute("b", String.valueOf(settings.getMinColor().getBlue())); colors.appendChild(min); // highlight IIOMetadataNode highlight = new IIOMetadataNode("highlight"); highlight.setAttribute("r", String.valueOf(settings.getHighlightColor().getRed())); highlight.setAttribute("g", String.valueOf(settings.getHighlightColor().getGreen())); highlight.setAttribute("b", String.valueOf(settings.getHighlightColor().getBlue())); colors.appendChild(highlight); // select IIOMetadataNode select = new IIOMetadataNode("select"); select.setAttribute("r", String.valueOf(settings.getSelectColor().getRed())); select.setAttribute("g", String.valueOf(settings.getSelectColor().getGreen())); select.setAttribute("b", String.valueOf(settings.getSelectColor().getBlue())); colors.appendChild(select); // increased cell border IIOMetadataNode increaseBorder = new IIOMetadataNode("increaseborder"); increaseBorder.setAttribute("r", String.valueOf(settings.getIncreaseBorder().getRed())); increaseBorder.setAttribute("g", String.valueOf(settings.getIncreaseBorder().getGreen())); increaseBorder.setAttribute("b", String.valueOf(settings.getIncreaseBorder().getBlue())); colors.appendChild(increaseBorder); // decreased cell border IIOMetadataNode decreaseBorder = new IIOMetadataNode("decreaseborder"); decreaseBorder.setAttribute("r", String.valueOf(settings.getDecreaseBorder().getRed())); decreaseBorder.setAttribute("g", String.valueOf(settings.getDecreaseBorder().getGreen())); decreaseBorder.setAttribute("b", String.valueOf(settings.getDecreaseBorder().getBlue())); colors.appendChild(decreaseBorder); // axis cells IIOMetadataNode axis = new IIOMetadataNode("axis"); axis.setAttribute("r", String.valueOf(settings.getAxisColor().getRed())); axis.setAttribute("g", String.valueOf(settings.getAxisColor().getGreen())); axis.setAttribute("b", String.valueOf(settings.getAxisColor().getBlue())); colors.appendChild(axis); // warning cells IIOMetadataNode warning = new IIOMetadataNode("warning"); warning.setAttribute("r", String.valueOf(settings.getWarningColor().getRed())); warning.setAttribute("g", String.valueOf(settings.getWarningColor().getGreen())); warning.setAttribute("b", String.valueOf(settings.getWarningColor().getBlue())); colors.appendChild(warning); tableDisplay.appendChild(colors); return tableDisplay; } private IIOMetadataNode buildLogger(Settings settings) { IIOMetadataNode loggerSettings = new IIOMetadataNode("logger"); loggerSettings.setAttribute("locale", settings.getLocale()); // serial connection IIOMetadataNode serial = new IIOMetadataNode("serial"); serial.setAttribute("port", settings.getLoggerPortDefault()); serial.setAttribute("refresh", String.valueOf(settings.getRefreshMode())); loggerSettings.appendChild(serial); // Protocol connection IIOMetadataNode protocol = new IIOMetadataNode("protocol"); protocol.setAttribute("name", settings.getLoggerProtocol()); protocol.setAttribute("transport", settings.getTransportProtocol()); protocol.setAttribute("module", settings.getTargetModule()); protocol.setAttribute("fastpoll", String.valueOf(settings.isFastPoll())); protocol.setAttribute("library", settings.getJ2534Device()); loggerSettings.appendChild(protocol); // window maximized IIOMetadataNode maximized = new IIOMetadataNode("maximized"); maximized.setAttribute("value", String.valueOf((settings.isLoggerWindowMaximized()))); loggerSettings.appendChild(maximized); // window size IIOMetadataNode size = new IIOMetadataNode("size"); size.setAttribute("x", String.valueOf(((int) settings.getLoggerWindowSize().getHeight()))); size.setAttribute("y", String.valueOf(((int) settings.getLoggerWindowSize().getWidth()))); size.setAttribute("divider", String.valueOf(((int) settings.getDividerLocation()))); loggerSettings.appendChild(size); // window location IIOMetadataNode location = new IIOMetadataNode("location"); location.setAttribute("x", String.valueOf(((int) settings.getLoggerWindowLocation().getX()))); location.setAttribute("y", String.valueOf(((int) settings.getLoggerWindowLocation().getY()))); loggerSettings.appendChild(location); // last tab index IIOMetadataNode tabs = new IIOMetadataNode("tabs"); tabs.setAttribute("selected", String.valueOf(settings.getLoggerSelectedTabIndex())); tabs.setAttribute("showlist", String.valueOf(settings.getLoggerParameterListState())); loggerSettings.appendChild(tabs); // definition path IIOMetadataNode definition = new IIOMetadataNode("definition"); definition.setAttribute("path", settings.getLoggerDefinitionFilePath()); loggerSettings.appendChild(definition); // profile path IIOMetadataNode profile = new IIOMetadataNode("profile"); profile.setAttribute("path", settings.getLoggerProfileFilePath()); loggerSettings.appendChild(profile); // file logging IIOMetadataNode filelogging = new IIOMetadataNode("filelogging"); filelogging.setAttribute("path", settings.getLoggerOutputDirPath()); filelogging.setAttribute("switchid", settings.getFileLoggingControllerSwitchId()); filelogging.setAttribute("active", String.valueOf(settings.isFileLoggingControllerSwitchActive())); filelogging.setAttribute("absolutetimestamp", String.valueOf(settings.isFileLoggingAbsoluteTimestamp())); loggerSettings.appendChild(filelogging); // debug level IIOMetadataNode debug = new IIOMetadataNode("debug"); debug.setAttribute("level", settings.getLoggerDebuggingLevel()); loggerSettings.appendChild(debug); // plugin ports Map<String, String> pluginPorts = settings.getLoggerPluginPorts(); if (pluginPorts != null && !pluginPorts.isEmpty()) { IIOMetadataNode plugins = new IIOMetadataNode("plugins"); for (Map.Entry<String, String> entry : pluginPorts.entrySet()) { IIOMetadataNode plugin = new IIOMetadataNode("plugin"); plugin.setAttribute("id", entry.getKey()); plugin.setAttribute("port", entry.getValue()); plugins.appendChild(plugin); } final Map<String, IntfKitSensor> phidgets = settings.getPhidgetSensors(); if (phidgets != null && !phidgets.isEmpty()) { final Collection<IntfKitSensor> sensors = phidgets.values(); IIOMetadataNode phidgetsNode = new IIOMetadataNode("phidgets"); for (IntfKitSensor entry : sensors) { IIOMetadataNode phidgetNode = new IIOMetadataNode("phidget"); phidgetNode.setAttribute("name", entry.getInputName()); phidgetNode.setAttribute("number", String.valueOf(entry.getInputNumber())); phidgetNode.setAttribute("units", entry.getUnits()); phidgetNode.setAttribute("expression", entry.getExpression()); phidgetNode.setAttribute("format", entry.getFormat()); phidgetNode.setAttribute("min", String.valueOf(entry.getMinValue())); phidgetNode.setAttribute("max", String.valueOf(entry.getMaxValue())); phidgetNode.setAttribute("step", String.valueOf(entry.getStepValue())); phidgetsNode.appendChild(phidgetNode); } plugins.appendChild(phidgetsNode); } loggerSettings.appendChild(plugins); } // Dashboard Gauge Index IIOMetadataNode gaugeindex = new IIOMetadataNode("gauge"); gaugeindex.setAttribute("index", String.valueOf(((int) settings.getLoggerSelectedGaugeIndex()))); loggerSettings.appendChild(gaugeindex); return loggerSettings; } private IIOMetadataNode buildTableClipboardFormat(Settings settings) { // Head Node IIOMetadataNode tableClipboardFormatSetting = new IIOMetadataNode(Settings.TABLE_CLIPBOARD_FORMAT_ELEMENT); tableClipboardFormatSetting.setAttribute(Settings.TABLE_CLIPBOARD_FORMAT_ATTRIBUTE, settings.getTableClipboardFormat()); // Table Child IIOMetadataNode tableFormatSetting = new IIOMetadataNode(Settings.TABLE_ELEMENT); // Table1D Child IIOMetadataNode table1DFormatSetting = new IIOMetadataNode(Settings.TABLE1D_ELEMENT); // Table2D Child IIOMetadataNode table2DFormatSetting = new IIOMetadataNode(Settings.TABLE2D_ELEMENT); // Table3D Child IIOMetadataNode table3DFormatSetting = new IIOMetadataNode(Settings.TABLE3D_ELEMENT); tableFormatSetting.setAttribute(Settings.TABLE_HEADER_ATTRIBUTE, settings.getTableHeader()); table1DFormatSetting.setAttribute(Settings.TABLE_HEADER_ATTRIBUTE, settings.getTable1DHeader()); table2DFormatSetting.setAttribute(Settings.TABLE_HEADER_ATTRIBUTE, settings.getTable2DHeader()); table3DFormatSetting.setAttribute(Settings.TABLE_HEADER_ATTRIBUTE, settings.getTable3DHeader()); tableClipboardFormatSetting.appendChild(tableFormatSetting); tableClipboardFormatSetting.appendChild(table1DFormatSetting); tableClipboardFormatSetting.appendChild(table2DFormatSetting); tableClipboardFormatSetting.appendChild(table3DFormatSetting); return tableClipboardFormatSetting; } private IIOMetadataNode buildIcons(Settings settings) { // Head Node IIOMetadataNode iconsSettings = new IIOMetadataNode(Settings.ICONS_ELEMENT_NAME); // Editor Icons Child IIOMetadataNode editorIconsScaleSettings = new IIOMetadataNode(Settings.EDITOR_ICONS_ELEMENT_NAME); editorIconsScaleSettings.setAttribute(Settings.EDITOR_ICONS_SCALE_ATTRIBUTE_NAME, String.valueOf(settings.getEditorIconScale())); // Table Icons Child IIOMetadataNode tableIconsScaleSettings = new IIOMetadataNode(Settings.TABLE_ICONS_ELEMENT_NAME); tableIconsScaleSettings.setAttribute(Settings.TABLE_ICONS_SCALE_ATTRIBUTE_NAME, String.valueOf(settings.getTableIconScale())); iconsSettings.appendChild(editorIconsScaleSettings); iconsSettings.appendChild(tableIconsScaleSettings); return iconsSettings; } }