View Javadoc

1   /**
2    *
3    * Copyright 2005 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.schema;
18  
19  import javax.xml.namespace.QName;
20  
21  import org.apache.xmlbeans.XmlCursor;
22  
23  /**
24   * @version $Rev: 432510 $ $Date: 2006-08-18 00:44:04 -0700 (Fri, 18 Aug 2006) $
25   */
26  public class SecurityElementConverter implements ElementConverter {
27  
28      public static final String GERONIMO_SECURITY_NAMESPACE = "http://geronimo.apache.org/xml/ns/security-1.2";
29      private static final QName PRINCIPAL_QNAME = new QName(GERONIMO_SECURITY_NAMESPACE, "principal");
30      private static final QName REALM_NAME_QNAME = new QName("realm-name");
31  
32      public void convertElement(XmlCursor cursor, XmlCursor end) {
33          cursor.push();
34          end.toCursor(cursor);
35          end.toEndToken();
36          while (cursor.hasNextToken() && cursor.isLeftOf(end)) {
37              if (cursor.isStart()) {
38                  if (GERONIMO_SECURITY_NAMESPACE.equals(cursor.getName().getNamespaceURI())) {
39                      break;
40                  }
41                  cursor.setName(new QName(GERONIMO_SECURITY_NAMESPACE, cursor.getName().getLocalPart()));
42  
43              }
44              cursor.toNextToken();
45          }
46          cursor.pop();
47          XmlCursor source = null;
48          try {
49          while (cursor.hasNextToken() && cursor.isLeftOf(end)) {
50              if (cursor.isStart()) {
51                  String localPart = cursor.getName().getLocalPart();
52                  if (localPart.equals("realm")) {
53                      if (source == null) {
54                          source = cursor.newCursor();
55                      } else {
56                          source.toCursor(cursor);
57                      }
58                      cursor.push();
59                      cursor.toEndToken();
60                      cursor.toNextToken();
61                          if (source.toChild(PRINCIPAL_QNAME)) {
62                              do {
63                                  source.copyXml(cursor);
64                              } while (source.toNextSibling(PRINCIPAL_QNAME));
65                          }
66  
67                      cursor.pop();
68                      cursor.removeXml();
69                  } else if (localPart.equals("default-principal")) {
70                      cursor.removeAttribute(REALM_NAME_QNAME);
71                  }
72              }
73              cursor.toNextToken();
74          }
75          } finally {
76              if (source != null) {
77                  source.dispose();
78              }
79          }
80      }
81  }