Ignore:
Timestamp:
2023-03-16T19:52:07+13:00 (14 months ago)
Author:
kjdon
Message:

simplified Favourites - items now are just collection and id. no metadata involved. getting metadata is done by the action now (a=gdl), and depends on format statements etc. the xml element is now documentNode, not item.

File:
1 edited

Legend:

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

    r36064 r37518  
    5959    // the services on offer
    6060    // these strings must match what is found in the properties file
    61     protected static final String ADD_ITEM_SERVICE = "AddItem";
    62     protected static final String DISPLAY_ITEMS_SERVICE = "DisplayList";
    63     protected static final String ITEM_NUM_SERVICE = "ItemNum";
    64     protected static final String DELETE_ITEMS_SERVICE = "DeleteItems";
    65     protected static final String SEND_MAIL_SERVICE = "SendMail";
     61    protected static final String ADD_ITEM_SERVICE = "AddFavourite";
     62    protected static final String DISPLAY_ITEMS_SERVICE = "GetFavouritesList";
     63    protected static final String ITEM_NUM_SERVICE = "GetNumFavourites";
     64    protected static final String DELETE_ITEMS_SERVICE = "DeleteFavourites";
     65    protected static final String SEND_MAIL_SERVICE = "SendFavouritesMail";
    6666    //protected static final String DELETE_ITEM_SERVICE = "DeleteItem";
    6767
    68   // for AddItem
     68  // for AddFavourite
    6969    protected static final String ITEM_PARAM = "item";
    70   // for DeleteItems
     70  // for DeleteFavouritess
    7171  protected static final String ITEMS_PARAM = "items";
    7272  // for SendMail
     
    168168        this.short_service_info.appendChild(mail_service);
    169169
    170 
    171         // set up the metadata names - this is the list of metadata retrieved for each item in the favourite basket.
    172         meta_names = new HashSet<String>();
    173         meta_names.add("Title"); // the default
    174         meta_names.add("root_Title");
    175         meta_names.add("Date");
    176         meta_names.add("root_assocfilepath"); // these two needed for source linking
    177         meta_names.add("root_srclinkFile");
    178 
    179         // are there any custom ones in the config file?
    180         Element meta_list_elem = (Element) GSXML.getChildByTagName(info, GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    181         if (meta_list_elem !=null) {
    182           NodeList meta_list = meta_list_elem.getElementsByTagName(GSXML.METADATA_ELEM);
    183           for (int i = 0; i < meta_list.getLength(); i++) {
    184            
    185             Element s = (Element) meta_list.item(i);
    186             meta_names.add(s.getAttribute(GSXML.NAME_ATT));
    187           }
    188 
    189         }
    190 
    191         // if any params should be saved in the session, add them to save_params here
    192         // this.save_params.add(XXX_PARAM);
    193170        return true;
    194171
     
    233210        }
    234211
    235         // if (service_id.equals(DELETE_ITEM_SERVICE))
    236         // {
    237 
    238         //  Element delone_service = doc.createElement(GSXML.SERVICE_ELEM);
    239         //  delone_service.setAttribute(GSXML.TYPE_ATT, "gather"); // what??
    240         //  delone_service.setAttribute(GSXML.NAME_ATT, DELETE_ITEM_SERVICE);
    241         //  return delone_service;
    242         // }
    243 
    244212        if (service_id.equals(SEND_MAIL_SERVICE))
    245213        {
     
    254222    }
    255223
    256     protected Element processAddItem(Element request)
     224    protected Element processAddFavourite(Element request)
    257225    {
    258226
     
    267235        if (param_list == null)
    268236        {
    269             logger.error("FavouriteBasket Error: AddItem request had no paramList.");
     237            logger.error("FavouriteBasket Error: AddFavourite request had no paramList.");
    270238            return result; // Return the empty result
    271239        }
     
    287255            if (!items.containsKey(item))
    288256            {
    289                 Item newItem = generateItem(collection, item);
     257                Item newItem = new Item(collection, item);
    290258                items.put(item, newItem);
    291259                result.appendChild(newItem.wrapIntoElement(result_doc));
     
    295263        {
    296264            Hashtable<String, Item> items = new Hashtable<String, Item>();
    297             Item newItem = generateItem(collection, item);
     265            Item newItem = new Item(collection, item);
    298266            items.put(item, newItem);
    299267            docsMap.put(collection, items);
     
    304272    }
    305273
    306     private Item generateItem(String collection, String id)
    307     {
    308 
    309         Item item = new Item(collection, id);
    310         String to = GSPath.appendLink(collection, "DocumentMetadataRetrieve");
    311         ArrayList<String> tmp = new ArrayList<String>();
    312         tmp.add(id);
    313        
    314         UserContext userContext = new UserContext();
    315         userContext.setLanguage("en");
    316         userContext.setUserID("dumy");
    317         Element response = getDocumentMetadata(to, userContext, tmp.iterator());
    318         Element doc_node = (Element) response.getElementsByTagName(GSXML.DOC_NODE_ELEM).item(0);
    319 
    320         String node_id = doc_node.getAttribute(GSXML.NODE_ID_ATT);
    321         Element metadata_list = (Element) doc_node.getElementsByTagName(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER).item(0);
    322 
    323         NodeList meta_elems = metadata_list.getElementsByTagName(GSXML.METADATA_ELEM);
    324         for (int i=0; i<meta_elems.getLength(); i++) {
    325           Element m = (Element)meta_elems.item(i);
    326           String name = m.getAttribute(GSXML.NAME_ATT);
    327           item.metadata.put(name, GSXML.getNodeText(m).trim());
    328         }
    329         // check for root_title == title
    330         if (item.metadata.get("root_Title") != null && item.metadata.get("Title") != null && item.metadata.get("root_Title").equals(item.metadata.get("Title"))) {
    331           item.metadata.remove("root_Title");
    332          
    333         }
    334         return item;
    335 
    336     }
    337 
    338     protected Element processDeleteItems(Element request)
     274
     275    protected Element processDeleteFavouritess(Element request)
    339276    {
    340277
     
    395332
    396333
    397     protected Element processItemNum(Element request)
     334    protected Element processGetNumFavourites(Element request)
    398335    {
    399336        Hashtable<String, Hashtable<String, Item>> docsMap = updateDocMap(request);
     
    426363    }
    427364
    428     private Element getDocumentMetadata(String to, UserContext userContext, Iterator<String> ids)
    429     {
    430 
    431         // Build a request to obtain some document metadata
    432       Document doc = XMLConverter.newDOM();
    433         Element dm_message = doc.createElement(GSXML.MESSAGE_ELEM);
    434         Element dm_request = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_PROCESS, to, userContext);
    435         dm_message.appendChild(dm_request);
    436 
    437         // Create a parameter list to specify the required metadata information
    438         Element param_list = doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER);
    439 
    440         Element param = null;
    441         Iterator<String> i = meta_names.iterator();
    442         while (i.hasNext())
    443         {
    444             String name = i.next();
    445             param = doc.createElement(GSXML.PARAM_ELEM);
    446             param_list.appendChild(param);
    447             param.setAttribute(GSXML.NAME_ATT, "metadata");
    448             param.setAttribute(GSXML.VALUE_ATT, name);
    449 
    450         }
    451 
    452         dm_request.appendChild(param_list);
    453 
    454         // create the doc node list for the metadata request
    455         Element dm_doc_list = doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER);
    456         dm_request.appendChild(dm_doc_list);
    457 
    458         while (ids.hasNext())
    459         {
    460             // Add the documentNode to the list
    461             Element dm_doc_node = doc.createElement(GSXML.DOC_NODE_ELEM);
    462             dm_doc_list.appendChild(dm_doc_node);
    463             dm_doc_node.setAttribute(GSXML.NODE_ID_ATT, ids.next());
    464         }
    465 
    466         return (Element) this.router.process(dm_message);
    467 
    468     }
    469 
    470     protected Element processDisplayList(Element request)
     365
     366    protected Element processGetFavouritesList(Element request)
    471367    {
    472368        Hashtable<String, Hashtable<String, Item>> docsMap = updateDocMap(request);
     
    501397
    502398
    503     public Element processSendMail(Element request)
     399    public Element processSendFavouritesMail(Element request)
    504400    {
    505401        // Create a new (empty) result message
     
    627523        public String collection;
    628524        public String docid;
    629             public HashMap<String,String> metadata;
    630525
    631526            public Item(String coll, String id)
     
    633528            this.collection = coll;
    634529            this.docid = id;
    635             this.metadata = new HashMap<String,String>();
    636530        }
    637531
     
    651545        public Element wrapIntoElement(Document doc)
    652546        {
    653             Element itemElement = doc.createElement("item");
    654             itemElement.setAttribute("name", docid);
     547            Element itemElement = doc.createElement("documentNode");
     548            itemElement.setAttribute("nodeID", docid);
    655549            itemElement.setAttribute("collection", collection);
    656550
    657             Set<String> metas = metadata.keySet();
    658             Iterator<String> i = metas.iterator();
    659             while (i.hasNext()) {
    660               String meta_name = i.next();
    661               itemElement.setAttribute(meta_name, metadata.get(meta_name));
    662             }
    663551            return itemElement;
    664552        }
Note: See TracChangeset for help on using the changeset viewer.