Changeset 529


Ignore:
Timestamp:
2008-08-20 08:14:53 (5 years ago)
Author:
jgou
Message:
  • addition of some convenience math, text and date functions to the EL
  • pi is no longer out-the-box available as a variable, but as a math function math:pi()
Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/samples/kauri-forms-sample/src/main/kauri/templates/index.xml

    r524 r529  
    4949          <li>&#x03A0; validation @ validate/pi POST value as entity:   
    5050            <a href="javascript:testValidate('${publicUri('km:/pi-validation')}', ${22/7})">${22/7}</a> -   
    51             <a href="javascript:testValidate('${publicUri('km:/pi-validation')}', ${pi})">${pi}</a>  
     51            <a href="javascript:testValidate('${publicUri('km:/pi-validation')}', ${math:pi()})">${math:pi()}</a>  
    5252          </li>           
    5353        </ul> 
  • trunk/samples/kauri-template-sample/src/main/kauri/public/helloworld.xml

    r238 r529  
    1717    <div> 
    1818      <p>Today we celebrate pi.</p> 
    19       <p>pi = ${pi}</p> 
     19      <p>pi = ${math:pi()}</p> 
    2020    </div> 
    2121    <ktl:insert src="snip.xml" /> 
  • trunk/universe/kauri-template/src/main/java/org/kauriproject/template/el/ParseContext.java

    r203 r529  
    3535    private static Log log = LogFactory.getLog(ParseContext.class); 
    3636 
    37     private ExpressionFactory expressionFactory; 
     37    // private ExpressionFactory expressionFactory; 
    3838 
    3939    private FunctionRegistry functionRegistry; 
     
    4141    public ParseContext(ExpressionFactory expressionFactory, FunctionRegistry functionRegistry) { 
    4242        super(); 
    43         this.expressionFactory = expressionFactory; 
     43        // this.expressionFactory = expressionFactory; 
    4444        this.functionRegistry = functionRegistry; 
    4545        enhance(); 
     
    4747 
    4848    private void enhance() { 
    49         this.addVariables(); 
    5049        this.addMathFunctions(); 
    5150        this.addStringFunctions(); 
     51        this.addDateFunctions(); 
    5252        // by doing this last, registered functions may override functions loaded above. 
    5353        this.addRegisteredFunctions(); 
    54     } 
    55  
    56     private void addVariables() { 
    57         setVariable("pi", expressionFactory.createValueExpression(Math.PI, double.class)); 
    5854    } 
    5955 
     
    6157        String prefix = "math"; 
    6258        try { 
     59            // add some java.lang.Math functions 
    6360            setFunction(prefix, "sin", Math.class.getMethod("sin", double.class)); 
    6461            setFunction(prefix, "cos", Math.class.getMethod("cos", double.class)); 
    6562            setFunction(prefix, "max", Math.class.getMethod("max", double.class, double.class)); 
    6663            setFunction(prefix, "min", Math.class.getMethod("min", double.class, double.class)); 
     64            // add additional math functions 
     65            Method[] methods = MathFunctions.class.getDeclaredMethods(); 
     66            for (Method method : methods) { 
     67                setFunction(prefix, method.getName(), method); 
     68            } 
    6769        } catch (NoSuchMethodException nex) { 
    6870            log.error("Error adding math functions to the EL: " + nex); 
     
    7375        String prefix = "txt"; 
    7476        Method[] methods = StringFunctions.class.getDeclaredMethods(); 
     77        for (Method method : methods) { 
     78            setFunction(prefix, method.getName(), method); 
     79        } 
     80    } 
     81 
     82    private void addDateFunctions() { 
     83        String prefix = "date"; 
     84        Method[] methods = DateFunctions.class.getDeclaredMethods(); 
    7585        for (Method method : methods) { 
    7686            setFunction(prefix, method.getName(), method); 
  • trunk/universe/kauri-template/src/main/java/org/kauriproject/template/el/StringFunctions.java

    r70 r529  
    7070        return string.substring(string.length() - length, string.length()); 
    7171    } 
     72 
     73    public static boolean startsWith(String string, String substring) { 
     74        return string.startsWith(substring); 
     75    } 
     76 
     77    public static boolean endsWith(String string, String substring) { 
     78        return string.endsWith(substring); 
     79    } 
     80 
     81    public static boolean contains(String string, String substring) { 
     82        return string.contains(substring); 
     83    } 
     84 
    7285} 
  • trunk/universe/kauri-template/src/test/resources/org/kauriproject/template/big.xml

    r33 r529  
    2929        </name> 
    3030      </thisPerson> 
    31       <INSZNumber>${pi}</INSZNumber> 
     31      <INSZNumber>${math:pi()}</INSZNumber> 
    3232    </naturalPerson> 
    3333    <worker> 
     
    137137        </name> 
    138138      </thisPerson> 
    139       <INSZNumber>${pi}</INSZNumber> 
     139      <INSZNumber>${math:pi()}</INSZNumber> 
    140140    </naturalPerson> 
    141141    <worker> 
     
    341341        </name> 
    342342      </thisPerson> 
    343       <INSZNumber>${pi}</INSZNumber> 
     343      <INSZNumber>${math:pi()}</INSZNumber> 
    344344    </naturalPerson> 
    345345    <worker> 
     
    569569        </name> 
    570570      </thisPerson> 
    571       <INSZNumber>${pi}</INSZNumber> 
     571      <INSZNumber>${math:pi()}</INSZNumber> 
    572572    </naturalPerson> 
    573573    <worker> 
     
    797797        </name> 
    798798      </thisPerson> 
    799       <INSZNumber>${pi}</INSZNumber> 
     799      <INSZNumber>${math:pi()}</INSZNumber> 
    800800    </naturalPerson> 
    801801    <worker> 
     
    10011001        </name> 
    10021002      </thisPerson> 
    1003       <INSZNumber>${pi}</INSZNumber> 
     1003      <INSZNumber>${math:pi()}</INSZNumber> 
    10041004    </naturalPerson> 
    10051005    <worker> 
     
    10851085        </name> 
    10861086      </thisPerson> 
    1087       <INSZNumber>${pi}</INSZNumber> 
     1087      <INSZNumber>${math:pi()}</INSZNumber> 
    10881088    </naturalPerson> 
    10891089    <worker> 
     
    11931193        </name> 
    11941194      </thisPerson> 
    1195       <INSZNumber>${pi}</INSZNumber> 
     1195      <INSZNumber>${math:pi()}</INSZNumber> 
    11961196    </naturalPerson> 
    11971197    <worker> 
     
    12531253        </name> 
    12541254      </thisPerson> 
    1255       <INSZNumber>${pi}</INSZNumber> 
     1255      <INSZNumber>${math:pi()}</INSZNumber> 
    12561256    </naturalPerson> 
    12571257    <worker> 
     
    14571457        </name> 
    14581458      </thisPerson> 
    1459       <INSZNumber>${pi}</INSZNumber> 
     1459      <INSZNumber>${math:pi()}</INSZNumber> 
    14601460    </naturalPerson> 
    14611461    <worker> 
     
    15891589        </name> 
    15901590      </thisPerson> 
    1591       <INSZNumber>${pi}</INSZNumber> 
     1591      <INSZNumber>${math:pi()}</INSZNumber> 
    15921592    </naturalPerson> 
    15931593    <worker> 
     
    17211721        </name> 
    17221722      </thisPerson> 
    1723       <INSZNumber>${pi}</INSZNumber> 
     1723      <INSZNumber>${math:pi()}</INSZNumber> 
    17241724    </naturalPerson> 
    17251725    <worker> 
     
    18771877        </name> 
    18781878      </thisPerson> 
    1879       <INSZNumber>${pi}</INSZNumber> 
     1879      <INSZNumber>${math:pi()}</INSZNumber> 
    18801880    </naturalPerson> 
    18811881    <worker> 
     
    20092009        </name> 
    20102010      </thisPerson> 
    2011       <INSZNumber>${pi}</INSZNumber> 
     2011      <INSZNumber>${math:pi()}</INSZNumber> 
    20122012    </naturalPerson> 
    20132013    <worker> 
     
    21412141        </name> 
    21422142      </thisPerson> 
    2143       <INSZNumber>${pi}</INSZNumber> 
     2143      <INSZNumber>${math:pi()}</INSZNumber> 
    21442144    </naturalPerson> 
    21452145    <worker> 
     
    22732273        </name> 
    22742274      </thisPerson> 
    2275       <INSZNumber>${pi}</INSZNumber> 
     2275      <INSZNumber>${math:pi()}</INSZNumber> 
    22762276    </naturalPerson> 
    22772277    <worker> 
     
    24772477        </name> 
    24782478      </thisPerson> 
    2479       <INSZNumber>${pi}</INSZNumber> 
     2479      <INSZNumber>${math:pi()}</INSZNumber> 
    24802480    </naturalPerson> 
    24812481    <worker> 
     
    26812681        </name> 
    26822682      </thisPerson> 
    2683       <INSZNumber>${pi}</INSZNumber> 
     2683      <INSZNumber>${math:pi()}</INSZNumber> 
    26842684    </naturalPerson> 
    26852685    <worker> 
     
    27892789        </name> 
    27902790      </thisPerson> 
    2791       <INSZNumber>${pi}</INSZNumber> 
     2791      <INSZNumber>${math:pi()}</INSZNumber> 
    27922792    </naturalPerson> 
    27932793    <worker> 
     
    28732873        </name> 
    28742874      </thisPerson> 
    2875       <INSZNumber>${pi}</INSZNumber> 
     2875      <INSZNumber>${math:pi()}</INSZNumber> 
    28762876    </naturalPerson> 
    28772877    <worker> 
     
    30053005        </name> 
    30063006      </thisPerson> 
    3007       <INSZNumber>${pi}</INSZNumber> 
     3007      <INSZNumber>${math:pi()}</INSZNumber> 
    30083008    </naturalPerson> 
    30093009    <worker> 
     
    31613161        </name> 
    31623162      </thisPerson> 
    3163       <INSZNumber>${pi}</INSZNumber> 
     3163      <INSZNumber>${math:pi()}</INSZNumber> 
    31643164    </naturalPerson> 
    31653165    <worker> 
     
    33173317        </name> 
    33183318      </thisPerson> 
    3319       <INSZNumber>${pi}</INSZNumber> 
     3319      <INSZNumber>${math:pi()}</INSZNumber> 
    33203320    </naturalPerson> 
    33213321    <worker> 
     
    34493449        </name> 
    34503450      </thisPerson> 
    3451       <INSZNumber>${pi}</INSZNumber> 
     3451      <INSZNumber>${math:pi()}</INSZNumber> 
    34523452    </naturalPerson> 
    34533453    <worker> 
     
    39653965        </name> 
    39663966      </thisPerson> 
    3967       <INSZNumber>${pi}</INSZNumber> 
     3967      <INSZNumber>${math:pi()}</INSZNumber> 
    39683968    </naturalPerson> 
    39693969    <worker> 
     
    43134313        </name> 
    43144314      </thisPerson> 
    4315       <INSZNumber>${pi}</INSZNumber> 
     4315      <INSZNumber>${math:pi()}</INSZNumber> 
    43164316    </naturalPerson> 
    43174317    <worker> 
     
    43734373        </name> 
    43744374      </thisPerson> 
    4375       <INSZNumber>${pi}</INSZNumber> 
     4375      <INSZNumber>${math:pi()}</INSZNumber> 
    43764376    </naturalPerson> 
    43774377    <worker> 
     
    45774577        </name> 
    45784578      </thisPerson> 
    4579       <INSZNumber>${pi}</INSZNumber> 
     4579      <INSZNumber>${math:pi()}</INSZNumber> 
    45804580    </naturalPerson> 
    45814581    <worker> 
     
    48774877        </name> 
    48784878      </thisPerson> 
    4879       <INSZNumber>${pi}</INSZNumber> 
     4879      <INSZNumber>${math:pi()}</INSZNumber> 
    48804880    </naturalPerson> 
    48814881    <worker> 
     
    49374937        </name> 
    49384938      </thisPerson> 
    4939       <INSZNumber>${pi}</INSZNumber> 
     4939      <INSZNumber>${math:pi()}</INSZNumber> 
    49404940    </naturalPerson> 
    49414941    <worker> 
     
    50455045        </name> 
    50465046      </thisPerson> 
    5047       <INSZNumber>${pi}</INSZNumber> 
     5047      <INSZNumber>${math:pi()}</INSZNumber> 
    50485048    </naturalPerson> 
    50495049    <worker> 
     
    53455345        </name> 
    53465346      </thisPerson> 
    5347       <INSZNumber>${pi}</INSZNumber> 
     5347      <INSZNumber>${math:pi()}</INSZNumber> 
    53485348    </naturalPerson> 
    53495349    <worker> 
     
    55015501        </name> 
    55025502      </thisPerson> 
    5503       <INSZNumber>${pi}</INSZNumber> 
     5503      <INSZNumber>${math:pi()}</INSZNumber> 
    55045504    </naturalPerson> 
    55055505    <worker> 
     
    55615561        </name> 
    55625562      </thisPerson> 
    5563       <INSZNumber>${pi}</INSZNumber> 
     5563      <INSZNumber>${math:pi()}</INSZNumber> 
    55645564    </naturalPerson> 
    55655565    <worker> 
     
    55975597        </name> 
    55985598      </thisPerson> 
    5599       <INSZNumber>${pi}</INSZNumber> 
     5599      <INSZNumber>${math:pi()}</INSZNumber> 
    56005600    </naturalPerson> 
    56015601    <worker> 
     
    57295729        </name> 
    57305730      </thisPerson> 
    5731       <INSZNumber>${pi}</INSZNumber> 
     5731      <INSZNumber>${math:pi()}</INSZNumber> 
    57325732    </naturalPerson> 
    57335733    <worker> 
     
    58855885        </name> 
    58865886      </thisPerson> 
    5887       <INSZNumber>${pi}</INSZNumber> 
     5887      <INSZNumber>${math:pi()}</INSZNumber> 
    58885888    </naturalPerson> 
    58895889    <worker> 
     
    63776377        </name> 
    63786378      </thisPerson> 
    6379       <INSZNumber>${pi}</INSZNumber> 
     6379      <INSZNumber>${math:pi()}</INSZNumber> 
    63806380    </naturalPerson> 
    63816381    <worker> 
     
    70137013        </name> 
    70147014      </thisPerson> 
    7015       <INSZNumber>${pi}</INSZNumber> 
     7015      <INSZNumber>${math:pi()}</INSZNumber> 
    70167016    </naturalPerson> 
    70177017    <worker> 
     
    70977097        </name> 
    70987098      </thisPerson> 
    7099       <INSZNumber>${pi}</INSZNumber> 
     7099      <INSZNumber>${math:pi()}</INSZNumber> 
    71007100    </naturalPerson> 
    71017101    <worker> 
     
    71337133        </name> 
    71347134      </thisPerson> 
    7135       <INSZNumber>${pi}</INSZNumber> 
     7135      <INSZNumber>${math:pi()}</INSZNumber> 
    71367136    </naturalPerson> 
    71377137    <worker> 
     
    72177217        </name> 
    72187218      </thisPerson> 
    7219       <INSZNumber>${pi}</INSZNumber> 
     7219      <INSZNumber>${math:pi()}</INSZNumber> 
    72207220    </naturalPerson> 
    72217221    <worker> 
     
    73977397        </name> 
    73987398      </thisPerson> 
    7399       <INSZNumber>${pi}</INSZNumber> 
     7399      <INSZNumber>${math:pi()}</INSZNumber> 
    74007400    </naturalPerson> 
    74017401    <worker> 
     
    75057505        </name> 
    75067506      </thisPerson> 
    7507       <INSZNumber>${pi}</INSZNumber> 
     7507      <INSZNumber>${math:pi()}</INSZNumber> 
    75087508    </naturalPerson> 
    75097509    <worker> 
     
    76377637        </name> 
    76387638      </thisPerson> 
    7639       <INSZNumber>${pi}</INSZNumber> 
     7639      <INSZNumber>${math:pi()}</INSZNumber> 
    76407640    </naturalPerson> 
    76417641    <worker> 
     
    79857985        </name> 
    79867986      </thisPerson> 
    7987       <INSZNumber>${pi}</INSZNumber> 
     7987      <INSZNumber>${math:pi()}</INSZNumber> 
    79887988    </naturalPerson> 
    79897989    <worker> 
     
    81898189        </name> 
    81908190      </thisPerson> 
    8191       <INSZNumber>${pi}</INSZNumber> 
     8191      <INSZNumber>${math:pi()}</INSZNumber> 
    81928192    </naturalPerson> 
    81938193    <worker> 
     
    82978297        </name> 
    82988298      </thisPerson> 
    8299       <INSZNumber>${pi}</INSZNumber> 
     8299      <INSZNumber>${math:pi()}</INSZNumber> 
    83008300    </naturalPerson> 
    83018301    <worker> 
     
    83578357        </name> 
    83588358      </thisPerson> 
    8359       <INSZNumber>${pi}</INSZNumber> 
     8359      <INSZNumber>${math:pi()}</INSZNumber> 
    83608360    </naturalPerson> 
    83618361    <worker> 
     
    85378537        </name> 
    85388538      </thisPerson> 
    8539       <INSZNumber>${pi}</INSZNumber> 
     8539      <INSZNumber>${math:pi()}</INSZNumber> 
    85408540    </naturalPerson> 
    85418541    <worker> 
     
    86218621        </name> 
    86228622      </thisPerson> 
    8623       <INSZNumber>${pi}</INSZNumber> 
     8623      <INSZNumber>${math:pi()}</INSZNumber> 
    86248624    </naturalPerson> 
    86258625    <worker> 
     
    86818681        </name> 
    86828682      </thisPerson> 
    8683       <INSZNumber>${pi}</INSZNumber> 
     8683      <INSZNumber>${math:pi()}</INSZNumber> 
    86848684    </naturalPerson> 
    86858685    <worker> 
     
    87418741        </name> 
    87428742      </thisPerson> 
    8743       <INSZNumber>${pi}</INSZNumber> 
     8743      <INSZNumber>${math:pi()}</INSZNumber> 
    87448744    </naturalPerson> 
    87458745    <worker> 
     
    88018801        </name> 
    88028802      </thisPerson> 
    8803       <INSZNumber>${pi}</INSZNumber> 
     8803      <INSZNumber>${math:pi()}</INSZNumber> 
    88048804    </naturalPerson> 
    88058805    <worker> 
  • trunk/universe/kauri-template/src/test/resources/org/kauriproject/template/elfunc.xml

    r70 r529  
    11<?xml version="1.0" encoding="UTF-8"?> 
    22<root xmlns:ktl="http://kauriproject.org/template"> 
    3   <p>${math:sin(pi/2) == 1.0}</p> 
    4   <p>${math:cos(pi/2) &gt;= 0 and math:cos(pi/2) &lt;= 0.001}</p> 
    5   <p>${math:min(3.1415926,pi) &lt;= pi}</p> 
    6   <p>${txt:toUpperCase('kauri')} ${txt:toUpperCase('rules')}</p> 
    7   <p>${txt:toLowerCase(txt:toUpperCase('dEUs'))}</p> 
    8   <p>${txt:trim(' trimmed string ')}</p> 
    9   <p>${txt:length(txt:substring(txt:string(pi),2,5))}</p> 
    10   <p>${txt:left('kauri-templating',5)}+${txt:right('kauri-templating',10)}</p> 
     3  <div class="math"> 
     4    <p>${math:sin(math:pi()/2) == 1.0}</p> 
     5    <p>${math:cos(math:pi()/2) &gt;= 0 and math:cos(math:pi()/2) &lt;= 0.001}</p> 
     6    <p>${math:min(3.1415926,math:pi()) &lt;= math:pi()}</p> 
     7  </div> 
     8  <div class="txt"> 
     9    <p>${txt:toUpperCase('kauri')} ${txt:toUpperCase('rules')}</p> 
     10    <p>${txt:toLowerCase(txt:toUpperCase('dEUs'))}</p> 
     11    <p>${txt:trim(' trimmed string ')}</p> 
     12    <p>${txt:length(txt:substring(txt:string(math:pi()),2,5))}</p> 
     13    <p>${txt:left('kauri-templating',5)}+${txt:right('kauri-templating',10)}</p> 
     14    <p>${txt:contains('tingelingeling','ling')} - ${txt:contains('tingelingeling','bla')}</p> 
     15    <p>${txt:startsWith('tingelingeling','tin')} - ${txt:startsWith('tingelingeling','bla')}</p> 
     16    <p>${txt:endsWith('tingelingeling','ing')} - ${txt:endsWith('tingelingeling','bla')}</p> 
     17  </div> 
     18  <div class="date"> 
     19    <p>${date:now("dd/MM/yyyy HH'u'mm") != ""}</p> 
     20    <p>${date:format(date:date(1980,2,8),"dd/MM/yyyy")}</p> 
     21    <p>${date:format(date:time(16,25,18),"HH:mm:ss")}</p> 
     22    <p>${date:format(date:datetime(1980,2,8,16,25,18),"dd/MM/yyyy HH'u'mm")}</p> 
     23  </div> 
    1124</root> 
  • trunk/universe/kauri-template/src/test/resources/org/kauriproject/template/elfunc_result.xml

    r70 r529  
    11<?xml version="1.0" encoding="UTF-8"?> 
    22<root xmlns:ktl="http://kauriproject.org/template"> 
    3   <p>true</p> 
    4   <p>true</p> 
    5   <p>true</p> 
    6   <p>KAURI RULES</p> 
    7   <p>deus</p> 
    8   <p>trimmed string</p> 
    9   <p>3</p> 
    10   <p>kauri+templating</p> 
     3  <div class="math"> 
     4    <p>true</p> 
     5    <p>true</p> 
     6    <p>true</p> 
     7  </div> 
     8  <div class="txt"> 
     9    <p>KAURI RULES</p> 
     10    <p>deus</p> 
     11    <p>trimmed string</p> 
     12    <p>3</p> 
     13    <p>kauri+templating</p> 
     14    <p>true - false</p> 
     15    <p>true - false</p> 
     16    <p>true - false</p>   
     17  </div> 
     18  <div class="date"> 
     19    <p>true</p> 
     20    <p>08/02/1980</p> 
     21    <p>16:25:18</p> 
     22    <p>08/02/1980 16u25</p> 
     23  </div> 
    1124</root> 
  • trunk/universe/kauri-template/src/test/resources/org/kauriproject/template/mix.xml

    r370 r529  
    2424    <ktl:otherwise> 
    2525      <p>other</p> 
    26       <ktl:if test="${math:sin(pi/2) == 1.0}"> 
     26      <ktl:if test="${math:sin(math:pi()/2) == 1.0}"> 
    2727        <p>the sine of pi/2 equals 1</p> 
    2828      </ktl:if> 
    2929      <ktl:if 
    30         test="${math:cos(pi/2) &gt;= 0 and math:cos(pi/2) &lt;= 0.001}"> 
     30        test="${math:cos(math:pi()/2) &gt;= 0 and math:cos(math:pi()/2) &lt;= 0.001}"> 
    3131        <p>the cosine of pi/2 equals 0</p> 
    3232      </ktl:if> 
    33       <ktl:if test="${math:min(3.1415926,pi) &lt;= pi}"> 
     33      <ktl:if test="${math:min(3.1415926,math:pi()) &lt;= math:pi()}"> 
    3434        <p>the above is always true</p> 
    3535      </ktl:if> 
Note: See TracChangeset for help on using the changeset viewer.