jtulach@193: package org.apidesign.samples; jtulach@193: jtulach@384: // BEGIN: xmms.java.api.ext jtulach@394: jtulach@394: import org.apidesign.samples.XMMS.Playback.Volume; jtulach@394: jtulach@193: // BEGIN: xmms.java.api jtulach@384: public final class XMMS { jtulach@392: public void play() { jtulach@392: doPlay(); jtulach@392: } jtulach@392: public void pause() { jtulach@392: doPause(); jtulach@392: } jtulach@392: public void addToPlaylist(String file) { jtulach@392: doAddToPlaylist(file); jtulach@392: } jtulach@193: // FINISH: xmms.java.api jtulach@384: /** @since 2.0 we can also control volume */ jtulach@392: public void setVolume(int volume) { jtulach@393: doSetVolume(volume); jtulach@392: } jtulach@384: // FINISH: xmms.java.api.ext jtulach@384: jtulach@384: // BEGIN: xmms.java.spi.ext jtulach@193: // BEGIN: xmms.java.spi jtulach@193: interface Playback { jtulach@193: public void playback(byte[] data); jtulach@384: // FINISH: xmms.java.spi jtulach@384: /** @since 2.0 we can also control volume */ jtulach@384: interface Volume extends Playback { jtulach@384: public void setVolume(int volume); jtulach@384: } jtulach@193: } jtulach@384: // END: xmms.java.spi.ext jtulach@384: jtulach@193: public void registerPlayback(Playback callback) { jtulach@193: this.callback = callback; jtulach@193: } jtulach@193: private Playback callback; jtulach@193: jtulach@193: private void doAddToPlaylist(String file) { jtulach@193: } jtulach@193: jtulach@193: private void doPause() { jtulach@193: } jtulach@193: jtulach@193: private void doPlay() { jtulach@193: callback.playback("Play!".getBytes()); jtulach@193: } jtulach@384: // BEGIN: xmms.java.spi.instanceof jtulach@393: private void doSetVolume(int volume) { jtulach@394: if (callback instanceof Volume) { jtulach@394: Volume pv = (Volume) callback; jtulach@384: pv.setVolume(volume); jtulach@384: } jtulach@384: } jtulach@384: // END: xmms.java.spi.instanceof jtulach@193: jtulach@193: jtulach@193: jtulach@193: // jtulach@193: // Usage jtulach@193: // jtulach@193: jtulach@193: public static void main(String[] args) { jtulach@193: XMMS xmms = new XMMS(); jtulach@193: jtulach@193: // BEGIN: xmms.java.use jtulach@193: class MyCallbackPrints implements XMMS.Playback { jtulach@193: public void playback(byte[] data) { jtulach@193: System.out.println(new String(data)); jtulach@193: } jtulach@193: } jtulach@193: xmms.registerPlayback(new MyCallbackPrints()); jtulach@193: // END: xmms.java.use jtulach@193: } jtulach@193: jtulach@193: }