- Timestamp:
- 2003-07-16T13:50:18+12:00 (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java
r4280 r4942 73 73 /** list of services */ 74 74 protected Element service_list = null; 75 /** list of Metadata - lang independent*/75 /** list of metadata - all metadata, regardless of language goes in here */ 76 76 protected Element metadata_list = null; 77 77 /** language specific stuff */ 78 protected Element lang_specific_metadata_list = null; 78 //protected Element lang_specific_metadata_list = null; 79 protected Element display_item_list = null; 79 80 /** the element that will have any descriptions passed back in */ 80 81 protected Element description = null; … … 102 103 this.doc = this.converter.newDOM(); 103 104 this.description = this.doc.createElement(GSXML.CLUSTER_ELEM); 104 105 this.display_item_list = this.doc.createElement(GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER); 105 106 } 106 107 … … 147 148 public boolean configure(Element service_cluster_info) { 148 149 149 // do the metadata150 this.metadata_list = this.doc.createElement(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER);151 150 // get the metadata - for now just add it to the list 152 151 Element meta_list = (Element) GSXML.getChildByTagName(service_cluster_info, GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER); … … 157 156 } 158 157 } 158 159 // get the display info 160 Element display_list = (Element) GSXML.getChildByTagName(service_cluster_info, GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER); 161 if (display_list !=null) { 162 if (!addDisplayItems(display_list)) { 163 164 System.err.println("couldn't configure the display items"); 165 } 166 } 167 159 168 160 169 // do the service racks … … 166 175 } else { 167 176 168 boolean result = configureServiceRack(service_rack_list, null); 169 if (result == false) { 177 if (!configureServiceRack(service_rack_list, null)) { 170 178 System.err.println("couldn't configure the service racks!!"); 171 179 return false; … … 177 185 178 186 /** adds metadata from a metadataList into the metadata_list xml 179 * language independent stuff goes inot the main list, lang dependent stuff180 * goes into a separate element, like:181 * <metadataList><metadata name="Title"><metadata name="Title" lang="en">xxx</metadata><metadata name="Title" lang="fr">yyy</metadata></metadata></metadataList>182 * this is a bit wasteful on space but is the easiest to process (that I've thought of so far)183 187 */ 184 188 protected boolean addMetadata(Element metadata_list) { 185 189 186 NodeList metanodes = metadata_list.getElementsByTagName(GSXML.METADATA_ELEM); 187 if (metanodes.getLength()>0) { 188 for(int k=0; k<metanodes.getLength(); k++) { 189 Element m = (Element) metanodes.item(k); 190 String lang = m.getAttribute(GSXML.LANG_ATT); 190 if (this.metadata_list == null) { 191 this.metadata_list = (Element)this.doc.importNode(metadata_list, true); 192 } else { 193 194 NodeList metanodes = metadata_list.getElementsByTagName(GSXML.METADATA_ELEM); 195 if (metanodes.getLength()>0) { 196 for(int k=0; k<metanodes.getLength(); k++) { 197 this.metadata_list.appendChild(this.doc.importNode(metanodes.item(k), true)); 198 } 199 } 200 } 201 return true; 202 } 203 204 protected boolean addDisplayItems(Element display_list) { 205 206 NodeList displaynodes = display_list.getElementsByTagName(GSXML.DISPLAY_TEXT_ELEM); 207 if (displaynodes.getLength()>0) { 208 for(int k=0; k<displaynodes.getLength(); k++) { 209 Element d = (Element) displaynodes.item(k); 210 String lang = d.getAttribute(GSXML.LANG_ATT); 191 211 if (lang==null||lang.equals("")) { 192 // just add it to the normal list 193 this.metadata_list.appendChild(this.doc.importNode(m,true)); 194 } else { 195 String name = m.getAttribute(GSXML.NAME_ATT); 196 // add it to the lang-dependent list 197 if (this.lang_specific_metadata_list == null) { 198 this.lang_specific_metadata_list = this.doc.createElement(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER); 199 } 200 Element this_meta = GSXML.getNamedElement(this.lang_specific_metadata_list, GSXML.METADATA_ELEM, GSXML.NAME_ATT, name); 201 if (this_meta==null) { 202 this_meta = this.doc.createElement(GSXML.METADATA_ELEM); 203 this_meta.setAttribute(GSXML.NAME_ATT, name); 204 this.lang_specific_metadata_list.appendChild(this_meta); 205 } 212 //set the lang to teh default 213 d.setAttribute(GSXML.LANG_ATT, DEFAULT_LANG); 214 } 215 String name = d.getAttribute(GSXML.NAME_ATT); 216 System.out.println("adding display named "+name); 217 Element this_item = GSXML.getNamedElement(this.display_item_list, GSXML.DISPLAY_TEXT_ELEM, GSXML.NAME_ATT, name); 218 if (this_item==null) { 219 this_item = this.doc.createElement(GSXML.DISPLAY_TEXT_ELEM); 220 this_item.setAttribute(GSXML.NAME_ATT, name); 221 this.display_item_list.appendChild(this_item); 222 } 223 224 this_item.appendChild(this.doc.importNode(d, true)); 206 225 207 this_meta.appendChild(this.doc.importNode(m, true)); 208 209 } 210 } 211 } 226 227 } 228 } 229 212 230 return true; 213 231 } … … 369 387 Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 370 388 if (param_list == null) { 389 addAllDisplayInfo(description, lang); 371 390 description.appendChild(this.service_list); 372 description.appendChild( oneLanguageMetadata( lang));391 description.appendChild(this.metadata_list); 373 392 return response; 374 393 } … … 385 404 description.appendChild(this.service_list); 386 405 } else if (info.equals(GSXML.METADATA_ELEM+GSXML.LIST_MODIFIER)) { 387 description.appendChild(oneLanguageMetadata(lang)); 388 } 406 description.appendChild(metadata_list); 407 } else if (info.equals(GSXML.DISPLAY_TEXT_ELEM+GSXML.LIST_MODIFIER)) { 408 addAllDisplayInfo(description, lang); 409 410 } 389 411 } 390 412 } … … 502 524 } 503 525 504 /** takes a metadata list and deletes any items that are not in the right lang, if there is a correct one present. 505 * its a bit of a hack */ 506 protected Element oneLanguageMetadata(String lang) { 507 508 Element meta_list = (Element)this.metadata_list.cloneNode(true); 509 // go through and add lang dependent ones unwanted elements 510 if (this.lang_specific_metadata_list==null) { 511 return meta_list; 512 } 513 NodeList metas = this.lang_specific_metadata_list.getChildNodes(); 514 for (int i=0; i<metas.getLength(); i++) { 515 Element m = (Element) metas.item(i); 526 527 protected boolean addAllDisplayInfo(Element description, String lang) { 528 529 NodeList items = this.display_item_list.getChildNodes(); 530 for (int i=0; i<items.getLength(); i++) { // for each key 531 Element m = (Element) items.item(i); 516 532 // find the child with the correct language 517 Element new_m = GSXML.getNamedElement(m, GSXML. METADATA_ELEM, GSXML.LANG_ATT, lang);518 if (new_m==null ) {533 Element new_m = GSXML.getNamedElement(m, GSXML.DISPLAY_TEXT_ELEM, GSXML.LANG_ATT, lang); 534 if (new_m==null && lang != DEFAULT_LANG) { 519 535 // use the default lang 520 new_m = GSXML.getNamedElement(m, GSXML. METADATA_ELEM, GSXML.LANG_ATT, DEFAULT_LANG);536 new_m = GSXML.getNamedElement(m, GSXML.DISPLAY_TEXT_ELEM, GSXML.LANG_ATT, DEFAULT_LANG); 521 537 } 522 538 if (new_m==null) { 523 539 // just get the first one 524 new_m = (Element)GSXML.getChildByTagName(m, GSXML.METADATA_ELEM); 525 } 526 meta_list.appendChild(this.doc.importNode(new_m, true)); 527 } 528 return meta_list; 540 new_m = (Element)GSXML.getChildByTagName(m, GSXML.DISPLAY_TEXT_ELEM); 541 } 542 description.appendChild(new_m.cloneNode(true)); 543 } 544 return true; 545 546 } 547 548 549 protected Element getDisplayTextElement(String key, String lang) { 550 551 Element this_item = GSXML.getNamedElement(this.display_item_list, GSXML.DISPLAY_TEXT_ELEM, GSXML.NAME_ATT, key); 552 if (this_item == null) { 553 return null; 554 } 555 556 Element this_lang = GSXML.getNamedElement(this_item, GSXML.DISPLAY_TEXT_ELEM, GSXML.LANG_ATT, lang); 557 if (this_lang == null && lang != DEFAULT_LANG) { 558 // try the default 559 this_lang = GSXML.getNamedElement(this_item, GSXML.DISPLAY_TEXT_ELEM, GSXML.LANG_ATT, DEFAULT_LANG); 560 } 561 if (this_lang == null) { 562 // just return the first one 563 return (Element)this_item.getFirstChild().cloneNode(true); 564 } 565 return (Element)this_lang.cloneNode(true); 529 566 530 567 }
Note:
See TracChangeset
for help on using the changeset viewer.