| 1 10 11 package org.mmbase.applications.dove; 12 13 import java.util.*; 14 import org.w3c.dom.*; 15 import org.mmbase.util.logging.*; 16 import org.mmbase.bridge.Cloud; 17 18 19 52 53 public abstract class AbstractDove { 54 55 public static final String DOCTYPE_REQUEST = "http://www.mmbase.org/dtd/doverequest_1_1.dtd"; 57 public static final String DOCTYPE_RESPONSE = "http://www.mmbase.org/dtd/doveresponse_1_2.dtd"; 58 59 public static final String REQUEST = "request"; 61 public static final String RESPONSE = "response"; 62 63 public static final String SECURITY = "security"; 64 public static final String GETDATA = "getdata"; 65 public static final String GETNEW = "getnew"; 66 public static final String GETNEWRELATION = "getnewrelation"; 67 public static final String GETRELATIONS = "getrelations"; 68 public static final String GETCONSTRAINTS = "getconstraints"; 69 public static final String GETLIST = "getlist"; 70 public static final String PUT = "put"; 71 72 public static final String SECURITY_NAME = "name"; 73 public static final String SECURITY_PASSWORD = "password"; 74 public static final String SECURITY_CLOUD = "cloud"; 75 public static final String SECURITY_METHOD = "method"; 76 77 public static final String OBJECT = "object"; public static final String FIELD = "field"; 79 public static final String ORIGINAL = "original"; 80 public static final String NEW = "new"; 81 public static final String RELATIONS = "relations"; 82 public static final String RELATION = "relation"; 83 public static final String ERROR = "error"; 84 public static final String QUERY = "query"; 85 public static final String PARENT = "parent"; 86 public static final String DESCENDANTS = "descendants"; 87 public static final String DESCENDANT = "descendant"; 88 89 public static final String SINGULARNAME = "singularname"; 90 public static final String PLURALNAME = "pluralname"; 91 public static final String DESCRIPTION = "description"; 92 public static final String FIELDS = "fields"; 93 public static final String GUINAME = "guiname"; 94 public static final String GUITYPE = "guitype"; 95 public static final String MAXLENGTH = "maxlength"; 96 public static final String REQUIRED = "required"; 97 98 public static final String ELM_ID = "id"; 100 public static final String ELM_NUMBER = "number"; 101 public static final String ELM_OLDNUMBER = "oldnumber"; 102 public static final String ELM_TYPE = "type"; 103 public static final String ELM_STATUS = "status"; 104 public static final String ELM_NAME = "name"; 105 public static final String ELM_ROLE = "role"; 106 public static final String ELM_DESTINATION = "destination"; 107 public static final String ELM_DESTINATIONTYPE = "destinationtype"; 108 public static final String ELM_SOURCETYPE = "sourcetype"; 109 public static final String ELM_SEARCHDIR = "searchdir"; 110 public static final String ELM_CREATEDIR = "createdir"; 111 public static final String ELM_LANG = "xml:lang"; 112 public static final String ELM_XPATH = "xpath"; 113 public static final String ELM_WHERE = "where"; 114 public static final String ELM_ORDERBY = "orderby"; 115 public static final String ELM_DIRECTIONS = "directions"; 116 public static final String ELM_SOURCE = "source"; 117 public static final String ELM_HREF = "href"; 118 public static final String ELM_MAYWRITE = "maywrite"; 119 public static final String ELM_MAYDELETE = "maydelete"; 120 public static final String ELM_CONTEXT = "context"; 121 public static final String ELM_SIZE = "size"; 122 public static final String ELM_ENCODING = "encoding"; 123 124 public static final String IS_PARSER = "parser"; 126 public static final String IS_SERVER = "server"; 127 public static final String IS_CLIENT = "client"; 128 129 public static final String IS_TRUE = "true"; 130 public static final String IS_FALSE = "false"; 131 132 protected final static String [] TYPE_DESCRIPTIONS = { 133 "unknown", "string", "integer", "unknown", "byte", "float", "double", "long", "xml", "node", "datetime", "boolean", "list" 134 }; 135 136 private static final Logger log = Logging.getLoggerInstance(Dove.class); 138 139 143 protected Document doc = null; 144 145 151 public AbstractDove(Document doc) { 152 this.doc=doc; 153 } 154 155 protected String getTypeDescription(int type) { 156 if (type >= 0 && type < TYPE_DESCRIPTIONS.length) { 157 return TYPE_DESCRIPTIONS[type]; 158 } else { 159 return TYPE_DESCRIPTIONS[0]; 160 } 161 } 162 163 172 protected Element addContentElement(String tagname,String content, Element out) { 173 Element el=doc.createElement(tagname); 174 if (content==null) content=""; 175 Text tel=doc.createTextNode(content); 176 el.appendChild(tel); 177 out.appendChild(el); 178 return el; 179 } 180 181 187 protected Element getFirstElement(Node item) { 188 if (item==null) return null; 189 item=item.getFirstChild(); 190 if ((item!=null) && !(item instanceof Element)) { 191 item = getNextElement(item); 192 }; 193 return (Element)item; 194 } 195 196 203 protected Element getFirstElement(Node item, String tagname) { 204 Element elm=getFirstElement(item); 205 if (elm!=null && !elm.getTagName().equals(tagname)) { 206 elm=getNextElement(elm,tagname); 207 } 208 return elm; 209 } 210 211 217 protected Element getNextElement(Node item) { 218 if (item==null) return null; 219 do { 220 item=item.getNextSibling(); 221 } while ((item!=null) && !(item instanceof Element)); 222 return (Element)item; 223 } 224 225 232 protected Element getNextElement(Node item, String tagname) { 233 Element elm=getNextElement(item); 234 while (elm!=null && !elm.getTagName().equals(tagname)) { 235 elm=getNextElement(elm); 236 } 237 return elm; 238 } 239 240 241 266 public abstract void doRequest(Element in, Element out, Cloud cloud, Map repository); 267 268 275 public void doRequest(Element in, Element out) { 276 doRequest(in, out, null, null); 277 } 278 279 288 public Element executeRequest (Element in, Cloud cloud, Map repository) { 289 Element out =doc.createElement(RESPONSE); 290 doc.appendChild(out); 291 if (in.getTagName().equals(REQUEST)) { 292 doRequest(in,out,cloud, repository); 293 return out; 294 } 295 log.error("Request doesn't contain a <REQUEST> tag."); 296 Element err=addContentElement(ERROR,"Request doesn't contain a <REQUEST> tag.",out); 297 err.setAttribute(ELM_TYPE,IS_CLIENT); 298 return out; 299 } 300 301 302 309 public Element executeRequest (Element in) { 310 return executeRequest(in,null,null); 311 } 312 } 313 314 | Popular Tags |