Changeset 20402
- Timestamp:
- 2009-08-26T14:24:55+12:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
greenstone3/trunk/src/java/org/greenstone/gsdl3/action/Action.java
r20292 r20402 35 35 36 36 public Action() { 37 38 37 this.converter = new XMLConverter(); 38 this.doc = this.converter.newDOM(); 39 39 } 40 40 41 /** the config variables must be set before configure is called */ 41 42 public void setConfigParams(HashMap params) { 42 43 this.config_params = params; 43 44 } 44 45 /** sets the message router */ 45 46 public void setMessageRouter(ModuleInterface m) { 46 this.mr = m;47 this.mr = m; 47 48 } 48 49 public boolean configure() { 49 50 50 // does nothing yet 51 return true; 51 52 } 52 53 … … 56 57 public String process(String xml_in) { 57 58 58 59 60 61 62 63 64 65 59 Document message_doc = this.converter.getDOM(xml_in); 60 if (message_doc == null) { 61 logger.error("Couldn't parse request"); 62 logger.error(xml_in); 63 return null; 64 } 65 Node result = process(message_doc); 66 return this.converter.getString(result); 66 67 } 67 68 … … 73 74 * object - particularly important for args that should not be saved */ 74 75 public boolean getActionParameters(GSParams params) { 75 76 return true; 76 77 } 77 78 78 79 protected void extractMetadataNames(Element format, HashSet meta_names) { 79 80 80 //NodeList nodes = format.getElementsByTagNameNS("metadata", "http://www.greenstone.org/configformat"); 81 NodeList nodes = format.getElementsByTagName("gsf:metadata"); 81 82 for (int i=0; i<nodes.getLength(); i++) { 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 83 Element elem = (Element)nodes.item(i); 84 StringBuffer metadata = new StringBuffer(); 85 String all = elem.getAttribute("multiple"); 86 String name = elem.getAttribute("name"); 87 String select = elem.getAttribute("select"); 88 String sep = elem.getAttribute("separator"); 89 if (all.equals("true")) { 90 metadata.append("all"); 91 metadata.append(GSConstants.META_RELATION_SEP); 92 } 93 if (!select.equals("")) { 94 metadata.append(select); 95 metadata.append(GSConstants.META_RELATION_SEP); 96 } 97 if (!sep.equals("")) { 98 metadata.append(GSConstants.META_SEPARATOR_SEP); 99 metadata.append(sep); 100 metadata.append(GSConstants.META_SEPARATOR_SEP); 101 metadata.append(GSConstants.META_RELATION_SEP); 102 } 102 103 103 metadata.append(name); 104 meta_names.add(metadata.toString()); 105 } 106 104 metadata.append(name); 105 meta_names.add(metadata.toString()); 106 } 107 107 } 108 108 109 109 protected Element createMetadataParamList(HashSet metadata_names) { 110 111 112 113 114 115 116 117 118 119 120 121 122 110 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 111 112 Element param = null; 113 Iterator i = metadata_names.iterator(); 114 while (i.hasNext()) { 115 String name = (String)i.next(); 116 param = this.doc.createElement(GSXML.PARAM_ELEM); 117 param_list.appendChild(param); 118 param.setAttribute(GSXML.NAME_ATT, "metadata"); 119 param.setAttribute(GSXML.VALUE_ATT, name); 120 121 } 122 return param_list; 123 123 } 124 124 125 125 protected boolean processErrorElements(Element message, Element page) { 126 127 128 129 130 131 132 133 134 126 NodeList error_nodes = message.getElementsByTagName(GSXML.ERROR_ELEM); 127 if (error_nodes.getLength()==0) { 128 return false; 129 } 130 Document owner = page.getOwnerDocument(); 131 for (int i=0; i<error_nodes.getLength(); i++) { 132 page.appendChild(owner.importNode(error_nodes.item(i), true)); 133 } 134 return true; 135 135 } 136 136 137 void addSiteMetadata( Element element, String lang, String uid ) { 138 //ADD SITE METADATA 139 Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, "", lang, uid); 140 //create a hashmap of params 141 HashMap subset_params = new HashMap(1); 142 subset_params.put(GSXML.SUBSET_PARAM, GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER); 143 //create the element to put the params in 144 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 145 //put them in 146 GSXML.addParametersToList( this.doc, param_list, subset_params ); 147 metadata_request.appendChild(param_list); 148 //create the message 149 Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 150 metadata_message.appendChild(metadata_request); 137 /** 138 * Takes an XML element and adds the metadata of the current site to it. 139 * Useful for adding the current site's metadata to a response before sending it 140 * 141 * @param element the element to add site metadata to 142 * @param lang the current language 143 * @param uid the current user id 144 */ 145 void addSiteMetadata( Element element, String lang, String uid ) { 146 //ADD SITE METADATA 147 Element metadata_request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, "", lang, uid); 148 //create a hashmap of params 149 HashMap subset_params = new HashMap(1); 150 subset_params.put(GSXML.SUBSET_PARAM, GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER); 151 //create the element to put the params in 152 Element param_list = this.doc.createElement(GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 153 //put them in 154 GSXML.addParametersToList( this.doc, param_list, subset_params ); 155 metadata_request.appendChild(param_list); 156 //create the message 157 Element metadata_message = this.doc.createElement(GSXML.MESSAGE_ELEM); 158 metadata_message.appendChild(metadata_request); 159 //get response 160 Element metadata_response_message = (Element)this.mr.process(metadata_message); 161 //drill down to response 162 Element metadata_response = (Element)GSXML.getChildByTagName(metadata_response_message, GSXML.RESPONSE_ELEM); 163 //merge in metadata 164 GSXML.mergeMetadataLists(element,metadata_response); 165 } 151 166 152 //get response153 Element metadata_response_message = (Element)this.mr.process(metadata_message);154 155 //drill down to response156 Element metadata_response = (Element)GSXML.getChildByTagName(metadata_response_message, GSXML.RESPONSE_ELEM);157 158 GSXML.mergeMetadataLists(element,metadata_response);159 160 }161 167 } 162 168
Note:
See TracChangeset
for help on using the changeset viewer.