Hello Alexander,

On Monday 18 November 2002 09:54, Alexander Peters wrote:
>
> i'm trying to get cocoon using jakarta-slide as repository for the xml
> documents. While running the slide sample in the cvs/scratchpad
> (11.11.2002) i recognized that the sample is losing the principal-data at
> some places. For example:
>
> sitemap.xmap
> --------------
>      <map:match pattern="view/**">
> -      <map:read src="slide://{1}?cocoon-principal={../ID}"/>
> +      <map:read src="slide://{1}?cocoon-source-principal={../ID}"/>
>      </map:match>

Okay, this should fix the first problem. 

> src/scratchpad/src/org/apache/cocoon/generation/SourceDescriptionGenerator

However SourceDescriptionGenerator does not forward the query string to its
children, so they don't get the principal. I would success the attached 
changes.


Martin


Index: SourceDescriptionGenerator.java
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/generation/SourceDescriptionGenerator.java,v
retrieving revision 1.14
diff -u -r1.14 SourceDescriptionGenerator.java
--- SourceDescriptionGenerator.java	22 Aug 2002 13:47:14 -0000	1.14
+++ SourceDescriptionGenerator.java	18 Nov 2002 15:54:18 -0000
@@ -167,6 +167,9 @@
     /** Traversed source for the keys and validities */
     private Hashtable cachedsources = new Hashtable();
 
+    /** The queryString of the location including the "?" */ 
+    private String queryString;
+
     /**
      * Set the <code>SourceResolver</code>, objectModel <code>Map</code>,
      * the source and sitemap <code>Parameters</code> used to process the request.
@@ -174,6 +177,14 @@
     public void setup(SourceResolver resolver, Map objectModel, String location, Parameters parameters)
         throws ProcessingException, SAXException, IOException {
 
+	int idx = location.indexOf('?');
+	if (idx != -1) {
+	    this.queryString = location.substring(idx);
+	    location = location.substring(0,idx);
+	} else {
+	    this.queryString = "";
+	}	
+
         super.setup(resolver, objectModel, location, parameters);
 
         this.properties = parameters.getParameterAsBoolean("properties", true);
@@ -235,7 +246,7 @@
     private void collectSources(Hashtable sources, String uri, int deep) {
         Source source = null;
         try {
-            source = this.resolver.resolveURI(uri);
+            source = this.resolver.resolveURI(uri + this.queryString);   		
         } catch (Exception e) {
             getLogger().warn("Could not retrieve source with the id '"+uri+"'", e); 
             return;
@@ -498,7 +509,8 @@
      * All instance variables are set to <code>null</code>.
      */
     public void recycle() {
-
+	this.queryString = null;
+	
         Object uri;
         for (Enumeration e = cachedsources.keys(); e.hasMoreElements();) {
             uri = e.nextElement();

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to