Package org.waveprotocol.box.expimp

Source Code of org.waveprotocol.box.expimp.DomainConverter

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.expimp;

import org.waveprotocol.wave.federation.Proto.ProtocolWaveletDelta;
import org.waveprotocol.wave.model.wave.InvalidParticipantAddress;
import org.waveprotocol.wave.model.wave.ParticipantId;
import org.waveprotocol.wave.federation.Proto.ProtocolWaveletOperation;
import org.waveprotocol.wave.model.id.IdUtil;
import org.waveprotocol.wave.model.id.WaveId;
import org.waveprotocol.wave.model.id.WaveletId;

import java.util.LinkedList;
import java.util.List;

/**
* Converts domain names in exported data.
*
* @author akaplanov@gmail.com (Andrew Kaplanov)
*/
public class DomainConverter {

  /**
   * Replaces domain of WaveId.
   *
   * @param waveId source waveId
   * @param waveDomain target wave domain
   * @return wave id with waveDomain if waveDomain is not null, otherwise source wave id.
   */
  public static WaveId convertWaveId(WaveId waveId, String waveDomain) {
    if (waveDomain != null) {
      return WaveId.of(waveDomain, waveId.getId());
    }
    return waveId;
  }

  /**
   * Replaces domain of WaveletId.
   *
   * @param waveletId source waveletId
   * @param waveDomain target wave domain
   * @return wavelet id with waveDomain if waveDomain is not null, otherwise source wavelet id.
   */
  public static WaveletId convertWaveletId(WaveletId waveletId, String waveDomain) throws InvalidParticipantAddress {
    if (waveDomain != null) {
      if (IdUtil.isUserDataWavelet(waveletId)) {
        String sourceParticipant = IdUtil.getUserDataWaveletAddress(waveletId);
        String targetParticipant = convertParticipantId(sourceParticipant, waveDomain).toString();
        String targetWaveletId = IdUtil.join(IdUtil.USER_DATA_WAVELET_PREFIX, targetParticipant);
        return WaveletId.of(waveDomain, targetWaveletId);
      }
      return WaveletId.of(waveDomain, waveletId.getId());
    }
    return waveletId;
  }

  /**
   * Replaces domain in deltas for Add/Remove participant operations.
   *
   * @param delta source delta
   * @param waveDomain target wave domain
   * @return delta for waveDomain if WaveDoamin is not null, otherwise source delta.
   * @throws InvalidParticipantAddress if there is a problem with deserialization of participant id.
   */
  public static ProtocolWaveletDelta convertDelta(ProtocolWaveletDelta delta,
      String waveDomain) throws InvalidParticipantAddress {
    if (waveDomain != null) {
      ProtocolWaveletDelta.Builder newDelta = ProtocolWaveletDelta.newBuilder(delta);
      ParticipantId author = convertParticipantId(delta.getAuthor(), waveDomain);
      newDelta.setAuthor(author.getAddress());
      for (int i = 0; i < delta.getOperationCount(); i++) {
        ProtocolWaveletOperation op = delta.getOperation(i);
        ProtocolWaveletOperation.Builder newOp = ProtocolWaveletOperation.newBuilder(op);
        if (op.hasAddParticipant()) {
          convertAddParticipantOperation(newOp, op, waveDomain);
        } else if (op.hasRemoveParticipant()) {
          convertRemoveParticipantOperation(newOp, op, waveDomain);
        }
        // TODO(user) release convert for other operations.
        newDelta.setOperation(i, newOp);
      }
      return newDelta.build();
    } else {
      return delta;
    }
  }

  /**
   * Converts all history deltas.
   *
   * @param deltas source deltas
   * @param waveDomain target wave domain
   * @return deltas for waveDomain if WaveDoamin is not null, otherwise source deltas.
   * @throws InvalidParticipantAddress if there is a problem with deserialization of participant id.
   */
  public static List<ProtocolWaveletDelta> convertDeltas(List<ProtocolWaveletDelta> deltas,
      String waveDomain) throws InvalidParticipantAddress {
    if (waveDomain != null) {
      List<ProtocolWaveletDelta> targetDeltas = new LinkedList<ProtocolWaveletDelta>();
      for (ProtocolWaveletDelta delta : deltas) {
        targetDeltas.add(DomainConverter.convertDelta(delta, waveDomain));
      }
      return targetDeltas;
    } else {
      return deltas;
    }
  }

  /**
   * Converts adding participant operation.
   */
  private static void convertAddParticipantOperation(ProtocolWaveletOperation.Builder newOperation,
      ProtocolWaveletOperation operation, String domain) throws InvalidParticipantAddress {
    ParticipantId participant = convertParticipantId(operation.getAddParticipant(), domain);
    newOperation.setAddParticipant(participant.getAddress());
  }

  /**
   * Converts removal participant operation.
   */
  private static void convertRemoveParticipantOperation(ProtocolWaveletOperation.Builder newOperation,
      ProtocolWaveletOperation operation, String domain) throws InvalidParticipantAddress {
    ParticipantId participant = convertParticipantId(operation.getRemoveParticipant(), domain);
    newOperation.setRemoveParticipant(participant.getAddress());
  }

  /**
   * Replaces participant domain.
   */
  private static ParticipantId convertParticipantId(String participant, String domain)
      throws InvalidParticipantAddress {
    return ParticipantId.of(ParticipantId.of(participant).getName(), domain);
  }
}
TOP

Related Classes of org.waveprotocol.box.expimp.DomainConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.