1
package org.herac.tuxguitar.gui.editors.chord.xml;
4
import java.io.FileNotFoundException;
5
import java.io.FileOutputStream;
6
import java.util.Iterator;
9
import javax.xml.parsers.DocumentBuilder;
10
import javax.xml.parsers.DocumentBuilderFactory;
11
import javax.xml.parsers.FactoryConfigurationError;
12
import javax.xml.parsers.ParserConfigurationException;
13
import javax.xml.transform.OutputKeys;
14
import javax.xml.transform.Result;
15
import javax.xml.transform.Source;
16
import javax.xml.transform.Transformer;
17
import javax.xml.transform.TransformerConfigurationException;
18
import javax.xml.transform.TransformerException;
19
import javax.xml.transform.TransformerFactory;
20
import javax.xml.transform.dom.DOMSource;
21
import javax.xml.transform.stream.StreamResult;
23
import org.herac.tuxguitar.song.models.Chord;
24
import org.w3c.dom.Attr;
25
import org.w3c.dom.Document;
26
import org.w3c.dom.Node;
28
public class ChordWriter {
30
private static final String CHORD_LIST_TAG = "chords";
31
private static final String CHORD_TAG = "chord";
32
private static final String CHORD_NAME_ATTRIBUTE = "name";
33
private static final String CHORD_STRINGS_ATTRIBUTE = "strings";
34
private static final String STRING_TAG = "string";
35
private static final String STRING_NUMBER_ATTRIBUTE = "number";
36
private static final String STRING_FRET_ATTRIBUTE = "fret";
38
public static void setChords(List chords,String fileName) {
39
File file = new File(fileName);
41
Document doc = createDocument();
42
setChords(chords,doc);
43
saveDocument(doc,file);
47
public static Document createDocument() {
48
Document document = null;
49
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
51
DocumentBuilder builder = factory.newDocumentBuilder();
52
document = builder.newDocument();
53
}catch (ParserConfigurationException pce) {
54
pce.printStackTrace();
61
public static void saveDocument(Document document,File file) {
63
FileOutputStream fs = new FileOutputStream(file);
66
TransformerFactory xformFactory = TransformerFactory.newInstance();
67
Transformer idTransform = xformFactory.newTransformer();
68
Source input = new DOMSource(document);
69
Result output = new StreamResult(fs);
70
idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
71
idTransform.transform(input, output);
73
} catch (FactoryConfigurationError e) {
75
} catch (TransformerConfigurationException e) {
77
} catch (TransformerException e) {
79
} catch (FileNotFoundException e) {
86
* Write chords to xml file
88
private static void setChords(List chords,Document document){
90
Node chordsNode = document.createElement(CHORD_LIST_TAG);
92
Iterator it = chords.iterator();
94
Chord chord = (Chord)it.next();
97
Node chordNode = document.createElement(CHORD_TAG);
98
chordsNode.appendChild(chordNode);
101
Attr nameAttr = document.createAttribute(CHORD_NAME_ATTRIBUTE);
102
nameAttr.setNodeValue( chord.getName());
103
chordNode.getAttributes().setNamedItem(nameAttr);
106
Attr stringsAttr = document.createAttribute(CHORD_STRINGS_ATTRIBUTE);
107
stringsAttr.setNodeValue(Integer.toString(chord.getStrings().length));
108
chordNode.getAttributes().setNamedItem(stringsAttr);
110
for(int i = 0;i < chord.getStrings().length; i++){
112
Node stringNode = document.createElement(STRING_TAG);
113
chordNode.appendChild(stringNode);
116
Attr numberAttr = document.createAttribute(STRING_NUMBER_ATTRIBUTE);
117
numberAttr.setNodeValue(Integer.toString(i));
118
stringNode.getAttributes().setNamedItem(numberAttr);
121
Attr fretAttr = document.createAttribute(STRING_FRET_ATTRIBUTE);
122
fretAttr.setNodeValue(Integer.toString(chord.getFretValue(i)));
123
stringNode.getAttributes().setNamedItem(fretAttr);
127
document.appendChild(chordsNode);