[jboss-cvs] jboss-seam/src/main/org/jboss/seam/bpm ...

Gavin King gavin.king at jboss.com
Sun Jul 15 18:43:13 EDT 2007


  User: gavin   
  Date: 07/07/15 18:43:13

  Modified:    src/main/org/jboss/seam/bpm    Jbpm.java
  Added:       src/main/org/jboss/seam/bpm    JbpmELResolver.java
                        SeamExpressionEvaluator.java
  Log:
  start on JBSEAM-1490
  
  Revision  Changes    Path
  1.9       +3 -3      jboss-seam/src/main/org/jboss/seam/bpm/Jbpm.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Jbpm.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/bpm/Jbpm.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -b -r1.8 -r1.9
  --- Jbpm.java	15 Jul 2007 21:32:01 -0000	1.8
  +++ Jbpm.java	15 Jul 2007 22:43:13 -0000	1.9
  @@ -70,9 +70,9 @@
         ProcessState.setDefaultSubProcessResolver( new SeamSubProcessResolver() );
         installProcessDefinitions();
         installPageflowDefinitions();
  -      JbpmExpressionEvaluator.setVariableResolver( new SeamVariableResolver() );
  -      JbpmExpressionEvaluator.setFunctionMapper( new SeamFunctionMapper() );
  -      JbpmExpressionEvaluator.setExpressionEvaluator( new SeamExpressionEvaludator() );
  +      //JbpmExpressionEvaluator.setVariableResolver( new SeamVariableResolver() );
  +      //JbpmExpressionEvaluator.setFunctionMapper( new SeamFunctionMapper() );
  +      JbpmExpressionEvaluator.setExpressionEvaluator( new SeamExpressionEvaluator() );
         UserCodeInterceptorConfig.setUserCodeInterceptor( new SeamUserCodeInterceptor() );
      }
   
  
  
  
  1.1      date: 2007/07/15 22:43:13;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/bpm/JbpmELResolver.java
  
  Index: JbpmELResolver.java
  ===================================================================
  package org.jboss.seam.bpm;
  
  import java.beans.FeatureDescriptor;
  import java.util.Iterator;
  
  import javax.el.ELContext;
  import javax.el.ELResolver;
  
  import org.jbpm.jpdl.el.VariableResolver;
  
  /**
   * Resolves jBPM variables for Unified EL
   * 
   * @author Gavin King
   *
   */
  final class JbpmELResolver extends ELResolver
  {
     private final VariableResolver resolver;
  
     JbpmELResolver(VariableResolver resolver)
     {
        this.resolver = resolver;
     }
  
     @Override
     public Object getValue(ELContext context, Object base, Object property) 
     {
        if ( base==null && property!=null )
        {
           return resolver.resolveVariable( (String) base );
        }
        else
        {
           return null;
        }
     }
  
     @Override
     public boolean isReadOnly(ELContext context, Object base, Object property) 
     {
        return true;
     }
  
     @Override
     public Class<?> getCommonPropertyType(ELContext context, Object base)
     {
        throw new UnsupportedOperationException();
     }
  
     @Override
     public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base)
     {
        throw new UnsupportedOperationException();
     }
  
     @Override
     public Class<?> getType(ELContext context, Object base, Object property) 
     {
        throw new UnsupportedOperationException();
     }
  
     @Override
     public void setValue(ELContext context, Object base, Object property, Object value)
     {
        throw new UnsupportedOperationException();
     }
     
  }
  
  
  1.1      date: 2007/07/15 22:43:13;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/bpm/SeamExpressionEvaluator.java
  
  Index: SeamExpressionEvaluator.java
  ===================================================================
  package org.jboss.seam.bpm;
  
  
  import javax.el.CompositeELResolver;
  import javax.el.ELContext;
  import javax.el.MethodExpression;
  import javax.el.ValueExpression;
  
  import org.jboss.seam.el.EL;
  import org.jbpm.jpdl.el.ELException;
  import org.jbpm.jpdl.el.Expression;
  import org.jbpm.jpdl.el.ExpressionEvaluator;
  import org.jbpm.jpdl.el.FunctionMapper;
  import org.jbpm.jpdl.el.VariableResolver;
  
  /**
   * Plugs the JBoss EL expression language and Seam
   * EL resolvers into jBPM. Note that this current 
   * implementation does not allow jBPM to see stuff
   * defined only by the JSF ELResolvers.
   * 
   * @author Gavin King
   *
   */
  public class SeamExpressionEvaluator extends ExpressionEvaluator
  {
  
     @Override
     public Object evaluate(String expression, Class returnType, final VariableResolver resolver, FunctionMapper mapper)
              throws ELException
     {
        
        return createExpression(expression, returnType).evaluate(resolver);
     }
  
     @Override
     public Expression parseExpression(final String expression, final Class returnType, FunctionMapper mapper)
              throws ELException
     {
        return createExpression(expression, returnType);
     }
  
     private static Expression createExpression(final String expression, final Class returnType)
     {
        //TODO: integrate SeamFunctionMapper!
        
        return new Expression()
        {
           private MethodExpression me;
           private ValueExpression ve; 
           
           private void initMethodExpression()
           {
              me = EL.EXPRESSION_FACTORY.createMethodExpression(EL.EL_CONTEXT, expression, returnType, new Class[0]);
           }
           
           private void initValueExpression()
           {
              ve = EL.EXPRESSION_FACTORY.createValueExpression(EL.EL_CONTEXT, expression, returnType);
           }
           
           @Override
           public Object evaluate(VariableResolver resolver) throws ELException
           {
              try
              {
                 try
                 {
                    if (me==null && ve==null) initMethodExpression();
                    if (me!=null && ve==null) return me.invoke( createELContext(resolver), new Object[0] );
                 }
                 catch (javax.el.MethodNotFoundException mnfe)
                 {
                    if (ve==null) initValueExpression();
                    if (ve!=null) return ve.getValue( createELContext(resolver) );
                 }
                 throw new ELException();
              }
              catch (javax.el.ELException vele)
              {
                 throw new ELException(vele);
              }
              
           }
        };
     }
  
     private static ELContext createELContext(VariableResolver resolver)
     {
        CompositeELResolver composite = new CompositeELResolver();
        composite.add(EL.EL_RESOLVER);
        composite.add( new JbpmELResolver(resolver) );
        return EL.createELContext(composite);
     }
     
  }
  
  
  



More information about the jboss-cvs-commits mailing list