1 /** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one or more 4 * contributor license agreements. See the NOTICE file distributed with 5 * this work for additional information regarding copyright ownership. 6 * The ASF licenses this file to You under the Apache License, Version 2.0 7 * (the "License"); you may not use this file except in compliance with 8 * the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package org.apache.geronimo.util.asn1.x509; 20 21 /** 22 * class for breaking up an X500 Name into it's component tokens, ala 23 * java.util.StringTokenizer. We need this class as some of the 24 * lightweight Java environment don't support classes like 25 * StringTokenizer. 26 */ 27 public class X509NameTokenizer 28 { 29 private String value; 30 private int index; 31 private char seperator; 32 private StringBuffer buf = new StringBuffer(); 33 34 public X509NameTokenizer( 35 String oid) 36 { 37 this(oid, ','); 38 } 39 40 public X509NameTokenizer( 41 String oid, 42 char seperator) 43 { 44 this.value = oid; 45 this.index = -1; 46 this.seperator = seperator; 47 } 48 49 public boolean hasMoreTokens() 50 { 51 return (index != value.length()); 52 } 53 54 public String nextToken() 55 { 56 if (index == value.length()) 57 { 58 return null; 59 } 60 61 int end = index + 1; 62 boolean quoted = false; 63 boolean escaped = false; 64 65 buf.setLength(0); 66 67 while (end != value.length()) 68 { 69 char c = value.charAt(end); 70 71 if (c == '"') 72 { 73 if (!escaped) 74 { 75 quoted = !quoted; 76 } 77 else 78 { 79 buf.append(c); 80 } 81 escaped = false; 82 } 83 else 84 { 85 if (escaped || quoted) 86 { 87 buf.append(c); 88 escaped = false; 89 } 90 else if (c == '\\') 91 { 92 escaped = true; 93 } 94 else if (c == seperator) 95 { 96 break; 97 } 98 else 99 { 100 buf.append(c); 101 } 102 } 103 end++; 104 } 105 106 index = end; 107 return buf.toString().trim(); 108 } 109 }