[Schmitzm-commits] r1079 - branches/2.2.x/src/schmitzm/lang/tree

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Wed Oct 6 22:53:45 CEST 2010


Author: mojays
Date: 2010-10-06 22:53:44 +0200 (Wed, 06 Oct 2010)
New Revision: 1079

Modified:
   branches/2.2.x/src/schmitzm/lang/tree/OperationTree.java
   branches/2.2.x/src/schmitzm/lang/tree/OperationTreeParser.java
Log:
OperationTree/Parser: new functions millis(.) and datestr(.) to deal with dates

Modified: branches/2.2.x/src/schmitzm/lang/tree/OperationTree.java
===================================================================
--- branches/2.2.x/src/schmitzm/lang/tree/OperationTree.java	2010-10-06 20:53:31 UTC (rev 1078)
+++ branches/2.2.x/src/schmitzm/lang/tree/OperationTree.java	2010-10-06 20:53:44 UTC (rev 1079)
@@ -29,6 +29,8 @@
  ******************************************************************************/
 package schmitzm.lang.tree;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.Random;
 import java.util.regex.Pattern;
 
@@ -62,6 +64,8 @@
  *         <li>Test auf regulaeren Ausdruck: {@code "regex(expression,regular expr)"}</li>
  *         <li>n-tes Ergebnis eines {@linkplain String#split(String) String-Splits} ueber regulaeren Ausdruck: {@code "split(expression,regular expr,n)"}</li>
  *         <li>String-Ersetzung: {@code "replAll(expression,pattern expr,repl expr)"}</li>
+ *         <li>Umwandung eines Datums-String in Milli-Sekunden: {@code millis(string expr, format string expr)}
+ *         <li>Umwandung von Milli-Sekunden in einen Datums-String: {@code dateStr(num expr, format string expr)}
  *       </ul></li>
  *   <li>{@link UnaryOperatorNode}: Innere Knoten, die fuer einen 1-stelligen
  *       Operator auf dem <i>linken</i> Sohn stehen:
@@ -410,8 +414,27 @@
 //        boolean ret = Pattern.matches(operand2.toString(), operand1.toString());
         return Pattern.matches(operand2.toString(), operand1.toString()) ? 1 : 0;
       }
+      if ( operator.equals("MILLIS") ) {
+        SimpleDateFormat formatter = new SimpleDateFormat(operand2.toString());
+        try {
+          Date date = formatter.parse(operand1.toString());
+          return date.getTime();
+        } catch (Exception err) {
+          throw new UnsupportedOperationException(err);
+        }
+      }
     }
 
+    // Long/String-Operationen
+    if ( operand1 instanceof Number && operand2 instanceof String ) {
+      if ( operator.equals("DATESTR") ) {
+        SimpleDateFormat formatter = new SimpleDateFormat(operand2.toString());
+        long millis = ((Number)operand1).longValue();
+        Date date   = new Date(millis);
+        return formatter.format(date);
+      }
+    }
+
     String op1Class = (operand1 != null) ? operand1.getClass().getSimpleName() : null;
     String op2Class = (operand2 != null) ? operand2.getClass().getSimpleName() : null;
     throw new UnsupportedOperationException( LangUtil.RESOURCE.getString("OperationTree.err.UnknownOperator",operator+" ("+op1Class+", "+op2Class+")") );

Modified: branches/2.2.x/src/schmitzm/lang/tree/OperationTreeParser.java
===================================================================
--- branches/2.2.x/src/schmitzm/lang/tree/OperationTreeParser.java	2010-10-06 20:53:31 UTC (rev 1078)
+++ branches/2.2.x/src/schmitzm/lang/tree/OperationTreeParser.java	2010-10-06 20:53:44 UTC (rev 1079)
@@ -91,6 +91,8 @@
  *          <li>String-Konkatenation: {@code "+"}</li>
  *          <li>Test auf regulaeren Ausdruck: {@code "regex(expression,regular expr)"}</li>
  *          <li>n-tes Ergebnis eines {@linkplain String#split(String) String-Splits} ueber regulaeren Ausdruck: {@code "split(expression,regular expr,n)"}</li>
+ *          <li>Umwandung eines Datums-String in Milli-Sekunden: {@code millis(string expr, format string expr)}
+ *          <li>Umwandung von Milli-Sekunden in einen Datums-String: {@code dateStr(num expr, format string expr)}
  *       </ul></li>
  *   <li>den mehr-stelligen Zeichenketten-Operatoren: {@link MultiParamOperatorNode}
  *       <ul>
@@ -980,6 +982,22 @@
       return new OperationTree.MultiParamOperatorNode(token,null,splitParam);
     }
 
+    // MILLIS(string,formatexpr) = Umwandung von Datums-String (in angebenen Format) in Millisekunden
+    if ( token.equals("millis") ) {
+      // Parameter fuer MILLIS parsen
+      BinaryTreeNode[] millisParam = parseFunctionParameters("MILLIS",2);
+      // Baum fuer MILLIS
+      return new OperationTree.OperatorNode(token,millisParam[0],millisParam[1]);
+    }
+
+    // DATE(num,formatexpr) = Umwandung von Millisekunden in Datums-String (in angebenen Format)
+    if ( token.equals("datestr") ) {
+      // Parameter fuer MILLIS parsen
+      BinaryTreeNode[] millisParam = parseFunctionParameters("DATESTR",2);
+      // Baum fuer DATESTR
+      return new OperationTree.OperatorNode(token,millisParam[0],millisParam[1]);
+    }
+
     // SUBSTR(string,startPos_inkl,endPos_exkl) = Teil-String
     if ( token.equals("substr") ) {
       // Parameter fuer SUBSTR parsen



More information about the Schmitzm-commits mailing list