haul        2003/01/31 08:05:47

  Modified:    src/blocks/databases/samples/mod-db database.xml
                        edit-groups.xsp schema.sql sitemap.xmap
                        user-list.xsp
  Added:       src/blocks/databases/samples/mod-db file-upload-blob.xsp
  Log:
  sample cosmetics
  new file upload sample thanks to Geoff Howard
  
  Revision  Changes    Path
  1.2       +37 -3     xml-cocoon2/src/blocks/databases/samples/mod-db/database.xml
  
  Index: database.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/blocks/databases/samples/mod-db/database.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- database.xml      17 Jan 2003 11:22:37 -0000      1.1
  +++ database.xml      31 Jan 2003 16:05:47 -0000      1.2
  @@ -44,8 +44,16 @@
            <key name="uid" type="int">
               <!-- Next we have two different modes: "request" and
               "attrib". See below for explanation. -->
  -            <mode name="request-param" parameter="user_groups.uid" type="request"/>
  -            <mode name="request-attr" 
parameter="org.apache.cocoon.components.modules.output.OutputModule:user.uid[0]" 
type="attrib"/>
  +            <mode name="request-param" type="request"/>
  +            <mode name="request-attr" type="attrib">
  +               
<parameter>org.apache.cocoon.components.modules.output.OutputModule:user.uid[0]</parameter>
  +               <!-- use a different parameter name to query than the automatically
  +                    generated one (here "user_groups.uid") This is a feature of 
  +                    the "request-attr" input module but widely available.
  +                    Another option would be to use the SimpleMappingMetaModule
  +                    instead.
  +               -->
  +            </mode>
               <!--  note here, that the actual parameter has a row index
               to it. We don't expect to insert more than one user plus
               her groups at any time, so we append just "[0]". However,
  @@ -76,7 +84,7 @@
   
               -->
               <!-- special mode type "all" is used for all operations -->
  -            <mode name="request-param" parameter="user_groups.gid" type="all"/>
  +            <mode name="request-param" type="all"/>
            </key>
         </keys>
      </table>
  @@ -92,6 +100,28 @@
         </values>   
      </table>
      
  +   <table name="media">
  +      <keys>
  +         <key name="id" type="int" autoincrement="true">
  +            <mode name="auto" type="autoincr"/>
  +         </key>
  +      </keys>
  +      <values>
  +         <value name="image" type="binary">
  +           <mode name="raw-request-param" type="add"/>
  +           <!-- for multipart form uploads it is important to use the 
raw-request-param
  +                module since that does not cast the parameter to String and does no
  +                encoding conversions.
  +           -->
  +         </value>
  +         <value name="mimetype" type="string">
  +           <mode name="jxpath" type="add">
  +              <parameter>mimeType</parameter>
  +              <input-module name="raw-request-param" parameter="media.image"/>
  +           </mode>
  +         </value>
  +      </values>   
  +   </table>
   
      <!-- the existing DB actions try to work on all tables listed in
           this descriptor file. Just like some other newer actions this
  @@ -106,6 +136,10 @@
   
      <table-set name="groups">
         <table name="groups"/>
  +   </table-set>
  +
  +   <table-set name="media">
  +      <table name="media" others-mode="add"/>
      </table-set>
   
      <table-set name="user+groups">
  
  
  
  1.2       +7 -0      xml-cocoon2/src/blocks/databases/samples/mod-db/edit-groups.xsp
  
  Index: edit-groups.xsp
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/blocks/databases/samples/mod-db/edit-groups.xsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- edit-groups.xsp   17 Jan 2003 11:22:37 -0000      1.1
  +++ edit-groups.xsp   31 Jan 2003 16:05:47 -0000      1.2
  @@ -13,6 +13,13 @@
     </xsp:structure>
     
     <page>
  +    <resources>
  +       <resource type="file" href="database.xml">Descriptor</resource>
  +       <resource type="file" href="schema.sql">Schema</resource>
  +       <resource type="doc" 
