Changeset 3363


Ignore:
Timestamp:
2002-08-20T10:39:06+12:00 (22 years ago)
Author:
kjdon
Message:

modified

Location:
trunk/gsdl3/src/java/org/greenstone/gsdl3
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/Library2.java

    r3292 r3363  
    2727import java.io.IOException;
    2828/**
    29  * A program to take XML strings from the command line and send
    30  * them to the system.
     29 * A program to take XML cgi-input from the command line and return html
    3130 *
    3231 * @author <a href="mailto:[email protected]">Katherine Don</a>
    3332 * @version $Revision$
    3433 */
     34
    3535final public class Library2 {
    36 
     36 
    3737    public static void main(String args[]) {
    3838
    39     if (args.length != 2) {
    40         System.out.println("Usage: Library2 <gsdl3home> <sitehome>");
     39    if (args.length != 4) {
     40        System.out.println("Usage: Library2 <sites home> <site name> <interfaces home> <interface name>");
    4141        System.exit(1);
    4242    }
    43     String gsdl_home = args[0];
    44     String transform_home = GSFile.xmlTransformDir(gsdl_home);
    45     String site_home = args[1];
     43
     44    ConfigVars config_ = new ConfigVars();
     45    config_.sites_home_ = args[0];
     46    config_.site_name_ = args[1];
     47    config_.interfaces_home_ = args[2];
     48    config_.interface_name_ = args[3];
     49
     50    config_.createXML();
    4651   
    47     MessageRouter mr = new MessageRouter();
    48     mr.setSiteHome(site_home);
    49     mr.configure();
    50    
    51     // for doing xslt transforms
    52     XMLTransformer transformer = new XMLTransformer();
     52    // new message router - create it and pass a handle to recept.
     53    // the servlet wont use this directly
     54    MessageRouter message_router_ = new MessageRouter();
     55    message_router_.setSiteHome(config_.sites_home_+File.separatorChar
     56               +config_.site_name_);
     57    message_router_.configure();
     58    // new receptionist
     59    Receptionist recept_ = new Receptionist();
     60    recept_.setConfigVars(config_);
     61    recept_.setMessageRouter(message_router_);
     62    recept_.configure();
    5363
    5464    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    5565    String query=null;
    56     String request=null;
    5766    String result=null;
    58     String collect=null;
    59     String service=null;
    60     String info=null;
    61     String content=null;
    6267    while (true) {
    63         System.out.println("Please enter a  query type (choose from: describe, query) or 'exit' to quit");
     68        System.out.println("Please enter an XML query all on one line, or 'exit' to quit");
    6469        try {
    6570        query = br.readLine();
    66         query.trim();
    67        
    68         if (query.startsWith("exit")) {
    69             System.exit(1);
    70         }
    71         if (query.equals("describe")|| query.equals("query")) {
    72             System.out.println("\nPlease enter a collection name (or <enter> for no collection)");
    73             collect = br.readLine();
    74             collect.trim();
    75             System.out.println("\nPlease enter a service name (or <enter> for no service)");
    76             service = br.readLine();
    77             service.trim();
    78             if (query.equals("describe")) {
    79            
    80             System.out.println("\nPlease enter an info name (or <enter> for no info)");
    81             info = br.readLine();
    82             info.trim();
    83            
    84             } else if (query.equals("query") ) {
    85             System.out.println("\nPlease enter the content to your query (in xml, all on one line - sorry about that)");
    86             content=br.readLine();
    87             content.trim();
    88             }
    89            
    90             request = "<message><request type='"+query+"' to='";
    91            
    92             if (!collect.equals ("")) {
    93             request += collect+"/";
    94             }
    95             if (!service.equals("")) {
    96             request += service+"/";
    97             }
    98             request += "'";
    99             if (query.equals("describe") && !info.equals("")) {
    100             request += " info='"+info+"'/>";
    101             }
    102             else if (query.equals("query") && !content.equals("")) {
    103             request +=">"+content+"</request>";
    104             } else {
    105             request += "/>";
    106             }
     71        } catch (Exception e) {
     72        System.err.println("Library1 exception:"+e.getMessage());
     73        }
     74        if (query.startsWith("exit")) {
     75        System.exit(1);
     76        }
     77       
     78        result = recept_.process(query);
     79
     80        System.out.println(result);
    10781
    10882
    109             request += "</message>";
    110            
    111             System.out.println("Sending message to MessageRouter:\n"+request);
    112             result = mr.process(request);
    113            
    114             System.out.println("Raw Result:\n"+result+"\n");
    115            
    116             // transform the result
    117            
    118             // select a stylesheet
    119             String stylesheet = null;
    120             if (query.equals("describe")) {
    121             if (collect.equals("")&&service.equals("")) {
    122                 stylesheet = transform_home+File.separatorChar+"home.xsl";
    123             } else if (!collect.equals("")) {
    124                 stylesheet = transform_home+File.separatorChar+"collect_about.xsl";
    125             } else if (!service.equals("")) {
    126                 stylesheet = transform_home+File.separatorChar+"service_about.xsl";
    127             }
    128             } else if (query.equals("query")) {
    129             stylesheet = transform_home+File.separatorChar+"query_result.xsl";
    130             }
    131             if (stylesheet != null) {
    132             File style = new File(stylesheet);
    133             if (!style.exists()) {
    134                 System.err.println("stylesheet doesn't exist");
    135             } else {
    136            
    137                 String transformed_result = transformer.transform(stylesheet, result);
    138                 System.out.println("Transformed result:\n"+transformed_result);
    139             }
    140             } else {
    141             System.out.println("no appropriate stylesheet found");
    142             }
    143         } else {
    144             System.out.println("your request was not understood, sorry");
    145         }
    146        
    147         }  catch (IOException e) {
    148         System.err.println("Library2 IO exception:"+e.getMessage());
    149         }
    150        
    151     } // while (true
    152     }
    153    
     83    }
     84
     85    }   
    15486}
    15587
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/LibraryServlet.java

    r3346 r3363  
    2222public class LibraryServlet extends HttpServlet {
    2323   
    24     private ConfigVars config_=null; // holds all teh system set up vars
     24    private ConfigVars config_=null; // holds all the system set up vars
    2525    private Receptionist recept_=null;
    26     private ModuleInterface message_router_=null;
     26    private MessageRouter message_router_=null;
    2727    /** initialise the servlet
    2828     */
     
    5252    // new message router - create it and pass a handle to recept.
    5353    // the servlet wont use this directly
    54     MessageRouter mr = new MessageRouter();
    55     mr.setSiteHome(config_.sites_home_+File.separatorChar
     54    message_router_ = new MessageRouter();
     55    message_router_.setSiteHome(config_.sites_home_+File.separatorChar
    5656               +config_.site_name_);
    57     mr.configure();
     57    message_router_.configure();
    5858    // new receptionist
    5959    recept_ = new Receptionist();
    6060    recept_.setConfigVars(config_);
    61     recept_.setMessageRouter(mr);
     61    recept_.setMessageRouter(message_router_);
    6262    recept_.configure();
    6363
     
    6868    throws ServletException, IOException {
    6969   
    70     response.setContentType("text/html");
     70    request.setCharacterEncoding("UTF-8");
     71    response.setContentType("text/html;charset=UTF-8");
     72    //response.setContentType("text/html");
    7173    PrintWriter out = response.getWriter();
    7274
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/Action.java

    r3340 r3363  
    55// XML classes
    66import org.w3c.dom.Node;
     7import org.w3c.dom.Element;
    78import org.w3c.dom.Document;
    89
    9 abstract public class Action implements ModuleInterface{
     10abstract public class Action {
    1011
    1112    protected ConfigVars config_=null;
     
    1516    /** a converter class to parse XML and create Docs */
    1617    protected XMLConverter converter_=null;
     18    /** cgi args conveter */
     19    protected CGIArgConverter cgi_=null;
    1720    /** a transformer class to transform xml using xslt */
    1821    protected XMLTransformer transformer_=null;
     
    3841    }
    3942
     43    public void setCGIConverter(CGIArgConverter cgi) {
     44    cgi_ = cgi;
     45    }
    4046    public void configure() {
    4147    // does nothing yet
     
    4551     * and returns the page of results - may be in html/xml/other
    4652     * depending on the output att of the request */
    47     abstract public String process(String xml_in);
    48 
    49     /*Document doc = converter_.getDOM(xml_in);
     53    public String process(String xml_in) {
     54       
     55    Element message = converter_.getDOM(xml_in).getDocumentElement();
    5056   
    51       Node res = process(doc);
    52     return converter_.getString(res); // does this work for html? */
     57    return process(message);
     58    }
    5359   
    54     public Node process(Node xml_in){
    55     return xml_in; // for now
    56     }
     60    abstract public String process(Element xml_in);
     61   
    5762
    5863}
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/BrowseAction.java

    r3340 r3363  
    1111   
    1212
    13     public String process (String xml_in) {
     13    public String process (Element message) {
    1414
    15     Element message = converter_.getDOM(xml_in).getDocumentElement();
    1615    Element request = (Element)message.getElementsByTagName("request").item(0);
    1716   
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/PageAction.java

    r3340 r3363  
    1212public class PageAction extends Action {
    1313
    14 
    15     public String process (String xml_in) {
     14    public String process (Element message) {
    1615   
    17     Element message = converter_.getDOM(xml_in).getDocumentElement();
    1816    Element request = (Element)message.getElementsByTagName("request").item(0);
    19 
    2017    String info = request.getAttribute("info");
    2118    // remove the page/ bit
    2219    info = GSPath.removeFirstLink(info);
    2320    String page_name = GSPath.getFirstLink(info);
     21
     22    // create the return page tree
     23    Element page = doc_.createElement("page");
     24    page.setAttribute("lang", message.getAttribute("lang"));
     25    // add the lang stuff from xml_in
     26    page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "translate"), true));
     27    // add the system stuff from xml_in
     28    page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "config"), true));
     29
    2430    if (page_name.equals("")) {
    2531        // for now send an error. change to always display the home page?
     
    2733    }
    2834    if (page_name.equals("home")) {
    29         return homePage(request);
     35        return homePage(page, request);
    3036    } else if (page_name.equals("about")) {
    31         return aboutPage(request);
     37        return aboutPage(page, request);
    3238    } else {
    3339        return GSHTML.errorPage("page: "+page_name+" not yet implemented");
     
    3541    }
    3642
    37     protected String homePage(Element request) {
     43
     44    protected String homePage(Element page, Element orig_message) {
    3845   
    3946    // first, get the list of collections from mr
    4047   
    4148    Element coll_list_message = doc_.createElement("message");
     49    coll_list_message.setAttribute("lang", page.getAttribute("lang"));
    4250    Element coll_list_request = doc_.createElement("request");
    4351    coll_list_message.appendChild(coll_list_request);
     
    5361    System.out.println(converter_.getString(coll_list_response));
    5462
     63    // second, get the metadata for each collection
    5564    NodeList colls = coll_list_response.getElementsByTagName("collection");
    5665   
    5766    Element metadata_message = doc_.createElement("message");
     67    metadata_message.setAttribute("lang", page.getAttribute("lang"));
    5868    Element metadata_request = doc_.createElement("request");
    5969    metadata_message.appendChild(metadata_request);
     
    7080    }
    7181
    72     //return GSHTML.htmlSafe(converter_.getString(coll_list_response));
    73     //now the full response is in coll_list_response
    74     //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,
    75     //                    display_home_, "home.xsl");
    76     String stylesheet = GSFile.stylesheetPath(config_, "home.xsl");
    77 
    78     Element system = doc_.createElement("system");
    79     //Element sitename = doc_.createElement("sitename");
    80     system.setAttribute("sitename", "localsite");
    81     coll_list_response.appendChild(coll_list_response.getOwnerDocument().importNode(system, true));
    82    
    8382    System.out.println("the second xml response is");
    8483    System.out.println(converter_.getString(coll_list_response));
    8584
     85    //now the full response is in coll_list_response
     86
     87    // add it in to the page xml tree
     88    page.appendChild(doc_.importNode(GSXML.getChildByTagName(coll_list_response, "response"), true));
     89
     90    String stylesheet = GSFile.stylesheetPath(config_, "home.xsl");
    8691    String transformed_result = transformer_.transform(stylesheet,
    87                                coll_list_response);   
     92                               page);   
    8893    return transformed_result;
    8994             
    9095    } // homePage
    9196
    92     protected String aboutPage(Element request) {
     97    protected String aboutPage(Element page, Element request) {
    9398
    9499    // get the params out
    95     HashMap params = GSXML.extractParams((Element)GSXML.getChildByTagName(request, "paramList"));
     100    HashMap params = GSXML.extractParams((Element)GSXML.getNodeByPath(request, "paramList"));
    96101    String coll_name = (String)params.get("c");
    97     String lang = (String)params.get("l");
    98     if (lang==null || lang.equals("")) {
    99         lang="en"; // the default
    100     }
    101     System.out.println("lang="+lang);
     102
    102103    Element coll_about_message = doc_.createElement("message");
    103     //coll_about_message.setAttribute("xml:lang", lang);
     104    coll_about_message.setAttribute("lang", page.getAttribute("lang"));
     105
    104106    Element coll_about_request = doc_.createElement("request");
    105107    coll_about_message.appendChild(coll_about_request);
    106108    coll_about_request.setAttribute("type", "describe");
    107109    coll_about_request.setAttribute("to", coll_name);
     110
    108111    Element coll_about_response = (Element)mr_.process(coll_about_message);
    109     coll_about_response.setAttribute("lang", lang);
    110     //return GSHTML.htmlSafe(converter_.getString(coll_about_response));
    111     //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,
    112     //                    display_home_, "about.xsl");
     112
     113
     114    // add the response to the page
     115    page.appendChild(doc_.importNode(GSXML.getChildByTagName(coll_about_response, "response"), true));
     116
     117    // process using the stylesheet
    113118    String stylesheet = GSFile.stylesheetPath(config_, "about.xsl");
    114119
    115     System.out.println("stylesheet="+stylesheet);
     120    //System.out.println("response="+converter_.getString(page));
    116121    String transformed_result = transformer_.transform(stylesheet,
    117                                coll_about_response);   
     122                               page);   
    118123    return transformed_result;
    119124   
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/QueryAction.java

    r3340 r3363  
    1010
    1111import java.util.HashMap;
     12import java.util.Map;
     13//import java.util.Map;
     14import java.util.Iterator;
    1215
    1316public class QueryAction extends Action {
    1417   
    1518
    16     public String process (String xml_in) {
    17 
    18     Element message = converter_.getDOM(xml_in).getDocumentElement();
     19    public String process (Element message) {
     20
     21
     22    // create the return page tree
     23    Element page = doc_.createElement("page");
     24    page.setAttribute("lang", message.getAttribute("lang"));
     25    // add the lang stuff from message
     26    page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "translate"), true));
     27    // add the system stuff from message
     28    page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "config"), true));
     29
    1930    Element request = (Element)message.getElementsByTagName("request").item(0);
    20    
    2131    String info = request.getAttribute("info");
    2232    // remove the q/ bit
     
    2939
    3040    if (query_type.equals("text")) {
    31         return textQuery(request);
     41        return textQuery(page, request);
    3242    }
    3343    if (query_type.equals("field")) {
    34         return fieldQuery(request);
    35     }
    36     return unknownQuery(request);
     44        return fieldQuery(page, request);
     45    }
     46    return unknownQuery(page, request);
    3747
    3848   
    3949    }
    4050   
    41     protected String textQuery(Element request) {
    42 
    43     Element query_request = doc_.createElement("message");
    44     query_request.appendChild(doc_.importNode(request, true));
    45 
     51    // we may be able to generalize this for all query types?
     52    protected String textQuery(Element page, Element request) {
     53
     54    // chack that the stylesheet is present - cant output a page without one. we may adapt this to use unknownquery stylesheet? - or ask for one from the MR
    4655    String stylesheet = GSFile.stylesheetPath(config_, "textquery.xsl");
    47    
    48     //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,
    49     //                    display_home_, "textquery.xsl");
    5056    if (stylesheet==null) {
    5157        return GSHTML.errorPage("textquery stylesheet not found!");
    5258    }
    53    
    54     HashMap params = GSXML.extractParams((Element)GSXML.getChildByTagName(request, "paramList"));
     59
     60    // extract the params from the cgi-request, and check that we have a coll specified
     61    // first convert short to long names
     62    Element cgi_paramList = (Element)GSXML.getChildByTagName(request, "paramList");
     63    cgi_.toLong(cgi_paramList);
     64    HashMap params = GSXML.extractParams(cgi_paramList);
     65
     66    String collection = (String)params.get("c");
     67    if (collection == null || collection.equals("")) {
     68        return GSHTML.errorPage("textquery, need to specify a colleciton!");
     69    }
     70
     71    // the first part of the data for the page is the cgi-params
     72    Element cgi_request = (Element)doc_.importNode(request, true);
     73    page.appendChild(cgi_request);
     74
     75    // get the service info from the MR - this will probably need to be cached somehow later on. and add as a description node to the cgi-request - this doesn't work. change to add the specified value as a current attribute to the param - need to do somthing different for query
     76
     77    Element mr_info_message = doc_.createElement("message");
     78    Element mr_info_request = doc_.createElement("request");
     79    mr_info_message.appendChild(mr_info_request);
     80    mr_info_request.setAttribute("type", "describe");
     81
     82    String to = collection;
     83    to = GSPath.appendLink(to, "TextQuery");
     84    mr_info_request.setAttribute("to", to);
     85
     86    Element mr_info_response = (Element) mr_.process(mr_info_message);
     87    System.err.println("describe response for service");
     88    System.err.println(converter_.getString(mr_info_response));
     89    Element description = doc_.createElement("description");
     90    // just param list for now - may need content info too
     91    Node pl = GSXML.getNodeByPath(mr_info_response, "response/service/paramList");
     92    if (pl ==null) {
     93        System.out.println("pl is null");
     94    }
     95    else {
     96        System.out.println("pl name is "+pl.getNodeName());
     97    }
     98    Element imported_paramList = (Element)doc_.importNode(pl, true);
     99    System.out.println("imported param list=");
     100    System.out.println(converter_.getString(imported_paramList));
     101    // convert the name to short
     102    cgi_.addShortNames(imported_paramList);
     103    System.out.println("converted param list=");
     104    System.out.println(converter_.getString(imported_paramList));
     105
     106    description.appendChild(imported_paramList);
     107   
     108    // for each param in page_request, set the current value if present
     109    //actually, prob dont need to know the default value, just which one to display - overwrite the default att?
     110   
     111    Element param = (Element)imported_paramList.getFirstChild();
     112    while (param !=null) {
     113        if (param.getNodeName().equals("param")) { // just in case
     114        String name = param.getAttribute("name");
     115        String current = (String)params.get(name);
     116        System.out.println("name="+name+", current="+current);
     117        if (current !=null && !current.equals("")) {
     118            param.setAttribute("default", current);
     119        }
     120        }
     121        param = (Element)param.getNextSibling();
     122    }
     123    System.out.println("adapted param list=");
     124    System.out.println(converter_.getString(imported_paramList));
     125   
     126    cgi_request.appendChild(description);
     127   
     128    // check the query string
    55129    String query = (String)params.get("q");
     130
    56131    if (query==null|| query.equals("")) {
    57         // if there is no q set, just output the search box
    58         String transformed_result = transformer_.transform(stylesheet,
    59                                    query_request);   
    60         return transformed_result;
     132        // if there is no q set, just output the search form
     133        System.out.println("the plain page with no query data");
     134        System.out.println(converter_.getString(page));
     135        return transformer_.transform(stylesheet, page);       
    61136    }
    62137   
    63138    // else do the request, output search box and results
    64     Element mr_message = doc_.createElement("message");
    65     Element mr_request = doc_.createElement("request");
    66     mr_message.appendChild(mr_request);
    67 
    68     mr_request.setAttribute("type", "query");
    69     String to = (String)params.get("c"); // collection name
    70     to = GSPath.appendLink(to, "TextQuery");
    71     mr_request.setAttribute("to", to);
    72    
    73     // ignore paramList for now
     139    Element mr_query_message = doc_.createElement("message");
     140    Element mr_query_request = doc_.createElement("request");
     141    mr_query_message.appendChild(mr_query_request);
     142
     143    mr_query_request.setAttribute("type", "query");
     144    mr_query_request.setAttribute("to", to);
     145
     146    // paramList
    74147    Element paramList = doc_.createElement("paramList");
    75     mr_request.appendChild(paramList);
     148    mr_query_request.appendChild(paramList);
     149
     150    Iterator i = params.entrySet().iterator();
     151    while (i.hasNext()) {
     152        Map.Entry e = (Map.Entry)i.next();
     153        String name = cgi_.toLong((String)e.getKey());
     154        if (!name.equals("")) {
     155        String value = (String)e.getValue();
     156        // if (!name.equals("c")) {
     157        Element p = doc_.createElement("param");
     158        p.setAttribute("name", name);
     159        p.setAttribute("value", value);
     160        paramList.appendChild(p);
     161        // }
     162        }
     163    }
    76164
    77165    // content - contains the query string
    78     Element content = doc_.createElement("content");
    79     Text text = doc_.createTextNode(query);
    80     content.appendChild(text);
    81     mr_request.appendChild(content);
    82     //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_message)));
    83 
    84     Element result1 = (Element)mr_.process(mr_message);
     166    Element query_content = doc_.createElement("content");
     167    Text query_text = doc_.createTextNode(query);
     168    query_content.appendChild(query_text);
     169    mr_query_request.appendChild(query_content);
     170   
     171    Element mr_query_response = (Element)mr_.process(mr_query_message);
     172
    85173    // this result is the list of docs.
    86174    // now take that list, and get the Titles
    87175    // for now, just create a whole new request
    88176
    89     Element resource_list = (Element)result1.getElementsByTagName("resourceList").item(0); // should always be a resource list - but it may be empty
    90 
    91     Element first_resource = (Element)GSXML.getChildByTagName(resource_list, "resource");
    92     if (first_resource == null) { // no docs found - dont bother getting metadata
    93         Element result_response = (Element)GSXML.getChildByTagName(result1, "response");
     177    // check that there are some resources - for now check the list, but later should use a numdocs metadata elem
     178    Element resource_list = (Element)GSXML.getNodeByPath(mr_query_response, "response/content/resourceList"); // resourceList not present if no docs found
     179    if (resource_list == null) {
     180
     181        Element result_response = (Element)GSXML.getChildByTagName(mr_query_response, "response");
    94182       
    95         query_request.appendChild(doc_.importNode(result_response, true));
    96        
    97         String transformed_result = transformer_.transform(stylesheet,
    98                                    query_request);
    99        
    100         return transformed_result;
    101     }
     183        page.appendChild(doc_.importNode(result_response, true));
     184        System.out.println("the page with empty response");
     185        System.out.println(converter_.getString(page));     
     186        return transformer_.transform(stylesheet, page);
     187    }
     188
     189    // we have a doc list, so get the metadata - for now, get title.
     190    // can we dynamically decide what metadata to get?
    102191    // get the Title metadata
    103     Element mr_message2 = doc_.createElement("message");
    104     Element mr_request2 = doc_.createElement("request");
    105     mr_message2.appendChild(mr_request2);
    106 
    107     mr_request2.setAttribute("type", "query");
    108     to = (String)params.get("c"); // collection name
    109     to = GSPath.appendLink(to, "MetadataRetrieve");
    110     mr_request2.setAttribute("to", to);
    111     Element content2 = doc_.createElement("content");
    112     mr_request2.appendChild(content2);
     192    Element mr_metadata_message = doc_.createElement("message");
     193    Element mr_metadata_request = doc_.createElement("request");
     194    mr_metadata_message.appendChild(mr_metadata_request);
     195
     196    mr_metadata_request.setAttribute("type", "query");
     197    to = GSPath.appendLink(collection, "MetadataRetrieve");
     198    mr_metadata_request.setAttribute("to", to);
     199   
     200    Element meta_content = doc_.createElement("content");
     201    mr_metadata_request.appendChild(meta_content);
    113202
    114203    // the first part of the content is the doc list
    115     content2.appendChild(doc_.importNode(resource_list, true));
     204    meta_content.appendChild(doc_.importNode(resource_list, true));
    116205
    117206    // the second part of the content is the metadata list
     
    120209    title.setAttribute("name", "Title");
    121210    metadata_list.appendChild(title);
    122     content2.appendChild(metadata_list);
    123 
    124     //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_request2)));
    125     Element result2 = (Element)mr_.process(mr_message2);
    126    
    127     Element result2_response = (Element)GSXML.getChildByTagName(result2, "response");
    128    
    129     query_request.appendChild(doc_.importNode(result2_response, true));
    130     //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(query_request)));
    131 
    132     String transformed_result = transformer_.transform(stylesheet,
    133                            query_request);
    134    
    135     return transformed_result;
    136    
    137     }
    138 
    139     protected String fieldQuery(Element request) {
     211    meta_content.appendChild(metadata_list);
     212
     213    System.out.println("the metadata request to mr");
     214    System.out.println(converter_.getString(mr_metadata_message));
     215
     216    Element mr_metadata_response = (Element)mr_.process(mr_metadata_message);
     217   
     218    Element result_response = (Element)GSXML.getChildByTagName(mr_metadata_response, "response");
     219   
     220    page.appendChild(doc_.importNode(result_response, true));
     221   
     222    System.out.println("the page with full response");
     223    System.out.println(converter_.getString(page));     
     224
     225    return transformer_.transform(stylesheet, page);
     226   
     227    }
     228
     229    protected String fieldQuery(Element page, Element request) {
    140230    return GSHTML.errorPage("field query not implemented");
    141231
    142232
    143233    }
    144     protected String unknownQuery(Element request) {
     234    protected String unknownQuery(Element page, Element request) {
    145235
    146236    return GSHTML.errorPage("unknown query subtype - unknown query not implemented");
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/action/ResourceAction.java

    r3340 r3363  
    1010import java.util.HashMap;
    1111public class ResourceAction extends Action {
    12    
    1312
    14     public String process (String xml_in) {
    1513
    16     Element message = converter_.getDOM(xml_in).getDocumentElement();
    17     Element request = (Element)message.getElementsByTagName("request").item(0);
     14    // could pass in action name, and have it dynamically decide the name
     15   
     16    public String process (Element message) {
    1817
    19     // could pass in aciton name, and have it dynamically decide the name
     18    // find the stylesheet
    2019    String stylesheet = GSFile.stylesheetPath(config_, "resource.xsl");
    2120
    22     //String stylesheet = GSFile.stylesheetPath(gsdl_home_, site_home_,
    23     //                    display_home_, "resource.xsl");
    2421    if (stylesheet==null) {
    2522        return GSHTML.errorPage("resource stylesheet not found!");
    2623    }
    27    
     24
    2825    // for now, info="r" eventually we may want to change to r/text r/assoc
    2926    // or something
    30    
    31     HashMap params = GSXML.extractParams((Element)request.getElementsByTagName("paramList").item(0));
    32    
     27    Element request = (Element)message.getElementsByTagName("request").item(0);
     28
     29    Element cgi_paramList = (Element)GSXML.getChildByTagName(request, "paramList");
     30    cgi_.toLong(cgi_paramList);
     31    HashMap params = GSXML.extractParams(cgi_paramList);
     32
    3333    String resource_name = (String)params.get("r");
    3434    if (resource_name == null || resource_name.equals("")) {
     
    3636        return GSHTML.errorPage("no resource specified");
    3737    }
     38   
     39   
     40    // create the return page tree
     41    Element page = doc_.createElement("page");
     42    page.setAttribute("lang", message.getAttribute("lang"));
     43    // add the lang stuff from message
     44    page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "translate"), true));
     45    // add the config stuff from message
     46    page.appendChild(doc_.importNode(GSXML.getChildByTagName(message, "config"), true));
     47
     48
    3849
    3950    // build up the mr request
    40 
    4151    Element mr_message = doc_.createElement("message");
    4252    Element mr_request = doc_.createElement("request");
     
    6171    content.appendChild(resource_list);
    6272
    63     //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_message)));
    64     Element result = (Element)mr_.process(mr_message);
    65     //return GSHTML.errorPage(GSHTML.htmlSafe(converter_.getString(mr_message)+"<p>"+converter_.getString(result)));
     73    Element mr_result = (Element)mr_.process(mr_message);
    6674
    67     // create a new Element
    68     Element page = doc_.createElement("message");
     75    // add the results to the page
    6976    page.appendChild(doc_.importNode(request, true));
    70     page.appendChild(doc_.importNode(GSXML.getChildByTagName(result, "response"), true));
    71     //message.appendChild(doc_.importNode(GSXML.getChildByTagName(result, "response"), true));
     77    page.appendChild(doc_.importNode(GSXML.getChildByTagName(mr_result, "response"), true));
     78   
    7279
    7380    String transformed_result = transformer_.transform(stylesheet, page);
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/core/Receptionist.java

    r3344 r3363  
    1818    protected ConfigVars config_=null;
    1919
     20    /** the cgi args converter */
     21    protected CGIArgConverter cgi_=null;
     22
    2023    /** container Document to create XML Nodes */
    2124    protected Document doc_=null;
     
    2932    protected HashMap action_map_=null;
    3033
     34    protected Translate translation_=null;
    3135    public Receptionist() {
    3236    converter_ = new XMLConverter();
    3337    doc_ = converter_.newDOM();
    3438    action_map_= new HashMap();
     39    translation_ = new Translate();
     40    cgi_ = new CGIArgConverter();
    3541    }
    3642 
     
    3844    public void setConfigVars(ConfigVars config) {
    3945    config_ = config;
     46    translation_.setConfigVars(config);
    4047    }
    4148    /** sets the message router  - it should already be created and
     
    5663    }
    5764
     65    // for now, assume default is en, so load that
     66    translation_.setDefaultLanguage("en");
    5867    // for now, just statically add in the actions
    5968    // actions may disappear if xslt is all that is needed
     
    6271    a.setConfigVars(config_);
    6372    a.setMessageRouter(mr_);
     73    a.setCGIConverter(cgi_);
    6474    a.configure();
    6575    action_map_.put("p", a);
     
    6777    a = new QueryAction();
    6878    a.setConfigVars(config_);
     79    a.setCGIConverter(cgi_);
    6980    a.setMessageRouter(mr_);
    7081    a.configure();
     
    7384    a = new BrowseAction();
    7485    a.setConfigVars(config_);
     86    a.setCGIConverter(cgi_);
    7587    a.setMessageRouter(mr_);
    7688    a.configure();
     
    7991    a = new ResourceAction();
    8092    a.setConfigVars(config_);
     93    a.setCGIConverter(cgi_);
    8194    a.setMessageRouter(mr_);
    8295    a.configure();
     
    87100    public String process(String xml_in) {
    88101
    89     Element message = converter_.getDOM(xml_in).getDocumentElement();
     102    Document message_doc = converter_.getDOM(xml_in);
     103    Element message = message_doc.getDocumentElement();
     104   
    90105    NodeList requests = message.getElementsByTagName("request");
    91106    if (requests.getLength()==0) {
     
    106121    // pass to appropriate action
    107122   
    108     ModuleInterface mi = (ModuleInterface)action_map_.get(action);
    109     if (mi==null) {
     123    Action a = (Action)action_map_.get(action);
     124    if (a==null) {
    110125        return GSHTML.errorPage("no action for "+action);
    111126    }
     127
     128    // add in the translation bit - should we do it here? or give the actions access to the translation object?
     129    String lang = message.getAttribute("lang");
     130    Element trans = translation_.getLanguageTree(lang);
     131    message.appendChild(message_doc.importNode(trans, true));
     132
     133    // add in the system vars bit
     134    message.appendChild(message_doc.importNode(config_.config_xml_, true));
     135
     136    System.out.println("message at receptionist is:");
     137    System.out.println(converter_.getString(message));
     138    String page = a.process(message);
     139    return page;
    112140    // just pass a string for now - better to pass the doc cos already
    113141    // parsed it, but we want a string back
    114     String page = mi.process(xml_in);
     142    //String page = mi.process(xml_in);
    115143   
    116144    // output the page
    117     return page;
     145    //return page;
    118146    }
    119147
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/service/MGPPGDBMService.java

    r3343 r3363  
    8181
    8282    System.out.println("configuring MGPPGDBMService");
    83     default_index_="tt";
     83    System.out.println("config info=");
     84    System.out.println(converter_.getString(info));
     85    // get the default index out of metadata
     86    NodeList metadata = info.getElementsByTagName("metadata");
     87    String name=null;
     88    for(int i=0; i<metadata.getLength(); i++) {
     89        Element e = (Element)metadata.item(i);
     90        name = e.getAttribute("name");
     91        if (name.equals("defaultIndex")) {
     92        default_index_ = GSXML.getValue(e);
     93        break;
     94        }
     95    }
     96    System.out.println("default index="+default_index_);
    8497    Element e = null;
    8598    // these entries should reflect the build config file - some services may not be available depending on how the collection was built.
     
    107120    // set up service_info_map_ - for now, just has the same elements as above
    108121    // should have full details about each service incl params lists etc.
     122    // do the text query one - for now a static list. later use buildcfg.xml values to dynamically change this
    109123    e = doc_.createElement("service");
    110124    e.setAttribute("type", "query");
    111125    e.setAttribute("name", "TextQuery");
     126    Element paramList = doc_.createElement("paramList");
     127    // boolean params
     128    Element param = GSXML.createParameter(doc_, "case", GSXML.PARAM_TYPE_BOOLEAN, "1", null);
     129    paramList.appendChild(param);
     130    param = GSXML.createParameter(doc_, "stem", GSXML.PARAM_TYPE_BOOLEAN, "1", null);
     131    paramList.appendChild(param);
     132    // enum params
     133    String []vals = {"all", "some"};
     134    param = GSXML.createParameter(doc_, "matchMode", GSXML.PARAM_TYPE_ENUM, "all", vals);
     135    paramList.appendChild(param);
     136    String [] vals1 = {"rank", "natural"};
     137    param = GSXML.createParameter(doc_, "sortBy", GSXML.PARAM_TYPE_ENUM, "rank", vals1 );
     138    paramList.appendChild(param);
     139    String [] vals2 = {"Document", "Section"};
     140    param = GSXML.createParameter(doc_, "queryLevel", GSXML.PARAM_TYPE_ENUM, "Section", vals2);
     141    paramList.appendChild(param);
     142    // Integer params
     143    param = GSXML.createParameter(doc_, "maxDocs", GSXML.PARAM_TYPE_INTEGER, "10", null);
     144    paramList.appendChild(param);
     145
     146
     147    e.appendChild(paramList);
     148   
    112149    service_info_map_.put("TextQuery", e);
    113150   
     151
    114152    e = doc_.createElement("service");
    115153    e.setAttribute("type", "query");
     
    173211
    174212    HashMap params = GSXML.extractParams(param_elem);
    175     String index = (String)params.get("Index"); // we must have an index elem
     213    String index = (String)params.get("Index");
    176214    if (index==null) { // if its not present, use the default index
    177215        index=default_index_;
     
    289327        for (int j=0; j<ids.length; j++) {
    290328        long real_num = gdbm_src_.oid2Docnum(ids[j]);
     329        System.out.println("getting doc text, basedir="+basedir+", textdir="+textdir+", level="+level+", num="+real_num);
    291330        String document = mgpp_src_.getDocument(basedir, textdir,  level, real_num);
    292331        // for now, stick it in a text node - eventually should be parsed as xml??
     332
     333        // something funny with the doc -
    293334        Element new_doc = GSXML.createResourceElement(doc_, ids[j]);
    294335        GSXML.addDocText(doc_, new_doc, document);
     
    365406       
    366407        if (name.equals("case")) {
    367         boolean val = (value.equals("true")?true:false);
     408        boolean val = (value.equals("1")?true:false);
    368409        mgpp_src_.setCase(val);     
    369410        } else if (name.equals("stem")) {
    370         boolean val = (value.equals("true")?true:false);
     411        boolean val = (value.equals("1")?true:false);
    371412        mgpp_src_.setStem(val);
    372413        } else if (name.equals("maxDocs")) {
     
    378419        mgpp_src_.setReturnLevel(value);
    379420        } else if (name.equals("matchMode")) {
    380         int mode = Integer.parseInt(value);
     421        int mode;
     422        if (value.equals("all")) mode=1;
     423        else mode=0;
    381424        mgpp_src_.setMatchMode(mode);
    382         } else if (name.equals("sortByRank")) {
    383         boolean val = (value.equals("true")?true:false);
    384         mgpp_src_.setSortByRank(val);
     425        } else if (name.equals("sortBy")) {
     426        if (value.equals("rank")) {
     427            mgpp_src_.setSortByRank(true);
     428        } else if (value.equals("natural")) {
     429            mgpp_src_.setSortByRank(false);
     430        }
    385431        } else if (name.equals("termInfo")) {
    386         boolean val = (value.equals("true")?true:false);
     432        boolean val = (value.equals("1")?true:false);
    387433        mgpp_src_.setReturnTerms(val);
    388434        } // ignore any others
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/service/PhindService.java

    r3342 r3363  
    7272    f.setAttribute("type", "query");
    7373    f.setAttribute("name", "PhindBrowse");
     74
     75    // add in teh applet info for the phind applet
     76    String app_info = "<APPLET CODEBASE='/gsdl/bin/java' CODE='org.greenstone.gsdl3.applet.Phind.class' ARCHIVE='Phind.jar' WIDTH=500 HEIGHT=400>
     77  <PARAM NAME=library      VALUE='/cgi-bin/library?e=d-000-00---0fi1998--00-0-0-0prompt-10---4---Document-dtx--0-1l--0-en-50---20-preferences-the--001-011-1-0isoZz-8859Zz-1-0'>
     78  <PARAM NAME=phindcgi     VALUE='library?a=browse/phind'>
     79  <PARAM NAME=collection   VALUE='fi1998'>
     80  <PARAM NAME=classifier   VALUE='1'>
     81
     82  <PARAM NAME=orientation  VALUE='vertical'>
     83  <PARAM NAME=depth        VALUE='2'>
     84  <PARAM NAME=resultorder VALUE='L,l,E,e,D,d'>
     85
     86  <PARAM NAME=backdrop     VALUE='interfaces/default/images/phindbg1.jpg'>
     87  <PARAM NAME=fontsize     VALUE='10'>
     88  <PARAM NAME=blocksize    VALUE='10'>
     89
     90  The Phind java applet.
     91  </APPLET>";
     92
    7493    service_info_map_.put("PhindBrowse", f);
    7594   
  • trunk/gsdl3/src/java/org/greenstone/gsdl3/service/ServiceModule.java

    r3235 r3363  
    207207    String info = request.getAttribute("info");
    208208    if (type.equals("describe")) { // process here, not by subclass
     209        Element response = doc_.createElement("response");
     210        response.setAttribute("type", "describe");
    209211        if (to.equals("")) { // to="", look at info
    210212        if (info.equals("serviceList")) {
    211             return short_service_info_;
     213            response.appendChild(short_service_info_);
     214            return response;
    212215        }
    213216        // else error in info field
     
    216219        } else { // describe a particular service
    217220        if (service_info_map_.containsKey(to)) {
    218             return (Element)service_info_map_.get(to);
     221            response.appendChild((Element)service_info_map_.get(to));
     222            return response;
    219223        }
    220224        // else error in to field
Note: See TracChangeset for help on using the changeset viewer.