View Javadoc

1   package org.astrogrid.portal.xml.acting;
2   
3   import java.util.Map;
4   import java.util.HashMap;
5   
6   import org.apache.avalon.framework.parameters.Parameters;
7   import org.apache.cocoon.acting.AbstractAction;
8   import org.apache.cocoon.environment.ObjectModelHelper;
9   import org.apache.cocoon.environment.Redirector;
10  import org.apache.cocoon.environment.Request;
11  import org.apache.cocoon.environment.SourceResolver;
12  import org.apache.log4j.Category;
13  import org.astrogrid.portal.utils.acting.ActionUtils;
14  import org.astrogrid.portal.utils.acting.ActionUtilsFactory;
15  import org.astrogrid.portal.utils.acting.ValidationHandler;
16  
17  /***
18   * This class provides the DataCenter UI with the facility to
19   * validate an XML document provided by the Query Builder.
20   * 
21   * @author peter.shillan <mailto:gps@roe.ac.uk />
22   */
23  public class XMLValidatorAction extends AbstractAction {
24    private Category logger = Category.getInstance(getClass());
25  
26    /***
27     * <p>
28     *   Validate the XML document provided.
29     * </p>
30     * <p>
31     *   SiteMap Requirements:
32     *     <ol>
33     *       <li><code>xml-param</code>: name of the <code>Request</code> parameter containing the XML document</li>
34     *     </ol>
35     * </p>
36     * <p>
37     *   SiteMap Outputs:
38     *     <ol>
39     *       <li><code>xml-valid</code>: "true" if XML was valid</li>
40     *     </ol>
41     * </p>
42     * <p>
43     *   Request Attribute Outputs:
44     *     <ol>
45     *       <li><code>xml-valid</code>: "true" if XML was valid</li>
46     *       <li><code>xml-validation-errors</code>: "true" if XML produced errors</li>
47     *       <li><code>xml-validation-warnings</code>: "true" if XML produced warnings</li>
48     *       <li><code>xml-validation-fatal-errors</code>: "true" if XML produced fatal errors</li>
49     *       <li><code>xml-errors</code>: XML produced errors</li>
50     *       <li><code>xml-warnings</code>: XML produced warnings</li>
51     *       <li><code>xml-fatal-errors</code>: XML produced fatal errors</li>
52     *     </ol>
53     * </p>
54     * 
55     * @see org.apache.cocoon.acting.Action#act(org.apache.cocoon.environment.Redirector, org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
56     */
57    public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters params) {
58      Map sitemapParams = new HashMap();
59      ActionUtils utils = ActionUtilsFactory.getActionUtils();
60      
61      Request request = ObjectModelHelper.getRequest(objectModel);
62      String xml = utils.getRequestParameter("xml-param", params, request);
63      
64      ValidationHandler handler = utils.validate(xml);
65      if(handler.valid()) {
66        request.setAttribute("xml-valid", "true");
67        sitemapParams.put("xml-valid", "true");
68  
69        logger.debug("[act] sitemap params: " + sitemapParams);
70      }
71      else {
72        request.setAttribute("xml-validation-errors", handler.getErrorMessages());
73        request.setAttribute("xml-validation-warnings", handler.getWarningMessages());
74        request.setAttribute("xml-validation-fatal-errors", handler.getFatalErrorsMessages());
75        
76        request.setAttribute("xml-valid", "false");
77  
78        request.setAttribute("xml-errors", Boolean.toString(handler.anyErrors()));
79        request.setAttribute("xml-warnings", Boolean.toString(handler.anyWarnings()));
80        request.setAttribute("xml-fatal-errors", Boolean.toString(handler.anyFatalErrors()));
81  
82        sitemapParams = null;
83      }
84      
85      return sitemapParams;
86    }
87  }