blob: 1f57f02a807b22277e0ff128c8304fbf808a3e41 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1997-2007 Sun Microsystems, Inc. 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. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26
27package com.sun.jmx.snmp;
28
29
30
31// java imports
32//
33import 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
44public 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}