I wanted to start up a discussion about maybe starting a new sandbox
project for expression abstraction.  It could be named
commons-expresso.  I realize that there's a J2EE framework out there
called "Expresso", but its site hasn't been updated since 2005, so I
don't know how active it is or if this would even be a conflict
anyway.  I don't really care what it's called.  I just care about the
content.

For those who have not been reading the other threads, I would like to
create a project which allows us to abstract the idea of an
"expression" in Java.  Here's the main interface:

public interface Expression
{
  public Object getValue(Object root);
  public void setValue(Object root, Object value);
}

This could be generified to perhaps:

public interface Expression<R,V>
{
  public V getValue(R root);
  public void setValue(R root, V value);
}

Anyway, the "guts" of the project would be the implementations of this
interface.  I have plans to implement it using the following
technologies for now (please add suggestions if you have them):

Javassist
MVEL
OGNL
JSTL-EL
JXPath

That's just a preliminary list, but you get the idea of the sort of
thing I'm looking for.  Matt Benson has suggested that this sort of
thing might be best suited to go into his "Morph" project currently
located at Sourceforge.  Currently, it doesn't have anything like
this.  The project would also contain expression "builder"
implementations which would allow you to use Java to build up the
expression:

public interface ExpressionBuilder<R>
{
  public R recorder();
  public <V> Expresion<R,V> buildExpression(V value);
}

Example usage:

ExpressionBuilder builder = new JavassistExpressionBuilder<Person>();
Expression<Person,String> expr =
builder.buildExpression(builder.recorder().getAddress().getCity());
Person p = ...;
String city = expr.getValue(p);

The cool thing about this is that you can switch the expression
implementation without changing how you build up the expression!
Thoughts anyone?

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

Reply via email to