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 }