1 /* 2 * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.sound.midi.spi; 27 28 import java.io.File; 29 import java.io.IOException; 30 import java.io.OutputStream; 31 32 import javax.sound.midi.Sequence; 33 34 /** 35 * A {@code MidiFileWriter} supplies MIDI file-writing services. Classes that 36 * implement this interface can write one or more types of MIDI file from a 37 * {@link Sequence} object. 38 * 39 * @author Kara Kytle 40 * @since 1.3 41 */ 42 public abstract class MidiFileWriter { 43 44 /** 45 * Obtains the set of MIDI file types for which file writing support is 46 * provided by this file writer. 47 * 48 * @return array of file types. If no file types are supported, an array of 49 * length 0 is returned. 50 */ 51 public abstract int[] getMidiFileTypes(); 52 53 /** 54 * Obtains the file types that this file writer can write from the sequence 55 * specified. 56 * 57 * @param sequence the sequence for which MIDI file type support is queried 58 * @return array of file types. If no file types are supported, returns an 59 * array of length 0. 60 * @throws NullPointerException if {@code sequence} is {@code null} 61 */ 62 public abstract int[] getMidiFileTypes(Sequence sequence); 63 64 /** 65 * Indicates whether file writing support for the specified MIDI file type 66 * is provided by this file writer. 67 * 68 * @param fileType the file type for which write capabilities are queried 69 * @return {@code true} if the file type is supported, otherwise 70 * {@code false} 71 */ 72 public boolean isFileTypeSupported(int fileType) { 73 74 int types[] = getMidiFileTypes(); 75 for(int i=0; i<types.length; i++) { 76 if( fileType == types[i] ) { 77 return true; 78 } 79 } 80 return false; 81 } 82 83 /** 84 * Indicates whether a MIDI file of the file type specified can be written 85 * from the sequence indicated. 86 * 87 * @param fileType the file type for which write capabilities are queried 88 * @param sequence the sequence for which file writing support is queried 89 * @return {@code true} if the file type is supported for this sequence, 90 * otherwise {@code false} 91 * @throws NullPointerException if {@code sequence} is {@code null} 92 */ 93 public boolean isFileTypeSupported(int fileType, Sequence sequence) { 94 95 int types[] = getMidiFileTypes( sequence ); 96 for(int i=0; i<types.length; i++) { 97 if( fileType == types[i] ) { 98 return true; 99 } 100 } 101 return false; 102 } 103 104 /** 105 * Writes a stream of bytes representing a MIDI file of the file type 106 * indicated to the output stream provided. 107 * 108 * @param in sequence containing MIDI data to be written to the file 109 * @param fileType type of the file to be written to the output stream 110 * @param out stream to which the file data should be written 111 * @return the number of bytes written to the output stream 112 * @throws IOException if an I/O exception occurs 113 * @throws IllegalArgumentException if the file type is not supported by 114 * this file writer 115 * @throws NullPointerException if {@code in} or {@code out} are 116 * {@code null} 117 * @see #isFileTypeSupported(int, Sequence) 118 * @see #getMidiFileTypes(Sequence) 119 */ 120 public abstract int write(Sequence in, int fileType, OutputStream out) 121 throws IOException; 122 123 /** 124 * Writes a stream of bytes representing a MIDI file of the file type 125 * indicated to the external file provided. 126 * 127 * @param in sequence containing MIDI data to be written to the external 128 * file 129 * @param fileType type of the file to be written to the external file 130 * @param out external file to which the file data should be written 131 * @return the number of bytes written to the file 132 * @throws IOException if an I/O exception occurs 133 * @throws IllegalArgumentException if the file type is not supported by 134 * this file writer 135 * @throws NullPointerException if {@code in} or {@code out} are 136 * {@code null} 137 * @see #isFileTypeSupported(int, Sequence) 138 * @see #getMidiFileTypes(Sequence) 139 */ 140 public abstract int write(Sequence in, int fileType, File out) 141 throws IOException; 142 }