001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2003 Danet GmbH (www.danet.de), GS-AN.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: W3CDomUtil.java,v 1.2 2006/09/29 12:32:08 drmlipp Exp $
021: *
022: * $Log: W3CDomUtil.java,v $
023: * Revision 1.2 2006/09/29 12:32:08 drmlipp
024: * Consistently using WfMOpen as projct name now.
025: *
026: * Revision 1.1.1.1 2003/06/30 20:05:12 drmlipp
027: * Initial import
028: *
029: * Revision 1.7 2003/06/27 08:51:46 lipp
030: * Fixed copyright/license information.
031: *
032: * Revision 1.6 2003/04/25 14:50:59 lipp
033: * Fixed javadoc errors and warnings.
034: *
035: * Revision 1.5 2003/04/24 20:50:13 lipp
036: * Fixed some warnings.
037: *
038: * Revision 1.4 2003/02/24 10:46:41 lipp
039: * Removed usage of System.out and .err.
040: *
041: * Revision 1.3 2001/12/19 11:48:42 lipp
042: * XSP debug feature.
043: *
044: * Revision 1.2 2001/12/11 14:29:10 schlue
045: * Basic implementation of staff group types.
046: * ToDo: persistence, group type id, sub group types and group type template for new entries
047: *
048: * Revision 1.1 2001/10/25 07:49:33 lipp
049: * Moved W3CDomUtil to de.danet.an.util.web
050: *
051: * Revision 1.6 2001/10/17 12:16:12 montag
052: * importProcessDefinitions working
053: *
054: * Revision 1.5 2001/10/17 12:12:38 montag
055: * importProcessDefinitions working
056: *
057: * Revision 1.4 2001/10/15 12:21:35 lipp
058: * New methods for dialg hints.
059: *
060: * Revision 1.3 2001/10/12 13:25:23 lipp
061: * Making progress with new process list.
062: *
063: * Revision 1.2 2001/08/17 10:00:24 montag
064: * clean up classes and javadoc
065: *
066: * Revision 1.1 2001/08/12 16:48:50 montag
067: * Read in process definition for process types;
068: * dtd and encoding problem not solved yet !
069: *
070: *
071: */
072:
073: package de.danet.an.util.web;
074:
075: import javax.xml.parsers.DocumentBuilder;
076: import javax.xml.parsers.DocumentBuilderFactory;
077: import javax.xml.parsers.ParserConfigurationException;
078:
079: import org.w3c.dom.Document;
080: import org.w3c.dom.Element;
081: import org.w3c.dom.Node;
082: import org.w3c.dom.NodeList;
083: import org.w3c.dom.ProcessingInstruction;
084:
085: /**
086: * Utilities for easy use of org.w3c.dom things.
087: */
088: public class W3CDomUtil {
089:
090: /**
091: * Just get a new, never used and fresh <code>Document</code>.
092: * @return a new, never used and fresh <code>Document</code>
093: */
094: public static Document createNewDocument() {
095: DocumentBuilderFactory dbf = DocumentBuilderFactory
096: .newInstance();
097: DocumentBuilder db = null;
098: try {
099: db = dbf.newDocumentBuilder();
100: } catch (ParserConfigurationException e) {
101: throw new IllegalStateException();
102: }
103: Document doc = db.newDocument();
104: return doc;
105: }
106:
107: /**
108: * Returns a "link" element with the given attributes. Valid values
109: * for <code>name</code>, <code>hint</code> and <code>type</code>
110: * are documentated in the DV-Konzept.
111: * @param doc The W3C DOM document in which the link will be inserted.
112: * @param name The name atribute of the link.
113: * @param hint The hint attribute of the link.
114: * @param href The href attribute of the link. Strings starting with
115: * "http://" are not modified.
116: * @param display The display string used to show the link. (Use
117: * <code>mappingSetup.mapText()</code> or similar before calling this
118: * method.)
119: * @return An W3C DOM element of type "link".
120: * @deprecated
121: */
122: public static Element createLink(Document doc, String name,
123: String hint, String href, String display) {
124: Element link = doc.createElement("link");
125: link.setAttribute("name", name);
126: link.setAttribute("hint", hint);
127: // modify href to get a correct URI
128: link.setAttribute("href", href);
129: link.appendChild(doc.createTextNode(display));
130: return link;
131: }
132:
133: /**
134: * Appends to a given node a "dialog hint node", i.e. a hint how a
135: * node's attribute or a node's value is to be represented in a
136: * dialog.
137: * @param node the node to which the dialog hint node is to be
138: * appended.
139: * @param attribute the name of the node's attribute which is
140: * attributed by the dialog hint. This parameter may be
141: * <code>null</code> if the dialog hint applies to the value of the node.
142: * @param type the type attribute of the dialog hint node.
143: * @return the appended dialog hint element.
144: */
145: public static Element appendDialogHint(Node node, String attribute,
146: String type) {
147: Document doc = node.getOwnerDocument();
148: Element diaAttr = doc.createElement("dialog-hint");
149: if (attribute != null) {
150: diaAttr.setAttribute("attribute", attribute);
151: }
152: diaAttr.setAttribute("type", type);
153: node.appendChild(diaAttr);
154: return diaAttr;
155: }
156:
157: /**
158: * Appends to a given node a "dialog hint node", i.e. a hint how a
159: * node's attribute or a node's value is to be represented in a
160: * dialog.
161: * @param node the node to which the dialog hint node is to be
162: * appended.
163: * @param attribute the name of the node's attribute which is
164: * attributed by the dialog hint. This parameter may be
165: * <code>null</code> if the dialog hint applies to the value of the node.
166: * @param type the type attribute of the dialog hint node.
167: * @param maxlength the maxlength attribute of the dialog hint node.
168: * @return the appended dialog hint element.
169: */
170: public static Element appendDialogHint(Node node, String attribute,
171: String type, long maxlength) {
172: Document doc = node.getOwnerDocument();
173: Element diaAttr = doc.createElement("dialog-hint");
174: if (attribute != null) {
175: diaAttr.setAttribute("attribute", attribute);
176: }
177: diaAttr.setAttribute("type", type);
178: diaAttr.setAttribute("maxlength", Long.toString(maxlength));
179: node.appendChild(diaAttr);
180: return diaAttr;
181: }
182:
183: /**
184: * Find the first PI node with the given PI target name.
185: * @param doc the document to search.
186: * @param name the PI target name.
187: * @return the node found or <code>null</code>.
188: */
189: public static ProcessingInstruction findFirstPI(Document doc,
190: String name) {
191: NodeList nodelist = doc.getChildNodes();
192: int i = nodelist.getLength();
193: for (int j = 0; j < i; j++) {
194: Node node = nodelist.item(j);
195: if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
196: ProcessingInstruction pi = (ProcessingInstruction) node;
197: if (pi.getTarget().equals(name)) {
198: return pi;
199: }
200: }
201: }
202: return null;
203: }
204: }
|