1 package org.apidesign.samples;
3 // BEGIN: xmms.java.api.ext
5 import org.apidesign.samples.XMMS.Playback.Volume;
7 // BEGIN: xmms.java.api
8 public final class XMMS {
15 public void addToPlaylist(String file) {
16 doAddToPlaylist(file);
18 // FINISH: xmms.java.api
19 /** @since 2.0 we can also control volume */
20 public void setVolume(int volume) {
23 // FINISH: xmms.java.api.ext
25 // BEGIN: xmms.java.spi.ext
26 // BEGIN: xmms.java.spi
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);
35 // END: xmms.java.spi.ext
37 public void registerPlayback(Playback callback) {
38 this.callback = callback;
40 private Playback callback;
42 private void doAddToPlaylist(String file) {
45 private void doPause() {
48 private void doPlay() {
49 callback.playback("Play!".getBytes());
51 // BEGIN: xmms.java.spi.instanceof
52 private void doSetVolume(int volume) {
53 if (callback instanceof Volume) {
54 Volume pv = (Volume) callback;
58 // END: xmms.java.spi.instanceof
66 public static void main(String[] args) {
67 XMMS xmms = new XMMS();
69 // BEGIN: xmms.java.use
70 class MyCallbackPrints implements XMMS.Playback {
71 public void playback(byte[] data) {
72 System.out.println(new String(data));
75 xmms.registerPlayback(new MyCallbackPrints());