samples/individualsamples/src/org/apidesign/samples/XMMS.java
author Jaroslav Tulach <jtulach@netbeans.org>
Thu, 27 Oct 2011 20:12:14 +0200
changeset 384 8232b021005d
parent 193 2b944e0980c9
child 392 a3b259705f9f
permissions -rw-r--r--
Adding an example with defining a volume
jtulach@193
     1
package org.apidesign.samples;
jtulach@193
     2
jtulach@384
     3
// BEGIN: xmms.java.api.ext
jtulach@193
     4
// BEGIN: xmms.java.api
jtulach@384
     5
public final class XMMS {
jtulach@193
     6
    public void play() { doPlay(); }
jtulach@193
     7
    public void pause() { doPause(); }
jtulach@193
     8
    public void addToPlaylist(String file) { doAddToPlaylist(file); }
jtulach@193
     9
// FINISH: xmms.java.api
jtulach@384
    10
    /** @since 2.0 we can also control volume */
jtulach@384
    11
    public void setVolume(int volume) { doTuneVolume(volume); }
jtulach@384
    12
// FINISH: xmms.java.api.ext
jtulach@384
    13
    
jtulach@384
    14
    // BEGIN: xmms.java.spi.ext
jtulach@193
    15
    // BEGIN: xmms.java.spi
jtulach@193
    16
    interface Playback {
jtulach@193
    17
        public void playback(byte[] data);
jtulach@384
    18
    // FINISH: xmms.java.spi
jtulach@384
    19
        /** @since 2.0 we can also control volume */
jtulach@384
    20
        interface Volume extends Playback {
jtulach@384
    21
            public void setVolume(int volume);
jtulach@384
    22
        }
jtulach@193
    23
    }
jtulach@384
    24
    // END: xmms.java.spi.ext
jtulach@384
    25
    
jtulach@193
    26
    public void registerPlayback(Playback callback) {
jtulach@193
    27
        this.callback = callback;
jtulach@193
    28
    }
jtulach@193
    29
    private Playback callback;
jtulach@193
    30
    
jtulach@193
    31
    private void doAddToPlaylist(String file) {
jtulach@193
    32
    }
jtulach@193
    33
jtulach@193
    34
    private void doPause() {
jtulach@193
    35
    }
jtulach@193
    36
jtulach@193
    37
    private void doPlay() {
jtulach@193
    38
        callback.playback("Play!".getBytes());
jtulach@193
    39
    }
jtulach@384
    40
    // BEGIN: xmms.java.spi.instanceof
jtulach@384
    41
    private void doTuneVolume(int volume) {
jtulach@384
    42
        if (callback instanceof Playback.Volume) {
jtulach@384
    43
            Playback.Volume pv = (Playback.Volume) callback;
jtulach@384
    44
            pv.setVolume(volume);
jtulach@384
    45
        }
jtulach@384
    46
    }
jtulach@384
    47
    // END: xmms.java.spi.instanceof
jtulach@193
    48
    
jtulach@193
    49
    
jtulach@193
    50
    
jtulach@193
    51
    //
jtulach@193
    52
    // Usage
jtulach@193
    53
    // 
jtulach@193
    54
    
jtulach@193
    55
    public static void main(String[] args) {
jtulach@193
    56
        XMMS xmms = new XMMS();
jtulach@193
    57
        
jtulach@193
    58
        // BEGIN: xmms.java.use
jtulach@193
    59
        class MyCallbackPrints implements XMMS.Playback {
jtulach@193
    60
            public void playback(byte[] data) {
jtulach@193
    61
                System.out.println(new String(data));
jtulach@193
    62
            }
jtulach@193
    63
        }
jtulach@193
    64
        xmms.registerPlayback(new MyCallbackPrints());
jtulach@193
    65
        // END: xmms.java.use
jtulach@193
    66
    }
jtulach@193
    67
jtulach@193
    68
}