1 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 ; 21 22 import javax.xml.parsers.*; 23 24 import org.w3c.dom.*; 25 26 27 35 public class BasicSearchSchema implements SearchSchema { 36 public static final String TAG_SCHEMA = "D:basicsearchschema"; 37 public static final String TAG_PROPDESC = "D:propdesc"; 38 public static final String TAG_ANY_OTHER_PROP = "D:any-other-property"; 39 public static final String TAG_PROP = "D:prop"; 40 public static final String TAG_DATATYPE = "D:datatype"; 41 public static final String TAG_SEARCHABLE = "D:searchable"; 42 public static final String TAG_SELECTABLE = "D:selectable"; 43 public static final String TAG_SORTABLE = "D:sortable"; 44 public static final String TAG_OPDESC = "D:opdesc"; 45 public static final String TAG_OPERAND_PROP = "D:operand-property"; 46 public static final String TAG_OPERAND_LIT = "D:operand-literal"; 47 public static final String TAG_PROPERTIES = "D:properties"; 48 public static final String TAG_OPERATORS = "D:operators"; 49 private static final String 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 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 { 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 { 78 String 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 { 121 String 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 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 |