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
     1 package org.apidesign.samples;
     2 
     3 // BEGIN: xmms.java.api.ext
     4 
     5 import org.apidesign.samples.XMMS.Playback.Volume;
     6 
     7 // BEGIN: xmms.java.api
     8 public final class XMMS {
     9     public void play() { 
    10         doPlay();
    11     }
    12     public void pause() { 
    13         doPause();
    14     }
    15     public void addToPlaylist(String file) { 
    16         doAddToPlaylist(file);
    17     }
    18 // FINISH: xmms.java.api
    19     /** @since 2.0 we can also control volume */
    20     public void setVolume(int volume) { 
    21         doSetVolume(volume);
    22     }
    23 // FINISH: xmms.java.api.ext
    24     
    25     // BEGIN: xmms.java.spi.ext
    26     // BEGIN: xmms.java.spi
    27     interface Playback {
    28         public void playback(byte[] data);
    29     // FINISH: xmms.java.spi
    30         /** @since 2.0 we can also control volume */
    31         interface Volume extends Playback {
    32             public void setVolume(int volume);
    33         }
    34     }
    35     // END: xmms.java.spi.ext
    36     
    37     public void registerPlayback(Playback callback) {
    38         this.callback = callback;
    39     }
    40     private Playback callback;
    41     
    42     private void doAddToPlaylist(String file) {
    43     }
    44 
    45     private void doPause() {
    46     }
    47 
    48     private void doPlay() {
    49         callback.playback("Play!".getBytes());
    50     }
    51     // BEGIN: xmms.java.spi.instanceof
    52     private void doSetVolume(int volume) {
    53         if (callback instanceof Volume) {
    54             Volume pv = (Volume) callback;
    55             pv.setVolume(volume);
    56         }
    57     }
    58     // END: xmms.java.spi.instanceof
    59     
    60     
    61     
    62     //
    63     // Usage
    64     // 
    65     
    66     public static void main(String[] args) {
    67         XMMS xmms = new XMMS();
    68         
    69         // BEGIN: xmms.java.use
    70         class MyCallbackPrints implements XMMS.Playback {
    71             public void playback(byte[] data) {
    72                 System.out.println(new String(data));
    73             }
    74         }
    75         xmms.registerPlayback(new MyCallbackPrints());
    76         // END: xmms.java.use
    77     }
    78 
    79 }