href="userdocs/actions/database-actions.html">Actions</resource>
  +       <resource type="doc" href="userdocs/xsp/esql.html">ESQL</resource>
  +    </resources>
  +
       <title>edit-groups</title>
       
   
  
  
  
  1.3       +8 -0      xml-cocoon2/src/blocks/databases/samples/mod-db/schema.sql
  
  Index: schema.sql
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/blocks/databases/samples/mod-db/schema.sql,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- schema.sql        17 Jan 2003 23:47:19 -0000      1.2
  +++ schema.sql        31 Jan 2003 16:05:47 -0000      1.3
  @@ -25,3 +25,11 @@
        foreign key (uid) references user(uid),
        foreign key (gid) references groups(gid)
   );
  +
  +create table media (
  +     id integer identity primary key,
  +     image varbinary,
  +     mimetype varchar(50),
  +     primary key (id)
  +);
  +
  
  
  
  1.2       +52 -23    xml-cocoon2/src/blocks/databases/samples/mod-db/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/blocks/databases/samples/mod-db/sitemap.xmap,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- sitemap.xmap      17 Jan 2003 11:22:37 -0000      1.1
  +++ sitemap.xmap      31 Jan 2003 16:05:47 -0000      1.2
  @@ -82,21 +82,39 @@
             <map:redirect-to uri="user-list"/>
          </map:match>
   
  +        <map:match pattern="file-upload-test">
  +            <map:generate type="serverpages" src="file-upload-blob.xsp"/>
  +            <map:serialize type="xml"/>
  +        </map:match>
  +        
  +        <!--  Deliver images from database -->
  +        <map:match pattern="image/*">
  +            <map:read type="databasereader" src="{1}" mime-type="image/jpg">
  +                <!-- option sitemap parameters -->
  +                <map:parameter name="table" value="media"/>
  +                <map:parameter name="image" value="image"/>
  +                <map:parameter name="key" value="id"/>
  +                <map:parameter name="type-column" value="mimetype"/>
  +             </map:read>
  +        </map:match>
  +        
   
          <map:match pattern="*">
   
  -          <!--
  +       <!--
            First, the logic to do all the database operations. Note,
            that we do no parameter validation here, just see if some
            parameters are present. For a real application, you'd
            want to check their values as well. Note too, that in a
            more complex setup you'd want to use an action set for
            this rather than spell it out everywhere.
  +         Or even better, call these actions from the flow layer!
  +         That way it is easier to react to error conditions.
         -->
   
  -          <!-- ______________________________ inserts 
______________________________ -->
  +      <!-- ______________________________ inserts ______________________________ -->
   
  -          <!-- add new groups to a user's groups -->
  +      <!-- add new groups to a user's groups -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="add-groups user_groups.uid 
user_groups.gid"/>
            <map:act type="mod-db-add">
  @@ -104,83 +122,94 @@
            </map:act>
         </map:act>
   
  -          <!-- add onw new group -->
  +      <!-- add onw new group -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="add-group groups.gname"/>
            <map:act type="mod-db-add">
  -        <map:parameter name="table-set" value="groups"/>
  +            <map:parameter name="table-set" value="groups"/>
            </map:act>
         </map:act>
        
  -          <!-- add one new user -->
  +      <!-- add one new user -->
         <!-- Actually, this one is not used anymore. The one below
              works well when no groups are supplied.
          -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="add-user user.name user.firstname 
user.uname"/>
            <map:act type="mod-db-add">
  -        <map:parameter name="table-set" value="user"/>
  +            <map:parameter name="table-set" value="user"/>
            </map:act>
         </map:act>
        
  -          <!-- add one new user plus groups -->
  +      <!-- add one new user plus groups -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="add-user-groups user.name 
user.firstname user.uname"/>
            <map:act type="mod-db-add">
  -        <map:parameter name="table-set" value="user+groups"/>
  +            <map:parameter name="table-set" value="user+groups"/>
            </map:act>
         </map:act>
        
  -          <!-- ______________________________ updates 
______________________________ -->
  +      <!-- upload binary data -->
  +      <map:act type="req-params">
  +         <map:parameter name="parameters" value="add-image"/> <!-- media.image 
