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 }