Changeset 32308 for main

Show
Ignore:
Timestamp:
30.07.2018 11:19:34 (13 months ago)
Author:
kjdon
Message:

make metadata dynamic in a hashmap instead of named fields in am Item - much easier to add an extra metadata field. specify it in a metadataList in berryBasket servicerack element, and it will automatically appear in berry basket results.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/BerryBasket.java

    r32297 r32308  
    2626import java.util.HashSet; 
    2727import java.util.Iterator; 
     28import java.util.Set; 
    2829 
    2930import org.w3c.dom.Document; 
     
    7475    protected String password = ""; 
    7576 
    76     /** constructor */ 
     77        HashSet<String> meta_names = null; 
     78 
     79        /** constructor */ 
    7780    public BerryBasket() 
    7881    { 
     
    148151        this.short_service_info.appendChild(mail_service); 
    149152 
     153 
     154        // set up the metadata names - this is the list of metadata retrieved for each item in the berry basket. 
     155        meta_names = new HashSet<String>(); 
     156        meta_names.add("Title"); // the default 
     157        meta_names.add("root_Title"); 
     158        meta_names.add("Date"); 
     159        meta_names.add("root_assocfilepath"); // these two needed for source linking 
     160        meta_names.add("root_srclinkFile"); 
     161 
     162        // are there any custom ones in the config file? 
     163        Element meta_list_elem = (Element) GSXML.getChildByTagName(info, GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER); 
     164        if (meta_list_elem !=null) { 
     165          NodeList meta_list = meta_list_elem.getElementsByTagName(GSXML.METADATA_ELEM); 
     166          for (int i = 0; i < meta_list.getLength(); i++) { 
     167             
     168            Element s = (Element) meta_list.item(i); 
     169            meta_names.add(s.getAttribute(GSXML.NAME_ATT)); 
     170          } 
     171 
     172        } 
    150173        return true; 
    151174 
     
    277300        Element metadata_list = (Element) doc_node.getElementsByTagName(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER).item(0); 
    278301 
    279         //assign title metadata if any 
    280         Element metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "Title"); 
    281         if (metadata != null) 
    282         { 
    283             item.title = GSXML.getNodeText(metadata).trim(); 
    284         } 
    285         //assign date metadata if any 
    286         metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "Date"); 
    287         if (metadata != null) 
    288         { 
    289             item.date = GSXML.getNodeText(metadata).trim(); 
    290         } 
    291  
    292         //assign root title metadata if any 
    293         metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "root_Title"); 
    294         if (metadata != null) 
    295         { 
    296             String rootTitle = GSXML.getNodeText(metadata).trim(); 
    297             if (!rootTitle.equals(item.title) && !rootTitle.equals("")) 
    298             { 
    299                 item.rootTitle = rootTitle; 
    300             } 
    301  
    302         } 
    303         // assign assocfilepath if any 
    304         metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "root_assocfilepath"); 
    305         if (metadata != null) 
    306         { 
    307           item.assocfilepath = GSXML.getNodeText(metadata).trim(); 
    308         } 
    309         // assign srclinkFile if any 
    310         metadata = GSXML.getNamedElement(metadata_list, "metadata", "name", "root_srclinkFile"); 
    311         if (metadata != null) 
    312         { 
    313           item.srclinkFile = GSXML.getNodeText(metadata).trim(); 
     302        NodeList meta_elems = metadata_list.getElementsByTagName(GSXML.METADATA_ELEM); 
     303        for (int i=0; i<meta_elems.getLength(); i++) { 
     304          Element m = (Element)meta_elems.item(i); 
     305          String name = m.getAttribute(GSXML.NAME_ATT); 
     306          item.metadata.put(name, GSXML.getNodeText(m).trim()); 
     307        } 
     308        // check for root_title == title 
     309        if (item.metadata.get("root_Title").equals(item.metadata.get("Title"))) { 
     310          item.metadata.remove("root_Title"); 
     311           
    314312        } 
    315313        return item; 
     314 
    316315    } 
    317316 
     
    373372    } 
    374373 
    375     protected Element processDeleteItem(Element request) 
    376     { 
    377         Hashtable<String, Hashtable<String, Item>> docsMap = updateDocMap(request); 
    378  
    379         // Create a new (empty) result message 
    380         Document result_doc = XMLConverter.newDOM(); 
    381         Element result = result_doc.createElement(GSXML.RESPONSE_ELEM); 
    382  
    383         // Get the parameters of the request 
    384         Element param_list = (Element) GSXML.getChildByTagName(request, GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 
    385  
    386         if (param_list == null) 
    387         { 
    388             logger.error("BerryBasket Error: DeleteItem request had no paramList."); 
    389             return result; // Return the empty result 
    390         } 
    391  
    392         HashMap<String, Serializable> params = GSXML.extractParams(param_list, false); 
    393  
    394         String param = (String) params.get("item"); 
    395  
    396         if (param == null) 
    397             return result; 
    398  
    399         String item = param; 
    400  
    401         String collection = ""; 
    402         int pos = item.indexOf(":"); 
    403  
    404         if (pos != -1) 
    405         { 
    406             collection = item.substring(0, pos); 
    407             item = item.substring(pos + 1); 
    408         } 
    409  
    410         if (docsMap.containsKey(collection)) 
    411         { 
    412             Hashtable itemMap = docsMap.get(collection); 
    413             if (itemMap.containsKey(item)) 
    414             { 
    415                 itemMap.remove(item); 
    416             } 
    417             if (itemMap.size() == 0) 
    418             { 
    419                 docsMap.remove(collection); 
    420             } 
    421         } 
    422  
    423         return result; 
    424     } 
    425374 
    426375    protected Element processItemNum(Element request) 
     
    465414 
    466415        // Create a parameter list to specify the required metadata information 
    467         HashSet<String> meta_names = new HashSet<String>(); 
    468         meta_names.add("Title"); // the default 
    469         meta_names.add("root_Title"); 
    470         meta_names.add("Date"); 
    471         meta_names.add("root_assocfilepath"); 
    472         meta_names.add("root_srclinkFile"); 
    473  
    474416        Element param_list = doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 
    475417 
     
    527469            { 
    528470                Item item = (Item) itemItr.next(); 
    529                 Element itemElement = result_doc.createElement("item"); 
    530  
    531                 collectionNode.appendChild(itemElement); 
    532                 itemElement.setAttribute("name", item.docid); 
    533                 itemElement.setAttribute("collection", item.collection); 
    534                 itemElement.setAttribute("title", item.title); 
    535                 itemElement.setAttribute("date", item.date); 
    536                 itemElement.setAttribute("root_title", item.rootTitle); 
    537                 itemElement.setAttribute("srclinkFile", item.srclinkFile); 
    538                 itemElement.setAttribute("assocfilepath", item.assocfilepath); 
     471                collectionNode.appendChild(item.wrapIntoElement(result_doc)); 
    539472            } 
    540473        } 
    541474 
    542475        return result; 
    543  
    544     } 
     476    } 
     477 
     478 
     479 
    545480 
    546481    public Element processSendMail(Element request) 
     
    670605        public String collection; 
    671606        public String docid; 
    672         public String title = ""; 
    673         public String query = ""; 
    674         public String date = ""; 
    675         public String rootTitle = ""; 
    676       public String assocfilepath = ""; 
    677       public String srclinkFile = ""; 
    678         public Item(String coll, String id) 
     607            public HashMap<String,String> metadata; 
     608 
     609            public Item(String coll, String id) 
    679610        { 
    680611            this.collection = coll; 
    681612            this.docid = id; 
     613            this.metadata = new HashMap<String,String>(); 
    682614        } 
    683615 
     
    695627        } 
    696628 
    697         public String toString() 
    698         { 
    699  
    700             return collection + ":" + docid + ":" + "[" + ((!rootTitle.equals("")) ? (rootTitle + ":") : "") + title + "]"; 
    701         } 
    702  
    703629        public Element wrapIntoElement(Document doc) 
    704630        { 
     
    706632            itemElement.setAttribute("name", docid); 
    707633            itemElement.setAttribute("collection", collection); 
    708             itemElement.setAttribute("title", title); 
    709             itemElement.setAttribute("date", date); 
    710             itemElement.setAttribute("root_title", rootTitle); 
    711             itemElement.setAttribute("assocfilepath", assocfilepath); 
    712             itemElement.setAttribute("srclinkFile", srclinkFile); 
     634 
     635            Set<String> metas = metadata.keySet(); 
     636            Iterator<String> i = metas.iterator(); 
     637            while (i.hasNext()) { 
     638              String meta_name = i.next(); 
     639              itemElement.setAttribute(meta_name, metadata.get(meta_name)); 
     640            } 
    713641            return itemElement; 
    714642        }