Ignore:
Timestamp:
2010-08-25T16:45:27+12:00 (14 years ago)
Author:
sjm84
Message:

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

File:
1 edited

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