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 }