samples/individualsamples/src/org/apidesign/samples/XMMS.java
author Jaroslav Tulach <jtulach@netbeans.org>
Wed, 08 Aug 2012 22:42:33 +0200
changeset 394 ee6bd6cf2bf3
parent 393 5319f085d966
permissions -rw-r--r--
Andrei: Hide in the book the fact that in the code Playback is an innerclass
jtulach@193
     1
package org.apidesign.samples;
jtulach@193
     2
jtulach@384
     3
// BEGIN: xmms.java.api.ext
jtulach@394
     4
jtulach@394
     5
import org.apidesign.samples.XMMS.Playback.Volume;
jtulach@394
     6
jtulach@193
     7
// BEGIN: xmms.java.api
jtulach@384
     8
public final class XMMS {
jtulach@392
     9
    public void play() { 
jtulach@392
    10
        doPlay();
jtulach@392
    11
    }
jtulach@392
    12
    public void pause() { 
jtulach@392
    13
        doPause();
jtulach@392
    14
    }
jtulach@392
    15
    public void addToPlaylist(String file) { 
jtulach@392
    16
        doAddToPlaylist(file);
jtulach@392
    17
    }
jtulach@193
    18
// FINISH: xmms.java.api
jtulach@384
    19
    /** @since 2.0 we can also control volume */
jtulach@392
    20
    public void setVolume(int volume) { 
jtulach@393
    21
        doSetVolume(volume);
jtulach@392
    22
    }
jtulach@384
    23
// FINISH: xmms.java.api.ext
jtulach@384
    24
    
jtulach@384
    25
    // BEGIN: xmms.java.spi.ext
jtulach@193
    26
    // BEGIN: xmms.java.spi
jtulach@193
    27
    interface Playback {
jtulach@193
    28
        public void playback(byte[] data);
jtulach@384
    29
    // FINISH: xmms.java.spi
jtulach@384
    30
        /** @since 2.0 we can also control volume */
jtulach@384
    31
        interface Volume extends Playback {
jtulach@384
    32
            public void setVolume(int volume);
jtulach@384
    33
        }
jtulach@193
    34
    }
jtulach@384
    35
    // END: xmms.java.spi.ext
jtulach@384
    36
    
jtulach@193
    37
    public void registerPlayback(Playback callback) {
jtulach@193
    38
        this.callback = callback;
jtulach@193
    39
    }
jtulach@193
    40
    private Playback callback;
jtulach@193
    41
    
jtulach@193
    42
    private void doAddToPlaylist(String file) {
jtulach@193
    43
    }
jtulach@193
    44
jtulach@193
    45
    private void doPause() {
jtulach@193
    46
    }
jtulach@193
    47
jtulach@193
    48
    private void doPlay() {
jtulach@193
    49
        callback.playback("Play!".getBytes());
jtulach@193
    50
    }
jtulach@384
    51
    // BEGIN: xmms.java.spi.instanceof
jtulach@393
    52
    private void doSetVolume(int volume) {
jtulach@394
    53
        if (callback instanceof Volume) {
jtulach@394
    54
            Volume pv = (Volume) callback;
jtulach@384
    55
            pv.setVolume(volume);
jtulach@384
    56
        }
jtulach@384
    57
    }
jtulach@384
    58
    // END: xmms.java.spi.instanceof
jtulach@193
    59
    
jtulach@193
    60
    
jtulach@193
    61
    
jtulach@193
    62
    //
jtulach@193
    63
    // Usage
jtulach@193
    64
    // 
jtulach@193
    65
    
jtulach@193
    66
    public static void main(String[] args) {
jtulach@193
    67
        XMMS xmms = new XMMS();
jtulach@193
    68
        
jtulach@193
    69
        // BEGIN: xmms.java.use
jtulach@193
    70
        class MyCallbackPrints implements XMMS.Playback {
jtulach@193
    71
            public void playback(byte[] data) {
jtulach@193
    72
                System.out.println(new String(data));
jtulach@193
    73
            }
jtulach@193
    74
        }
jtulach@193
    75
        xmms.registerPlayback(new MyCallbackPrints());
jtulach@193
    76
        // END: xmms.java.use
jtulach@193
    77
    }
jtulach@193
    78
jtulach@193
    79
}