Newsletter sign-up
View all newsletters

Enterprise Java Newsletter
Stay up to date on the latest tutorials and Java community news posted on JavaWorld

JavaWorld Daily Brew

F3 Reflection and Query operators

 

A friend of mine who works at MIT libraries recently showed me a neat little AJAX data visualization program they developed called Exhibit.

This seemed like a good test case for F3 reflection and for its query operators, so I decided to try to see how hard it would be to do the same kind of thing in F3.

Below is a (partial) F3 equivalent of this Exhibit example.

The above demo also displays the F3 source code.

This is actually a plain Swing program (the F3 Canvas isn't used), but demonstrates the use of HTML templating with F3.

All of the filtering and sorting is actually done in 3 lines of code (take a look at DB.f3 and AttributeValueAssertion.f3).

Some things to note:

  • Attribute is an F3 reflection class analagous to java.lang.reflect.Field
  • Reflective access to the value of an attribute uses the [] operator with an operand of type Attribute, e.g.

       var bar = foo.class.Attributes[Name == 'bar'];
       foo[bar] = 2;
       // The above is analogous to the following Java code
       // Field bar = foo.getClass().getField("bar");
       // bar.set(foo, 2);
    

    is the reflective equivalent of

       foo.bar = 2;
    
  • The F3 order by operator is a binary operator. The left-hand side is any list of objects. The right-hand side is an expression that must return a list of comparable objects. The right-hand expression is evaluated in the context of each element of the left hand side. The current element can be accessed with the . (dot) operator (as in XPath).

    For example,

       [1, 2, 3] order by -.
    

    yields

       [3, 2, 1]