I'm trying to understand how to program a ContentInterceptor.

I have set up the Slide 2.0/Tomcat 5 bundle on a system running Red Hat 9 Linux (kernel 2.4.20). I can read and write to the repository successfully using several different WebDAV clients, including the Slide client. I have even added a few extra users.

I have written a simple ContentInterceptor, which is just supposed to show it is working. The source code is attached. I have installed the class file in $CATALINA_HOME/common/classes/edu/osu/music/csml/EmrContentInterceptor.class


Following the directions on the ContentInterceptor JavaDoc page (http://jakarta.apache.org/slide/javadoc-2.1/javadoc/index.html), I added the following lines to my Domain.xml file, just before </configuration>:


 <content-interceptor class="edu.osu.music.csml.EmrContentInterceptor">
                <parameter name="myParam1">someValue</parameter>
                <parameter name="myParam2">anotherValue</parameter>
 </content-interceptor>

My Domain.xml is also attached.

I have some indication that Slide knows about my ContentInterceptor, because if I delete the class file, it complains about the entry in Domain.xml.

With all this in place, Slide starts up normally, however, no mention of EmrContentInterceptor shows up in catalina.out, and I'm not getting any form of output from my class.

1) is there something else I need to do to make Slide actually use my class?

2) What should I be doing in my class to get a "Hello World!" output?




-- Well-groomed and washed go to the Assembly, though your clothes be not the best; of your shoes and pants be not ashamed, and still less of your horse -H�vam�l

P. Douglas Reeder   Systems Specialist, CSML, Dept. Music, OSU
[EMAIL PROTECTED]                           aka Skapti Herjolfsson
GE/S d- s+:- a [EMAIL PROTECTED] U++++ P+ L++ E W++ N+ o? K? w !O M+ V PS+() PE
Y+ PGP- t 5+ X- R>+ tv+ b+++>$ DI+ D- G e+++ h r+>+++ y+>++

/*
 * EmrContentInterceptor.java
 *
 * Created on November 10, 2004, 7:30 PM
 */

package edu.osu.music.csml;

import java.io.*;
import java.util.*;
import javax.transaction.*;
import org.apache.slide.common.*;
import org.apache.slide.content.*;
import org.apache.slide.util.logger.*;

/**
 *
 * @author  reeder
 */
public class EmrContentInterceptor extends AbstractContentInterceptor {
    private Hashtable parameters;
    
    /** Creates a new instance of EmrContentInterceptor */
    public EmrContentInterceptor() {
    }
    
