[prev in list] [next in list] [prev in thread] [next in thread]
List: xml-cocoon-cvs
Subject: cvs commit: xml-cocoon/src/org/apache/cocoon Constants.java
From: giacomo () locus ! apache ! org
Date: 2000-12-30 21:33:13
[Download RAW message or body]
giacomo 00/12/30 13:33:12
Modified: src/org/apache/cocoon/components/language/markup/sitemap/java
Tag: xml-cocoon2 sitemap.xsl
src/org/apache/cocoon/environment Tag: xml-cocoon2
Environment.java AbstractEnvironment.java
src/org/apache/cocoon/environment/http Tag: xml-cocoon2
HttpEnvironment.java
src/org/apache/cocoon Tag: xml-cocoon2 Constants.java
Log:
First implementation of a rudimentary action framework.
The new elements are:
action-sets which holds the definitions of several actions-set.
An action-set holds several actions which can optionally refer to an action suplied \
from the Environment. Details are explained in the \
xdocs/drafts/sitemap-working-draft.xmap file.
Revision Changes Path
No revision
No revision
1.1.2.73 +166 -10 \
xml-cocoon/src/org/apache/cocoon/components/language/markup/sitemap/java/Attic/sitemap.xsl
Index: sitemap.xsl
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/sitemap/java/Attic/sitemap.xsl,v
retrieving revision 1.1.2.72
retrieving revision 1.1.2.73
diff -u -r1.1.2.72 -r1.1.2.73
--- sitemap.xsl 2000/12/15 20:35:11 1.1.2.72
+++ sitemap.xsl 2000/12/30 21:33:08 1.1.2.73
@@ -78,7 +78,7 @@
*
* @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
* @author <a href="mailto:bloritsch@apache.org">Berin \
Loritsch</a>
- * @version CVS $Revision: 1.1.2.72 $ $Date: 2000/12/15 20:35:11 $
+ * @version CVS $Revision: 1.1.2.73 $ $Date: 2000/12/30 21:33:08 $
*/
public class <xsl:value-of select="@file-name"/> extends AbstractSitemap {
static final String LOCATION = "<xsl:value-of select="translate(@file-path, \
'/', '.')"/>.<xsl:value-of select="@file-name"/>"; @@ -269,6 +269,41 @@
}
</xsl:for-each>
+ <!-- generate methods for every map:action-set element -->
+ <xsl:for-each select="/map:sitemap/map:action-sets/map:action-set">
+ /**
+ * This is the method to process the "<xsl:value-of select="@name"/>" \
action-set of the requested resource + * @param cocoon_action A \
<code>String</code> holding the requested action + * @param \
listOfMaps A <code>List</code> of Maps holding replacement values for src \
attributes + * @param environment The <code>Environment</code> \
requesting a resource + * @param objectModel The \
<code>Map</code> containing the environments model objects + * \
@return Wether the request has been processed or not + * @exception \
Exception If an error occurs during request evaluation and production + */
+ private Map action_set_<xsl:value-of select="translate(@name, '- ', \
'__')"/> (String cocoon_action, List listOfMaps, Environment environment, Map \
objectModel, String src, Parameters param) + throws Exception {
+ Map map;
+ Map allMap = new HashMap();
+ Parameters nparam;
+ <xsl:for-each select="map:act">
+ map = null;
+ <xsl:choose>
+ <xsl:when test="@action">
+ if ("<xsl:value-of select="@action"/>".equals(cocoon_action)) {
+ <xsl:apply-templates select="." mode="set"/>
+ if (map != null) allMap.putAll (map);
+ }
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="." mode="set"/>
+ if (map != null) allMap.putAll (map);
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ return allMap;
+ }
+ </xsl:for-each>
+
/**
* Process to producing the output to the specified \
<code>OutputStream</code>.
*/
@@ -286,6 +321,7 @@
Parameters param;
Map objectModel = environment.getObjectModel();
String cocoon_view = environment.getView();
+ String cocoon_action = environment.getAction();
<!-- process the pipelines -->
<!-- for each pipeline element generate a try/catch block -->
@@ -398,7 +434,7 @@
log.debug("Matched <xsl:value-of select="$matcher-name"/>");
listOfMaps.add (map);
<xsl:apply-templates/>
- listOfMaps.remove (map);
+ listOfMaps.remove (listOfMaps.size()-1);
}
</xsl:template> <!-- match="map:match" -->
@@ -484,14 +520,14 @@
</xsl:for-each>
</xsl:template> <!-- match="map:select" -->
- <!-- processing of an act element -->
- <xsl:template match="map:act">
+ <!-- processing of an act element having a type attribute -->
+ <xsl:template match="map:act[@type]">
<!-- get the type of action used -->
<xsl:variable name="action-type">
<xsl:call-template name="get-parameter">
<xsl:with-param name="parname">type</xsl:with-param>
- <xsl:with-param name="default"><xsl:value-of \
select="/map:sitemap/map:components/map:actions/@default"/></xsl:with-param> + \
<xsl:with-param name="default" value=""/> </xsl:call-template>
</xsl:variable>
@@ -530,19 +566,139 @@
<!-- generate the invocation of the act method of the action component -->
<xsl:choose>
- <xsl:when test="./*">
+ <xsl:when test="./*[namespace-uri()='http://apache.org/cocoon/sitemap/1.0']">
if ((map = <xsl:value-of select="$action-name"/> (environment, objectModel, \
substitute(listOfMaps,<xsl:value-of select="$action-source"/>), <xsl:value-of \
select="$component-param"/>)) != null) {
- log.debug("Action <xsl:value-of select="translate($action-name,'"',' \
')"/>"); + log.debug("Action <xsl:value-of \
select="translate($action-name,'"',' ')"/>"); listOfMaps.add (map);
<xsl:apply-templates/>
- listOfMaps.remove(map);
+ listOfMaps.remove(listOfMaps.size()-1);
}
</xsl:when>
<xsl:otherwise>
map = <xsl:value-of select="$action-name"/> (environment, objectModel, \
substitute(listOfMaps,<xsl:value-of select="$action-source"/>), <xsl:value-of \
select="$component-param"/>); </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template> <!-- match="map:act[@type]" -->
+
+ <!-- processing of an act element having a type attribute -->
+ <xsl:template match="map:act[@type]" mode="set">
+
+ <!-- get the type of action used -->
+ <xsl:variable name="action-type">
+ <xsl:call-template name="get-parameter">
+ <xsl:with-param name="parname">type</xsl:with-param>
+ <xsl:with-param name="default" value=""/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- get the source parameter for the Action -->
+ <xsl:variable name="action-source">
+ <xsl:call-template name="get-parameter-as-string">
+ <xsl:with-param name="parname">src</xsl:with-param>
+ <xsl:with-param name="default">src</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- gets the string how the action is to be invoced in java code -->
+ <xsl:variable name="action-name">
+ ((Action)((ComponentHolder)super.sitemapComponentManager.lookup("action:<xsl:value-of \
select="$action-type"/>")).get()).act + </xsl:variable>
+
+ <!-- test if we have to define parameters for this action -->
+ <xsl:if test="count(parameter)>0">
+ nparam = new Parameters ();
+ </xsl:if>
+
+ <!-- generate the value used for the parameter argument in the invocation of \
the act method of this action --> + <xsl:variable name="component-param">
+ <xsl:choose>
+ <xsl:when test="count(parameter)>0">
+ nparam
+ </xsl:when>
+ <xsl:otherwise>
+ param
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- collect the parameters -->
+ <xsl:apply-templates select="parameter"/>
+
+ <!-- generate the invocation of the act method of the action component -->
+ <xsl:choose>
+ <xsl:when test="./*[namespace-uri()='http://apache.org/cocoon/sitemap/1.0']">
+ if ((map = <xsl:value-of select="$action-name"/> (environment, \
objectModel, substitute(listOfMaps,<xsl:value-of select="$action-source"/>), \
<xsl:value-of select="$component-param"/>)) != null) { + log.debug("Action \
<xsl:value-of select="translate($action-name,'"',' ')"/>"); + \
listOfMaps.add (map); + <xsl:apply-templates/>
+ listOfMaps.remove(listOfMaps.size()-1);
+ }
+ </xsl:when>
+ <xsl:otherwise>
+ map = <xsl:value-of select="$action-name"/> (environment, objectModel, \
substitute(listOfMaps,<xsl:value-of select="$action-source"/>), <xsl:value-of \
select="$component-param"/>); + </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template> <!-- match="map:act[@type]" mode="set" -->
+
+ <!-- processing of an act element having a set attribute -->
+ <xsl:template match="map:act[@set]">
+
+ <!-- get the type of action used -->
+ <xsl:variable name="action-set">
+ <xsl:call-template name="get-parameter">
+ <xsl:with-param name="parname">set</xsl:with-param>
+ <xsl:with-param name="default" value=""/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- get the source parameter for the Action -->
+ <xsl:variable name="action-source">
+ <xsl:call-template name="get-parameter-as-string">
+ <xsl:with-param name="parname">src</xsl:with-param>
+ <xsl:with-param name="default">null</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <!-- gets the string how the action is to be invoced in java code -->
+ <xsl:variable name="action-name">
+ action_set_<xsl:value-of select="$action-set"/>
+ </xsl:variable>
+
+ <!-- test if we have to define parameters for this action -->
+ <xsl:if test="count(parameter)>0">
+ param = new Parameters ();
+ </xsl:if>
+
+ <!-- generate the value used for the parameter argument in the invocation of \
the act method of this action --> + <xsl:variable name="component-param">
+ <xsl:choose>
+ <xsl:when test="count(parameter)>0">
+ param
+ </xsl:when>
+ <xsl:otherwise>
+ emptyParam
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- collect the parameters -->
+ <xsl:apply-templates select="parameter"/>
+
+ <!-- generate the invocation of the act method of the action component -->
+ <xsl:choose>
+ <xsl:when test="./*[namespace-uri()='http://apache.org/cocoon/sitemap/1.0']">
+ if ((map = <xsl:value-of select="$action-name"/> (cocoon_action, \
listOfMaps, environment, objectModel, substitute(listOfMaps,<xsl:value-of \
select="$action-source"/>), <xsl:value-of select="$component-param"/>)) != null) { + \
log.debug("Action <xsl:value-of select="translate($action-name,'"',' ')"/>"); + \
listOfMaps.add (map); + <xsl:apply-templates/>
+ listOfMaps.remove(listOfMaps.size()-1);
+ }
+ </xsl:when>
+ <xsl:otherwise>
+ map = <xsl:value-of select="$action-name"/> (cocoon_action, listOfMaps, \
environment, objectModel, substitute(listOfMaps,<xsl:value-of \
select="$action-source"/>), <xsl:value-of select="$component-param"/>); + \
</xsl:otherwise> </xsl:choose>
- </xsl:template> <!-- match="map:act" -->
+ </xsl:template> <!-- match="map:act[@set]" -->
<!-- generate the code to invoke a generator -->
<xsl:template match="map:generate">
@@ -667,7 +823,7 @@
</xsl:template> <!-- match="map:label" -->
<!-- collect parameter definitions -->
- <xsl:template match="map:pipeline//parameter">
+ <xsl:template match="map:pipeline//parameter | map:action-set//parameter">
param.setParameter ("<xsl:value-of select="@name"/>", substitute(listOfMaps, \
"<xsl:value-of select="@value"/>")); </xsl:template>
No revision
No revision
1.1.2.13 +7 -2 \
xml-cocoon/src/org/apache/cocoon/environment/Attic/Environment.java
Index: Environment.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/environment/Attic/Environment.java,v
retrieving revision 1.1.2.12
retrieving revision 1.1.2.13
diff -u -r1.1.2.12 -r1.1.2.13
--- Environment.java 2000/12/11 16:06:47 1.1.2.12
+++ Environment.java 2000/12/30 21:33:10 1.1.2.13
@@ -20,7 +20,7 @@
* Base interface for an environment abstraction
*
* @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
- * @version CVS $Revision: 1.1.2.12 $ $Date: 2000/12/11 16:06:47 $
+ * @version CVS $Revision: 1.1.2.13 $ $Date: 2000/12/30 21:33:10 $
*/
public interface Environment extends EntityResolver {
@@ -28,12 +28,17 @@
/**
* Get the URI to process
*/
- String getUri();
+ String getURI();
/**
* Get the view to process
*/
String getView();
+
+ /**
+ * Get the action to process
+ */
+ String getAction();
/**
* Change the context from uriprefix to context
1.1.2.7 +33 -2 \
xml-cocoon/src/org/apache/cocoon/environment/Attic/AbstractEnvironment.java
Index: AbstractEnvironment.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/environment/Attic/AbstractEnvironment.java,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -r1.1.2.6 -r1.1.2.7
--- AbstractEnvironment.java 2000/11/15 19:29:37 1.1.2.6
+++ AbstractEnvironment.java 2000/12/30 21:33:10 1.1.2.7
@@ -41,6 +41,9 @@
/** The View requested */
protected String view = null;
+ /** The Action requested */
+ protected String action = null;
+
/** The Context path */
protected URL context = null;
@@ -51,8 +54,16 @@
* Constructs the abstract enviornment
*/
public AbstractEnvironment(String uri, String view, String context)
+ throws MalformedURLException {
+ this(uri, view, new File(context), null);
+ }
+
+ /**
+ * Constructs the abstract enviornment
+ */
+ public AbstractEnvironment(String uri, String view, String context, String \
action) throws MalformedURLException {
- this(uri, view, new File(context));
+ this(uri, view, new File(context), action);
}
/**
@@ -60,9 +71,18 @@
*/
public AbstractEnvironment(String uri, String view, File context)
throws MalformedURLException {
+ this(uri, view, context, null);
+ }
+
+ /**
+ * Constructs the abstract enviornment
+ */
+ public AbstractEnvironment(String uri, String view, File context, String \
action) + throws MalformedURLException {
this.uri = uri;
this.view = view;
this.context = context.toURL();
+ this.action = action;
this.objectModel = new HashMap();
}
@@ -71,7 +91,7 @@
/**
* Returns the uri in progress. The prefix is stripped off
*/
- public String getUri() {
+ public String getURI() {
return this.uri;
}
@@ -90,6 +110,10 @@
this.context = f.toURL();
}
} else {
+ log.error("The current URI ("
+ + uri + ") doesn't start with given prefix ("
+ + prefix + ")"
+ );
throw new RuntimeException("The current URI ("
+ uri + ") doesn't start with given prefix ("
+ prefix + ")"
@@ -109,6 +133,13 @@
*/
public String getView() {
return this.view;
+ }
+
+ /**
+ * Returns the request action
+ */
+ public String getAction() {
+ return this.action;
}
// Response methods
No revision
No revision
1.1.2.18 +1 -1 \
xml-cocoon/src/org/apache/cocoon/environment/http/Attic/HttpEnvironment.java
Index: HttpEnvironment.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/environment/http/Attic/HttpEnvironment.java,v
retrieving revision 1.1.2.17
retrieving revision 1.1.2.18
diff -u -r1.1.2.17 -r1.1.2.18
--- HttpEnvironment.java 2000/12/18 16:55:19 1.1.2.17
+++ HttpEnvironment.java 2000/12/30 21:33:11 1.1.2.18
@@ -49,7 +49,7 @@
HttpServletResponse response,
ServletContext servletContext)
throws MalformedURLException, IOException {
- super(uri, request.getParameter(Cocoon.VIEW_PARAM), \
servletContext.getRealPath("/")); + super(uri, \
request.getParameter(Cocoon.VIEW_PARAM), servletContext.getRealPath("/"), \
request.getParameter(Cocoon.ACTION_PARAM)); this.request = new HttpRequest (request, \
this); this.servletRequest = request;
this.response = new HttpResponse (response);
No revision
No revision
1.1.2.13 +2 -1 xml-cocoon/src/org/apache/cocoon/Attic/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/Attic/Constants.java,v
retrieving revision 1.1.2.12
retrieving revision 1.1.2.13
diff -u -r1.1.2.12 -r1.1.2.13
--- Constants.java 2000/12/06 19:19:51 1.1.2.12
+++ Constants.java 2000/12/30 21:33:12 1.1.2.13
@@ -10,7 +10,7 @@
/**
* @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.1.2.12 $ $Date: 2000/12/06 19:19:51 $
+ * @version CVS $Revision: 1.1.2.13 $ $Date: 2000/12/30 21:33:12 $
*/
public interface Constants {
@@ -24,6 +24,7 @@
String RELOAD_PARAM = "cocoon-reload";
String SHOWTIME_PARAM = "cocoon-showtime";
String VIEW_PARAM = "cocoon-view";
+ String ACTION_PARAM = "cocoon-action";
String TEMPDIR_PROPERTY = "org.apache.cocoon.properties.tempdir";
String DEFAULT_CONTEXT_DIR = "./webapp";
----------------------------------------------------------------------
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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic