KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > jonas_lib > deployment > rules > QNameRule


1 /**
2  * JOnAS: Java(TM) Open Application Server
3  * Copyright (C) 1999-2004 Bull S.A.
4  * Contact: jonas-team@objectweb.org
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or 1any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19  * USA
20  *
21  * --------------------------------------------------------------------------
22  * $Id: QNameRule.java,v 1.4 2004/11/19 09:23:01 sauthieg Exp $
23  * --------------------------------------------------------------------------
24  */

25
26 package org.objectweb.jonas_lib.deployment.rules;
27
28 import java.util.StringTokenizer JavaDoc;
29
30 import javax.xml.namespace.QName JavaDoc;
31
32 import org.apache.commons.digester.Rule;
33
34 import org.objectweb.jonas_lib.deployment.xml.Qname;
35
36 /**
37  * Rule that create a new QName object
38  * @author Florent Benoit
39  */

40 public class QNameRule extends Rule {
41
42
43     /**
44      * This method is called when the body of a matching XML element is
45      * encountered. If the element has no body, this method is not called at
46      * all. The default implementation delegates to the deprecated method
47      * body without the namespace and name parameters, to retain backwards
48      * compatibility.
49      * @param namespace the namespace URI of the matching element,
50      * or an empty string if the parser is not namespace
51      * aware or the element has no namespace
52      * @param name the local name if the parser is namespace aware,
53      * or just the element name otherwise
54      * @param text The text of the body of this element
55      */

56     public void body(String JavaDoc namespace, String JavaDoc name, String JavaDoc text) {
57
58         // Check that there the value of the element is not null
59
if (text == null) {
60             throw new IllegalArgumentException JavaDoc("No QName found in the body of the tag " + name);
61         }
62
63         // Extract prefix and localpart
64
StringTokenizer JavaDoc st = new StringTokenizer JavaDoc(text, ":");
65         if (st.countTokens() != 2) {
66             throw new IllegalArgumentException JavaDoc("QName must be on the form prefix:localpart for element " + name);
67         }
68         String JavaDoc prefix = st.nextToken();
69         String JavaDoc localPart = st.nextToken();
70
71         // Get namespaceURI from prefix
72
String JavaDoc namespaceURI = digester.findNamespaceURI(prefix);
73         if (namespaceURI == null) {
74             throw new IllegalArgumentException JavaDoc("No namespace found for the prefix '" + prefix + "' in element " + name);
75         }
76
77         // Build QName
78
QName JavaDoc qName = new QName JavaDoc(namespaceURI, localPart, prefix);
79
80         // Add this QName to the element at the top of the stack
81
Qname qNameObject = (Qname) digester.peek();
82         qNameObject.setName(name);
83         qNameObject.setQName(qName);
84
85     }
86 }
87
Popular Tags