/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 javax.naming;
import java.util.Arrays;
/**
* A <code>BinaryRefAddr</code> refers to an address which is represented by a
* binary address.
*/
public class BinaryRefAddr extends RefAddr {
private static final long serialVersionUID = -3415254970957330361L;
/**
* The buffer for the binary address itself.
*
* @serial
*/
private byte[] buf;
/**
* Constructs a <code>BinaryRefAddr</code> using the specified address
* type and the full details of the supplied byte array.
*
* @param type
* the address type which cannot be null
* @param address
* the address itself which cannot be null
*/
public BinaryRefAddr(String type, byte[] address) {
this(type, address, 0, address.length);
}
/**
* Constructs a <code>BinaryRefAddr</code> using the specified address
* type and part of the supplied byte array. The number of bytes to be taken
* is specified by <code>size</code>. Additionally these bytes are taken
* from a starting point specified by <code>index</code>.
*
* @param type
* the address type. It cannot be null.
* @param address
* the address itself. It cannot be null.
* @param index
* the starting point to copy bytes from. It must be greater than
* or equal to zero and must be less than or equal to the size of
* the byte array.
* @param size
* the number of bytes to copy. It must be greater than or equal
* to zero and must be less than or equal to the size of the byte
* array less the starting position.
* @throws ArrayIndexOutOfBoundsException
* If <code>size</code> or <code>index</code> does not meet
* the constraints.
*/
public BinaryRefAddr(String type, byte[] address, int index, int size) {
super(type);
this.buf = new byte[size];
System.arraycopy(address, index, this.buf, 0, size);
}
/**
* Gets the content of this address.
*
* @return an array of bytes containing the address. It cannot be null.
*/
@Override
public Object getContent() {
return buf;
}
/**
* Returns true if this address is equal to the supplied object
* <code>o</code>. They are considered equal if the address types are
* equal and the data in the buffers is of the same length and contains the
* same bytes.
*
* @param o
* the object to compare with
* @return true if this address is equal to <code>o</code>, otherwise
* false
*/
@Override
public boolean equals(Object o) {
if (o instanceof BinaryRefAddr) {
BinaryRefAddr a = (BinaryRefAddr) o;
return this.addrType.equals(a.addrType)
&& Arrays.equals(this.buf, a.buf);
}
return false;
}
/**
* Returns the hashcode of this address. The result is the hashcode of the
* address type added to each byte from the data buffer.
*
* @return the hashcode of this address
*/
@Override
public int hashCode() {
int i = this.addrType.hashCode();
for (byte element : this.buf) {
i += element;
}
return i;
}
/**
* Returns the string representation of this address. The string includes
* the address type and a maximum of 128 bytes address content expressed in
* hexadecimal form.
*
* @return the string representation of this address
*/
@Override
public String toString() {
String s = "The type of the address is: " //$NON-NLS-1$
+ this.addrType + "\nThe content of the address is: "; //$NON-NLS-1$
int max = this.buf.length > 128 ? 128 : this.buf.length;
for (int i = 0; i < max; i++) {
s += Integer.toHexString(this.buf[i]) + " "; //$NON-NLS-1$
}
s = s.substring(0, s.length() - 1) + "\n"; //$NON-NLS-1$
return s;
}
}