KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > xmldb > xupdate > lexus > commands > RenameCommand


1 package org.xmldb.xupdate.lexus.commands;
2
3 /*
4  * The XML:DB Initiative Software License, Version 1.0
5  *
6  *
7  * Copyright (c) 2000-2003 The XML:DB Initiative. All rights
8  * reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * 1. Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  *
17  * 2. Redistributions in binary form must reproduce the above copyright
18  * notice, this list of conditions and the following disclaimer in
19  * the documentation and/or other materials provided with the
20  * distribution.
21  *
22  * 3. The end-user documentation included with the redistribution,
23  * if any, must include the following acknowledgment:
24  * "This product includes software developed by the
25  * XML:DB Initiative (http://www.xmldb.org/)."
26  * Alternately, this acknowledgment may appear in the software itself,
27  * if and wherever such third-party acknowledgments normally appear.
28  *
29  * 4. The name "XML:DB Initiative" must not be used to endorse or
30  * promote products derived from this software without prior written
31  * permission. For written permission, please contact info@xmldb.org.
32  *
33  * 5. Products derived from this software may not be called "XML:DB",
34  * nor may "XML:DB" appear in their name, without prior written
35  * permission of the XML:DB Initiative.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals on behalf of the XML:DB Initiative. For more information
53  * on the XML:DB Initiative, please see <http://www.xmldb.org/>.
54  */

55
56 import org.w3c.dom.*;
57
58 /**
59  * Implementation of element <code>&lt;modifications:rename&gt;</code>.
60  *
61  * @version $Id: RenameCommand.java,v 1.5 2003/05/21 13:27:50 jbreedveld Exp $
62  * @author <a HREF="http://www.smb-tec.com">SMB</a>
63  */

64 public class RenameCommand extends CommandObject {
65
66   /**
67    *
68    */

69   public RenameCommand(Node contextNode) throws Exception JavaDoc {
70     super(contextNode);
71   }
72
73
74   /**
75    * @return Always <code>false</code>.
76    */

77   public boolean submitInstruction(int instruction) {
78     //does nothing
79
return false;
80   }
81
82
83   /**
84    * @return Always <code>false</code>.
85    */

86   public boolean executeInstruction() {
87     //does nothing
88
return false;
89   }
90
91
92   /**
93    *
94    */

95   public Node execute() throws Exception JavaDoc {
96     if (characters.size() == 0) {
97       throw new Exception JavaDoc("[rename] node name must not be empty, please type a name !");
98     }
99     String JavaDoc name = (String JavaDoc) characters.firstElement();
100     String JavaDoc selection = (String JavaDoc) attributes.get("select");
101     selectNodes(selection);
102     int selectionLength = selectionNodeList.getLength();
103     for (int i = 0; i < selectionLength; i++) {
104       Node current = selectionNodeList.item(i);
105       Node parent = current.getParentNode();
106       switch (current.getNodeType()) {
107         case Node.ATTRIBUTE_NODE:
108           // getParentNode() returns NULL for Attributes, but getOwnerElement() returns
109
// the proper parent node of this Attribute -> special case
110
parent = ((Attr) current).getOwnerElement();
111           ((Element) parent).setAttributeNS(current.getNamespaceURI(), name, current.getNodeValue());
112           ((Element) parent).removeAttribute(current.getNodeName());
113           break;
114         case Node.PROCESSING_INSTRUCTION_NODE:
115           ProcessingInstruction newPI = document.createProcessingInstruction(name, current.getNodeValue());
116           parent.replaceChild(newPI, current);
117           break;
118         case Node.ELEMENT_NODE:
119           Element newElement = document.createElementNS(current.getNamespaceURI(), name);
120           // not needed anymore, or useless anyway?
121
// newElement.setPrefix( current.getPrefix( ) );
122
NamedNodeMap attributes = current.getAttributes();
123           int attributesLength = attributes.getLength();
124           for (int j = 0; j < attributesLength; j++) {
125             newElement.setAttributeNS(attributes.item(j).getNamespaceURI(), attributes.item(j).getNodeName(),
126                     attributes.item(j).getNodeValue());
127           }
128           NodeList childNodes = current.getChildNodes();
129           int childNodesLength = childNodes.getLength();
130           for (int j = 0; j < childNodesLength; j++) {
131             newElement.appendChild(childNodes.item(j).cloneNode(true));
132           }
133           parent.replaceChild(newElement, current);
134           break;
135       }
136     }
137     return contextNode;
138   }
139 }
140
141
Popular Tags