You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by ed...@apache.org on 2004/01/07 20:31:36 UTC
cvs commit: cocoon-lenya/src/java/org/apache/lenya/cms/cocoon/acting ValidateAction.java
edith 2004/01/07 11:31:36
Added: src/java/org/apache/lenya/cms/cocoon/acting
ValidateAction.java
Log:
action to validate a document
Revision Changes Path
1.1 cocoon-lenya/src/java/org/apache/lenya/cms/cocoon/acting/ValidateAction.java
Index: ValidateAction.java
===================================================================
/*
* <License>
* The Apache Software License
*
* Copyright (c) 2002 lenya. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* 3. All advertising materials mentioning features or use of this software must
* display the following acknowledgment: "This product includes software developed
* by lenya (http://www.lenya.org)"
*
* 4. The name "lenya" must not be used to endorse or promote products derived from
* this software without prior written permission. For written permission, please
* contact contact@lenya.org
*
* 5. Products derived from this software may not be called "lenya" nor may "lenya"
* appear in their names without prior written permission of lenya.
*
* 6. Redistributions of any form whatsoever must retain the following acknowledgment:
* "This product includes software developed by lenya (http://www.lenya.org)"
*
* THIS SOFTWARE IS PROVIDED BY lenya "AS IS" WITHOUT ANY WARRANTY EXPRESS OR IMPLIED,
* INCLUDING THE WARRANTY OF NON-INFRINGEMENT AND THE IMPLIED WARRANTIES OF MERCHANTI-
* BILITY AND FITNESS FOR A PARTICULAR PURPOSE. lenya WILL NOT BE LIABLE FOR ANY DAMAGES
* SUFFERED BY YOU AS A RESULT OF USING THIS SOFTWARE. IN NO EVENT WILL lenya BE LIABLE
* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR LOST PROFITS EVEN IF lenya HAS
* BEEN ADVISED OF THE POSSIBILITY OF THEIR OCCURRENCE. lenya WILL NOT BE LIABLE FOR ANY
* THIRD PARTY CLAIMS AGAINST YOU.
*
* Lenya includes software developed by the Apache Software Foundation, W3C,
* DOM4J Project, BitfluxEditor and Xopus.
* </License>
*/
package org.apache.lenya.cms.cocoon.acting;
import java.io.File;
import java.net.URL;
import java.util.Map;
import java.util.HashMap;
import java.io.FileWriter;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.acting.AbstractConfigurableAction;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.lenya.xml.RelaxNG;
/**
* Action to validate an xml document
*
* @author Edith Chevrier
* @version 2004.1.07
*/
public class ValidateAction extends AbstractConfigurableAction {
/** (non-Javadoc)
* @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)
**/
public Map act(
Redirector redirector,
SourceResolver resolver,
Map objectModel,
String source,
Parameters parameters)
throws Exception {
File sitemap =
new File(new URL(resolver.resolveURI("").getURI()).getFile());
File file =
new File(
sitemap.getAbsolutePath()
+ File.separator
+ parameters.getParameter("file"));
File schema =
new File(
sitemap.getAbsolutePath()
+ File.separator
+ parameters.getParameter("schema"));
getLogger().debug("file: " + file.getAbsolutePath());
getLogger().debug("schema: " + schema.getAbsolutePath());
Request request = ObjectModelHelper.getRequest(objectModel);
if (request.getParameter("cancel") != null) {
getLogger().warn(".act(): Editing has been canceled");
return null;
}
if (schema.isFile()) {
if (!file.getParentFile().isDirectory()){
file.getParentFile().mkdir();
}
file.createNewFile();
String content = request.getParameter("content");
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(content);
fileWriter.close();
String message = validateDocument(schema, file);
if (message != null) {
getLogger().error("RELAX NG Validation failed: " + message);
HashMap hmap = new HashMap();
hmap.put("message", "RELAX NG Validation failed: " + message);
return hmap;
}
} else {
getLogger().warn("No such schema: " + schema.getAbsolutePath());
}
return null;
}
/**
* Validate document
*/
private String validateDocument(
File schema,
File file) {
try {
File valFile = new File(file.getAbsolutePath() + ".validate");
if (!valFile.getParentFile().isDirectory()){
valFile.getParentFile().mkdir();
}
valFile.createNewFile();
return RelaxNG.validate(
schema,
new File(file.getAbsolutePath() + ".validate"));
} catch (Exception e) {
getLogger().error(e.getMessage());
return "" + e;
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: lenya-cvs-unsubscribe@cocoon.apache.org
For additional commands, e-mail: lenya-cvs-help@cocoon.apache.org