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