media.id -->
  +         <map:act type="mod-db-add">
  +            <map:parameter name="table-set" value="media"/>
  +         </map:act>
  +      </map:act>
  +
  +      <!-- ______________________________ updates ______________________________ -->
   
  -          <!-- update one user -->
  +      <!-- update one user -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="upd-user user.uid user.name 
user.firstname user.uname"/>
            <map:act type="mod-db-upd">
  -        <map:parameter name="table-set" value="user"/>
  +            <map:parameter name="table-set" value="user"/>
            </map:act>
         </map:act>
        
   
  -          <!-- update one group -->
  +      <!-- update one group -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="upd-group groups.gid 
groups.gname"/>
            <map:act type="mod-db-upd">
  -        <map:parameter name="table-set" value="groups"/>
  +            <map:parameter name="table-set" value="groups"/>
            </map:act>
         </map:act>
        
  -          <!-- ______________________________ deletes 
______________________________ -->
  +      <!-- ______________________________ deletes ______________________________ -->
   
  -          <!-- delete one user -->
  +      <!-- delete one user -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="del-user user.uid"/>
            <map:act type="mod-db-del">
  -        <map:parameter name="table-set" value="user"/>
  +            <map:parameter name="table-set" value="user"/>
            </map:act>
         </map:act>
   
  -          <!-- delete one group -->
  +      <!-- delete one group -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="del-group groups.gid"/>
            <map:act type="mod-db-del">
  -        <map:parameter name="table-set" value="groups"/>
  +            <map:parameter name="table-set" value="groups"/>
            </map:act>
         </map:act>
        
  -          <!-- delete groups from a user's groups -->
  +      <!-- delete groups from a user's groups -->
         <map:act type="req-params">
            <map:parameter name="parameters" value="remove-groups user_groups.uid 
user_groups.gid"/>
            <map:act type="mod-db-del">
  -        <map:parameter name="table-set" value="user_groups"/>
  +            <map:parameter name="table-set" value="user_groups"/>
            </map:act>
         </map:act>
   
  -          <!-- ______________________________ content  
______________________________ -->
  +      <!-- ______________________________ content  ______________________________ 
-->
   
         <map:generate type="serverpages" src="{1}.xsp"/>
         <map:transform src="context://samples/stylesheets/dynamic-page2html.xsl">
  -         <map:parameter name="view-source" 
value="samples/databases/mod-db/{1}.xsp"/>
  +         <map:parameter name="servletPath" value="{request:servletPath}"/>
  +         <map:parameter name="sitemapURI" value="{request:sitemapURI}"/>
  +         <map:parameter name="contextPath" value="{request:contextPath}"/>
  +         <map:parameter name="file" value=".xsp"/>
         </map:transform>
         <map:transform src="stupid.xsl"/>
         <map:serialize/>
  
  
  
  1.2       +8 -1      xml-cocoon2/src/blocks/databases/samples/mod-db/user-list.xsp
  
  Index: user-list.xsp
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/blocks/databases/samples/mod-db/user-list.xsp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- user-list.xsp     17 Jan 2003 11:22:37 -0000      1.1
  +++ user-list.xsp     31 Jan 2003 16:05:47 -0000      1.2
  @@ -11,7 +11,14 @@
     </xsp:structure>
       
     <page>
  -    
  +
  +    <resources>
  +       <resource type="file" href="database.xml">Descriptor</resource>
  +       <resource type="file" href="schema.sql">Schema</resource>
  +       <resource type="doc" 
href="userdocs/actions/database-actions.html">Actions</resource>
  +       <resource type="doc" href="userdocs/xsp/esql.html">ESQL</resource>
  +    </resources>
  +
       <title>user-list</title>
       
       <content>
  
  
  
  1.1                  
xml-cocoon2/src/blocks/databases/samples/mod-db/file-upload-blob.xsp
  
  Index: file-upload-blob.xsp
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <xsp:page language="java"
      xmlns:xsp="http://apache.org/xsp";
          xmlns:esql="http://apache.org/cocoon/SQL/v2";
      xmlns:xsp-request="http://apache.org/xsp/request/2.0";
    >
    <!-- Need this import for dumping the request parameters -->
    <xsp:structure>
      <xsp:include>java.util.Enumeration</xsp:include>
    </xsp:structure>
    
    <page>
      <resources>
         <resource type="file" href="database.xml">Descriptor</resource>
         <resource type="file" href="schema.sql">Schema</resource>
         <resource type="doc" 
