Subversion Repositories svn.mios

Rev

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

Rev 213 Rev 628
Line 18... Line 18...
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
 */
19
 */
20
20
21
package org.midibox.sidlibr;
21
package org.midibox.sidlibr;
22
22
-
 
23
import java.io.File;
23
import java.io.FileInputStream;
24
import java.io.FileInputStream;
24
import java.io.FileOutputStream;
25
import java.io.FileOutputStream;
25
import java.io.IOException;
26
import java.io.IOException;
26
import java.io.File;
-
 
27
27
-
 
28
import javax.sound.midi.Receiver;
-
 
29
import javax.swing.JFileChooser;
28
import javax.swing.*;
30
import javax.swing.JOptionPane;
29
import javax.swing.filechooser.*;
31
import javax.swing.filechooser.FileFilter;
30
32
31
import org.midibox.midi.MidiUtils;
33
import org.midibox.midi.MidiUtils;
32
import org.midibox.sidedit.SIDSysexInfo;
34
import org.midibox.sidedit.SIDSysexInfo;
33
import javax.sound.midi.Receiver;
-
 
34
35
35
public class FileHandler {
36
public class FileHandler {
36
    final JFileChooser fc = new JFileChooser();
37
    final JFileChooser fc = new JFileChooser();
-
 
38
37
    public FileHandler() {
39
    public FileHandler() {
38
        fc.addChoosableFileFilter(new SysExFilter());
40
        fc.addChoosableFileFilter(new SysExFilter());
39
    }
41
    }
40
   
42
41
    public void savePatchBank(Bank b, int bankNumber) {
43
    public void savePatchBank(Bank b, int bankNumber) {
42
        try {
44
        try {
43
            saveData(toByteArray(getBankDumpSysex(b, bankNumber)));
45
            saveData(toByteArray(getBankDumpSysex(b, bankNumber)));
44
        } catch (IOException e) {
46
        } catch (IOException e) {
-
 
47
            JOptionPane.showMessageDialog(null,
45
            JOptionPane.showMessageDialog(null,"An error has occurred while writing the file!","Error",JOptionPane.ERROR_MESSAGE);
48
                    "An error has occurred while writing the file!", "Error",
-
 
49
                    JOptionPane.ERROR_MESSAGE);
46
        }
50
        }
47
    }
51
    }
48
   
52
49
    public void saveEnsembleBank() {
53
    public void saveEnsembleBank() {
50
       
54
Line 52... Line 56...
52
   
56
53
    public void savePatch(Patch p, int bankNumber, int patchNumber) {
57
    public void savePatch(Patch p, int bankNumber, int patchNumber) {
54
        try {
58
        try {
55
            saveData(toByteArray(getPatchDumpSysex(p, bankNumber, patchNumber)));
59
            saveData(toByteArray(getPatchDumpSysex(p, bankNumber, patchNumber)));
56
        } catch (IOException e) {
60
        } catch (IOException e) {
-
 
61
            JOptionPane.showMessageDialog(null,
57
            JOptionPane.showMessageDialog(null,"An error has occurred while writing the file!","Error",JOptionPane.ERROR_MESSAGE);
62
                    "An error has occurred while writing the file!", "Error",
-
 
63
                    JOptionPane.ERROR_MESSAGE);
58
        }
64
        }
59
    }
65
    }
60
   
66
61
    public void saveEnsemble() {
67
    public void saveEnsemble() {
62
       
68
Line 66... Line 72...
66
        Bank b = null;     
72
        Bank b = null;
67
        try {
73
        try {
68
            byte[] data = loadData();
74
            byte[] data = loadData();
69
            if (data!=null) {
75
            if (data != null) {
70
                String s = MidiUtils.getHexString(data).replace(" ", "");  
76
                String s = MidiUtils.getHexString(data).replace(" ", "");
71
                if ((s.length()!= 128*Bank.patchSize)&&(s.length()!= 64*Bank.patchSize)) {
77
                if ((s.length() != 128 * Bank.patchSize)
-
 
78
                        && (s.length() != 64 * Bank.patchSize)) {
-
 
79
                    JOptionPane
-
 
80
                            .showMessageDialog(
-
 
81
                                    null,
72
                    JOptionPane.showMessageDialog(null,"This file does not contain a bank with 64 or 128 valid patches!","Error",JOptionPane.ERROR_MESSAGE);                   
82
                                    "This file does not contain a bank with 64 or 128 valid patches!",
-
 
83
                                    "Error", JOptionPane.ERROR_MESSAGE);
73
                } else {               
84
                } else {
74
                    Bank tempBank = new Bank(receiver);
85
                    Bank tempBank = new Bank(receiver);
75
                    String status = tempBank.parseBankSyx(s);
86
                    String status = tempBank.parseBankSyx(s);
76
                    if (statusCheck(status)) {
87
                    if (statusCheck(status)) {
77
                        b = tempBank;                      
88
                        b = tempBank;
78
                    }      
89
                    }
79
                }
90
                }
80
            }
91
            }
81
        } catch (IOException e) {
92
        } catch (IOException e) {
-
 
93
            JOptionPane.showMessageDialog(null,
82
            JOptionPane.showMessageDialog(null,"An error has occurred while reading the file!","Error",JOptionPane.ERROR_MESSAGE);
94
                    "An error has occurred while reading the file!", "Error",
-
 
95
                    JOptionPane.ERROR_MESSAGE);
83
        }
96
        }
84
        return b;
97
        return b;
85
    }
98
    }
86
   
99
87
    public Patch loadPatch(Receiver receiver) {
100
    public Patch loadPatch(Receiver receiver) {
88
        Patch p = null;
101
        Patch p = null;
89
        try {
102
        try {
90
            byte[] data = loadData();
103
            byte[] data = loadData();
91
            if (data!=null) {
104
            if (data != null) {
92
                String s = MidiUtils.getHexString(data).replace(" ", "");;
105
                String s = MidiUtils.getHexString(data).replace(" ", "");
-
 
106
                ;
93
                if (s.length()!= Bank.patchSize) {
107
                if (s.length() != Bank.patchSize) {
-
 
108
                    JOptionPane.showMessageDialog(null,
94
                    JOptionPane.showMessageDialog(null,"This file does not contain a valid patch!","Error",JOptionPane.ERROR_MESSAGE);
109
                            "This file does not contain a valid patch!",
-
 
110
                            "Error", JOptionPane.ERROR_MESSAGE);
95
                } else {               
111
                } else {
96
                    Patch tempPatch = new Patch(receiver); 
112
                    Patch tempPatch = new Patch(receiver);
97
                    String status = tempPatch.parsePatch(s);
113
                    String status = tempPatch.parsePatch(s);
98
                    if (statusCheck(status)) {
114
                    if (statusCheck(status)) {
99
                        p = tempPatch;                     
115
                        p = tempPatch;
100
                    }      
116
                    }
101
                }
117
                }
102
            }
118
            }
103
        } catch (IOException e) {
119
        } catch (IOException e) {
-
 
120
            JOptionPane.showMessageDialog(null,
104
            JOptionPane.showMessageDialog(null,"An error has occurred while reading the file!","Error",JOptionPane.ERROR_MESSAGE);
121
                    "An error has occurred while reading the file!", "Error",
-
 
122
                    JOptionPane.ERROR_MESSAGE);
105
        }
123
        }
106
        return p;
124
        return p;
107
    }
125
    }
108
   
126
109
    public void loadEnsemble() {
127
    public void loadEnsemble() {
Line 118... Line 136...
118
        boolean write = false;
136
        boolean write = false;
119
        while (!write) {
137
        while (!write) {
120
            int returnVal = fc.showSaveDialog(null);
138
            int returnVal = fc.showSaveDialog(null);
121
            if (returnVal == JFileChooser.APPROVE_OPTION) {
139
            if (returnVal == JFileChooser.APPROVE_OPTION) {
122
                if (fc.getSelectedFile().exists ()) {
140
                if (fc.getSelectedFile().exists()) {
123
                    int response = JOptionPane.showConfirmDialog (null,"File already exists! Do you want to overwrite?","Overwrite?",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
141
                    int response = JOptionPane.showConfirmDialog(null,
-
 
142
                            "File already exists! Do you want to overwrite?",
-
 
143
                            "Overwrite?", JOptionPane.YES_NO_OPTION,
-
 
144
                            JOptionPane.QUESTION_MESSAGE);
124
                    if (response == JOptionPane.YES_OPTION) {
145
                    if (response == JOptionPane.YES_OPTION) {
125
                        write = true;    
146
                        write = true;
126
                    }
147
                    }
127
                 } else {
148
                } else {
128
                     write = true;  
149
                    write = true;
Line 183... Line 204...
183
        if (patchStr.length()==1) {
204
        if (patchStr.length() == 1) {
184
            patchStr = "0" + patchStr;
205
            patchStr = "0" + patchStr;
185
        }      
206
        }
186
        String strMessage = SIDSysexInfo.hardPatchDumpSysex;
207
        String strMessage = SIDSysexInfo.hardPatchDumpSysex;
187
        strMessage = strMessage.replace("<device>", "00");
208
        strMessage = strMessage.replace("<device>", "00");
188
        strMessage = strMessage.replace("<bank>", "0" + Integer.toHexString(bankNumber));  
209
        strMessage = strMessage.replace("<bank>", "0"
-
 
210
                + Integer.toHexString(bankNumber));
189
        strMessage = strMessage.replace("<patch>", patchStr);
211
        strMessage = strMessage.replace("<patch>", patchStr);
190
        strMessage = strMessage.replace("<data><checksum>", dataStr);      
212
        strMessage = strMessage.replace("<data><checksum>", dataStr);
191
        return strMessage;
213
        return strMessage;
192
    }
214
    }
193
   
215
194
    private byte[] toByteArray(String s) {
216
    private byte[] toByteArray(String s) {
195
        int nLengthInBytes = s.length() / 2;
217
        int nLengthInBytes = s.length() / 2;
196
        byte[]  abMessage = new byte[nLengthInBytes];
218
        byte[] abMessage = new byte[nLengthInBytes];
197
        for (int i = 0; i < nLengthInBytes; i++)
219
        for (int i = 0; i < nLengthInBytes; i++) {
198
        {
-
 
199
            abMessage[i] = (byte) Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16);             
220
            abMessage[i] = (byte) Integer.parseInt(s
-
 
221
                    .substring(i * 2, i * 2 + 2), 16);
200
        }      
222
        }
201
        return abMessage;
223
        return abMessage;
202
    }
224
    }
203
   
225
204
    private boolean statusCheck(String status) {
226
    private boolean statusCheck(String status) {
205
        boolean b = false;
227
        boolean b = false;
206
        if (status=="succesful") {
228
        if (status == "succesful") {
207
            b = true;
229
            b = true;
208
        } else if (status=="checksum error") {
230
        } else if (status == "checksum error") {
209
            JOptionPane.showMessageDialog(null,"Checksum error!","Error",JOptionPane.ERROR_MESSAGE);
231
            JOptionPane.showMessageDialog(null, "Checksum error!", "Error",
-
 
232
                    JOptionPane.ERROR_MESSAGE);
210
        } else if (status=="parse error error") {
233
        } else if (status == "parse error error") {
-
 
234
            JOptionPane.showMessageDialog(null,
211
            JOptionPane.showMessageDialog(null,"An error occured while parsing a patch!","Error",JOptionPane.ERROR_MESSAGE);
235
                    "An error occured while parsing a patch!", "Error",
-
 
236
                    JOptionPane.ERROR_MESSAGE);
212
        }      
237
        }
213
        return b;
238
        return b;
214
    }
239
    }
215
   
240
216
    public class SysExFilter extends FileFilter {
241
    public class SysExFilter extends FileFilter {