package org.herac.tuxguitar.gui.system.keybindings.xml;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.log4j.Logger;
import org.herac.tuxguitar.gui.editors.chord.ChordSelector;
import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
public class KeyBindingWriter {
private static final String SHORTCUT_ATTRIBUTE_ACTION = "action";
private static final String SHORTCUT_ATTRIBUTE_KEY = "key";
private static final String SHORTCUT_ATTRIBUTE_MASK = "mask";
private static final String SHORTCUT_ROOT = "shortcuts";
private static final String SHORTCUT_TAG = "shortcut";
public static Document createDocument() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
return document;
} catch (Throwable throwable) {
LOG.error(throwable);
}
return null;
}
/** The Logger for this class. */
public static final transient Logger LOG = Logger
.getLogger(KeyBindingWriter.class);
public static void saveDocument(Document document, File file) {
try {
FileOutputStream fs = new FileOutputStream(file);
// Write it out again
TransformerFactory xformFactory = TransformerFactory.newInstance();
Transformer idTransform = xformFactory.newTransformer();
Source input = new DOMSource(document);
Result output = new StreamResult(fs);
idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
idTransform.transform(input, output);
} catch (Throwable throwable) {
LOG.error(throwable);
}
}
/**
* Write shortcuts to xml file
*
* @param shortcutsNode
* @return
*/
private static void setBindings(List<KeyBindingAction> list, Document document) {
Node shortcutsNode = document.createElement(SHORTCUT_ROOT);
for (final KeyBindingAction keyBindingAction : list) {
Node node = document.createElement(SHORTCUT_TAG);
shortcutsNode.appendChild(node);
Attr attrKey = document.createAttribute(SHORTCUT_ATTRIBUTE_KEY);
Attr attrMask = document.createAttribute(SHORTCUT_ATTRIBUTE_MASK);
Attr attrAction = document.createAttribute(SHORTCUT_ATTRIBUTE_ACTION);
attrKey.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding()
.getKey()));
attrMask.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding()
.getMask()));
attrAction.setNodeValue(keyBindingAction.getAction());
node.getAttributes().setNamedItem(attrKey);
node.getAttributes().setNamedItem(attrMask);
node.getAttributes().setNamedItem(attrAction);
}
document.appendChild(shortcutsNode);
}
public static void setBindings(List<KeyBindingAction> list, String fileName) {
try {
File file = new File(fileName);
Document doc = createDocument();
setBindings(list, doc);
saveDocument(doc, file);
} catch (Throwable throwable) {
LOG.error(throwable);
}
}
}