href="userdocs/actions/database-actions.html">Actions</resource>
         <resource type="doc" href="userdocs/xsp/esql.html">ESQL</resource>
      </resources>
  
      <title>file-upload-blob</title>
  
     <!-- create image tags out of the images stored in the database, the browser will 
subsequently
          request those images and they will be served by a special pipeline in the 
sitemap using 
          the database reader component
     -->    
     <esql:connection>
        <esql:pool>personnel</esql:pool>
      
        <esql:execute-query>
               <esql:query>select media.id from media</esql:query>
               <esql:results>
                 <esql:row-results>
                   <img><xsp:attribute name="src">image/<esql:get-string 
column="id"/></xsp:attribute>
                   </img>
                 </esql:row-results>
               </esql:results>
               <esql:no-results>no images yet</esql:no-results>
        </esql:execute-query>
      </esql:connection>
       
  
        <h1>Upload Media</h1>
        <p>What's happening?  This example interacts with a simple database schema, 
set up by 
        default in the sample "personnel" hsql database installed with the database 
block.  There 
        is one table "media" with two fields: a primary key, and a binary field 
"image".  
        When a file upload is received from the simple form on this page, the modular 
db action 
        auto increments the primary key, and loads the binary file contents into the 
column (declared
        as type="binary" in database.xml).  That's it.</p>
        <p>Additionally, when this page is loaded, esql queries the media table and 
places an image tag 
        for each row, using "primarykeyvalue".jpg for the src.  The sitemap is 
configured to serve 
          *.jpg using the database reader (declared in the root database samples 
sitemap) which simply
          retrieves the binary data from the database and streams it to the 
browser.</p>
  
  
        <table cellpadding="2" cellspacing="2" border="0">
          <tbody>
            <form method="POST" enctype="multipart/form-data">
              <tr>
                <td valign="Top" align="Right">File (must be an image)</td>
                <td valign="Top">
                  <input type="file" name="media.image"/>
                </td>
              <td>
                <input type="submit" name="add-image" value="add image"/>
              </td>
            </tr>
          </form>
          </tbody>
          </table>
  
  
  
      <!-- the following is absolutely irrelevant for the example. It only serves to 
show what happens
           during the processing e.g. what parameters were sent to the server and what 
request attributes
           were set by the database actions. You might find such information valuable 
when debugging your
           own applications :-) -->
      <hr/>
  
      <p><h3>Request Attributes</h3></p>
      <p>
        <table border="0">
          <tbody>
            <xsp:logic>{
               Enumeration e=request.getAttributeNames();
               while ( e.hasMoreElements() ) {
                   String attribute = (String) e.nextElement();
                   Object value = request.getAttribute(attribute);
                   <tr>
                     <td align="right"><xsp:expr>attribute</xsp:expr></td>
                     <td>="<xsp:expr>value</xsp:expr>"</td>
                   </tr>
               }
            }</xsp:logic>
          </tbody>
        </table>
      </p>
  
      <hr/>
  
      <p><h3>Request Parameters</h3></p>
      <p>
        <table border="0">
          <tbody>
            <xsp:logic>{
                 Enumeration e=request.getParameterNames();
                 while ( e.hasMoreElements() ) {
                     String attribute = (String) e.nextElement();
                     Object[] value = request.getParameterValues(attribute);
                     for (int i=0; i &lt; value.length; i++) {
                        <tr>
                          <td 
align="right"><xsp:expr>attribute</xsp:expr>[<xsp:expr>i</xsp:expr>]</td>
                          <td>="<xsp:expr>value[i]</xsp:expr>"</td>
                        </tr>
                     }
                 }
            }</xsp:logic>
          </tbody>
        </table>
      </p>
  
      <hr/>
  
    </page>
  
  </xsp:page>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to