You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by tc...@apache.org on 2002/03/26 00:23:38 UTC
cvs commit: xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept InstanceTransformer.java
tcurdt 02/03/25 15:23:38
Modified: src/scratchpad/src/org/apache/cocoon/precept
InstanceTransformer.java
Log:
added the licence,
use the validation result from the action (request-attribute),
support also inserts of single values instead of the full instance only
Revision Changes Path
1.2 +197 -7 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/InstanceTransformer.java
Index: InstanceTransformer.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/InstanceTransformer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- InstanceTransformer.java 22 Mar 2002 17:46:39 -0000 1.1
+++ InstanceTransformer.java 25 Mar 2002 23:23:38 -0000 1.2
@@ -1,9 +1,60 @@
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, 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. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Apache Cocoon" and "Apache Software Foundation" must not be
+ used to endorse or promote products derived from this software without
+ prior written permission. For written permission, please contact
+ apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation and was originally created by
+ Stefano Mazzocchi <st...@apache.org>. For more information on the Apache
+ Software Foundation, please see <http://www.apache.org/>.
+
+*/
+
package org.apache.cocoon.precept;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.precept.acting.AbstractPreceptorAction;
import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
import org.apache.cocoon.caching.NOPCacheValidity;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
@@ -13,20 +64,52 @@
import org.apache.log.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
import java.io.IOException;
import java.util.Map;
+import java.util.List;
+import java.util.Iterator;
-public class InstanceTransformer extends AbstractTransformer { //implements Cacheable {
+/*
+ * @author: Torsten Curdt <tc...@dff.st>
+ */
+public class InstanceTransformer extends AbstractTransformer {
+ //implements Cacheable {
public final static String NS = "http://www.dff.st/ns/desire/instance/1.0";
+ public final static Attributes NOATTR = new AttributesImpl();
+
+ public final static String TAG_INSERTINSTANCE = "insert-instance";
+ public final static String TAG_INSERTINSTANCE_ATTR_ID = "id";
+
public final static String TAG_INSTANCE = "instance";
public final static String TAG_INSTANCE_ATTR_ID = "id";
+ public final static String TAG_INSERTVIOLATIONS = "insert-violations";
+
+ public final static String TAG_BUTTON = "button";
+
+ public final static String TAG_LABEL = "label";
+
+ public final static String TAG_OUTPUT = "output";
+ public final static String TAG_TEXTBOX = "textbox";
+ public final static String TAG_PASSWORD = "password";
+ public final static String TAG_SELECTBOOLEAN = "selectBoolean";
+ public final static String TAG_SELECTONE = "selectOne";
+
+ public final static String TAG_SELECTMANY = "selectMany";
+
+ public final static String TAG_COMMON_ATTR_REF = "ref";
+ public final static String TAG_COMMON_ATTR_INSTANCE = "instance";
+
private Logger log;
private Request request;
private Session session;
+ private Instance defaultInstance;
+ private Object value;
+ private String prefix;
public void setup(SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws ProcessingException, SAXException, IOException {
log = getLogger();
@@ -37,13 +120,21 @@
}
session = request.getSession(false);
+ defaultInstance = null;
+ prefix = null;
}
+
public void startElement(String uri, String name, String raw, Attributes attributes) throws SAXException {
if (NS.equals(uri)) {
- if (TAG_INSTANCE.equals(name)) {
+ if (prefix == null) {
+ prefix = raw.substring(0, raw.length() - name.length() - 1);
+ getLogger().debug("found prefix [" + String.valueOf(prefix) + "] for namespace [" + NS + "]");
+ }
+
+ if (TAG_INSERTINSTANCE.equals(name)) {
if (session != null) {
- String id = attributes.getValue(TAG_INSTANCE_ATTR_ID);
+ String id = attributes.getValue(TAG_INSERTINSTANCE_ATTR_ID);
log.debug("inserting instance [id=" + String.valueOf(id) + "]");
Instance instance = (Instance) session.getAttribute(id);
@@ -58,9 +149,90 @@
log.debug("no session - no instance");
}
}
- else {
- String ref = attributes.getValue("ref");
+ else if (TAG_INSERTVIOLATIONS.equals(name)) {
+ List violations = (List) request.getAttribute(AbstractPreceptorAction.PRECEPTORVIOLATIONS);
+ if (violations != null) {
+ for (Iterator it = violations.iterator(); it.hasNext();) {
+ Constraint constraint = (Constraint) it.next();
+ super.startElement(uri, "constraint", prefix + ":" + "constraint", NOATTR);
+ String v = String.valueOf(constraint);
+ super.characters(v.toCharArray(), 0, v.length());
+ super.endElement(uri, "constraint", prefix + ":" + "constraint");
+ }
+ }
+ }
+ else if (TAG_INSTANCE.equals(name)) {
+ if (session != null) {
+ String id = attributes.getValue(TAG_INSTANCE_ATTR_ID);
+ defaultInstance = (Instance) session.getAttribute(id);
+ if (defaultInstance != null) {
+ log.debug("using default instance [id=" + String.valueOf(id) + "]");
+ }
+ else {
+ log.error("could not find instance [id=" + String.valueOf(id) + "]");
+ }
+ }
+ }
+ else if (TAG_OUTPUT.equals(name) ||
+ TAG_TEXTBOX.equals(name) ||
+ TAG_PASSWORD.equals(name) ||
+ TAG_SELECTBOOLEAN.equals(name) ||
+ TAG_SELECTONE.equals(name)) {
+ String ref = attributes.getValue(TAG_COMMON_ATTR_REF);
+ String id = attributes.getValue(TAG_COMMON_ATTR_INSTANCE);
+
+ getLogger().debug("[" + String.valueOf(name) + "] getting value from [" + String.valueOf(ref) + "]");
+
+ if (ref != null) {
+ Instance instance = defaultInstance;
+
+ if (id != null) {
+ if (session != null) {
+ instance = (Instance) session.getAttribute(id);
+ if (instance != null) {
+ log.debug("using instance [id=" + String.valueOf(id) + "]");
+ }
+ else {
+ log.error("could not find instance [id=" + String.valueOf(id) + "]");
+ }
+ }
+ }
+ super.startElement(uri, name, raw, attributes);
+ try {
+ value = instance.getValue(ref);
+
+ getLogger().debug("[" + String.valueOf(ref) + "] = " + String.valueOf(value));
+
+ super.startElement(uri, "value", prefix + ":" + "value", NOATTR);
+ if (value != null) {
+ String v = String.valueOf(value);
+ super.characters(v.toCharArray(),0,v.length());
+ }
+ super.endElement(uri, "value", prefix + ":" + "value");
+ }
+ catch (InvalidXPathSyntaxException e) {
+ throw new SAXException(e);
+ }
+ catch (NoSuchNodeException e) {
+ //throw new SAXException(e);
+ }
+ }
+ else {
+ throw new SAXException("[" + String.valueOf(name) + "] needs an \"" + TAG_COMMON_ATTR_REF + "\" attribute");
+ }
+ }
+ else if (TAG_SELECTMANY.equals(name)) {
+ //NYI
+ throw new SAXException("NYI");
+ }
+ else if (TAG_BUTTON.equals(name)) {
+ //NYI
+ super.startElement(uri, name, raw, attributes);
+ }
+ else {
+ getLogger().error("unknown element [" + String.valueOf(name) + "]");
+ super.startElement(uri, name, raw, attributes);
}
}
else {
@@ -71,9 +243,27 @@
public void endElement(String uri, String name, String raw) throws SAXException {
if (NS.equals(uri)) {
- if (TAG_INSTANCE.equals(name)) {
+ if (TAG_INSERTINSTANCE.equals(name)) {
+ }
+ else if (TAG_INSERTVIOLATIONS.equals(name)) {
+ }
+ else if (TAG_INSTANCE.equals(name)) {
+ }
+ else if (TAG_OUTPUT.equals(name) ||
+ TAG_TEXTBOX.equals(name) ||
+ TAG_PASSWORD.equals(name) ||
+ TAG_SELECTBOOLEAN.equals(name) ||
+ TAG_SELECTONE.equals(name) ) {
+ super.endElement(uri, name, raw);
+ }
+ else if (TAG_SELECTMANY.equals(name)) {
+ }
+ else if (TAG_BUTTON.equals(name)) {
+ super.endElement(uri, name, raw);
}
else {
+ getLogger().error("unknown element [" + String.valueOf(name) + "]");
+ super.endElement(uri, name, raw);
}
}
else {
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org