KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > ibm > webdav > basicsearch > BasicSearchSchema


1 /*
2  * (C) Copyright Simulacra Media Ltd, 2004. All rights reserved.
3  *
4  * The program is provided "AS IS" without any warranty express or
5  * implied, including the warranty of non-infringement and the implied
6  * warranties of merchantibility and fitness for a particular purpose.
7  * Simulacra Media Ltd will not be liable for any damages suffered by you as a result
8  * of using the Program. In no event will Simulacra Media Ltd be liable for any
9  * special, indirect or consequential damages or lost profits even if
10  * Simulacra Media Ltd has been advised of the possibility of their occurrence.
11  * Simulacra Media Ltd will not be liable for any third party claims against you.
12  */

13
14 package com.ibm.webdav.basicsearch;
15
16 import com.ibm.webdav.*;
17
18 import java.util.*;
19 import java.util.logging.*;
20 import java.util.logging.Level JavaDoc;
21
22 import javax.xml.parsers.*;
23
24 import org.w3c.dom.*;
25
26
27 /**
28  * BasicSearchSchema implements <code>SearchSchema</code> for the
29  * DASL basic search format.
30  *
31  * @author Michael Bell
32  * @version $Revision: 1.1 $
33  *
34  */

35 public class BasicSearchSchema implements SearchSchema {
36     public static final String JavaDoc TAG_SCHEMA = "D:basicsearchschema";
37     public static final String JavaDoc TAG_PROPDESC = "D:propdesc";
38     public static final String JavaDoc TAG_ANY_OTHER_PROP = "D:any-other-property";
39     public static final String JavaDoc TAG_PROP = "D:prop";
40     public static final String JavaDoc TAG_DATATYPE = "D:datatype";
41     public static final String JavaDoc TAG_SEARCHABLE = "D:searchable";
42     public static final String JavaDoc TAG_SELECTABLE = "D:selectable";
43     public static final String JavaDoc TAG_SORTABLE = "D:sortable";
44     public static final String JavaDoc TAG_OPDESC = "D:opdesc";
45     public static final String JavaDoc TAG_OPERAND_PROP = "D:operand-property";
46     public static final String JavaDoc TAG_OPERAND_LIT = "D:operand-literal";
47     public static final String JavaDoc TAG_PROPERTIES = "D:properties";
48     public static final String JavaDoc TAG_OPERATORS = "D:operators";
49     private static final String JavaDoc DAV_NAMESPACE = "DAV:";
50     private Hashtable m_propdescs = new Hashtable();
51     private Hashtable m_operators = new Hashtable();
52     protected Document m_document = null;
53     
54     private static final Logger m_logger = Logger.getLogger(BasicSearchSchema.class.getName());
55
56     public BasicSearchSchema() {
57         try {
58             m_document = DocumentBuilderFactory.newInstance()
59                                                .newDocumentBuilder()
60                                                .newDocument();
61         } catch (Exception JavaDoc e) {
62             m_logger.log(Level.WARNING, e.getMessage(), e);
63         }
64     }
65
66     public void addAnyOtherPropertyDescription(boolean bSearchable,
67                                                boolean bSelectable,
68                                                boolean bSortable)
69                                         throws Exception JavaDoc {
70         Element el = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,BasicSearchSchema.TAG_ANY_OTHER_PROP);
71         addPropertyDescription(el,null,bSearchable,bSelectable,bSortable);
72     }
73
74     public void addPropertyDescription(Element propertyEl,
75                                        Element datatypeDef, boolean bSearchable,
76                                        boolean bSelectable, boolean bSortable)
77                                 throws Exception JavaDoc {
78         String JavaDoc sPropname = propertyEl.getTagName();
79
80         Element propdescEl = m_document.createElementNS(DAV_NAMESPACE,
81                                                         BasicSearchSchema.TAG_PROPDESC);
82         Element propEl = m_document.createElementNS(DAV_NAMESPACE,
83                                                     BasicSearchSchema.TAG_PROP);
84
85         propEl.appendChild(m_document.importNode(propertyEl,true));
86         propdescEl.appendChild(propEl);
87
88         if (datatypeDef != null) {
89             Element datatypeEl = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,
90                                                             BasicSearchSchema.TAG_DATATYPE);
91
92             datatypeEl.appendChild(m_document.importNode(datatypeDef, true));
93             propdescEl.appendChild(datatypeEl);
94         }
95
96         if (bSearchable == true) {
97             Element searchableEl = m_document.createElementNS(
98                                            BasicSearchSchema.DAV_NAMESPACE,
99                                            BasicSearchSchema.TAG_SEARCHABLE);
100             propdescEl.appendChild(searchableEl);
101         }
102
103         if (bSelectable == true) {
104             Element selectableEl = m_document.createElementNS(
105                                            BasicSearchSchema.DAV_NAMESPACE,
106                                            BasicSearchSchema.TAG_SELECTABLE);
107             propdescEl.appendChild(selectableEl);
108         }
109
110         if (bSortable == true) {
111             Element sortableEl = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,
112                                                             BasicSearchSchema.TAG_SORTABLE);
113             propdescEl.appendChild(sortableEl);
114         }
115
116         m_propdescs.put(sPropname, propdescEl);
117     }
118
119     public void addOperator(Element OpEl, boolean bIncludeLiteral)
120                      throws Exception JavaDoc {
121         String JavaDoc sOpName = OpEl.getTagName();
122         Element opdescEl = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,
123                                                       BasicSearchSchema.TAG_OPDESC);
124         opdescEl.appendChild(m_document.importNode(OpEl, true));
125
126         Element operandPropEl = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,
127                                                            BasicSearchSchema.TAG_OPERAND_PROP);
128         opdescEl.appendChild(operandPropEl);
129
130         if (bIncludeLiteral == true) {
131             Element operandLitEl = m_document.createElementNS(
132                                            BasicSearchSchema.DAV_NAMESPACE,
133                                            BasicSearchSchema.TAG_OPERAND_LIT);
134             opdescEl.appendChild(operandLitEl);
135         }
136
137         m_operators.put(sOpName, opdescEl);
138     }
139
140     public Element asXML() {
141         Element schemaEl = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,
142                                                       TAG_SCHEMA);
143         Element propertiesEl = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,
144                                                           BasicSearchSchema.TAG_PROPERTIES);
145
146         for (Iterator i = m_propdescs.values().iterator(); i.hasNext();) {
147             Element tempEl = (Element)i.next();
148             //if(tempEl.getOwnerDocument().equals(this.m_document)
149
propertiesEl.appendChild(tempEl);
150         }
151
152         schemaEl.appendChild(propertiesEl);
153
154         Element operatorsEl = m_document.createElementNS(BasicSearchSchema.DAV_NAMESPACE,
155                                                          BasicSearchSchema.TAG_OPERATORS);
156
157         for (Iterator i = m_operators.values().iterator(); i.hasNext();) {
158             operatorsEl.appendChild((Element) i.next());
159         }
160
161         schemaEl.appendChild(operatorsEl);
162
163         return schemaEl;
164     }
165 }
Popular Tags