/**
* $RCSfile: ,v $
* $Revision: $
* $Date: $
*
* Copyright (C) 2004-2011 Jive Software. All rights reserved.
*
* Licensed 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 net.java.sipmack.sip.simple;
/**
* The <contact> element contains a URL of the contact address. It optionally
* has a 'priority' attribute, whose value means a relative priority of this
* contact address over the others. The value of the attribute MUST be a decimal
* number between 0 and 1 inclusive with at most 3 digits after the decimal
* point. Higher values indicate higher priority. Examples of priority values
* are 0, 0.021, 0.5, 1.00. If the 'priority' attribute is omitted, applications
* MUST assign the contact address the lowest priority. If the 'priority' value
* is out of the range, applications just SHOULD ignore the value and process it
* as if the attribute was not present. Applications SHOULD handle contacts with
* a higher priority as they have precedence over those with lower priorities.
* How they are actually treated is beyond this specification. Also, how to
* handle contacts with the same priority is up to implementations.
*
* @author Emil Ivov
* @version 1.0
*/
public class ContactUri implements Comparable<ContactUri> {
/**
*/
private float priority = 0;
/**
*/
private String contactValue = null;
/**
* Sets the value of the priority attribute.
*
* @param priority a three digit float value indicating contact priority
* @uml.property name="priority"
*/
public void setPriority(float priority) {
this.priority = priority;
}
/**
* Sets the value of this contact.
*
* @param contactValue the value to give to this contact
* @uml.property name="contactValue"
*/
public void setContactValue(String contactValue) {
this.contactValue = contactValue;
}
/**
* Returns the value of the priority attribute.
*
* @return a three digit float value indicating contact priority
* @uml.property name="priority"
*/
public float getPriority() {
return priority;
}
/**
* Returns the value of this contact
*
* @return the value of this contact
* @uml.property name="contactValue"
*/
public String getContactValue() {
return contactValue;
}
/**
* Compares this object with the specified object for order.
*
* @param o the Object to be compared.
* @return a negative integer, zero, or a positive integer as this object is
* less than, equal to, or greater than the specified object.
*/
// public int compareTo(Object o) {
// if (!(o instanceof ContactUri))
// return Integer.MAX_VALUE;
// return -(((int)(getPriority() * 1000)) - (int)(((ContactUri)o)
// .getPriority() * 1000));
// }
public Object clone() {
ContactUri clone = new ContactUri();
clone.setContactValue(new String(getContactValue()));
clone.setPriority(getPriority());
return clone;
}
@Override
public int compareTo(ContactUri o) {
return -(((int)(getPriority() * 1000)) - (int)(((ContactUri)o)
.getPriority() * 1000));
}
}