OSDN Git Service

リファクタリング
[midichordhelper/MIDIChordHelper.git] / src / camidion / chordhelper / mididevice / TransmitterListModel.java
index 37dbecb..653b88d 100644 (file)
@@ -8,69 +8,62 @@ import javax.sound.midi.MidiUnavailableException;
 import javax.sound.midi.Receiver;
 import javax.sound.midi.Sequencer;
 import javax.sound.midi.Transmitter;
-import javax.swing.AbstractListModel;
 
 /**
  * {@link Transmitter} のリストを表す {@link javax.swing.ListModel}
  */
-public class TransmitterListModel extends AbstractListModel<Transmitter> {
-       protected Transmitter dummyTransmitter = new DummyTransmitter();
-       protected MidiDeviceModel deviceModel;
-       public TransmitterListModel(MidiDeviceModel deviceModel) {
-               this.deviceModel = deviceModel;
+public class TransmitterListModel extends AbstractTransceiverListModel<Transmitter> {
+       public TransmitterListModel(MidiDeviceModel deviceModel) { super(deviceModel); }
+       protected List<Transmitter> getTransceivers() {
+               return deviceModel.getMidiDevice().getTransmitters();
        }
+       private Transmitter dummyTx = new DummyTransmitter();
        @Override
        public Transmitter getElementAt(int index) {
-               List<Transmitter> txList = deviceModel.getMidiDevice().getTransmitters();
+               List<Transmitter> txList = getTransceivers();
                int length = txList.size();
-               if( index == length ) return dummyTransmitter;
+               if( index == length ) return dummyTx;
                if( index > length || index < 0 ) return null;
                return txList.get(index);
        }
        @Override
-       public int getSize() {
-               return deviceModel.getMidiDevice().getTransmitters().size() + 1;
-       }
+       public int getSize() { return super.getSize() + 1; }
+       @Override
        public int indexOf(Object element) {
-               List<Transmitter> txList = deviceModel.getMidiDevice().getTransmitters();
-               return dummyTransmitter.equals(element) ? txList.size() : txList.indexOf(element);
+               List<Transmitter> txList = getTransceivers();
+               return dummyTx.equals(element) ? txList.size() : txList.indexOf(element);
        }
        /**
-        * レシーバに未接続の最初の{@link Transmitter}を返します。
-        * ã\81ªã\81\84å ´å\90\88ã\81¯{@link MidiDevice#getTransmitter}ã\81§æ\96°ã\81\9fã\81«å\8f\96å¾\97ã\81\97ã\81¦è¿\94します。
+        * 新しい{@link Transmitter}を{@link MidiDevice#getTransmitter}で生成し、
+        * ã\81\93ã\81®ã\83¢ã\83\87ã\83«ã\82\92å\8f\82ç\85§ã\81\97ã\81¦ã\81\84ã\82\8bã\83\93ã\83¥ã\83¼ã\81«é\80\9aç\9f¥します。
         *
         * @return 未接続の{@link Transmitter}
         * @throws MidiUnavailableException リソースの制約のためにトランスミッタを使用できない場合にスローされる
         */
-       public Transmitter getUnconnectedTransmitter() throws MidiUnavailableException {
-               MidiDevice device = deviceModel.getMidiDevice();
-               List<Transmitter> txList = device.getTransmitters();
-               for( Transmitter tx : txList ) if( tx.getReceiver() == null ) return tx;
-               Transmitter tx;
-               tx = device.getTransmitter();
+       public Transmitter openTransmitter() throws MidiUnavailableException {
+               Transmitter tx = deviceModel.getMidiDevice().getTransmitter();
                fireIntervalAdded(this, 0, getSize());
                return tx;
        }
        /**
-        * このリストモデルの{@link #getUnconnectedTransmitter()}が返した{@link Transmitter}を、
-        * 相手のMIDIデバイスが持つ最初の{@link Receiver}に接続します。
+        * 相手のMIDIデバイスが持つ最初の{@link Receiver}を、
+        * このリストモデルの新規{@link Transmitter}に接続します。
         *
         * @param anotherDeviceModel 接続相手のMIDIデバイス
         * @throws MidiUnavailableException リソースの制約のためにトランスミッタを使用できない場合にスローされる
         */
        public void connectToFirstReceiverOfDevice(MidiDeviceModel anotherDeviceModel) throws MidiUnavailableException {
                List<Receiver> rxList = anotherDeviceModel.getMidiDevice().getReceivers();
-               if( ! rxList.isEmpty() )
-                       deviceModel.getTransmitterListModel().getUnconnectedTransmitter().setReceiver(rxList.get(0));
+               if( rxList.isEmpty() ) return;
+               deviceModel.getTransmitterListModel().openTransmitter().setReceiver(rxList.get(0));
        }
        /**
-        * æ\8c\87å®\9aã\81®{@link Transmitter}ã\81\8cã\83ªã\82¹ã\83\88ã\81«ã\81\82ã\82\8cã\81°ã\80\81ã\81\9dã\82\8cã\82\92é\96\89ã\81\98ã\81¾ã\81\99ã\80\82
-        * 閉じるとリストから自動的に削除されるので、表示の更新も行います。
+        * æ\8c\87å®\9aã\81®{@link Transmitter}ã\82\92é\96\89ã\81\98ã\80\81è¦\81ç´ ã\81\8cæ¸\9bã\81£ã\81\9fã\81\93ã\81¨ã\82\92ã\80\81
+        * このモデルを参照しているビューに通知します。
         *
         * @param tx このリストモデルで開いている{@link Transmitter}
         */
-       public void close(Transmitter tx) {
-               if( ! deviceModel.getMidiDevice().getTransmitters().contains(tx) ) return;
+       public void closeTransmitter(Transmitter tx) {
                tx.close();
                fireIntervalRemoved(this, 0, getSize());
        }
@@ -81,7 +74,7 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
         */
        public void closePeerTransmitterOf(Receiver rx) {
                List<Transmitter> closingTxList = new Vector<Transmitter>();
-               List<Transmitter> txList = deviceModel.getMidiDevice().getTransmitters();
+               List<Transmitter> txList = getTransceivers();
                for( Transmitter tx : txList ) if( tx.getReceiver() == rx ) closingTxList.add(tx);
                if( closingTxList.isEmpty() ) return;
                int length = getSize();
@@ -114,10 +107,10 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
                        Receiver rx = tx.getReceiver();
                        if( rx != null ) peerRxList.add(rx);
                }
-               List<Receiver> myRxList = device.getReceivers();
                List<Transmitter> peerTxList = new Vector<Transmitter>();
                MidiDeviceModelList deviceModelList = deviceModel.getDeviceModelList();
-               for( Receiver rx : myRxList ) {
+               List<Receiver> rxList = device.getReceivers();
+               for( Receiver rx : rxList ) {
                        for( MidiDeviceModel m : deviceModelList ) {
                                if( m == deviceModel ) continue;
                                List<Transmitter> peerSourceTxList = m.getMidiDevice().getTransmitters();
@@ -129,9 +122,9 @@ public class TransmitterListModel extends AbstractListModel<Transmitter> {
                device.close();
                try {
                        device.open();
-                       for( Receiver peerRx : peerRxList ) getUnconnectedTransmitter().setReceiver(peerRx);
-                       if( ! myRxList.isEmpty() ) {
-                               Receiver rx = myRxList.get(0);
+                       for( Receiver peerRx : peerRxList ) openTransmitter().setReceiver(peerRx);
+                       if( ! rxList.isEmpty() ) {
+                               Receiver rx = rxList.get(0);
                                for( Transmitter peerTx : peerTxList ) peerTx.setReceiver(rx);
                        }
                } catch( MidiUnavailableException e ) {