/** * Copyright (c) 2002-2012 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.neo4j.cluster.protocol.election; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; public final class DefaultElectionCredentials implements ElectionCredentials, Externalizable { private int serverId; private long latestTxId; // For Externalizable public DefaultElectionCredentials() {} public DefaultElectionCredentials( int serverId, long latestTxId ) { this.serverId = serverId; this.latestTxId = latestTxId; } @Override public int compareTo( Object o ) { DefaultElectionCredentials other = (DefaultElectionCredentials) o; if ( this.latestTxId == other.latestTxId ) { // Smaller id means higher priority return - (this.serverId < other.serverId ? -1 : ( this.serverId == other.serverId ? 0 : 1)); } else { return this.latestTxId < other.latestTxId ? -1 : ( this.latestTxId == other.latestTxId ? 0 : 1); } } @Override public boolean equals( Object obj ) { if ( obj == null ) { return false; } if ( !(obj instanceof DefaultElectionCredentials ) ) { return false; } DefaultElectionCredentials other = (DefaultElectionCredentials) obj; return other.serverId == this.serverId && other.latestTxId == this.latestTxId; } @Override public int hashCode() { return (int) ( 17 * serverId + latestTxId ); } @Override public void writeExternal( ObjectOutput out ) throws IOException { out.writeInt( serverId ); out.writeLong( latestTxId ); } @Override public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException { serverId = in.readInt(); latestTxId = in.readLong(); } }