Changeset 22786

Show
Ignore:
Timestamp:
25.08.2010 16:45:27 (9 years ago)
Author:
sjm84
Message:

Added the ability to get a specified section of a page using the excerptid and excerpttag cgi arguments

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/TransformingReceptionist.java

    r22085 r22786  
    159159    // transform the page using xslt 
    160160    Node transformed_page = transformPage(page); 
    161          
    162     return transformed_page; 
     161     
     162    // if the user has specified they want only a part of the full page then subdivide it 
     163    boolean subdivide = false; 
     164    String excerptID = null; 
     165    String excerptTag = null; 
     166    Element request = (Element)GSXML.getChildByTagName(page, GSXML.PAGE_REQUEST_ELEM); 
     167    Element cgi_param_list = (Element)GSXML.getChildByTagName(request, GSXML.PARAM_ELEM+GSXML.LIST_MODIFIER); 
     168    if (cgi_param_list != null) { 
     169          HashMap params = GSXML.extractParams(cgi_param_list, false); 
     170          if((excerptID = (String)params.get("excerptid")) != null) 
     171          { 
     172            subdivide = true; 
     173          } 
     174          if((excerptTag = (String)params.get("excerpttag")) != null) 
     175          { 
     176            subdivide = true; 
     177          } 
     178    } 
     179 
     180    if(subdivide) 
     181    { 
     182        Node subdivided_page = subdivide(transformed_page, excerptID, excerptTag); 
     183        if(subdivided_page != null) 
     184        { 
     185            return subdivided_page; 
     186        } 
     187    } 
     188         
     189    return transformed_page;  
     190  } 
     191   
     192  protected Node subdivide(Node transformed_page, String excerptID, String excerptTag) 
     193  { 
     194    if(excerptID != null) 
     195    { 
     196        Node selectedElement = getNodeByIdRecursive(transformed_page, excerptID); 
     197        return selectedElement; 
     198    } 
     199    else if(excerptTag != null) 
     200    { 
     201        Node selectedElement = getNodeByTagRecursive(transformed_page, excerptTag); 
     202        return selectedElement; 
     203    } 
     204    return transformed_page; 
     205  } 
     206   
     207  protected Node getNodeByIdRecursive(Node parent, String id) 
     208  { 
     209    if(parent.hasAttributes() && ((Element)parent).getAttribute("id").equals(id)) 
     210    { 
     211        return parent; 
     212    } 
     213     
     214    NodeList children = parent.getChildNodes(); 
     215    for(int i = 0; i < children.getLength(); i++) 
     216    { 
     217        Node result = null; 
     218        if((result = getNodeByIdRecursive(children.item(i), id)) != null) 
     219        { 
     220            return result; 
     221        } 
     222    } 
     223    return null; 
     224  } 
     225   
     226  protected Node getNodeByTagRecursive(Node parent, String tag) 
     227  { 
     228    if(parent.getNodeType() == Node.ELEMENT_NODE && ((Element)parent).getTagName().equals(tag)) 
     229    { 
     230        return parent; 
     231    } 
     232     
     233    NodeList children = parent.getChildNodes(); 
     234    for(int i = 0; i < children.getLength(); i++) 
     235    { 
     236        Node result = null; 
     237        if((result = getNodeByTagRecursive(children.item(i), tag)) != null) 
     238        { 
     239            return result; 
     240        } 
     241    } 
     242    return null; 
    163243  } 
    164244     
     
    171251  protected Node transformPage(Element page) { 
    172252 
    173     logger.debug("page before transfomring:"); 
     253    logger.debug("page before transforming:"); 
    174254    logger.debug(this.converter.getPrettyString(page)); 
    175255