/** * Copyright 2010 Jonas Huckestein, jonas.huckestein@me.com, http://thezukunft.com * Copyright 2009 Hilbrand Bouwkamp, hs@bouwkamp.com * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. **/ package com.thezukunft.wave.connectorimpl; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArray; import com.google.gwt.gadgets.client.GadgetFeature; import com.google.web.bindery.event.shared.EventBus; import com.thezukunft.wave.connector.ModeChangeEvent; import com.thezukunft.wave.connector.Participant; import com.thezukunft.wave.connector.ParticipantUpdateEvent; import com.thezukunft.wave.connector.StateUpdateEvent; import com.thezukunft.wave.connector.Wave; /** * Wave Feature class. */ public class WaveFeatureImpl implements GadgetFeature, Wave { // singleton private static WaveFeatureImpl wave; public static EventBus eventBus; private WaveFeatureImpl() { } /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#getHost() */ public native Participant getHost() /*-{ return $wnd.wave.getHost(); }-*/; /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#getMode() */ public native int getMode() /*-{ return $wnd.wave.getMode(); }-*/; /* * (non-Javadoc) * * @see * com.onetwopoll.wave.connector.Wave#getParticipantById(java.lang.String) */ public native Participant getParticipantById(String id) /*-{ return $wnd.wave.getParticipantById(id); }-*/; /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#getParticipants() */ public native JsArray<Participant> getParticipants() /*-{ return $wnd.wave.getParticipants(); }-*/; /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#getState() */ public native StateImpl getState() /*-{ return $wnd.wave.getState(); }-*/; /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#getTime() */ public long getTime() { return (long) getTime0(); } /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#getViewer() */ public native Participant getViewer() /*-{ return $wnd.wave.getViewer(); }-*/; /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#isInWaveContainer() */ public native boolean isInWaveContainer() /*-{ return $wnd.wave && $wnd.wave.isInWaveContainer(); }-*/; /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#isPlayback() */ public native boolean isPlayback() /*-{ return $wnd.wave.isPlayback(); }-*/; /* * (non-Javadoc) * * @see com.onetwopoll.wave.connector.Wave#log(java.lang.String) */ public native void log(String log) /*-{ return $wnd.wave.log(log); }-*/; /** * Sets the mode change callback. */ @SuppressWarnings("unused") private native void setModeCallback(String callback, JavaScriptObject opt_context) /*-{ $wnd.wave.setModeCallback(callback, opt_context); }-*/; /** * Sets the participant update callback. If the participant information is * already received, the callback is invoked immediately to report the current * participant information. Only one callback can be defined. Consecutive * calls would remove old callback and set the new one. */ @SuppressWarnings("unused") private native void setParticipantCallback(String callback, JavaScriptObject opt_context) /*-{ $wnd.wave.setParticipantCallback(callback, opt_context); }-*/; /** * Sets the gadget state update callback. If the state is already received * from the container, the callback is invoked immediately to report the * current gadget state. Only one callback can be defined. Consecutive calls * would remove the old callback and set the new one. */ @SuppressWarnings("unused") private native void setStateCallback(String callback, JavaScriptObject opt_context) /*-{ $wnd.wave.setStateCallback(callback, opt_context); }-*/; /** * Register the mode change method to be called when the mode changes. */ private native void registerModeChangeCallback() /*-{ $wnd.wave.setModeCallback(@com.thezukunft.wave.connectorimpl.WaveFeatureImpl::modeChangeEvent(I)); }-*/; /** * Register the participantUpdated method to be called when the participants * are updated. */ private native void registerParticipantUpdateCallback() /*-{ $wnd.wave.setParticipantCallback(@com.thezukunft.wave.connectorimpl.WaveFeatureImpl::participantUpdateEvent()); }-*/; /** * Register the stateUpdated method to be called when the state is updated. */ private native void registerStateUpdateCallback() /*-{ $wnd.wave.setStateCallback(@com.thezukunft.wave.connectorimpl.WaveFeatureImpl::stateUpdateEvent()); }-*/; /** * This method is called from the wave JavaScript library on Mode changes. */ @SuppressWarnings("unused") private static void modeChangeEvent(int mode) { ModeChangeEvent.fire(eventBus, mode); } /** * This method is called from the wave JavaScript library on Participant * changes. */ @SuppressWarnings("unused") private static void participantUpdateEvent() { ParticipantUpdateEvent.fire(eventBus, wave); } /** * This method is called from the wave JavaScript library on State changes. */ @SuppressWarnings("unused") private static void stateUpdateEvent() { StateUpdateEvent.fire(eventBus, wave); } /** * Helper method to set the eventBus from externally */ public void setEventBus(EventBus b) { if (wave == null) { wave = this; } eventBus = b; registerModeChangeCallback(); registerParticipantUpdateCallback(); registerStateUpdateCallback(); } private native double getTime0() /*-{ return $wnd.wave.getTime(); }-*/; }