/* * 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; } }