package com.revolsys.identifier;
import java.util.Collections;
import java.util.List;
import com.revolsys.datatype.DataType;
import com.revolsys.util.number.Longs;
public final class IntegerIdentifier extends Number implements Identifier, Comparable<Object> {
private static final long serialVersionUID = 1L;
private final int value;
IntegerIdentifier(final int value) {
this.value = value;
}
@Override
public int compareTo(final Identifier identifier2) {
if (identifier2 == this) {
return 0;
} else if (identifier2 == null) {
return -1;
} else if (identifier2 instanceof Number) {
final Number number2 = (Number)identifier2;
return Long.compare(this.value, number2.longValue());
} else if (identifier2.isSingle()) {
final Object value2 = identifier2.getValue(0);
return compareTo(value2);
} else {
return -1;
}
}
@Override
public int compareTo(final Object object) {
if (object == null) {
return -1;
} else if (object instanceof Number) {
final Number number = (Number)object;
final long longValue = number.intValue();
return Long.compare(this.value, longValue);
} else if (object instanceof Identifier) {
final Identifier identifier = (Identifier)object;
return compareTo(identifier);
} else {
return compareToObject(object);
}
}
private int compareToObject(final Object object) {
try {
final Long longValue = Longs.toValid(object);
if (longValue == null) {
return -1;
} else {
return Long.compare(this.value, longValue);
}
} catch (final Exception e) {
final String string = Integer.toString(this.value);
final String string2 = object.toString();
return string.compareTo(string2);
}
}
@Override
public double doubleValue() {
return this.value;
}
@Override
public boolean equals(final Object other) {
if (other instanceof Number) {
final Number number = (Number)other;
return this.value == number.intValue();
} else if (other instanceof Identifier) {
final Identifier identifier = (Identifier)other;
final List<Object> values = identifier.getValues();
if (values.size() == 1) {
final Object otherValue = values.get(0);
return DataType.equal(this.value, otherValue);
} else {
return false;
}
} else {
return DataType.equal(this.value, other);
}
}
@Override
public float floatValue() {
return this.value;
}
@SuppressWarnings("unchecked")
@Override
public <V> V getValue(final int index) {
if (index == 0) {
return (V)Integer.valueOf(this.value);
} else {
return null;
}
}
@Override
public List<Object> getValues() {
return Collections.singletonList((Object)this.value);
}
@Override
public int hashCode() {
return this.value;
}
@Override
public int intValue() {
return this.value;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public long longValue() {
return this.value;
}
@Override
public String toString() {
return Integer.toString(this.value);
}
}