1 package org.apidesign.samples;
3 // BEGIN: xmms.java.api.ext
4 // BEGIN: xmms.java.api
5 public final class XMMS {
6 public void play() { doPlay(); }
7 public void pause() { doPause(); }
8 public void addToPlaylist(String file) { doAddToPlaylist(file); }
9 // FINISH: xmms.java.api
10 /** @since 2.0 we can also control volume */
11 public void setVolume(int volume) { doTuneVolume(volume); }
12 // FINISH: xmms.java.api.ext
14 // BEGIN: xmms.java.spi.ext
15 // BEGIN: xmms.java.spi
17 public void playback(byte[] data);
18 // FINISH: xmms.java.spi
19 /** @since 2.0 we can also control volume */
20 interface Volume extends Playback {
21 public void setVolume(int volume);
24 // END: xmms.java.spi.ext
26 public void registerPlayback(Playback callback) {
27 this.callback = callback;
29 private Playback callback;
31 private void doAddToPlaylist(String file) {
34 private void doPause() {
37 private void doPlay() {
38 callback.playback("Play!".getBytes());
40 // BEGIN: xmms.java.spi.instanceof
41 private void doTuneVolume(int volume) {
42 if (callback instanceof Playback.Volume) {
43 Playback.Volume pv = (Playback.Volume) callback;
47 // END: xmms.java.spi.instanceof
55 public static void main(String[] args) {
56 XMMS xmms = new XMMS();
58 // BEGIN: xmms.java.use
59 class MyCallbackPrints implements XMMS.Playback {
60 public void playback(byte[] data) {
61 System.out.println(new String(data));
64 xmms.registerPlayback(new MyCallbackPrints());