Changeset 32308 for main


Ignore:
Timestamp:
2018-07-30T11:19:34+12:00 (6 years 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.

File:
1 edited

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        }
Note: See TracChangeset for help on using the changeset viewer.