/**
* 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.model.operation.wave;
import org.waveprotocol.wave.model.document.operation.DocOp;
import org.waveprotocol.wave.model.operation.core.CoreAddParticipant;
import org.waveprotocol.wave.model.operation.core.CoreNoOp;
import org.waveprotocol.wave.model.operation.core.CoreRemoveParticipant;
import org.waveprotocol.wave.model.operation.core.CoreWaveletDocumentOperation;
import org.waveprotocol.wave.model.operation.core.CoreWaveletOperation;
import org.waveprotocol.wave.model.wave.ParticipantId;
/**
* Methods for converting between {@link CoreWaveletOperation}s and
* {@link WaveletOperation}s.
*
*/
public final class ConversionUtil {
/**
* Converts a {@link CoreWaveletOperation} to a {@link WaveletOperation}.
*
* @param context the operation's context
* @param coreOp the operation
* @return a {@link WaveletOperation} with the given context, representing the
* action of the given {@link CoreWaveletOperation}
*/
public static WaveletOperation fromCoreWaveletOperation(
WaveletOperationContext context, CoreWaveletOperation coreOp) {
if (coreOp instanceof CoreRemoveParticipant) {
ParticipantId participantId = ((CoreRemoveParticipant) coreOp).getParticipantId();
return new RemoveParticipant(context, participantId);
} else if (coreOp instanceof CoreAddParticipant) {
ParticipantId participantId = ((CoreAddParticipant) coreOp).getParticipantId();
return new AddParticipant(context, participantId);
} else if (coreOp instanceof CoreWaveletDocumentOperation) {
CoreWaveletDocumentOperation waveletDocOp = (CoreWaveletDocumentOperation) coreOp;
return new WaveletBlipOperation(waveletDocOp.getDocumentId(),
new BlipContentOperation(context, waveletDocOp.getOperation()));
} else if (coreOp instanceof CoreNoOp) {
return new NoOp(context);
} else {
throw new IllegalArgumentException("unknown operation type");
}
}
/**
* Converts a {@link WaveletOperation} to a {@link CoreWaveletOperation}.
*
* @param op the operation
* @return a {@link CoreWaveletOperation} representing the action of the given
* {@link WaveletOperation}
*/
public static CoreWaveletOperation toCoreWaveletOperation(WaveletOperation op) {
if (op instanceof RemoveParticipant) {
ParticipantId participantId = ((RemoveParticipant) op).getParticipantId();
return new CoreRemoveParticipant(participantId);
} else if (op instanceof AddParticipant) {
ParticipantId participantId = ((AddParticipant) op).getParticipantId();
return new CoreAddParticipant(participantId);
} else if (op instanceof WaveletBlipOperation) {
WaveletBlipOperation waveletBlipOp = (WaveletBlipOperation) op;
BlipOperation blipOp = waveletBlipOp.getBlipOp();
if (blipOp instanceof BlipContentOperation) {
DocOp contentOp = ((BlipContentOperation) blipOp).getContentOp();
return new CoreWaveletDocumentOperation(waveletBlipOp.getBlipId(), contentOp);
} else if (blipOp instanceof SubmitBlip) {
// There is no "core" submit operation, they are ignored by translating
// them into no-ops
return CoreNoOp.INSTANCE;
} else {
throw new IllegalArgumentException("unknown blip operation type");
}
} else if (op instanceof NoOp) {
return CoreNoOp.INSTANCE;
} else {
throw new IllegalArgumentException("unknown wavelet operation type");
}
}
private ConversionUtil() {} // prevent instantiation
}