Subversion Repositories svn.mios

Rev

Rev 720 | Rev 722 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 720 Rev 721
Line 1... Line 1...
1
package org.midibox.midi.xml;
1
package org.midibox.midi.xml;
2
-
 
3
import java.io.File;
-
 
4
import java.io.FileOutputStream;
-
 
5
-
 
6
import javax.xml.parsers.DocumentBuilder;
-
 
7
import javax.xml.parsers.DocumentBuilderFactory;
-
 
8
import javax.xml.transform.Transformer;
-
 
9
import javax.xml.transform.TransformerFactory;
-
 
10
import javax.xml.transform.dom.DOMSource;
-
 
11
import javax.xml.transform.stream.StreamResult;
-
 
12
2
13
import org.midibox.midi.MidiFilter;
3
import org.midibox.midi.MidiFilter;
14
import org.w3c.dom.Document;
4
import org.midibox.utils.xml.XMLUtils;
15
import org.w3c.dom.Element;
5
import org.w3c.dom.Element;
16
import org.w3c.dom.NamedNodeMap;
-
 
17
import org.w3c.dom.Node;
6
import org.w3c.dom.Node;
18
import org.w3c.dom.NodeList;
-
 
19
7
20
public class MidiFilterXML {
8
public class MidiFilterXML extends XMLUtils {
21
9
22
    public static void loadMidiFilter(MidiFilter midiFilter, File file) {
10
    protected MidiFilter midiFilter;
23
11
   
24
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
12
    protected String voiceMessagesTag = "voiceMessages";
25
                .newInstance();
-
 
26
13
27
        try {
14
    protected String voiceMessageTag = "voiceMessage";
28
15
29
            DocumentBuilder documentBuilder = documentBuilderFactory
16
    protected String channelsTag = "channels";
30
                    .newDocumentBuilder();
-
 
31
17
32
            Document doc = documentBuilder.parse(file);
18
    protected String channelTag = "channel";
33
19
34
            loadMidiFilter(midiFilter, doc);
20
    protected String controlChangeMessagesTag = "controlChangeMessages";
35
21
36
        } catch (Exception e) {
22
    protected String controlChangeMessageTag = "controlChangeMessage";
37
            e.printStackTrace();
-
 
38
        }
-
 
39
    }
-
 
40
23
41
    public static void loadMidiFilter(MidiFilter midiFilter, Node node) {
24
    protected String systemCommonMessagesTag = "systemCommonMessages";
42
25
43
        NodeList children = node.getChildNodes();
26
    protected String systemCommonMessageTag = "systemCommonMessage";
44
27
45
        for (int n = 0; n < children.getLength(); n++) {
28
    protected String systemRealtimeMessagesTag = "systemRealtimeMessages";
46
29
47
            loadMidiFilter(midiFilter, children.item(n));
30
    protected String systemRealtimeMessageTag = "systemRealtimeMessage";
48
        }
-
 
49
31
50
        switch (node.getNodeType()) {
32
    protected String sysexMessagesTag = "sysexMessages";
51
33
52
        case Node.ELEMENT_NODE:
-
 
53
            parseElement(midiFilter, (Element) node);
34
    protected String metaMessagesTag = "metaMessage";
54
        }
-
 
55
    }
-
 
56
35
57
    protected static void parseElement(MidiFilter midiFilter, Element element) {
36
    protected String numberAttr = "number";
58
37
59
        String name = element.getNodeName();
38
    protected String enableAttr = "enable";
60
39
61
        NamedNodeMap attributes = element.getAttributes();
40
    public MidiFilterXML(MidiFilter midiFilter, String rootElementTag) {
62
41
63
        if (name == "channels") {
42
        super(rootElementTag);
64
43
65
        } else if (name == "channel") {
44
        this.midiFilter = midiFilter;
66
45
       
-
 
46
        tags.add(voiceMessagesTag);
-
 
47
        tags.add(voiceMessageTag);
-
 
48
        tags.add(channelsTag);
-
 
49
        tags.add(channelTag);
-
 
50
        tags.add(controlChangeMessagesTag);
-
 
51
        tags.add(controlChangeMessageTag);
-
 
52
        tags.add(systemCommonMessagesTag);
-
 
53
        tags.add(systemCommonMessageTag);
67
            Node number = attributes.getNamedItem("number");
54
        tags.add(systemRealtimeMessagesTag);
-
 
55
        tags.add(systemRealtimeMessageTag);
-
 
56
        tags.add(sysexMessagesTag);
-
 
57
        tags.add(metaMessagesTag);
-
 
58
    }
68
59
69
            Node enable = attributes.getNamedItem("enable");
60
    protected void parseElement(Element element) {
70
61
       
71
            if (number != null && enable != null) {
62
        super.parseElement(element);
72
63
73
                int n = Integer.parseInt(number.getTextContent());
64
        String name = element.getNodeName();
74
65
75
                boolean e = Boolean.parseBoolean(enable.getTextContent());
66
        String numberString = element.getAttribute(numberAttr);
76
67
77
                midiFilter.setChannel(n, e);
68
        String enableString = element.getAttribute(enableAttr);
78
            }
-
 
79
69
80
        } else if (name == "voiceMessages") {
70
        int n = 0;
81
           
71
82
            Node enable = attributes.getNamedItem("enable");
72
        boolean e = false;
83
           
73
84
            if (enable != null) {
74
        if (numberString != "") {
85
75
86
                boolean e = Boolean.parseBoolean(enable.getTextContent());
76
            n = Integer.parseInt(numberString);
-
 
77
        }
87
78
-
 
79
        if (enableString != "") {
-
 
80
88
                midiFilter.setVoiceMessages(e);
81
            e = Boolean.parseBoolean(enableString);
89
            }
82
        }
90
83
91
        } else if (name == "voiceMessage") {
84
        if (name == channelsTag) {
92
           
85
93
            Node number = attributes.getNamedItem("number");
86
        } else if (name == channelTag) {
94
87
95
            Node enable = attributes.getNamedItem("enable");
88
            midiFilter.setChannel(n, e);
96
89
97
            if (number != null && enable != null) {
90
        } else if (name == voiceMessagesTag) {
98
91
99
                int n = Integer.parseInt(number.getTextContent());
92
            midiFilter.setVoiceMessages(e);
100
93
101
                boolean e = Boolean.parseBoolean(enable.getTextContent());
94
        } else if (name == voiceMessageTag) {
102
95
103
                midiFilter.setVoiceMessage(n, e);
96
            midiFilter.setVoiceMessage(n, e);
104
            }
-
 
105
97
106
        } else if (name == "systemCommonMessages") {
98
        } else if (name == systemCommonMessagesTag) {
107
           
-
 
108
            Node enable = attributes.getNamedItem("enable");
-
 
109
           
-
 
110
            if (enable != null) {
-
 
111
-
 
112
                boolean e = Boolean.parseBoolean(enable.getTextContent());
-
 
113
99
114
                midiFilter.setSystemCommonMessages(e);
100
            midiFilter.setSystemCommonMessages(e);
115
            }
-
 
116
101
117
        } else if (name == "systemCommonMessage") {
102
        } else if (name == systemCommonMessageTag) {
118
           
-
 
119
            Node number = attributes.getNamedItem("number");
-
 
120
-
 
121
            Node enable = attributes.getNamedItem("enable");
-
 
122
-
 
123
            if (number != null && enable != null) {
-
 
124
-
 
125
                int n = Integer.parseInt(number.getTextContent());
-
 
126
-
 
127
                boolean e = Boolean.parseBoolean(enable.getTextContent());
-
 
128
103
129
                midiFilter.setSystemCommonMessage(n, e);
104
            midiFilter.setSystemCommonMessage(n, e);
130
            }
-
 
131
105
132
        } else if (name == "systemRealtimeMessages") {
106
        } else if (name == systemRealtimeMessagesTag) {
133
-
 
134
            Node enable = attributes.getNamedItem("enable");
-
 
135
           
-
 
136
            if (enable != null) {
-
 
137
-
 
138
                boolean e = Boolean.parseBoolean(enable.getTextContent());
-
 
139
107
140
                midiFilter.setSystemRealtimeMessages(e);
108
            midiFilter.setSystemRealtimeMessages(e);
141
            }
-
 
142
           
109
143
        } else if (name == "systemRealtimeMessage") {
110
        } else if (name == systemRealtimeMessageTag) {
144
           
-
 
145
            Node number = attributes.getNamedItem("number");
-
 
146
-
 
147
            Node enable = attributes.getNamedItem("enable");
-
 
148
-
 
149
            if (number != null && enable != null) {
-
 
150
-
 
151
                int n = Integer.parseInt(number.getTextContent());
-
 
152
-
 
153
                boolean e = Boolean.parseBoolean(enable.getTextContent());
-
 
154
111
155
                midiFilter.setSystemRealtimeMessage(n, e);
112
            midiFilter.setSystemRealtimeMessage(n, e);
156
            }
-
 
157
113
158
        } else if (name == "sysexMessages") {
114
        } else if (name == sysexMessagesTag) {
159
           
-
 
160
            Node enable = attributes.getNamedItem("enable");
-
 
161
-
 
162
            if (enable != null) {
-
 
163
-
 
164
                boolean e = Boolean.parseBoolean(enable.getTextContent());
-
 
165
115
166
                midiFilter.setSysexMessages(e);
116
            midiFilter.setSysexMessages(e);
167
            }
-
 
168
117
169
        } else if (name == "metaMessages") {
118
        } else if (name == metaMessagesTag) {
170
-
 
171
            Node enable = attributes.getNamedItem("enable");
-
 
172
           
-
 
173
            if (enable != null) {
-
 
174
-
 
175
                boolean e = Boolean.parseBoolean(enable.getTextContent());
-
 
176
119
177
                midiFilter.setMetaMessages(e);
120
            midiFilter.setMetaMessages(e);
178
            }
-
 
179
           
121
180
        } else if (name == "controlChangeMessages") {
122
        } else if (name == controlChangeMessagesTag) {
181
123
182
        } else if (name == "controlChangeMessage") {
124
        } else if (name == controlChangeMessageTag) {
183
-
 
184
            Node number = attributes.getNamedItem("number");
-
 
185
-
 
186
            Node enable = attributes.getNamedItem("enable");
-
 
187
-
 
188
            if (number != null && enable != null) {
-
 
189
-
 
190
                int n = Integer.parseInt(number.getTextContent());
-
 
191
-
 
192
                boolean e = Boolean.parseBoolean(enable.getTextContent());
-
 
193
125
194
                midiFilter.setControlChange(n, e);
126
            midiFilter.setControlChange(n, e);
195
            }
127
        }
196
        }
128
    }
197
    }
-
 
198
-
 
199
    public static void saveMidiFilter(MidiFilter midiFilter, File file) {
-
 
200
-
 
201
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
-
 
202
                .newInstance();
-
 
203
-
 
204
        try {
-
 
205
-
 
206
            DocumentBuilder documentBuilder = documentBuilderFactory
-
 
207
                    .newDocumentBuilder();
-
 
208
-
 
209
            Document document = documentBuilder.newDocument();
-
 
210
-
 
211
            saveMidiFilter(midiFilter, document);
-
 
212
-
 
213
            TransformerFactory transformerFactory = TransformerFactory
-
 
214
                    .newInstance();
-
 
215
-
 
216
            Transformer transformer = transformerFactory.newTransformer();
-
 
217
-
 
218
            transformer.transform(new DOMSource(document), new StreamResult(
-
 
219
                    new FileOutputStream(file)));
-
 
220
-
 
221
        } catch (Exception e) {
-
 
222
            e.printStackTrace();
-
 
223
        }
-
 
224
-
 
225
    }
-
 
226
-
 
227
    public static void saveMidiFilter(MidiFilter midiFilter, Node node) {
-
 
228
-
 
229
        Document document;
-
 
230
-
 
231
        if (node instanceof Document) {
-
 
232
-
 
233
            document = (Document) node;
-
 
234
-
 
235
        } else {
-
 
236
            document = node.getOwnerDocument();
-
 
237
        }
-
 
238
-
 
239
        Node midiFilterElement = document.createElement("midiFilter");
-
 
240
-
 
241
        node.appendChild(midiFilterElement);
-
 
242
       
129
-
 
130
    public void saveXML(Node node) {
243
       
131
-
 
132
        super.saveXML(node);
244
       
133
245
        Element voiceMessagesElement = document.createElement("voiceMessages");
134
        Element voiceMessagesElement = document.createElement(voiceMessagesTag);
246
135
247
        midiFilterElement.appendChild(voiceMessagesElement);
136
        rootElement.appendChild(voiceMessagesElement);
248
       
137
249
        voiceMessagesElement.setAttribute("enable", midiFilter.isVoiceMessages() ? "true" : "false");
138
        voiceMessagesElement.setAttribute(enableAttr, midiFilter
-
 
139
                .isVoiceMessages() ? "true" : "false");
250
140
251
        for (int c = 0; c < midiFilter.getVoiceMessages().length; c++) {
141
        for (int c = 0; c < midiFilter.getVoiceMessages().length; c++) {
252
142
253
            Element voiceMessage = document.createElement("voiceMessage");
143
            Element voiceMessage = document.createElement(voiceMessageTag);
254
144
255
            voiceMessagesElement.appendChild(voiceMessage);
145
            voiceMessagesElement.appendChild(voiceMessage);
256
146
257
            voiceMessage.setAttribute("number", "" + ((c | 8) << 4) );
147
            voiceMessage.setAttribute(numberAttr, "" + ((c | 8) << 4));
258
148
259
            voiceMessage.setAttribute("enable", (midiFilter.getVoiceMessages()[c]) ? "true"
149
            voiceMessage.setAttribute(enableAttr, (midiFilter
260
                    : "false");
150
                    .getVoiceMessages()[c]) ? "true" : "false");
261
        }
151
        }
262
152
263
        Node controlChangeMessagesElement = document
153
        Element controlChangeMessagesElement = document
264
        .createElement("controlChangeMessages");
154
                .createElement(controlChangeMessagesTag);
265
155
266
        voiceMessagesElement.appendChild(controlChangeMessagesElement);
156
        voiceMessagesElement.appendChild(controlChangeMessagesElement);
267
       
157
268
        for (int cc = 0; cc < midiFilter.getControlChangeMessages().length; cc++) {
158
        for (int cc = 0; cc < midiFilter.getControlChangeMessages().length; cc++) {
269
       
159
270
            Element controlChangeMessage = document
160
            Element controlChangeMessage = document
271
                    .createElement("controlChangeMessage");
161
                    .createElement(controlChangeMessageTag);
272
       
162
273
            controlChangeMessagesElement.appendChild(controlChangeMessage);
163
            controlChangeMessagesElement.appendChild(controlChangeMessage);
274
       
164
275
            controlChangeMessage.setAttribute("number", "" + (cc));
165
            controlChangeMessage.setAttribute(numberAttr, "" + (cc));
276
       
166
277
            controlChangeMessage.setAttribute("enable",
167
            controlChangeMessage.setAttribute(enableAttr, (midiFilter
278
                    (midiFilter.getControlChangeMessages()[cc]) ? "true" : "false");
168
                    .getControlChangeMessages()[cc]) ? "true" : "false");
279
        }
169
        }
280
       
170
281
       
-
 
282
        Node channelsElement = document.createElement("channels");
171
        Element channelsElement = document.createElement(channelsTag);
283
172
284
        voiceMessagesElement.appendChild(channelsElement);
173
        voiceMessagesElement.appendChild(channelsElement);
285
174
286
        for (int c = 0; c < midiFilter.getChannels().length; c++) {
175
        for (int c = 0; c < midiFilter.getChannels().length; c++) {
287
176
288
            Element channel = document.createElement("channel");
177
            Element channel = document.createElement(channelTag);
289
178
290
            channelsElement.appendChild(channel);
179
            channelsElement.appendChild(channel);
291
180
292
            channel.setAttribute("number", "" + (c + 1));
181
            channel.setAttribute(numberAttr, "" + (c + 1));
293
182
294
            channel.setAttribute("enable", (midiFilter.getChannels()[c]) ? "true"
183
            channel.setAttribute(enableAttr,
295
                    : "false");
184
                    (midiFilter.getChannels()[c]) ? "true" : "false");
296
        }      
185
        }
297
       
186
298
        Element systemCommonMessagesElement = document.createElement("systemCommonMessages");
187
        Element systemCommonMessagesElement = document
-
 
188
                .createElement(systemCommonMessagesTag);
299
189
300
        midiFilterElement.appendChild(systemCommonMessagesElement);
190
        rootElement.appendChild(systemCommonMessagesElement);
301
       
191
302
        systemCommonMessagesElement.setAttribute("enable", midiFilter.isSystemCommonMessages() ? "true" : "false");
192
        systemCommonMessagesElement.setAttribute(enableAttr, midiFilter
-
 
193
                .isSystemCommonMessages() ? "true" : "false");
303
194
304
        for (int c = 0; c < midiFilter.getSystemCommonMessages().length; c++) {
195
        for (int c = 0; c < midiFilter.getSystemCommonMessages().length; c++) {
305
196
306
            Element systemCommonMessage = document.createElement("systemCommonMessage");
197
            Element systemCommonMessage = document
-
 
198
                    .createElement(systemCommonMessageTag);
307
199
308
            systemCommonMessagesElement.appendChild(systemCommonMessage);
200
            systemCommonMessagesElement.appendChild(systemCommonMessage);
309
201
310
            systemCommonMessage.setAttribute("number", "" + (c | 0xF0));
202
            systemCommonMessage.setAttribute(numberAttr, "" + (c | 0xF0));
311
203
312
            systemCommonMessage.setAttribute("enable", (midiFilter.getSystemCommonMessages()[c]) ? "true"
204
            systemCommonMessage.setAttribute(enableAttr, (midiFilter
313
                    : "false");
205
                    .getSystemCommonMessages()[c]) ? "true" : "false");
314
        }
206
        }
315
       
207
-
 
208
        Element systemRealtimeMessagesElement = document
-
 
209
                .createElement(systemRealtimeMessagesTag);
316
       
210
-
 
211
        rootElement.appendChild(systemRealtimeMessagesElement);
317
       
212
318
        Element systemRealtimeMessagesElement = document.createElement("systemRealtimeMessages");
213
        systemRealtimeMessagesElement.setAttribute(enableAttr, midiFilter
319
-
 
320
        midiFilterElement.appendChild(systemRealtimeMessagesElement);      
-
 
321
-
 
322
        systemRealtimeMessagesElement.setAttribute("enable", midiFilter.isSystemRealtimeMessages() ? "true" : "false");
214
                .isSystemRealtimeMessages() ? "true" : "false");
323
215
324
        for (int c = 0; c < midiFilter.getSystemRealtimeMessages().length; c++) {
216
        for (int c = 0; c < midiFilter.getSystemRealtimeMessages().length; c++) {
325
217
326
            Element systemRealtimeMessage = document.createElement("systemRealtimeMessage");
218
            Element systemRealtimeMessage = document
-
 
219
                    .createElement(systemRealtimeMessageTag);
327
220
328
            systemRealtimeMessagesElement.appendChild(systemRealtimeMessage);
221
            systemRealtimeMessagesElement.appendChild(systemRealtimeMessage);
329
222
330
            systemRealtimeMessage.setAttribute("number", "" + ((c + 8 | 0xF0)));
223
            systemRealtimeMessage.setAttribute(numberAttr, ""
-
 
224
                    + ((c + 8 | 0xF0)));
331
225
332
            systemRealtimeMessage.setAttribute("enable", (midiFilter.getSystemRealtimeMessages()[c]) ? "true"
226
            systemRealtimeMessage.setAttribute(enableAttr, (midiFilter
333
                    : "false");
227
                    .getSystemRealtimeMessages()[c]) ? "true" : "false");
334
        }
228
        }
335
       
229
-
 
230
        Element sysexMessagesElement = document.createElement(sysexMessagesTag);
336
       
231
-
 
232
        rootElement.appendChild(sysexMessagesElement);
337
       
233
338
        Element sysexMessagesElement = document.createElement("sysexMessages");
234
        sysexMessagesElement.setAttribute(enableAttr, midiFilter
339
-
 
340
        midiFilterElement.appendChild(sysexMessagesElement);       
-
 
341
-
 
342
        sysexMessagesElement.setAttribute("enable", midiFilter.isSysexMessages() ? "true" : "false");
235
                .isSysexMessages() ? "true" : "false");
343
       
-
 
344
       
-
 
345
       
236
346
        Element metaMessagesElement = document.createElement("metaMessages");
237
        Element metaMessagesElement = document.createElement(metaMessagesTag);
347
238
348
        midiFilterElement.appendChild(metaMessagesElement);    
239
        rootElement.appendChild(metaMessagesElement);
349
240
350
        metaMessagesElement.setAttribute("enable", midiFilter.isMetaMessages() ? "true" : "false");
241
        metaMessagesElement.setAttribute(enableAttr, midiFilter
-
 
242
                .isMetaMessages() ? "true" : "false");
351
    }
243
    }
352
}
244
}