1229 }
1230
1231 // check user-specified keyword map first, then fallback to built-in
1232 // map
1233 String oidString = extraKeywordMap.get(keyword);
1234 if (oidString == null) {
1235 AVAKeyword ak = keywordMap.get(keyword);
1236 if ((ak != null) && ak.isCompliant(standard)) {
1237 return ak.oid;
1238 }
1239 } else {
1240 return new ObjectIdentifier(oidString);
1241 }
1242
1243 // no keyword found, check if OID string
1244 if (standard == AVA.DEFAULT && keyword.startsWith("OID.")) {
1245 keyword = keyword.substring(4);
1246 }
1247
1248 boolean number = false;
1249 if (keyword.length() != 0) {
1250 char ch = keyword.charAt(0);
1251 if ((ch >= '0') && (ch <= '9')) {
1252 number = true;
1253 }
1254 }
1255 if (number == false) {
1256 throw new IOException("Invalid keyword \"" + keyword + "\"");
1257 }
1258 return new ObjectIdentifier(keyword);
1259 }
1260
1261 /**
1262 * Get a keyword for the given ObjectIdentifier according to standard.
1263 * If no keyword is available, the ObjectIdentifier is encoded as a
1264 * String.
1265 */
1266 static String getKeyword(ObjectIdentifier oid, int standard) {
1267 return getKeyword
1268 (oid, standard, Collections.<String, String>emptyMap());
1269 }
1270
1271 /**
1272 * Get a keyword for the given ObjectIdentifier according to standard.
1273 * Checks the extraOidMap for a keyword first, then falls back to the
1274 * builtin/default set. If no keyword is available, the ObjectIdentifier
1275 * is encoded as a String.
1276 */
1277 static String getKeyword
1278 (ObjectIdentifier oid, int standard, Map<String, String> extraOidMap) {
1279
1280 // check extraOidMap first, then fallback to built-in map
1281 String oidString = oid.toString();
1282 String keywordString = extraOidMap.get(oidString);
1283 if (keywordString == null) {
1284 AVAKeyword ak = oidMap.get(oid);
1285 if ((ak != null) && ak.isCompliant(standard)) {
1286 return ak.keyword;
1287 }
1288 } else {
1289 if (keywordString.length() == 0) {
1290 throw new IllegalArgumentException("keyword cannot be empty");
1291 }
1292 keywordString = keywordString.trim();
1293 char c = keywordString.charAt(0);
1294 if (c < 65 || c > 122 || (c > 90 && c < 97)) {
1295 throw new IllegalArgumentException
1296 ("keyword does not start with letter");
1297 }
1298 for (int i=1; i<keywordString.length(); i++) {
1299 c = keywordString.charAt(i);
1300 if ((c < 65 || c > 122 || (c > 90 && c < 97)) &&
1301 (c < 48 || c > 57) && c != '_') {
1302 throw new IllegalArgumentException
1303 ("keyword character is not a letter, digit, or underscore");
1304 }
1305 }
1306 return keywordString;
1307 }
1308 // no compliant keyword, use OID
1309 if (standard == AVA.RFC2253) {
|
1229 }
1230
1231 // check user-specified keyword map first, then fallback to built-in
1232 // map
1233 String oidString = extraKeywordMap.get(keyword);
1234 if (oidString == null) {
1235 AVAKeyword ak = keywordMap.get(keyword);
1236 if ((ak != null) && ak.isCompliant(standard)) {
1237 return ak.oid;
1238 }
1239 } else {
1240 return new ObjectIdentifier(oidString);
1241 }
1242
1243 // no keyword found, check if OID string
1244 if (standard == AVA.DEFAULT && keyword.startsWith("OID.")) {
1245 keyword = keyword.substring(4);
1246 }
1247
1248 boolean number = false;
1249 if (!keyword.isEmpty()) {
1250 char ch = keyword.charAt(0);
1251 if ((ch >= '0') && (ch <= '9')) {
1252 number = true;
1253 }
1254 }
1255 if (number == false) {
1256 throw new IOException("Invalid keyword \"" + keyword + "\"");
1257 }
1258 return new ObjectIdentifier(keyword);
1259 }
1260
1261 /**
1262 * Get a keyword for the given ObjectIdentifier according to standard.
1263 * If no keyword is available, the ObjectIdentifier is encoded as a
1264 * String.
1265 */
1266 static String getKeyword(ObjectIdentifier oid, int standard) {
1267 return getKeyword
1268 (oid, standard, Collections.<String, String>emptyMap());
1269 }
1270
1271 /**
1272 * Get a keyword for the given ObjectIdentifier according to standard.
1273 * Checks the extraOidMap for a keyword first, then falls back to the
1274 * builtin/default set. If no keyword is available, the ObjectIdentifier
1275 * is encoded as a String.
1276 */
1277 static String getKeyword
1278 (ObjectIdentifier oid, int standard, Map<String, String> extraOidMap) {
1279
1280 // check extraOidMap first, then fallback to built-in map
1281 String oidString = oid.toString();
1282 String keywordString = extraOidMap.get(oidString);
1283 if (keywordString == null) {
1284 AVAKeyword ak = oidMap.get(oid);
1285 if ((ak != null) && ak.isCompliant(standard)) {
1286 return ak.keyword;
1287 }
1288 } else {
1289 if (keywordString.isEmpty()) {
1290 throw new IllegalArgumentException("keyword cannot be empty");
1291 }
1292 keywordString = keywordString.trim();
1293 char c = keywordString.charAt(0);
1294 if (c < 65 || c > 122 || (c > 90 && c < 97)) {
1295 throw new IllegalArgumentException
1296 ("keyword does not start with letter");
1297 }
1298 for (int i=1; i<keywordString.length(); i++) {
1299 c = keywordString.charAt(i);
1300 if ((c < 65 || c > 122 || (c > 90 && c < 97)) &&
1301 (c < 48 || c > 57) && c != '_') {
1302 throw new IllegalArgumentException
1303 ("keyword character is not a letter, digit, or underscore");
1304 }
1305 }
1306 return keywordString;
1307 }
1308 // no compliant keyword, use OID
1309 if (standard == AVA.RFC2253) {
|