/**
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.waveprotocol.wave.concurrencycontrol.channel;
import org.waveprotocol.wave.concurrencycontrol.common.ChannelException;
import org.waveprotocol.wave.concurrencycontrol.common.ResponseCode;
import org.waveprotocol.wave.model.id.IdFilter;
import org.waveprotocol.wave.model.id.WaveId;
import org.waveprotocol.wave.model.id.WaveletId;
import org.waveprotocol.wave.model.id.WaveletName;
import org.waveprotocol.wave.model.operation.wave.TransformedWaveletDelta;
import org.waveprotocol.wave.model.operation.wave.WaveletDelta;
import org.waveprotocol.wave.model.version.HashedVersion;
import org.waveprotocol.wave.model.wave.data.ObservableWaveletData;
import java.util.List;
import java.util.Map;
/**
* A service that provides a model object-based interface to the Wave RPC service.
* Implementations should convert the model objects passed in to the appropriate
* serializable classes and send them across the wire.
*
*/
public interface WaveViewService {
/**
* An interface representing a stream update's contents.
* Only one of {channelId, snapshot, deltas} should be present.
*/
interface WaveViewServiceUpdate {
boolean hasChannelId();
String getChannelId();
boolean hasWaveletId();
WaveletId getWaveletId();
boolean hasLastCommittedVersion();
HashedVersion getLastCommittedVersion();
boolean hasCurrentVersion();
HashedVersion getCurrentVersion();
boolean hasWaveletSnapshot();
ObservableWaveletData getWaveletSnapshot();
boolean hasDeltas();
List<TransformedWaveletDelta> getDeltaList();
boolean hasMarker();
}
/**
* Streaming callback for an open wave view connection to the server.
*/
interface OpenCallback {
/**
* Called when a protocol error occurs in processing before the callback is called.
*/
void onException(ChannelException e);
/**
* Called when an update arrives.
*
* @param update update object to return for this callback
*/
public void onUpdate(WaveViewServiceUpdate update);
/**
* Called when the stream closes.
*
* @param response error message, or null if the stream closed normally
*/
public void onSuccess(String response);
/**
* Called when the task fails.
*
* @param reason failure reason for this callback
*/
public void onFailure(String reason);
}
/**
* Callback for submitting a delta to the server.
*/
interface SubmitCallback {
void onSuccess(HashedVersion version, int opsApplied, String errorMessage,
ResponseCode responseCode);
void onFailure(String failure);
}
/**
* Callback for closing a connection to the server.
*/
interface CloseCallback {
void onSuccess();
void onFailure(String failure);
}
/**
* Opens a wave connection to the server.
*/
void viewOpen(IdFilter waveletFilter, Map<WaveletId, List<HashedVersion>> knownWavelets,
OpenCallback callback);
/**
* Submits a delta to the server. On success, the server replies with
* the latest version, the number of operations applied, and an error message
* and/or response code.
*
* @return the request id that can be passed later into
* {@link #debugGetProfilingInfo(String)}
*/
String viewSubmit(WaveletName wavelet, WaveletDelta delta, String channelId,
SubmitCallback callback);
/**
* Closes a wave from the server.
*/
void viewClose(WaveId waveId, String channelId, CloseCallback callback);
/**
* @param requestId The requestId that we want to get debug info.
* @return Debug string that details profile information regarding data being sent.
*/
String debugGetProfilingInfo(String requestId);
}