| /* |
| * Copyright The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| package org.apache.ws.security.components.crypto; |
| |
| import java.util.ArrayList; |
| |
| import org.apache.xml.security.utils.RFC2253Parser; |
| |
| /** |
| * class for breaking up an X500 Name into it's component tokens, ala |
| * java.util.StringTokenizer. We need this class as some of the |
| * lightweight Java environment don't support classes like |
| * StringTokenizer. |
| */ |
| public class X509NameTokenizer { |
| |
| private final java.util.List tokens = new ArrayList(); |
| private int index = 0; |
| |
| public X509NameTokenizer(String dn) { |
| final String _DN = RFC2253Parser.normalize(dn); |
| int i = 0; |
| int l = 0; |
| int k; |
| for (int j = 0; (k = _DN.indexOf(",", j)) >= 0; j = k + 1) { |
| l += countQuotes(_DN, j, k); |
| if ((k > 0) && (_DN.charAt(k - 1) != '\\') && (l % 2) == 0) { |
| tokens.add(_DN.substring(i, k).trim()); |
| i = k + 1; |
| l = 0; |
| } |
| } |
| if (_DN.trim().length() != 0) { |
| tokens.add(trim(_DN.substring(i))); |
| } |
| } |
| |
| public boolean hasMoreTokens() { |
| return (index < tokens.size()); |
| } |
| |
| public String nextToken() { |
| if (hasMoreTokens()) { |
| return (String) tokens.get(index++); |
| } else { |
| return ""; |
| } |
| } |
| |
| |
| /** |
| * Returns the number of Quotation from i to j |
| * |
| * @param s |
| * @param i |
| * @param j |
| * @return number of quotes |
| */ |
| private static int countQuotes(String s, int i, int j) { |
| int k = 0; |
| for (int l = i; l < j; l++) { |
| if (s.charAt(l) == '"') { |
| k++; |
| } |
| } |
| return k; |
| } |
| |
| /** |
| * Method trim |
| * |
| * @param str |
| * @return the string |
| */ |
| private static String trim(String str) { |
| String trimed = str.trim(); |
| int i = str.indexOf(trimed) + trimed.length(); |
| if ((str.length() > i) |
| && trimed.endsWith("\\") |
| && !trimed.endsWith("\\\\") |
| && (str.charAt(i) == ' ')) { |
| trimed = trimed + " "; |
| } |
| return trimed; |
| } |
| |
| } |