/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
* add the following below this CDDL HEADER, with the fields enclosed
* by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
* Portions Copyright 2012 ForgeRock AS
*/
package org.opends.server.replication.common;
/**
* This class holds information about a RS connected to the topology. This
* information is to be exchanged through the replication protocol in
* topology messages, to keep every member DS of the topology aware of
* the RS topology.
*/
public class RSInfo
{
// Server id of the RS
private int id = -1;
// Generation Id of the RS
private long generationId = -1;
// Group id of the RS
private byte groupId = (byte) -1;
// The weight of the RS
// It is important to keep the default value to 1 so that it is used as
// default value for a RS using protocol V3: this default value will be used
// in algorithms that use weight
private int weight = 1;
// The server URL of the RS
private String serverUrl = null;
/**
* Creates a new instance of RSInfo with every given info.
*
* @param id The RS id
* @param serverUrl Url of the RS
* @param generationId The generation id the RS is using
* @param groupId RS group id
* @param weight RS weight
*/
public RSInfo(int id, String serverUrl,
long generationId, byte groupId, int weight)
{
this.id = id;
this.serverUrl = serverUrl;
this.generationId = generationId;
this.groupId = groupId;
this.weight = weight;
}
/**
* Get the RS id.
* @return the RS id
*/
public int getId()
{
return id;
}
/**
* Get the generation id RS is using.
* @return the generation id RS is using.
*/
public long getGenerationId()
{
return generationId;
}
/**
* Get the RS group id.
* @return The RS group id
*/
public byte getGroupId()
{
return groupId;
}
/**
* Get the RS weight.
* @return The RS weight
*/
public int getWeight()
{
return weight;
}
/**
* Test if the passed object is equal to this one.
* @param obj The object to test
* @return True if both objects are equal
*/
@Override
public boolean equals(Object obj)
{
if (obj != null)
{
if (obj.getClass() != this.getClass())
{
return false;
}
RSInfo rsInfo = (RSInfo) obj;
return ((id == rsInfo.getId()) &&
(generationId == rsInfo.getGenerationId()) &&
(groupId == rsInfo.getGroupId()) &&
(weight == rsInfo.getWeight()) &&
(((serverUrl == null) && (rsInfo.getServerUrl() == null)) ||
((serverUrl != null) && (rsInfo.getServerUrl() != null) &&
(serverUrl.equals(rsInfo.getServerUrl())))));
} else
{
return false;
}
}
/**
* Computes hash code for this object instance.
* @return Hash code for this object instance.
*/
@Override
public int hashCode()
{
int hash = 7;
hash = 17 * hash + this.id;
hash = 17 * hash + (int) (this.generationId ^ (this.generationId >>> 32));
hash = 17 * hash + this.groupId;
hash = 17 * hash + this.weight;
hash = 17 * hash + (this.serverUrl != null ? this.serverUrl.hashCode() : 0);
return hash;
}
/**
* Gets the server URL.
* @return the serverUrl
*/
public String getServerUrl()
{
return serverUrl;
}
/**
* Returns a string representation of the DS info.
* @return A string representation of the DS info
*/
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("\nId: ");
sb.append(id);
sb.append(" ; Server URL: ");
sb.append(serverUrl);
sb.append(" ; Generation id: ");
sb.append(generationId);
sb.append(" ; Group id: ");
sb.append(groupId);
sb.append(" ; Weight: ");
sb.append(weight);
return sb.toString();
}
}