1 package org.apidesign.samples;
3 // BEGIN: xmms.java.api.ext
4 // BEGIN: xmms.java.api
5 public final class XMMS {
12 public void addToPlaylist(String file) {
13 doAddToPlaylist(file);
15 // FINISH: xmms.java.api
16 /** @since 2.0 we can also control volume */
17 public void setVolume(int volume) {
20 // FINISH: xmms.java.api.ext
22 // BEGIN: xmms.java.spi.ext
23 // BEGIN: xmms.java.spi
25 public void playback(byte[] data);
26 // FINISH: xmms.java.spi
27 /** @since 2.0 we can also control volume */
28 interface Volume extends Playback {
29 public void setVolume(int volume);
32 // END: xmms.java.spi.ext
34 public void registerPlayback(Playback callback) {
35 this.callback = callback;
37 private Playback callback;
39 private void doAddToPlaylist(String file) {
42 private void doPause() {
45 private void doPlay() {
46 callback.playback("Play!".getBytes());
48 // BEGIN: xmms.java.spi.instanceof
49 private void doSetVolume(int volume) {
50 if (callback instanceof Playback.Volume) {
51 Playback.Volume pv = (Playback.Volume) callback;
55 // END: xmms.java.spi.instanceof
63 public static void main(String[] args) {
64 XMMS xmms = new XMMS();
66 // BEGIN: xmms.java.use
67 class MyCallbackPrints implements XMMS.Playback {
68 public void playback(byte[] data) {
69 System.out.println(new String(data));
72 xmms.registerPlayback(new MyCallbackPrints());