1 /* 2 * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 27 package com.sun.jmx.snmp; 28 29 30 31 // java imports 32 // 33 import java.lang.Math; 34 35 /** 36 * Represents an SNMP String defined with a fixed length. 37 * The class is mainly used when dealing with table indexes for which one of the keys 38 * is defined as a <CODE>String</CODE>. 39 * 40 * <p><b>This API is a Sun Microsystems internal API and is subject 41 * to change without notice.</b></p> 42 */ 43 44 public class SnmpStringFixed extends SnmpString { 45 private static final long serialVersionUID = -9120939046874646063L; 46 47 // CONSTRUCTORS 48 //------------- 49 /** 50 * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified bytes array. 51 * @param v The bytes composing the fixed-string value. 52 */ 53 public SnmpStringFixed(byte[] v) { 54 super(v) ; 55 } 56 57 /** 58 * Constructs a new <CODE>SnmpStringFixed</CODE> with the specified <CODE>Bytes</CODE> array. 59 * @param v The <CODE>Bytes</CODE> composing the fixed-string value. 60 */ 61 public SnmpStringFixed(Byte[] v) { 62 super(v) ; 63 } 64 65 /** 66 * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>String</CODE> value. 67 * @param v The initialization value. 68 */ 69 public SnmpStringFixed(String v) { 70 super(v) ; 71 } 72 73 /** 74 * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>bytes</CODE> array 75 * with the specified length. 76 * @param l The length of the fixed-string. 77 * @param v The <CODE>bytes</CODE> composing the fixed-string value. 78 * @exception IllegalArgumentException Either the length or the <CODE>byte</CODE> array is not valid. 79 */ 80 public SnmpStringFixed(int l, byte[] v) throws IllegalArgumentException { 81 if ((l <= 0) || (v == null)) { 82 throw new IllegalArgumentException() ; 83 } 84 int length = Math.min(l, v.length); 85 value = new byte[l] ; 86 for (int i = 0 ; i < length ; i++) { 87 value[i] = v[i] ; 88 } 89 for (int i = length ; i < l ; i++) { 90 value[i] = 0 ; 91 } 92 } 93 94 /** 95 * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>Bytes</CODE> array 96 * with the specified length. 97 * @param l The length of the fixed-string. 98 * @param v The <CODE>Bytes</CODE> composing the fixed-string value. 99 * @exception IllegalArgumentException Either the length or the <CODE>Byte</CODE> array is not valid. 100 */ 101 public SnmpStringFixed(int l, Byte[] v) throws IllegalArgumentException { 102 if ((l <= 0) || (v == null)) { 103 throw new IllegalArgumentException() ; 104 } 105 int length = Math.min(l, v.length); 106 value = new byte[l] ; 107 for (int i = 0 ; i < length ; i++) { 108 value[i] = v[i].byteValue() ; 109 } 110 for (int i = length ; i < l ; i++) { 111 value[i] = 0 ; 112 } 113 } 114 115 /** 116 * Constructs a new <CODE>SnmpStringFixed</CODE> from the specified <CODE>String</CODE> 117 * with the specified length. 118 * @param l The length of the fixed-string. 119 * @param s The <CODE>String</CODE> composing the fixed-string value. 120 * @exception IllegalArgumentException Either the length or the <CODE>String</CODE> is not valid. 121 */ 122 public SnmpStringFixed(int l, String s) throws IllegalArgumentException { 123 if ((l <= 0) || (s == null)) { 124 throw new IllegalArgumentException() ; 125 } 126 byte[] v = s.getBytes(); 127 int length = Math.min(l, v.length); 128 value = new byte[l] ; 129 for (int i = 0 ; i < length ; i++) { 130 value[i] = v[i] ; 131 } 132 for (int i = length ; i < l ; i++) { 133 value[i] = 0 ; 134 } 135 } 136 137 // PUBLIC METHODS 138 //--------------- 139 /** 140 * Extracts the fixed-string from an index OID and returns its 141 * value converted as an <CODE>SnmpOid</CODE>. 142 * @param l The number of successive array elements to be retreived 143 * in order to construct the OID. 144 * These elements are retreived starting at the <CODE>start</CODE> position. 145 * @param index The index array. 146 * @param start The position in the index array. 147 * @return The OID representing the fixed-string value. 148 * @exception SnmpStatusException There is no string value 149 * available at the start position. 150 */ 151 public static SnmpOid toOid(int l, long[] index, int start) throws SnmpStatusException { 152 try { 153 long[] ids = new long[l] ; 154 for (int i = 0 ; i < l ; i++) { 155 ids[i] = index[start + i] ; 156 } 157 return new SnmpOid(ids) ; 158 } 159 catch(IndexOutOfBoundsException e) { 160 throw new SnmpStatusException(SnmpStatusException.noSuchName) ; 161 } 162 } 163 164 /** 165 * Scans an index OID, skip the string value and returns the position 166 * of the next value. 167 * @param l The number of successive array elements to be passed 168 * in order to get the position of the next value. 169 * These elements are passed starting at the <CODE>start</CODE> position. 170 * @param index The index array. 171 * @param start The position in the index array. 172 * @return The position of the next value. 173 * @exception SnmpStatusException There is no string value 174 * available at the start position. 175 */ 176 public static int nextOid(int l, long[] index, int start) throws SnmpStatusException { 177 int result = start + l ; 178 if (result > index.length) { 179 throw new SnmpStatusException(SnmpStatusException.noSuchName) ; 180 } 181 return result ; 182 } 183 184 /** 185 * Appends an <CODE>SnmpOid</CODE> representing an <CODE>SnmpStringFixed</CODE> to another OID. 186 * @param l Unused. 187 * @param source An OID representing an <CODE>SnmpStringFixed</CODE> value. 188 * @param dest Where source should be appended. 189 */ 190 public static void appendToOid(int l, SnmpOid source, SnmpOid dest) { 191 dest.append(source) ; 192 } 193 }