You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@lenya.apache.org by Maciek Kaminski <ma...@tiger.com.pl> on 2005/01/03 18:09:56 UTC

inital document upload [was document upload]

Here is my first prototype of "initial document uploading".

The most important modification is in config/tasks/targets.xml, where
I've modified target create in to validate uploaded document and
replace with default one. Additionaly when uploaded file seems to be
in OpenOffice writer format it gets converted to xhtml by convert task
based on writer2latex:

    <target name="create">   
    <property name="create.parent-id" value=""/>
    <property name="create.child-id" value=""/>
    <property name="create.child-name" value=""/>
    <property name="create.init-file" value=""/>
    <property name="create.child-type" value=""/>
    <property name="create.doctype" value=""/>
    <property name="create.language" value=""/>
    <property name="create.title" value=""/>
    <property name="create.creator" value=""/>
    <property name="create.description" value=""/>
    <property name="create.subject" value=""/>
    <property name="create.publisher" value=""/>
    <property name="create.date" value=""/>
    <property name="create.rights" value=""/>
    <property name="create.columns" value=""/>
    <property name="create.userid" value=""/>
    <property name="create.ipaddress" value=""/>
    <property name="create.filename" value=""/>

    <echo>create-with-init-file: ${create.filename}</echo>
    <echo>create.doctype: ${create.doctype}</echo>

    <property name="document.file" value=""/>
    <mapdocumentidtofile
        area="${authoring.area}"
        documentid="${create.parent-id}/${create.child-id}"
        language="${create.language}"
        propertyname="document.file"
        />
        <!--
             Here conversion to html and validation takes place.
             I use here if task from ant contrib project
             (http://ant-contrib.sourceforge.net/)
             and convert task based on writer2latex project
             (http://www.hj-gym.dk/~hj/writer2latex/).
        -->
    <if>
        <and>
        <isset property="create.filename"/>
        <not><equals arg1="${create.filename}" arg2=""/></not>
        <equals arg1="${create.doctype}" arg2="xhtml"/>
        </and>
        <then>
        <if>
            <and>
            <contains string="${create.filename}" substring=".sxw"/>
            <equals arg1="${create.doctype}" arg2="xhtml"/>
            </and>
            <then>
                        <tempfile property="temp.file" suffix=".xhtml"/>
            <convertsxw
                inFile="${create.filename}"
                outFile="${temp.file}"
                outputFormat="xhtml"
                configFile="${pub.dir}/config/tasks/cleanxhtml.xml"/>
            <xslt in="${temp.file}"
                  out="${create.filename}"
                  force="true"
                  style="${pub.dir}/xslt/fixw2l.xslt"/>
                        <delete file="${temp.file}"/>
            </then>
            <else>
            <jing 
rngfile="${pub.dir}/config/doctypes/schemas/${create.doctype}.rng">
                <fileset file="{create.filename}"/>
            </jing>
            </else>
        </if>
        </then>
    </if>

    <taskdef name="create" 
classname="org.apache.lenya.cms.ant.DocumentCreatorTask"/>
    <create
        authoringpath="${authoring.dir}"
        area="${authoring.area}"
        parentid="${create.parent-id}"
        childid="${create.child-id}"
        childname="${create.child-name}"
        childtype="${create.child-type}"
        documenttype="${create.doctype}"
        language="${create.language}"/>

    <if>
        <and>
        <isset property="create.filename"/>
        <not><equals arg1="${create.filename}" arg2=""/></not>
        </and>
        <then>
        <move file="${create.filename}" tofile="${document.file}"/>     
        </then>
    </if>
   
    <!-- Init the workflow history -->
    <echo>init the workflow history with document-id: 
${create.parent-id}/${create.child-id}</echo>     
    <echo>with document-type: ${create.doctype}</echo>     
    <echo>with language: ${create.language}</echo>     
    <echo>with user ID: ${create.userid}</echo>     
    <echo>with IP address: ${create.ipaddress}</echo>     
    <init-history
        documentid="${create.parent-id}/${create.child-id}"
        documenttype="${create.doctype}"
        language="${create.language}"
        userid="${create.userid}"
        machineip="${create.ipaddress}"
        />
   
    <tempfile property="temp.file" destDir="work"/>
    <xslt in="${document.file}"
          out="${temp.file}"
          force="true"
          style="${pub.dir}/../../xslt/authoring/addMetaData.xsl">
        <param name="title" expression="${create.title}"/>
        <param name="creator" expression="${create.creator}"/>
        <param name="subject" expression="${create.subject}"/>
        <param name="description" expression="${create.description}"/>
        <param name="language" expression="${create.language}"/>
        <param name="publisher" expression="${create.publisher}"/>
        <param name="date" expression="${create.date}"/>
        <param name="rights" expression="${create.rights}"/>
        <param name="columns" expression="${create.columns}"/>
    </xslt>
    <move file="${temp.file}" tofile="${document.file}"/>
    </target>

To have documents uploaded the lenya/xslt/authoring/create.xsp had to be 
modified:
at line 134:
        <tr>
          <td class="lenya-entry-caption"><i18n:text>File 
Name</i18n:text>:</td><td><input class="lenya-form-element" type="file" 
name="properties.create.filename"/></td>
        </tr>

This prototype works but it is far from optimal solution. Here are the
problems that I need strategic advice on:  
- what idea lays behind puting cms routines into ant tasks?  
- should uploaded document validation and conversion be executed inside
targets.xml? It is rather part of document creation logic, no user 
interface,
 so from that point of view it should go to targets.xml.
But there is no graceful way (at least I don't know of any) to return 
validation
result back to user interface (i.e. sitemap).

Maciej Kaminski

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@lenya.apache.org
For additional commands, e-mail: user-help@lenya.apache.org