    public void preRetrieveContent(SlideToken token, 
            NodeRevisionDescriptors revisionDescriptors, 
            NodeRevisionNumber revisionNumber, 
            NodeRevisionDescriptor revisionDescriptor) {
        
        NamespaceAccessToken namespace = getNamespace();
        String message = "EmrContentInterceptor preRetrieveContent: " + 
namespace.getName();
        try {
            PrintWriter out = new PrintWriter(new FileWriter(
                    File.createTempFile("emrci", ".log", new File("/tmp")) ));
            out.println(message);
            out.close();
        } catch (Exception ex) {
        }
        Logger logger = namespace.getLogger();
        logger.log(message);
        System.out.println(message);
    }
    
}
<?xml version="1.0"?>
<slide>
    <namespace name="slide">
        <definition>
            <store name="tx">
                <nodestore classname="org.apache.slide.store.txfile.TxXMLFileDescriptorsStore">
                    <parameter name="rootpath">store/metadata</parameter>
                    <parameter name="workpath">work/metadata</parameter>
                </nodestore>
                <securitystore>
                    <reference store="nodestore"/>
                </securitystore>
                <lockstore>
                    <reference store="nodestore"/>
                </lockstore>
                <revisiondescriptorsstore>
                    <reference store="nodestore"/>
                </revisiondescriptorsstore>
                <revisiondescriptorstore>
                    <reference store="nodestore"/>
                </revisiondescriptorstore>
                <contentstore classname="org.apache.slide.store.txfile.TxFileContentStore">
                    <parameter name="rootpath">store/content</parameter>
                    <parameter name="workpath">work/content</parameter>
                </contentstore>
            </store>
            <scope match="/" store="tx"/>
        </definition>
        <configuration>
            <!-- Actions mapping -->
            <read-object>/actions/read</read-object>
            <create-object>/actions/write</create-object>
            <remove-object>/actions/write</remove-object>
            <grant-permission>/actions/write-acl</grant-permission>
            <revoke-permission>/actions/write-acl</revoke-permission>
            <read-permissions>/actions/read-acl</read-permissions>
            <read-own-permissions>/actions/read-current-user-privilege-set</read-own-permissions>
            <lock-object>/actions/write</lock-object>
            <kill-lock>/actions/unlock</kill-lock>
            <read-locks>/actions/read</read-locks>
            <read-revision-metadata>/actions/read</read-revision-metadata>
            <create-revision-metadata>/actions/write-properties</create-revision-metadata>
            <modify-revision-metadata>/actions/write-properties</modify-revision-metadata>
            <remove-revision-metadata>/actions/write-properties</remove-revision-metadata>
            <read-revision-content>/actions/read</read-revision-content>
            <create-revision-content>/actions/write-content</create-revision-content>
            <modify-revision-content>/actions/write-content</modify-revision-content>
            <remove-revision-content>/actions/write-content</remove-revision-content>
            <bind-member>/actions/bind</bind-member>
            <unbind-member>/actions/unbind</unbind-member>
            <!-- Paths configuration -->
            <userspath>/users</userspath>
            <rolespath>/roles</rolespath>
            <actionspath>/actions</actionspath>
            <filespath>/files</filespath>
            <parameter name="dav">true</parameter>
            <parameter name="standalone">true</parameter>
            <parameter name="acl_inheritance_type">path</parameter>
            <!-- Nested roles: 0 means no nesting (default), 1 means one sublevel, etc. -->
            <parameter name="nested_roles_maxdepth">0</parameter>

            <content-interceptor class="edu.osu.music.csml.EmrContentInterceptor">
                <parameter name="myParam1">someValue</parameter>
                <parameter name="myParam2">anotherValue</parameter>
            </content-interceptor>
        </configuration>
        <data>
            <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/">
                <!-- Subject can be:
                any user             "all"
                authenticated user   "authenticated"
                unauthenticated user "unauthenticated"
                self                 "self"
                owner of resource    "owner"
                a user               "/users/john"
                a role               "/roles/admin"
                -->
                <permission action="all" subject="/roles/root" inheritable="true"/>
                <permission action="/actions/read-acl" subject="all" inheritable="true" negative="true"/>
                <permission action="/actions/write-acl" subject="all" inheritable="true" negative="true"/>
                <permission action="/actions/unlock" subject="all" inheritable="true" negative="true"/>
                <permission action="/actions/read" subject="all" inheritable="true"/>
                <!-- /users -->
                <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users">
                    <permission action="all" subject="self" inheritable="true"/>
                    <permission action="all" subject="unauthenticated" inheritable="true" negative="true"/>
                    <!-- /users/root represents the administrator -->
                    <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/root">
                        <revision>
                            <property namespace="http://jakarta.apache.org/slide/"; name="password">root</property> 
                        </revision>
                    </objectnode>
                    <!-- /users/john and /users/john2 represent authenticated users -->
                    <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/john">
                        <revision>
                            <property namespace="http://jakarta.apache.org/slide/"; name="password">john</property> 
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/john2">
                        <revision>
                            <property namespace="http://jakarta.apache.org/slide/"; name="password">john2</property> 
                        </revision>
                    </objectnode>
                    <!-- /users/guest represents an authenticated or unauthenticated guest user -->
                    <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/guest">
                        <revision>
                            <property namespace="http://jakarta.apache.org/slide/"; name="password">guest</property> 
                        </revision>
                    </objectnode>
                </objectnode>
                <!-- /roles -->
                <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles">
                    <permission action="all" subject="self" inheritable="true"/>
                    <permission action="all" subject="unauthenticated" inheritable="true" negative="true"/>
                    <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/root">
                        <revision>
                            <property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/root</D:href>]]></property>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/user">
                        <revision>
                            <property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/john</D:href><D:href xmlns:D='DAV:'>/users/john2</D:href><D:href xmlns:D='DAV:'>/users/root</D:href>]]></property>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/guest">
                        <revision>
                            <property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/guest</D:href>]]></property>
                        </revision>
                    </objectnode>
                </objectnode>
                <!-- action -->
                <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions">
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/read">
                        <revision>
                            <property name="privilege-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/actions/read-acl</D:href> <D:href xmlns:D='DAV:'>/actions/read-current-user-privilege-set</D:href>]]></property>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/read-acl">
                        <revision>
                            <property name="privilege-member-set"/>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/read-current-user-privilege-set">
                        <revision>
                            <property name="privilege-member-set"/>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write">
                        <revision>
                            <property name="privilege-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/actions/write-acl</D:href> <D:href xmlns:D='DAV:'>/actions/write-properties</D:href> <D:href xmlns:D='DAV:'>/actions/write-content</D:href>]]></property>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write-acl">
                        <revision>
                            <property name="privilege-member-set"/>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write-properties">
                        <revision>
                            <property name="privilege-member-set"/>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write-content">
                        <revision>
                            <property name="privilege-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/actions/bind</D:href> <D:href xmlns:D='DAV:'>/actions/unbind</D:href>]]></property>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/bind">
                        <revision>
                            <property name="privilege-member-set"/>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/unbind">
                        <revision>
                            <property name="privilege-member-set"/>
                        </revision>
                    </objectnode>
                    <objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/unlock">
                        <revision>
                            <property name="privilege-member-set"/>
                        </revision>
                    </objectnode>
                </objectnode>
                <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/files">
                    <permission action="all" subject="unauthenticated" inheritable="true"/>
                    <permission action="/actions/write" subject="/roles/user" inheritable="true"/>
                    <permission action="/actions/read-acl" subject="owner" inheritable="true"/>
                </objectnode>
                <!-- DeltaV: default history and workspace paths -->
                <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/history">
                    <permission action="all" subject="unauthenticated" inheritable="true"/>
                    <permission action="/actions/write" subject="/roles/user" inheritable="true"/>
                    <permission action="/actions/read-acl" subject="owner" inheritable="true"/>
                </objectnode>
                <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/workspace">
                    <permission action="all" subject="unauthenticated" inheritable="true"/>
                    <permission action="/actions/write" subject="/roles/user" inheritable="true"/>
                    <permission action="/actions/read-acl" subject="owner" inheritable="true"/>
                </objectnode>
                <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/workingresource">
                    <permission action="all" subject="unauthenticated" inheritable="true"/>
                    <permission action="/actions/write" subject="/roles/user" inheritable="true"/>
                    <permission action="/actions/read-acl" subject="owner" inheritable="true"/>
                </objectnode>
            </objectnode>
        </data>
    </namespace>
    <!--
    DeltaV global parameters
    ========================
    * historypath (mandatory=no, default="/history"):
    Specifies a Slide path which determines the location where this DeltaV
    server stores history data.

    * workspacepath (mandatory=no, default="/workspace"):
    Specifies a Slide path which determines the location where this DeltaV
    server allows workspaces to reside.

    * workingresourcepath (mandatory=no, default="/workingresource"):
    Specifies a Slide path which determines the location where this DeltaV
    server stores working resources.

    * auto-version (mandatory=no, default="checkout-checkin"):
    Controls the DeltaV auto-version behaviour.

    * auto-version-control (mandatory=no, default="false"):
    Indicates if a resource just created by a PUT should be set under
    version-control.

   * versioncontrol-exclude (mandatory=no, default=""):
   Specifies a Slide path which determines resources which are excluded from version-control.
   The default value "" makes no path being excluded.

    * checkout-fork (mandatory=no, default="forbidden"):
    Controls the DeltaV check-out behaviour when a version is already
    checked-out or has a successor.

    * checkin-fork (mandatory=no, default="forbidden"):
    Controls the DeltaV check-out behaviour when a version has already a
    successor.

    * standardLivePropertiesClass (mandatory=no,
    default="org.apache.slide.webdav.util.resourcekind.AbstractResourceKind"):
    Determines the "agent" knowing about what the standard live properties are.
    It should be a loadable class containing the following static methods:
    - boolean isLiveProperty(String propName)
    - boolean isProtectedProperty(String propName)
    - boolean isComputedProperty(String propName)
    - Set getAllLiveProperties()
    - Set getAllProtectedProperties()
    - Set getAllComputedProperties()

    * uriRedirectorClass (mandatory=no,
    default="org.apache.slide.webdav.util.DeltavUriRedirector"):
    Determines the URI redirector class. The DeltaV URI redirector is in
    charge of the following redirections:
    - version URI to history URI, e.g. /history/2/1.4 to /history/2
    - latest revision number for history resource to 0.0
    - latest revision number for version resource to last URI token,
    e.g. /history/2/1.4 to 1.4
    It should be a loadable class containing the following static methods:
    - String redirectUri(String uri)
    - NodeRevisionNumber redirectLatestRevisionNumber(String uri)
    -->
    <parameter name="historypath">/history</parameter>
    <parameter name="workspacepath">/workspace</parameter>
    <parameter name="workingresourcepath">/workingresource</parameter>
    <parameter name="auto-version">checkout-checkin</parameter>
    <parameter name="auto-version-control">false</parameter>
    <parameter name="versioncontrol-exclude"/>
    <parameter name="checkout-fork">forbidden</parameter>
    <parameter name="checkin-fork">forbidden</parameter>
</slide>

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

Reply via email to