001/*
002 * Copyright (C) 2016 The Guava Authors
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package com.google.common.collect;
018
019import com.google.gwt.user.client.rpc.SerializationException;
020import com.google.gwt.user.client.rpc.SerializationStreamReader;
021import com.google.gwt.user.client.rpc.SerializationStreamWriter;
022
023/**
024 * This class implements the GWT serialization of {@link Range}.
025 *
026 * @author Dean de Bree
027 */
028public class Range_CustomFieldSerializer {
029
030  public static void deserialize(SerializationStreamReader reader, Range<?> instance) {}
031
032  public static Range<?> instantiate(SerializationStreamReader reader)
033      throws SerializationException {
034
035    Cut lowerBound;
036    boolean hasLowerBound = reader.readBoolean();
037    if (hasLowerBound) {
038      boolean lowerIsClosed = reader.readBoolean();
039      Comparable lower = (Comparable) reader.readObject();
040
041      lowerBound = lowerIsClosed ? Cut.belowValue(lower) : Cut.aboveValue(lower);
042    } else {
043      lowerBound = Cut.belowAll();
044    }
045
046    Cut upperBound;
047    boolean hasUpperBound = reader.readBoolean();
048    if (hasUpperBound) {
049      boolean upperIsClosed = reader.readBoolean();
050      Comparable upper = (Comparable) reader.readObject();
051
052      upperBound = upperIsClosed ? Cut.aboveValue(upper) : Cut.belowValue(upper);
053    } else {
054      upperBound = Cut.aboveAll();
055    }
056
057    return Range.create(lowerBound, upperBound);
058  }
059
060  public static void serialize(SerializationStreamWriter writer, Range<?> instance)
061      throws SerializationException {
062
063    if (instance.hasLowerBound()) {
064      writer.writeBoolean(true);
065      writer.writeBoolean(instance.lowerBoundType() == BoundType.CLOSED);
066      writer.writeObject(instance.lowerEndpoint());
067    } else {
068      writer.writeBoolean(false);
069    }
070
071    if (instance.hasUpperBound()) {
072      writer.writeBoolean(true);
073      writer.writeBoolean(instance.upperBoundType() == BoundType.CLOSED);
074      writer.writeObject(instance.upperEndpoint());
075    } else {
076      writer.writeBoolean(false);
077    }
078  }
079}