You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by Scott T Weaver <sc...@binary-designs.net> on 2005/06/13 18:51:20 UTC

Email sent after SVN commit.

I don't think this is supposed to happen, is it?

-Scott

> -----Original Message-----
> From: MAILER-DAEMON@apache.org [mailto:MAILER-DAEMON@apache.org]
> Sent: Monday, June 13, 2005 12:45 PM
> To: weaver@apache.org
> Subject: failure notice
> 
> Hi. This is the qmail-send program at apache.org.
> I'm afraid I wasn't able to deliver your message to the following
> addresses.
> This is a permanent error; I've given up. Sorry it didn't work out.
> 
> <ge...@portals.apache.org>:
> Sorry, only subscribers may post. If you are a subscriber, please forward
> this message to general-owner@portals.apache.org to get your new address
> included (#5.7.2)
> 
> --- Below this line is a copy of the message.
> 
> Return-Path: <we...@apache.org>
> Received: (qmail 73874 invoked by uid 99); 13 Jun 2005 16:45:10 -0000
> X-ASF-Spam-Status: No, hits=-9.8 required=10.0
> 	tests=ALL_TRUSTED,NO_REAL_NAME
> X-Spam-Check-By: apache.org
> Received: from minotaur.apache.org (HELO minotaur.apache.org)
> (209.237.227.194)
>   by apache.org (qpsmtpd/0.28) with SMTP; Mon, 13 Jun 2005 09:45:06 -0700
> Received: (qmail 75636 invoked by uid 65534); 13 Jun 2005 16:44:48 -0000
> Message-ID: <20...@minotaur.apache.org>
> Content-Type: text/plain; charset="utf-8"
> MIME-Version: 1.0
> Content-Transfer-Encoding: quoted-printable
> Subject: svn commit: r190422 - in
>  /portals/jetspeed-2/trunk/portal/src/java/org/apache/jetspeed/ajax: ./
>  AJAXFilter.java AJAXRequestImpl.java AJAXResponseImpl.java
>  AJAXServiceImpl.java AJAXValve.java
> Date: Mon, 13 Jun 2005 16:44:47 -0000
> To: jetspeed-dev@portals.apache.org, general@portals.apache.org
> From: weaver@apache.org
> X-Mailer: svnmailer-1.0.0-dev
> X-Virus-Checked: Checked
> 
> Author: weaver
> Date: Mon Jun 13 09:44:46 2005
> New Revision: 190422
> 
> URL: http://svn.apache.org/viewcvs?rev=3D190422&view=3Drev
> Log:
> JS2-283:  These are the initial implementations of the Ajax service
> interfa=
> ces
> 
> Added:
>     portals/jetspeed-2/trunk/portal/src/java/org/apache/jetspeed/ajax/
>     portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXF=
> ilter.java
>     portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> equestImpl.java
>     portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> esponseImpl.java
>     portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXS=
> erviceImpl.java
>     portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXV=
> alve.java
> 
> Added: portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> AXFilter.java
> URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> 2/trunk/portal/src/java=
> /org/apache/jetspeed/ajax/AJAXFilter.java?rev=3D190422&view=3Dauto
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D
> --- portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXF=
> ilter.java (added)
> +++ portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXF=
> ilter.java Mon Jun 13 09:44:46 2005
> @@ -0,0 +1,82 @@
> +/*
> + * Copyright 2000-2001,2004 The Apache Software Foundation.
> + *=20
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *=20
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *=20
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied=
> .
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.jetspeed.ajax;
> +
> +import java.io.IOException;
> +
> +import javax.servlet.Filter;
> +import javax.servlet.FilterChain;
> +import javax.servlet.FilterConfig;
> +import javax.servlet.ServletException;
> +import javax.servlet.ServletRequest;
> +import javax.servlet.ServletResponse;
> +import javax.servlet.http.HttpServletRequest;
> +import javax.servlet.http.HttpServletResponse;
> +
> +import org.springframework.context.ApplicationContext;
> +import org.springframework.web.context.WebApplicationContext;
> +
> +/**
> + * Simple ServletFilter for invoking AJAX services.
> + *=20
> + *=20
> + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> + *
> + */
> +public class AJAXFilter implements Filter
> +{
> +    private ApplicationContext ctx;
> +    private AJAXService ajaxService;
> +    private FilterConfig config;
> +   =20
> +    public void init(FilterConfig config) throws ServletException
> +    {
> +        this.config =3D config;
> +    }
> +
> +    public void doFilter(ServletRequest request, ServletResponse
> response,
> +            FilterChain arg2) throws IOException, ServletException
> +    {       =20
> +        try
> +        {
> +            response.setContentType("text/xml");
> +            if(ctx =3D=3D null)
> +            {
> +                ctx =3D
> (ApplicationContext)config.getServletContext().get=
> Attribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
> +                ajaxService =3D (AJAXService) ctx.getBean("AJAXService");
> +            }
> +           =20
> +            AJAXRequest ajaxRequest =3D new
> AJAXRequestImpl((HttpServletRe=
> quest) request, (HttpServletResponse) response,
> config.getServletContext())=
> ;
> +            AJAXResponse ajaxReponse =3D
> ajaxService.processRequest(ajaxRe=
> quest);
> +            ajaxReponse.complete();
> +        }
> +        catch (AJAXException e)
> +        {
> +           ((HttpServletResponse) response).sendError(500,
> e.getMessage())=
> ;
> +        }
> +        catch(Exception e)
> +        {
> +            throw new ServletException(e.getMessage(), e);
> +        }
> +    }
> +
> +    public void destroy()
> +    {
> +        // do nothing
> +
> +    }
> +
> +}
> 
> Added: portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> AXRequestImpl.java
> URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> 2/trunk/portal/src/java=
> /org/apache/jetspeed/ajax/AJAXRequestImpl.java?rev=3D190422&view=3Dauto
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D
> --- portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> equestImpl.java (added)
> +++ portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> equestImpl.java Mon Jun 13 09:44:46 2005
> @@ -0,0 +1,180 @@
> +/*
> + * Copyright 2000-2001,2004 The Apache Software Foundation.
> + *=20
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *=20
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *=20
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied=
> .
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.jetspeed.ajax;
> +
> +import java.util.ArrayList;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Map;
> +
> +import javax.servlet.ServletContext;
> +import javax.servlet.http.HttpServletRequest;
> +import javax.servlet.http.HttpServletResponse;
> +
> +/**
> + * Request used for AJAX services.
> + *=20
> + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> + *
> + */
> +public class AJAXRequestImpl implements AJAXRequest
> +{
> +    public static final String AJAX_SERVICE =3D "ajax_service";
> +    public static final String AJAX_PARAM_PREFIX =3D "ajax_param_";
> +   =20
> +    private final HttpServletRequest request;
> +    private List ajaxParams;
> +    private final String serviceName;
> +    private final String methodName;
> +    private HttpServletResponse response;
> +    private ServletContext context;
> +
> +    public AJAXRequestImpl(HttpServletRequest request,
> HttpServletResponse=
>  response, ServletContext context) throws AJAXException
> +    {
> +        this.request =3D request;
> +        this.response =3D response;
> +        this.context =3D context;
> +        String serviceRequest =3D  request.getParameter(AJAX_SERVICE);
> +        if(serviceRequest =3D=3D null )
> +        {
> +            throw new AJAXException("No '"+AJAX_SERVICE+"' parameter
> could=
>  be found in the request or it was not in the
> '{service_name}.{method_name}=
> ' format.");
> +        }
> +        final String split =3D serviceRequest.split("\\.")[0];
> +        serviceName =3D split;
> +        methodName =3D serviceRequest.split("\\.")[1];
> +       =20
> +        parseRequestArguments();
> +       =20
> +    }
> +   =20
> +    /* (non-Javadoc)
> +     * @see org.apache.jetspeed.ajax.AJAXRequest#getParameters()
> +     */
> +    public List getParameters()
> +    {
> +        return ajaxParams;
> +    }
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.jetspeed.ajax.AJAXRequest#getServiceName()
> +     */
> +    public String getServiceName()
> +    {
> +        return serviceName;
> +    }
> +
> +    protected List parseRequestArguments() throws AJAXException
> +    {
> +        try
> +        {
> +            ajaxParams =3D new ArrayList();
> +            Map rawParams =3D request.getParameterMap();
> +            Iterator entryItr =3D rawParams.entrySet().iterator();
> +            while(entryItr.hasNext())
> +            {
> +                Map.Entry entry =3D (Map.Entry) entryItr.next();
> +                String key =3D entry.getKey().toString();
> +               =20
> +                if(key.startsWith(AJAX_PARAM_PREFIX))
> +                {
> +                    String[] paramInfo =3D key.split("_");
> +                    int index =3D Integer.parseInt(paramInfo[2]);
> +                    String type =3D paramInfo[3];=20
> +                    AJAXParameter ajaxParam =3D new AJAXParameter(type,
> (S=
> tring[])entry.getValue());
> +                    ajaxParams.add(index, ajaxParam);
> +                }
> +            }
> +            return ajaxParams;
> +        }
> +        catch (Throwable e)
> +        {
> +            throw new AJAXException("Errors were encountered parsing
> reque=
> st parameters for the AJAX service "+serviceName+": "+e.getMessage(), e);
> +        }
> +    }
> +   =20
> +    public class AJAXParameter
> +    {
> +        private Object value;
> +            =20
> +        public AJAXParameter(String typeName, String[] paramValues)
> +        {
> +            if(typeName.equals("int"))
> +            {               =20
> +                if(paramValues.length > 1)
> +                {
> +                    int[] intValues =3D new int[paramValues.length];
> +                    for(int i=3D0; i<paramValues.length; i++)
> +                    {
> +                        intValues[i] =3D
> Integer.parseInt(paramValues[i]);
> +                    }
> +                }
> +                else
> +                {
> +                    value =3D new Integer(paramValues[0]);
> +                }
> +            }
> +            else if(typeName.equals("str"))
> +            {
> +              if(paramValues.length > 1)
> +              {   =20
> +                  value =3D paramValues;
> +              }
> +              else
> +              {
> +                  value =3D paramValues[0];
> +              }
> +            }
> +        }
> +       =20
> +        public Object getValue()
> +        {
> +            return value;
> +        }
> +    }
> +
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.jetspeed.ajax.AJAXRequest#getMethodName()
> +     */
> +    public String getMethodName()
> +    {
> +        return methodName;
> +    }
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.jetspeed.ajax.AJAXRequest#getContext()
> +     */
> +    public ServletContext getContext()
> +    {
> +        return context;
> +    }
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.jetspeed.ajax.AJAXRequest#getServletRequest()
> +     */
> +    public HttpServletRequest getServletRequest()
> +    {
> +        return request;
> +    }
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.jetspeed.ajax.AJAXRequest#getServletResponse()
> +     */
> +    public HttpServletResponse getServletResponse()
> +    {
> +        return response;
> +    }
> +}
> 
> Added: portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> AXResponseImpl.java
> URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> 2/trunk/portal/src/java=
> /org/apache/jetspeed/ajax/AJAXResponseImpl.java?rev=3D190422&view=3Dauto
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D
> --- portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> esponseImpl.java (added)
> +++ portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> esponseImpl.java Mon Jun 13 09:44:46 2005
> @@ -0,0 +1,64 @@
> +/*
> + * Copyright 2000-2001,2004 The Apache Software Foundation.
> + *=20
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *=20
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *=20
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied=
> .
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.jetspeed.ajax;
> +
> +import java.io.Reader;
> +import java.io.Writer;
> +
> +import org.apache.velocity.app.VelocityEngine;
> +import org.apache.velocity.context.Context;
> +
> +/**
> + * Response object used for AJAX services.
> + *=20
> + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> + *
> + */
> +public class AJAXResponseImpl implements AJAXResponse
> +{  =20
> +
> +    private Context context;
> +    private VelocityEngine engine;
> +    private Reader template;
> +    private Writer output;
> +
> +    public AJAXResponseImpl(Context context, VelocityEngine engine,
> Reader=
>  template, Writer output)
> +    {
> +        this.context =3D context;
> +        this.engine =3D engine;
> +        this.template =3D template;
> +        this.output =3D output;
> +    }
> +
> +    /* (non-Javadoc)
> +     * @see org.apache.jetspeed.ajax.AJAXResponse#complete()
> +     */
> +    public void complete() throws AJAXException
> +    {
> +        try
> +        {
> +            engine.evaluate(context, output, "AJAX processor", template);
> +        }
> +        catch (Exception e)
> +        {
> +            throw new AJAXException("Failed to render velocity xml
> templat=
> e: "+e.getMessage(), e);
> +        }
> +    =20
> +    }
> +
> +   =20
> +
> +}
> 
> Added: portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> AXServiceImpl.java
> URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> 2/trunk/portal/src/java=
> /org/apache/jetspeed/ajax/AJAXServiceImpl.java?rev=3D190422&view=3Dauto
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D
> --- portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXS=
> erviceImpl.java (added)
> +++ portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXS=
> erviceImpl.java Mon Jun 13 09:44:46 2005
> @@ -0,0 +1,148 @@
> +/*
> + * Copyright 2000-2001,2004 The Apache Software Foundation.
> + *=20
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *=20
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *=20
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied=
> .
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.jetspeed.ajax;
> +
> +import java.io.IOException;
> +import java.io.InputStream;
> +import java.io.InputStreamReader;
> +import java.io.Reader;
> +import java.lang.reflect.Method;
> +import java.util.Iterator;
> +import java.util.List;
> +import java.util.Map;
> +import java.util.Properties;
> +
> +import org.apache.velocity.VelocityContext;
> +import org.apache.velocity.app.VelocityEngine;
> +import org.apache.velocity.context.Context;
> +import org.springframework.beans.BeansException;
> +import org.springframework.beans.factory.BeanFactory;
> +import org.springframework.beans.factory.BeanFactoryAware;
> +
> +/**
> + * Performs invocation of the actual AJAX request and returns
> + * a result object to converted into XML.
> + *=20
> + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> + *
> + */
> +public class AJAXServiceImpl implements AJAXService, BeanFactoryAware
> +{
> +
> +    private Map serviceToBeans;
> +
> +    private BeanFactory beanFactory;
> +    private VelocityEngine engine;
> +
> +    public AJAXServiceImpl(Map serviceToBeans)
> +    {
> +        this.serviceToBeans =3D serviceToBeans;
> +       =20
> +    }
> +
> +    public AJAXResponse processRequest(AJAXRequest request)
> +            throws AJAXException
> +    {
> +        final String serviceName =3D request.getServiceName();
> +        final String methodName =3D request.getMethodName();
> +        final String templateName =3D
> request.getServletRequest().getServl=
> etPath();
> +
> +        final String mappedServiceName =3D
> (serviceName+"."+methodName).tr=
> im();
> +        try
> +        {
> +            if(engine =3D=3D null)
> +            {
> +                engine =3D new VelocityEngine();
> +                Properties props =3D new Properties();
> +
> props.load(request.getContext().getResourceAsStream("/WEB-=
> INF/velocity.properties"));
> +                engine.init();
> +            }
> +           =20
> +           =20
> +            if(!serviceToBeans.containsKey(mappedServiceName))
> +            {
> +                throw new AJAXException("There is no AJAX service named
> '"=
> +mappedServiceName+"' defined.  "+=20
> +                        "Please make sure that your ajax.xml is set up
> cor=
> rectly.");
> +            }
> +           =20
> +            String beanId =3D
> ((String)serviceToBeans.get(mappedServiceNam=
> e)).trim();
> +            Object targetService =3D beanFactory.getBean(beanId);
> +            final List parameters =3D request.getParameters();
> +            Method method =3D
> targetService.getClass().getMethod(methodNam=
> e, getTypes(parameters));
> +            Object result =3D method.invoke(targetService,
> getValues(param=
> eters));
> +            Context context =3D new VelocityContext();
> +            context.put("ajaxRequest", request);
> +            context.put("result", result);           =20
> +           =20
> +            final InputStream templateResource =3D
> request.getContext().ge=
> tResourceAsStream(templateName);
> +           =20
> +            if(templateResource =3D=3D null)
> +            {
> +                request.getServletResponse().sendError(404,
> templateName+"=
>  ajax template could not be found.");
> +                throw new IOException(templateName+" does not exist");
> +            }
> +            Reader template =3D new InputStreamReader(templateResource);
> +           =20
> +            return new AJAXResponseImpl(context, engine, template,
> request=
> .getServletResponse().getWriter());
> +        }
> +        catch(AJAXException ae)
> +        {
> +            throw ae;
> +        }
> +        catch (Exception e)
> +        {
> +            throw new AJAXException("Unable to process service" +
> mappedSe=
> rviceName + ": " + e.getMessage(), e);
> +        }
> +
> +    }
> +
> +    /*
> +     * (non-Javadoc)
> +     *=20
> +     * @see
> org.springframework.beans.factory.BeanFactoryAware#setBeanFact=
> ory(org.springframework.beans.factory.BeanFactory)
> +     */
> +    public void setBeanFactory(BeanFactory beanFactory) throws
> BeansExcept=
> ion
> +    {
> +        this.beanFactory =3D beanFactory;
> +    }
> +
> +    protected Class[] getTypes(List objects)
> +    {
> +        Class[] args =3D new Class[objects.size()];
> +        Iterator itr =3D objects.iterator();
> +        int i =3D 0;
> +        while (itr.hasNext())
> +        {
> +            args[i] =3D
> ((AJAXRequestImpl.AJAXParameter)itr.next()).getVal=
> ue().getClass();
> +            i++;
> +        }
> +        return args;
> +    }
> +   =20
> +    protected Object[] getValues(List objects)
> +    {
> +        Object[] args =3D new Object[objects.size()];
> +        Iterator itr =3D objects.iterator();
> +        int i =3D 0;
> +        while (itr.hasNext())
> +        {
> +            args[i] =3D
> ((AJAXRequestImpl.AJAXParameter)itr.next()).getVal=
> ue();
> +            i++;
> +        }
> +        return args;
> +    }
> +
> +}
> 
> Added: portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> AXValve.java
> URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> 2/trunk/portal/src/java=
> /org/apache/jetspeed/ajax/AJAXValve.java?rev=3D190422&view=3Dauto
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> D=
> =3D=3D=3D
> --- portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXV=
> alve.java (added)
> +++ portals/jetspeed-
> 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXV=
> alve.java Mon Jun 13 09:44:46 2005
> @@ -0,0 +1,44 @@
> +/*
> + * Copyright 2000-2001,2004 The Apache Software Foundation.
> + *=20
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *=20
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *=20
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied=
> .
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.jetspeed.ajax;
> +
> +import org.apache.jetspeed.pipeline.PipelineException;
> +import org.apache.jetspeed.pipeline.valve.AbstractValve;
> +import org.apache.jetspeed.pipeline.valve.ValveContext;
> +import org.apache.jetspeed.request.RequestContext;
> +
> +/**
> + * This should eventually replace the AJAX ServletFilter.
> + *=20
> + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> + *
> + */
> +public class AJAXValve extends AbstractValve
> +{
> +    public AJAXValve()
> +    {
> +        super();
> +       =20
> +    }
> +
> +    public void invoke(RequestContext request, ValveContext context)
> +            throws PipelineException
> +    {
> +      =20
> +
> +    }
> +
> +}
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org


Re: Email sent after SVN commit.

Posted by Santiago Gala <sg...@apache.org>.
El lun, 13-06-2005 a las 12:51 -0400, Scott T Weaver escribió:
> I don't think this is supposed to happen, is it?
> 

I committed revision 190113 (asf-mailer.conf), but either it never went
live or I understood badly the regexp needed. I CC: infra so that
someone knowledgeable can take a look.

The idea is that only portals/site commits should go to general@.

> -Scott
> 
> > -----Original Message-----
> > From: MAILER-DAEMON@apache.org [mailto:MAILER-DAEMON@apache.org]
> > Sent: Monday, June 13, 2005 12:45 PM
> > To: weaver@apache.org
> > Subject: failure notice
> > 
> > Hi. This is the qmail-send program at apache.org.
> > I'm afraid I wasn't able to deliver your message to the following
> > addresses.
> > This is a permanent error; I've given up. Sorry it didn't work out.
> > 
> > <ge...@portals.apache.org>:
> > Sorry, only subscribers may post. If you are a subscriber, please forward
> > this message to general-owner@portals.apache.org to get your new address
> > included (#5.7.2)
> > 
> > --- Below this line is a copy of the message.
> > 
> > Return-Path: <we...@apache.org>
> > Received: (qmail 73874 invoked by uid 99); 13 Jun 2005 16:45:10 -0000
> > X-ASF-Spam-Status: No, hits=-9.8 required=10.0
> > 	tests=ALL_TRUSTED,NO_REAL_NAME
> > X-Spam-Check-By: apache.org
> > Received: from minotaur.apache.org (HELO minotaur.apache.org)
> > (209.237.227.194)
> >   by apache.org (qpsmtpd/0.28) with SMTP; Mon, 13 Jun 2005 09:45:06 -0700
> > Received: (qmail 75636 invoked by uid 65534); 13 Jun 2005 16:44:48 -0000
> > Message-ID: <20...@minotaur.apache.org>
> > Content-Type: text/plain; charset="utf-8"
> > MIME-Version: 1.0
> > Content-Transfer-Encoding: quoted-printable
> > Subject: svn commit: r190422 - in
> >  /portals/jetspeed-2/trunk/portal/src/java/org/apache/jetspeed/ajax: ./
> >  AJAXFilter.java AJAXRequestImpl.java AJAXResponseImpl.java
> >  AJAXServiceImpl.java AJAXValve.java
> > Date: Mon, 13 Jun 2005 16:44:47 -0000
> > To: jetspeed-dev@portals.apache.org, general@portals.apache.org
> > From: weaver@apache.org
> > X-Mailer: svnmailer-1.0.0-dev
> > X-Virus-Checked: Checked
> > 
> > Author: weaver
> > Date: Mon Jun 13 09:44:46 2005
> > New Revision: 190422
> > 
> > URL: http://svn.apache.org/viewcvs?rev=3D190422&view=3Drev
> > Log:
> > JS2-283:  These are the initial implementations of the Ajax service
> > interfa=
> > ces
> > 
> > Added:
> >     portals/jetspeed-2/trunk/portal/src/java/org/apache/jetspeed/ajax/
> >     portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXF=
> > ilter.java
> >     portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> > equestImpl.java
> >     portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> > esponseImpl.java
> >     portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXS=
> > erviceImpl.java
> >     portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXV=
> > alve.java
> > 
> > Added: portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> > AXFilter.java
> > URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> > 2/trunk/portal/src/java=
> > /org/apache/jetspeed/ajax/AJAXFilter.java?rev=3D190422&view=3Dauto
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D
> > --- portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXF=
> > ilter.java (added)
> > +++ portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXF=
> > ilter.java Mon Jun 13 09:44:46 2005
> > @@ -0,0 +1,82 @@
> > +/*
> > + * Copyright 2000-2001,2004 The Apache Software Foundation.
> > + *=20
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *=20
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *=20
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied=
> > .
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.jetspeed.ajax;
> > +
> > +import java.io.IOException;
> > +
> > +import javax.servlet.Filter;
> > +import javax.servlet.FilterChain;
> > +import javax.servlet.FilterConfig;
> > +import javax.servlet.ServletException;
> > +import javax.servlet.ServletRequest;
> > +import javax.servlet.ServletResponse;
> > +import javax.servlet.http.HttpServletRequest;
> > +import javax.servlet.http.HttpServletResponse;
> > +
> > +import org.springframework.context.ApplicationContext;
> > +import org.springframework.web.context.WebApplicationContext;
> > +
> > +/**
> > + * Simple ServletFilter for invoking AJAX services.
> > + *=20
> > + *=20
> > + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> > + *
> > + */
> > +public class AJAXFilter implements Filter
> > +{
> > +    private ApplicationContext ctx;
> > +    private AJAXService ajaxService;
> > +    private FilterConfig config;
> > +   =20
> > +    public void init(FilterConfig config) throws ServletException
> > +    {
> > +        this.config =3D config;
> > +    }
> > +
> > +    public void doFilter(ServletRequest request, ServletResponse
> > response,
> > +            FilterChain arg2) throws IOException, ServletException
> > +    {       =20
> > +        try
> > +        {
> > +            response.setContentType("text/xml");
> > +            if(ctx =3D=3D null)
> > +            {
> > +                ctx =3D
> > (ApplicationContext)config.getServletContext().get=
> > Attribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
> > +                ajaxService =3D (AJAXService) ctx.getBean("AJAXService");
> > +            }
> > +           =20
> > +            AJAXRequest ajaxRequest =3D new
> > AJAXRequestImpl((HttpServletRe=
> > quest) request, (HttpServletResponse) response,
> > config.getServletContext())=
> > ;
> > +            AJAXResponse ajaxReponse =3D
> > ajaxService.processRequest(ajaxRe=
> > quest);
> > +            ajaxReponse.complete();
> > +        }
> > +        catch (AJAXException e)
> > +        {
> > +           ((HttpServletResponse) response).sendError(500,
> > e.getMessage())=
> > ;
> > +        }
> > +        catch(Exception e)
> > +        {
> > +            throw new ServletException(e.getMessage(), e);
> > +        }
> > +    }
> > +
> > +    public void destroy()
> > +    {
> > +        // do nothing
> > +
> > +    }
> > +
> > +}
> > 
> > Added: portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> > AXRequestImpl.java
> > URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> > 2/trunk/portal/src/java=
> > /org/apache/jetspeed/ajax/AJAXRequestImpl.java?rev=3D190422&view=3Dauto
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D
> > --- portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> > equestImpl.java (added)
> > +++ portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> > equestImpl.java Mon Jun 13 09:44:46 2005
> > @@ -0,0 +1,180 @@
> > +/*
> > + * Copyright 2000-2001,2004 The Apache Software Foundation.
> > + *=20
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *=20
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *=20
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied=
> > .
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.jetspeed.ajax;
> > +
> > +import java.util.ArrayList;
> > +import java.util.Iterator;
> > +import java.util.List;
> > +import java.util.Map;
> > +
> > +import javax.servlet.ServletContext;
> > +import javax.servlet.http.HttpServletRequest;
> > +import javax.servlet.http.HttpServletResponse;
> > +
> > +/**
> > + * Request used for AJAX services.
> > + *=20
> > + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> > + *
> > + */
> > +public class AJAXRequestImpl implements AJAXRequest
> > +{
> > +    public static final String AJAX_SERVICE =3D "ajax_service";
> > +    public static final String AJAX_PARAM_PREFIX =3D "ajax_param_";
> > +   =20
> > +    private final HttpServletRequest request;
> > +    private List ajaxParams;
> > +    private final String serviceName;
> > +    private final String methodName;
> > +    private HttpServletResponse response;
> > +    private ServletContext context;
> > +
> > +    public AJAXRequestImpl(HttpServletRequest request,
> > HttpServletResponse=
> >  response, ServletContext context) throws AJAXException
> > +    {
> > +        this.request =3D request;
> > +        this.response =3D response;
> > +        this.context =3D context;
> > +        String serviceRequest =3D  request.getParameter(AJAX_SERVICE);
> > +        if(serviceRequest =3D=3D null )
> > +        {
> > +            throw new AJAXException("No '"+AJAX_SERVICE+"' parameter
> > could=
> >  be found in the request or it was not in the
> > '{service_name}.{method_name}=
> > ' format.");
> > +        }
> > +        final String split =3D serviceRequest.split("\\.")[0];
> > +        serviceName =3D split;
> > +        methodName =3D serviceRequest.split("\\.")[1];
> > +       =20
> > +        parseRequestArguments();
> > +       =20
> > +    }
> > +   =20
> > +    /* (non-Javadoc)
> > +     * @see org.apache.jetspeed.ajax.AJAXRequest#getParameters()
> > +     */
> > +    public List getParameters()
> > +    {
> > +        return ajaxParams;
> > +    }
> > +
> > +    /* (non-Javadoc)
> > +     * @see org.apache.jetspeed.ajax.AJAXRequest#getServiceName()
> > +     */
> > +    public String getServiceName()
> > +    {
> > +        return serviceName;
> > +    }
> > +
> > +    protected List parseRequestArguments() throws AJAXException
> > +    {
> > +        try
> > +        {
> > +            ajaxParams =3D new ArrayList();
> > +            Map rawParams =3D request.getParameterMap();
> > +            Iterator entryItr =3D rawParams.entrySet().iterator();
> > +            while(entryItr.hasNext())
> > +            {
> > +                Map.Entry entry =3D (Map.Entry) entryItr.next();
> > +                String key =3D entry.getKey().toString();
> > +               =20
> > +                if(key.startsWith(AJAX_PARAM_PREFIX))
> > +                {
> > +                    String[] paramInfo =3D key.split("_");
> > +                    int index =3D Integer.parseInt(paramInfo[2]);
> > +                    String type =3D paramInfo[3];=20
> > +                    AJAXParameter ajaxParam =3D new AJAXParameter(type,
> > (S=
> > tring[])entry.getValue());
> > +                    ajaxParams.add(index, ajaxParam);
> > +                }
> > +            }
> > +            return ajaxParams;
> > +        }
> > +        catch (Throwable e)
> > +        {
> > +            throw new AJAXException("Errors were encountered parsing
> > reque=
> > st parameters for the AJAX service "+serviceName+": "+e.getMessage(), e);
> > +        }
> > +    }
> > +   =20
> > +    public class AJAXParameter
> > +    {
> > +        private Object value;
> > +            =20
> > +        public AJAXParameter(String typeName, String[] paramValues)
> > +        {
> > +            if(typeName.equals("int"))
> > +            {               =20
> > +                if(paramValues.length > 1)
> > +                {
> > +                    int[] intValues =3D new int[paramValues.length];
> > +                    for(int i=3D0; i<paramValues.length; i++)
> > +                    {
> > +                        intValues[i] =3D
> > Integer.parseInt(paramValues[i]);
> > +                    }
> > +                }
> > +                else
> > +                {
> > +                    value =3D new Integer(paramValues[0]);
> > +                }
> > +            }
> > +            else if(typeName.equals("str"))
> > +            {
> > +              if(paramValues.length > 1)
> > +              {   =20
> > +                  value =3D paramValues;
> > +              }
> > +              else
> > +              {
> > +                  value =3D paramValues[0];
> > +              }
> > +            }
> > +        }
> > +       =20
> > +        public Object getValue()
> > +        {
> > +            return value;
> > +        }
> > +    }
> > +
> > +
> > +    /* (non-Javadoc)
> > +     * @see org.apache.jetspeed.ajax.AJAXRequest#getMethodName()
> > +     */
> > +    public String getMethodName()
> > +    {
> > +        return methodName;
> > +    }
> > +
> > +    /* (non-Javadoc)
> > +     * @see org.apache.jetspeed.ajax.AJAXRequest#getContext()
> > +     */
> > +    public ServletContext getContext()
> > +    {
> > +        return context;
> > +    }
> > +
> > +    /* (non-Javadoc)
> > +     * @see org.apache.jetspeed.ajax.AJAXRequest#getServletRequest()
> > +     */
> > +    public HttpServletRequest getServletRequest()
> > +    {
> > +        return request;
> > +    }
> > +
> > +    /* (non-Javadoc)
> > +     * @see org.apache.jetspeed.ajax.AJAXRequest#getServletResponse()
> > +     */
> > +    public HttpServletResponse getServletResponse()
> > +    {
> > +        return response;
> > +    }
> > +}
> > 
> > Added: portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> > AXResponseImpl.java
> > URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> > 2/trunk/portal/src/java=
> > /org/apache/jetspeed/ajax/AJAXResponseImpl.java?rev=3D190422&view=3Dauto
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D
> > --- portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> > esponseImpl.java (added)
> > +++ portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXR=
> > esponseImpl.java Mon Jun 13 09:44:46 2005
> > @@ -0,0 +1,64 @@
> > +/*
> > + * Copyright 2000-2001,2004 The Apache Software Foundation.
> > + *=20
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *=20
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *=20
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied=
> > .
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.jetspeed.ajax;
> > +
> > +import java.io.Reader;
> > +import java.io.Writer;
> > +
> > +import org.apache.velocity.app.VelocityEngine;
> > +import org.apache.velocity.context.Context;
> > +
> > +/**
> > + * Response object used for AJAX services.
> > + *=20
> > + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> > + *
> > + */
> > +public class AJAXResponseImpl implements AJAXResponse
> > +{  =20
> > +
> > +    private Context context;
> > +    private VelocityEngine engine;
> > +    private Reader template;
> > +    private Writer output;
> > +
> > +    public AJAXResponseImpl(Context context, VelocityEngine engine,
> > Reader=
> >  template, Writer output)
> > +    {
> > +        this.context =3D context;
> > +        this.engine =3D engine;
> > +        this.template =3D template;
> > +        this.output =3D output;
> > +    }
> > +
> > +    /* (non-Javadoc)
> > +     * @see org.apache.jetspeed.ajax.AJAXResponse#complete()
> > +     */
> > +    public void complete() throws AJAXException
> > +    {
> > +        try
> > +        {
> > +            engine.evaluate(context, output, "AJAX processor", template);
> > +        }
> > +        catch (Exception e)
> > +        {
> > +            throw new AJAXException("Failed to render velocity xml
> > templat=
> > e: "+e.getMessage(), e);
> > +        }
> > +    =20
> > +    }
> > +
> > +   =20
> > +
> > +}
> > 
> > Added: portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> > AXServiceImpl.java
> > URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> > 2/trunk/portal/src/java=
> > /org/apache/jetspeed/ajax/AJAXServiceImpl.java?rev=3D190422&view=3Dauto
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D
> > --- portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXS=
> > erviceImpl.java (added)
> > +++ portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXS=
> > erviceImpl.java Mon Jun 13 09:44:46 2005
> > @@ -0,0 +1,148 @@
> > +/*
> > + * Copyright 2000-2001,2004 The Apache Software Foundation.
> > + *=20
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *=20
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *=20
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied=
> > .
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.jetspeed.ajax;
> > +
> > +import java.io.IOException;
> > +import java.io.InputStream;
> > +import java.io.InputStreamReader;
> > +import java.io.Reader;
> > +import java.lang.reflect.Method;
> > +import java.util.Iterator;
> > +import java.util.List;
> > +import java.util.Map;
> > +import java.util.Properties;
> > +
> > +import org.apache.velocity.VelocityContext;
> > +import org.apache.velocity.app.VelocityEngine;
> > +import org.apache.velocity.context.Context;
> > +import org.springframework.beans.BeansException;
> > +import org.springframework.beans.factory.BeanFactory;
> > +import org.springframework.beans.factory.BeanFactoryAware;
> > +
> > +/**
> > + * Performs invocation of the actual AJAX request and returns
> > + * a result object to converted into XML.
> > + *=20
> > + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> > + *
> > + */
> > +public class AJAXServiceImpl implements AJAXService, BeanFactoryAware
> > +{
> > +
> > +    private Map serviceToBeans;
> > +
> > +    private BeanFactory beanFactory;
> > +    private VelocityEngine engine;
> > +
> > +    public AJAXServiceImpl(Map serviceToBeans)
> > +    {
> > +        this.serviceToBeans =3D serviceToBeans;
> > +       =20
> > +    }
> > +
> > +    public AJAXResponse processRequest(AJAXRequest request)
> > +            throws AJAXException
> > +    {
> > +        final String serviceName =3D request.getServiceName();
> > +        final String methodName =3D request.getMethodName();
> > +        final String templateName =3D
> > request.getServletRequest().getServl=
> > etPath();
> > +
> > +        final String mappedServiceName =3D
> > (serviceName+"."+methodName).tr=
> > im();
> > +        try
> > +        {
> > +            if(engine =3D=3D null)
> > +            {
> > +                engine =3D new VelocityEngine();
> > +                Properties props =3D new Properties();
> > +
> > props.load(request.getContext().getResourceAsStream("/WEB-=
> > INF/velocity.properties"));
> > +                engine.init();
> > +            }
> > +           =20
> > +           =20
> > +            if(!serviceToBeans.containsKey(mappedServiceName))
> > +            {
> > +                throw new AJAXException("There is no AJAX service named
> > '"=
> > +mappedServiceName+"' defined.  "+=20
> > +                        "Please make sure that your ajax.xml is set up
> > cor=
> > rectly.");
> > +            }
> > +           =20
> > +            String beanId =3D
> > ((String)serviceToBeans.get(mappedServiceNam=
> > e)).trim();
> > +            Object targetService =3D beanFactory.getBean(beanId);
> > +            final List parameters =3D request.getParameters();
> > +            Method method =3D
> > targetService.getClass().getMethod(methodNam=
> > e, getTypes(parameters));
> > +            Object result =3D method.invoke(targetService,
> > getValues(param=
> > eters));
> > +            Context context =3D new VelocityContext();
> > +            context.put("ajaxRequest", request);
> > +            context.put("result", result);           =20
> > +           =20
> > +            final InputStream templateResource =3D
> > request.getContext().ge=
> > tResourceAsStream(templateName);
> > +           =20
> > +            if(templateResource =3D=3D null)
> > +            {
> > +                request.getServletResponse().sendError(404,
> > templateName+"=
> >  ajax template could not be found.");
> > +                throw new IOException(templateName+" does not exist");
> > +            }
> > +            Reader template =3D new InputStreamReader(templateResource);
> > +           =20
> > +            return new AJAXResponseImpl(context, engine, template,
> > request=
> > .getServletResponse().getWriter());
> > +        }
> > +        catch(AJAXException ae)
> > +        {
> > +            throw ae;
> > +        }
> > +        catch (Exception e)
> > +        {
> > +            throw new AJAXException("Unable to process service" +
> > mappedSe=
> > rviceName + ": " + e.getMessage(), e);
> > +        }
> > +
> > +    }
> > +
> > +    /*
> > +     * (non-Javadoc)
> > +     *=20
> > +     * @see
> > org.springframework.beans.factory.BeanFactoryAware#setBeanFact=
> > ory(org.springframework.beans.factory.BeanFactory)
> > +     */
> > +    public void setBeanFactory(BeanFactory beanFactory) throws
> > BeansExcept=
> > ion
> > +    {
> > +        this.beanFactory =3D beanFactory;
> > +    }
> > +
> > +    protected Class[] getTypes(List objects)
> > +    {
> > +        Class[] args =3D new Class[objects.size()];
> > +        Iterator itr =3D objects.iterator();
> > +        int i =3D 0;
> > +        while (itr.hasNext())
> > +        {
> > +            args[i] =3D
> > ((AJAXRequestImpl.AJAXParameter)itr.next()).getVal=
> > ue().getClass();
> > +            i++;
> > +        }
> > +        return args;
> > +    }
> > +   =20
> > +    protected Object[] getValues(List objects)
> > +    {
> > +        Object[] args =3D new Object[objects.size()];
> > +        Iterator itr =3D objects.iterator();
> > +        int i =3D 0;
> > +        while (itr.hasNext())
> > +        {
> > +            args[i] =3D
> > ((AJAXRequestImpl.AJAXParameter)itr.next()).getVal=
> > ue();
> > +            i++;
> > +        }
> > +        return args;
> > +    }
> > +
> > +}
> > 
> > Added: portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJ=
> > AXValve.java
> > URL: http://svn.apache.org/viewcvs/portals/jetspeed-
> > 2/trunk/portal/src/java=
> > /org/apache/jetspeed/ajax/AJAXValve.java?rev=3D190422&view=3Dauto
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3
> > D=
> > =3D=3D=3D
> > --- portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXV=
> > alve.java (added)
> > +++ portals/jetspeed-
> > 2/trunk/portal/src/java/org/apache/jetspeed/ajax/AJAXV=
> > alve.java Mon Jun 13 09:44:46 2005
> > @@ -0,0 +1,44 @@
> > +/*
> > + * Copyright 2000-2001,2004 The Apache Software Foundation.
> > + *=20
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *=20
> > + *      http://www.apache.org/licenses/LICENSE-2.0
> > + *=20
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> > implied=
> > .
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.jetspeed.ajax;
> > +
> > +import org.apache.jetspeed.pipeline.PipelineException;
> > +import org.apache.jetspeed.pipeline.valve.AbstractValve;
> > +import org.apache.jetspeed.pipeline.valve.ValveContext;
> > +import org.apache.jetspeed.request.RequestContext;
> > +
> > +/**
> > + * This should eventually replace the AJAX ServletFilter.
> > + *=20
> > + * @author <href a=3D"mailto:weaver@apache.org">Scott T. Weaver</a>
> > + *
> > + */
> > +public class AJAXValve extends AbstractValve
> > +{
> > +    public AJAXValve()
> > +    {
> > +        super();
> > +       =20
> > +    }
> > +
> > +    public void invoke(RequestContext request, ValveContext context)
> > +            throws PipelineException
> > +    {
> > +      =20
> > +
> > +    }
> > +
> > +}
> > 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
> For additional commands, e-mail: jetspeed-dev-help@portals.apache.org
> 
-- 
VP and Chair, Apache Portals (http://portals.apache.org)
Apache Software Foundation