Java tutorial
/* * Copyright (c) 2014, Bastien Aracil * All rights reserved. * New BSD license. See http://en.wikipedia.org/wiki/Bsd_license * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * The name of Bastien Aracil may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL BASTIEN ARACIL BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package net.femtoparsec.remote.impl; import com.google.common.collect.ImmutableSet; import net.femtoparsec.remote.Address; import net.femtoparsec.remote.ViewDifference; import net.femtoparsec.remote.View; /** * Contains the differences between two views * * @author Bastien Aracil * @version 29/04/2014 - 16:05:46 */ public class DefaultViewDifference implements ViewDifference { private final View firstView; private final View secondView; private final ImmutableSet<Address> newMembers; private final ImmutableSet<Address> leftMembers; private final ImmutableSet<Address> unchangedMembers; private final boolean sameMembers; DefaultViewDifference(View firstView, View secondView, ImmutableSet<Address> newMembers, ImmutableSet<Address> leftMembers, ImmutableSet<Address> unchangedMembers) { this.firstView = firstView; this.secondView = secondView; this.newMembers = newMembers; this.leftMembers = leftMembers; this.unchangedMembers = unchangedMembers; this.sameMembers = newMembers.isEmpty() && leftMembers.isEmpty(); } @Override public ImmutableSet<Address> getNewMembers() { return this.newMembers; } @Override public ImmutableSet<Address> getLeftMembers() { return this.leftMembers; } @Override public ImmutableSet<Address> getUnchangedMembers() { return this.unchangedMembers; } @Override public View getFirstView() { return firstView; } @Override public View getSecondView() { return secondView; } @Override public boolean areIdentical() { return sameMembers; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("RemoteViewDifference{firstView=").append(firstView).append(", secondView=").append(secondView) .append(", sameMembers=").append(sameMembers); if (!sameMembers) { if (!unchangedMembers.isEmpty()) { sb.append(", unchanged=").append(unchangedMembers); } if (!newMembers.isEmpty()) { sb.append(", new=").append(newMembers); } if (!leftMembers.isEmpty()) { sb.append(", left=").append(leftMembers); } } sb.append("}"); return sb.toString(); } public static Builder builder() { return new Builder(); } public static class Builder { private View from; private View to; private ImmutableSet<Address> newMembers; private ImmutableSet<Address> leftMembers; private ImmutableSet<Address> unchangedMembers; public Builder setFrom(View from) { this.from = from; return this; } public Builder setTo(View to) { this.to = to; return this; } public Builder setNewMembers(ImmutableSet<Address> newMembers) { this.newMembers = newMembers; return this; } public Builder setLeftMembers(ImmutableSet<Address> leftMembers) { this.leftMembers = leftMembers; return this; } public Builder setUnchangedMembers(ImmutableSet<Address> unchangedMembers) { this.unchangedMembers = unchangedMembers; return this; } public DefaultViewDifference build() { return new DefaultViewDifference(from, to, newMembers, leftMembers, unchangedMembers); } } }