/** * 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.box.server.persistence.protos; import com.google.common.collect.ImmutableList; import org.waveprotocol.box.server.common.CoreWaveletOperationSerializer; import org.waveprotocol.box.server.persistence.protos.ProtoDeltaStoreData.ProtoTransformedWaveletDelta; import org.waveprotocol.wave.model.operation.wave.TransformedWaveletDelta; import org.waveprotocol.wave.model.operation.wave.WaveletOperation; import org.waveprotocol.wave.model.operation.wave.WaveletOperationContext; import org.waveprotocol.wave.model.version.HashedVersion; import org.waveprotocol.wave.model.wave.ParticipantId; /** * This class is used to serialize and deserialize {@link TransformedWavelwetDelta} * and {@link ProtoTransformedWavelwetDelta} * * @author tad.glines@gmail.com (Tad Glines) */ public class ProtoDeltaStoreDataSerializer { /** * Serialize a {@link TransformedWaveletDelta} into a {@link ProtoTransformedWaveletDelta} */ public static ProtoTransformedWaveletDelta serialize(TransformedWaveletDelta delta) { ProtoTransformedWaveletDelta.Builder builder = ProtoTransformedWaveletDelta.newBuilder(); builder.setAuthor(delta.getAuthor().getAddress()); builder.setResultingVersion( CoreWaveletOperationSerializer.serialize(delta.getResultingVersion())); builder.setApplicationTimestamp(delta.getApplicationTimestamp()); for (WaveletOperation op : delta) { builder.addOperation(CoreWaveletOperationSerializer.serialize(op)); } return builder.build(); } /** * Deserialize a {@link ProtoTransformedWaveletDelta} into a {@link TransformedWaveletDelta} */ public static TransformedWaveletDelta deserialize(ProtoTransformedWaveletDelta delta) { long applicationTimestamp = delta.getApplicationTimestamp(); HashedVersion resultingVersion = CoreWaveletOperationSerializer.deserialize(delta.getResultingVersion()); ParticipantId author = ParticipantId.ofUnsafe(delta.getAuthor()); ImmutableList.Builder<WaveletOperation> operations = ImmutableList.builder(); int numOperations = delta.getOperationCount(); for (int i = 0; i < numOperations; i++) { WaveletOperationContext context; if (i == numOperations - 1) { context = new WaveletOperationContext(author, applicationTimestamp, 1, resultingVersion); } else { context = new WaveletOperationContext(author, applicationTimestamp, 1); } operations.add(CoreWaveletOperationSerializer.deserialize(delta.getOperation(i), context)); } return new TransformedWaveletDelta(author, resultingVersion, applicationTimestamp, operations.build()); } }