Changeset 3442


Ignore:
Timestamp:
2002-10-04T13:20:11+12:00 (22 years ago)
Author:
kjdon
Message:

index and level info now dynamic

File:
1 edited

Legend:

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

    r3388 r3442  
    4444public class MGPPGDBMService
    4545    extends ServiceModule {
    46     // not sure where this should go - maybe need a greenstone constants?
    47     // or is it per collection, so should be specified in the buildcfg.xml?
    48     public static final String DEFAULT_TEXT_LEVEL="Section";
     46
    4947    private MGPPWrapper mgpp_src_=null;
    5048    private GDBMWrapper gdbm_src_=null;
    5149   
    5250    private String default_index_=null;
     51    private String default_level_=null;
     52
    5353    public MGPPGDBMService() {
    5454    mgpp_src_ = new MGPPWrapper();
     
    5656
    5757    }
    58     /** passes the request Element to the appropriate service function*/
    59     protected Element processService(String name, Element request) {
    60 
    61     // dont need to check that the service name is  supported for this particular object, because that has been checked by ServiceModule
    62     if (name.equals("TextQuery")) {
    63         return processTextQuery(request);
    64     } else if(name.equals("FieldQuery")) {
    65         return processFieldQuery(request);
    66     } else if (name.equals("ResourceRetrieve")) {
    67         return processResourceRetrieve(request);
    68     } else if (name.equals("MetadataRetrieve")) {
    69         return processMetadataRetrieve(request);
    70     }
    71    
    72     System.err.println("MGPPGDBMService:should never get here. service type wrong:"+name);
    73     return null;
    74    
    75    
    76     }
    7758   
    7859
     
    8162
    8263    System.out.println("configuring MGPPGDBMService");
    83     // get the default index out of metadata
    84     NodeList metadata = info.getElementsByTagName("metadata");
    85     String name=null;
    86     for(int i=0; i<metadata.getLength(); i++) {
    87         Element e = (Element)metadata.item(i);
    88         name = e.getAttribute("name");
    89         if (name.equals("defaultIndex")) {
    90         default_index_ = GSXML.getValue(e);
    91         break;
    92         }
    93     }
     64
     65    // get the default index from <defaultIndex>
     66    Element def = (Element)GSXML.getChildByTagName(info, "defaultIndex");
     67    if (def !=null) {
     68        default_index_ = def.getAttribute("name");
     69    }
     70    if (default_index_==null||default_index_.equals("")) {
     71        System.err.println("Error: default index not specified!");
     72        return false;
     73    }
     74
    9475    System.out.println("default index="+default_index_);
     76
     77    // get the default level out of <defaultLevel>
     78    def = (Element)GSXML.getChildByTagName(info, "defaultLevel");
     79    if (def !=null) {
     80        default_level_ = def.getAttribute("name");
     81    }
     82    if (default_level_==null||default_level_.equals("")) {
     83        System.err.println("Error: default level not specified!");
     84        return false;
     85    }
     86    // the default level is also the level which gdbm is expecting
     87    mgpp_src_.setReturnLevel(default_level_);
     88    System.out.println("default level="+default_level_);
     89
     90    // set up which services are available for this collection
    9591    Element e = null;
    9692    // these entries should reflect the build config file - some services may not be available depending on how the collection was built.
     93
    9794    // set up short_service_info_ - for now just has name and type
    9895    e = doc_.createElement("service");
     
    123120    e.setAttribute("name", "TextQuery");
    124121    Element paramList = doc_.createElement("paramList");
     122    Element param;
     123    // first do index and level params
     124
     125    // the index info - read from config file
     126    Element index_list = (Element)GSXML.getChildByTagName(info, "indexList");
     127    NodeList indexes = index_list.getElementsByTagName("index");
     128    int len = indexes.getLength();
     129    if (len > 1) {
     130        // add level param to list
     131        String [] inds  = new String[len];
     132        for (int i=0; i<len; i++) {
     133        inds[i] = ((Element)indexes.item(i)).getAttribute("name");
     134        }
     135        param = GSXML.createParameter(doc_, "index", GSXML.PARAM_TYPE_ENUM, default_index_, inds);
     136        paramList.appendChild(param);
     137    } // else dont need to add it
     138
     139    // the level info - read from config file
     140    Element level_list = (Element)GSXML.getChildByTagName(info, "levelList");
     141    NodeList levels = level_list.getElementsByTagName("level");
     142    len = levels.getLength();
     143    if (len > 1) {
     144        // add level param to list
     145        String [] levs  = new String[len];
     146        for (int i=0; i<len; i++) {
     147        levs[i] = ((Element)levels.item(i)).getAttribute("name");
     148        }
     149        param = GSXML.createParameter(doc_, "queryLevel", GSXML.PARAM_TYPE_ENUM, default_level_, levs);
     150        paramList.appendChild(param);
     151    } // else dont need to add it
     152
    125153    // boolean params
    126     Element param = GSXML.createParameter(doc_, "case", GSXML.PARAM_TYPE_BOOLEAN, "1", null);
     154    param = GSXML.createParameter(doc_, "case", GSXML.PARAM_TYPE_BOOLEAN, "1", null);
    127155    paramList.appendChild(param);
    128156    param = GSXML.createParameter(doc_, "stem", GSXML.PARAM_TYPE_BOOLEAN, "1", null);
     
    135163    param = GSXML.createParameter(doc_, "sortBy", GSXML.PARAM_TYPE_ENUM, "rank", vals1 );
    136164    paramList.appendChild(param);
    137     String [] vals2 = {"Document", "Section"};
    138     param = GSXML.createParameter(doc_, "queryLevel", GSXML.PARAM_TYPE_ENUM, "Section", vals2);
    139     paramList.appendChild(param);
     165
    140166    // Integer params
    141167    param = GSXML.createParameter(doc_, "maxDocs", GSXML.PARAM_TYPE_INTEGER, "10", null);
     
    163189    service_info_map_.put("MetadataRetrieve", e);
    164190
    165    
    166     if (gdbm_src_.openDatabase(site_home_+"/collect/"+collection_name_+"/index/text/"+collection_name_+".ldb", GDBMWrapper.READER)) {
     191    if (gdbm_src_.openDatabase(GSFile.GDBMDatabaseFile(site_home_, collection_name_), GDBMWrapper.READER)) {
    167192        return true;
    168193    }
     
    173198    }
    174199       
     200
     201    /** passes the request Element to the appropriate service function*/
     202    protected Element processService(String name, Element request) {
     203
     204    // dont need to check that the service name is  supported for this particular object, because that has been checked by ServiceModule
     205    if (name.equals("TextQuery")) {
     206        return processTextQuery(request);
     207    } else if(name.equals("FieldQuery")) {
     208        return processFieldQuery(request);
     209    } else if (name.equals("ResourceRetrieve")) {
     210        return processResourceRetrieve(request);
     211    } else if (name.equals("MetadataRetrieve")) {
     212        return processMetadataRetrieve(request);
     213    }
     214   
     215    System.err.println("MGPPGDBMService:should never get here. service type wrong:"+name);
     216    return null;
     217   
     218   
     219    }
    175220
    176221    /** process a text query */
     
    209254
    210255    HashMap params = GSXML.extractParams(param_elem);
    211     String index = (String)params.get("Index");
     256    String index = (String)params.get("index");
    212257    if (index==null) { // if its not present, use the default index
    213258        index=default_index_;
     
    310355        // retrieve a doc
    311356        if (level==null) {
    312         level=DEFAULT_TEXT_LEVEL;
     357        level=default_level_;
    313358        }
    314359        // whether to just get the doc, or all assoc files too.
Note: See TracChangeset for help on using the changeset viewer.