Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/enhydra/xml/xmlc/dom/XMLCDomFactory.java


1   /*
2    * Enhydra Java Application Server Project
3    * 
4    * The contents of this file are subject to the Enhydra Public License
5    * Version 1.1 (the "License"); you may not use this file except in
6    * compliance with the License. You may obtain a copy of the License on
7    * the Enhydra web site ( http://www.enhydra.org/ ).
8    * 
9    * Software distributed under the License is distributed on an "AS IS"
10   * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 
11   * the License for the specific terms governing rights and limitations
12   * under the License.
13   * 
14   * The Initial Developer of the Enhydra Application Server is Lutris
15   * Technologies, Inc. The Enhydra Application Server and portions created
16   * by Lutris Technologies, Inc. are Copyright Lutris Technologies, Inc.
17   * All Rights Reserved.
18   * 
19   * Contributor(s):
20   * 
21   * $Id: XMLCDomFactory.java,v 1.9.2.2.4.5 2000/10/18 09:35:07 markd Exp $
22   */
23  
24  package org.enhydra.xml.xmlc.dom;
25  
26  import org.w3c.dom.DocumentType;
27  import org.w3c.dom.Document;
28  import org.w3c.dom.Node;
29  import org.w3c.dom.Element;
30  
31  
32  /**
33   * Interface for a factory class that can create DocumentType and Document
34   * objects.  It also provides document-type specific functions.  This is
35   * used in implementing subclassed DOMs.
36   * <P>
37   * Classes implementing this must:
38   * <UL>
39   * <LI> Provide a constructor that takes no arguments.
40   * <LI> Be thread-safe (reentrant is preferred).
41   * </UL>
42   * When a DTD-specific DOM is created, an class implementing this interface
43   * must be supplied to XMLC.  This would normally be created by extending the
44   * XMLCDomDefaultFactory class.
45   * <P>
46   * This class is designed to be build using a DOMImplementation object.
47   * However, since the DOM doesn't specify how DOMImplementation objects
48   * are obtained, we hide that detail.  The methods are somewhat different
49   * for historic reasons.
50   *
51   * @see org.w3c.dom.DOMImplementation
52   * @see org.w3c.dom.HTMLDOMImplementation
53   */
54  public interface XMLCDomFactory {
55  
56      //FIXME: Way of returning URL attribute names would allow for
57      //       more efficient code.
58  
59      /**
60       * Creates an empty <code>DocumentType</code> node.
61       *
62       * @param qualifiedName The document type name (same as the root element).
63       * @param publicID The document type public identifier.
64       * @param systemID The document type system identifier.
65       * @param internalSubset The internal subset as a string.
66       * @return A new <code>DocumentType</code> node.
67       */
68      public DocumentType createDocumentType(String qualifiedName,
69                                             String publicID,
70                                             String systemID,
71                                             String internalSubset);
72  
73      /**
74       * Creates an XML <code>Document</code> object of the specified type.  The
75       * document element should be created.  A HTML document should
76       * only have the document element, which differs from the
77       * <code>DOMImplementation</code> specification, however it makes
78       * code generation easier and its not expected that there will be
79       * many custom HTML DOM factories.
80       *
81       * @param namespaceURI The namespace URI of the document element to
82       *  create, or null. 
83       * @param qualifiedName The document type name (same as the root element).
84       *  Maybe null for HTML documents or documents without DTDs.
85       * @param doctype The type of document to be created or <code>null</code>.
86       *   When <code>doctype</code> is not <code>null</code>, its 
87       *   <code>Node.ownerDocument</code> attribute is set to the document being 
88       *   created. Maybe null for for documents without DTDs or HTML documents.
89       * @return A new <code>Document</code> object.
90       * @see org.w3c.dom.DOMImplementation
91       * @see org.w3c.dom.HTMLDOMImplementation
92       */
93      public Document createDocument(String namespaceURI,
94                                     String qualifiedName,
95                                     DocumentType doctype);
96  
97      /**
98       * Get the MIME type to associated with the document, or null
99       * if none should be associated.
100      */
101     public String getMIMEType();
102 
103     /**
104      * Get the base class name for generated classes.  It must extend
105      * XMLObjectImpl.  This class maybe overridden for individual documents
106      * that are compiled.
107      */
108     public String getBaseClassName();
109 
110     /**
111      * Get the interface names that will automatically be added to all
112      * generated classes and interfaces.  This class maybe overridden for
113      * individual documents that are compiled.  It XMLObject is not 
114      * part of the list, it will be added automatically.
115      *
116      * @return An array of fully-qualified interface names, or null
117      *  if none, other than XMLObject, are to be added.
118      */
119     public String[] getInterfaceNames();
120 
121     /**
122      * Convert an implementation-specific DOM node class name to the
123      * external interface or class name that should be used to 
124      * reference it.  This could be a <CODE>org.w3c.dom</CODE> interface or
125      * other interface or class.
126      *
127      * @see org.enhydra.xml.xmlc#XMLObject
128      */
129     public String nodeClassToInterface(Node node);
130 
131     /**
132      * Extract the class names for an element.  This is a class for grouping
133      * elements, not the Java class.  In HTML, the class is specified with the
134      * <CODE>class</CODE> attribute and with a value of a white-space
135      * separated list of class names.  Its not specified for XML, however this
136      * method can be implemented in DTD-specifc XMLDomFactories to enable this
137      * functionality.
138      *
139      * @return An array of class names or null if the node has no classes.
140      *  XML returns null.
141      */
142     public String[] getElementClassNames(Element element);
143 
144     /**
145      * Determine if an an attribute of an element may contain a URL and should
146      * be subject to URL editing at compile time(or rewriting at run
147      * time. This method is required, as there is not way to define this in a
148      * XML DTD.  With HTML, the attributes returned should have values of type
149      * %URL, %URI or %Script.
150      * 
151      * @param element The element object the attribute is associated with.
152      * @param attrName The name of the attribute.
153      * @return True if the attribute may contain a URL (although it could
154      *  contain JavaScript, etc. False if it can't and shouldn't be edited.
155      */
156     public boolean isURLAttribute(Element element,
157                                   String attrName);
158 
159     /**
160      * Create an AccessorGenerator object for this DOM.
161      * Normally, this method is inherited from the DOM that the base
162      * DOM implementation a.
163      */
164     public AccessorGenerator createAccessorGenerator(Document document);
165 
166     /**
167      * Create an DocBuilderGenerator object for this DOM.
168      * Normally, this method is inherited from the DOM that the base
169      * DOM implementation a.
170      */
171     public DocBuilderGenerator createDocBuilderGenerator(Document document);
172 }