You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by mr...@apache.org on 2005/10/06 01:54:07 UTC

svn commit: r295142 - in /struts/flow/trunk: ./ src/examples/WEB-INF/guess/ src/examples/WEB-INF/remote/ src/examples/WEB-INF/templates/ src/java/org/apache/struts/flow/ src/java/org/apache/struts/flow/core/ src/java/org/apache/struts/flow/ibatis/

Author: mrdon
Date: Wed Oct  5 16:54:04 2005
New Revision: 295142

URL: http://svn.apache.org/viewcvs?rev=295142&view=rev
Log:
 * Changing examples to auto-reload flow scripts
 * Adding experimental ibatis integration
 * Adding the ability to define classes outside core

Added:
    struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/
    struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java   (with props)
Modified:
    struts/flow/trunk/build.xml
    struts/flow/trunk/project.xml
    struts/flow/trunk/src/examples/WEB-INF/guess/struts-config.xml
    struts/flow/trunk/src/examples/WEB-INF/remote/struts-config.xml
    struts/flow/trunk/src/examples/WEB-INF/templates/struts-config.xml
    struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java
    struts/flow/trunk/src/java/org/apache/struts/flow/core/JavaScriptInterpreter.java

Modified: struts/flow/trunk/build.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/build.xml?rev=295142&r1=295141&r2=295142&view=diff
==============================================================================
--- struts/flow/trunk/build.xml (original)
+++ struts/flow/trunk/build.xml Wed Oct  5 16:54:04 2005
@@ -113,6 +113,13 @@
               ignoreerrors="true" 
               src="http://www.ibiblio.org/maven/commons-beanutils/jars/commons-beanutils-1.7.0.jar"/> 
  
+        <get dest="${lib.core}/ibatis-common-2.jar" usetimestamp="true" 
+              ignoreerrors="true" 
+              src="http://www.ibiblio.org/maven/com.ibatis/jars/ibatis2-common-2.1.5.582.jar"/> 
+        <get dest="${lib.core}/ibatis-sqlmap-2.jar" usetimestamp="true" 
+              ignoreerrors="true" 
+              src="http://www.ibiblio.org/maven/com.ibatis/jars/ibatis2-sqlmap-2.1.5.582.jar"/> 
+ 
         <get dest="${lib.core}/commons-validator.jar" usetimestamp="true" 
               ignoreerrors="true" 
               src="http://www.ibiblio.org/maven/commons-validator/jars/commons-validator-1.1.3.jar"/> 

Modified: struts/flow/trunk/project.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/project.xml?rev=295142&r1=295141&r2=295142&view=diff
==============================================================================
--- struts/flow/trunk/project.xml (original)
+++ struts/flow/trunk/project.xml Wed Oct  5 16:54:04 2005
@@ -81,7 +81,27 @@
 	  </properties>
       <url>http://xdoclet.sourceforge.net/xjavadoc/</url>
 	</dependency>
+
+	<dependency>
+	  <groupId>com.ibatis</groupId>
+	  <artifactId>ibatis2-common</artifactId>
+	  <version>2.1.5.582</version>
+	  <properties>
+		<war.bundle>true</war.bundle>
+	  </properties>
+      <url>http://ibatis.apache.org/</url>
+	</dependency>
   
+    <dependency>
+	  <groupId>com.ibatis</groupId>
+	  <artifactId>ibatis2-sqlmap</artifactId>
+	  <version>2.1.5.582</version>
+	  <properties>
+		<war.bundle>true</war.bundle>
+	  </properties>
+      <url>http://ibatis.apache.org/</url>
+	</dependency>
+ 
   </dependencies>
   
   <build>

Modified: struts/flow/trunk/src/examples/WEB-INF/guess/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/WEB-INF/guess/struts-config.xml?rev=295142&r1=295141&r2=295142&view=diff
==============================================================================
--- struts/flow/trunk/src/examples/WEB-INF/guess/struts-config.xml (original)
+++ struts/flow/trunk/src/examples/WEB-INF/guess/struts-config.xml Wed Oct  5 16:54:04 2005
@@ -25,6 +25,7 @@
   <plug-in className="org.apache.struts.flow.FlowPlugIn">
     <set-property property="scripts" value="/WEB-INF/guess/numberguess.js" />
     <set-property property="debugger" value="false" />
+    <set-property property="reloadScripts" value="true" />
     <set-property property="timeToLive" value="600000" />
   </plug-in>
 

Modified: struts/flow/trunk/src/examples/WEB-INF/remote/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/WEB-INF/remote/struts-config.xml?rev=295142&r1=295141&r2=295142&view=diff
==============================================================================
--- struts/flow/trunk/src/examples/WEB-INF/remote/struts-config.xml (original)
+++ struts/flow/trunk/src/examples/WEB-INF/remote/struts-config.xml Wed Oct  5 16:54:04 2005
@@ -24,6 +24,7 @@
 
   <plug-in className="org.apache.struts.flow.FlowPlugIn">
     <set-property property="scripts" value="/WEB-INF/remote/numberguess.js" />
+    <set-property property="reloadScripts" value="true" />
     <set-property property="debugger" value="false" />
     <set-property property="timeToLive" value="600000" />
   </plug-in>

Modified: struts/flow/trunk/src/examples/WEB-INF/templates/struts-config.xml
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/examples/WEB-INF/templates/struts-config.xml?rev=295142&r1=295141&r2=295142&view=diff
==============================================================================
--- struts/flow/trunk/src/examples/WEB-INF/templates/struts-config.xml (original)
+++ struts/flow/trunk/src/examples/WEB-INF/templates/struts-config.xml Wed Oct  5 16:54:04 2005
@@ -21,6 +21,7 @@
 
   <plug-in className="org.apache.struts.flow.FlowPlugIn">
     <set-property property="scripts" value="/WEB-INF/templates/numberguess.js" />
+    <set-property property="reloadScripts" value="true" />
     <set-property property="debugger" value="false" />
     <set-property property="timeToLive" value="600000" />
   </plug-in>

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java?rev=295142&r1=295141&r2=295142&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/FlowPlugIn.java Wed Oct  5 16:54:04 2005
@@ -15,8 +15,8 @@
  */
 package org.apache.struts.flow;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
+import java.io.*;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -30,6 +30,10 @@
 import org.apache.struts.flow.core.JavaScriptInterpreter;
 import org.apache.struts.flow.core.DefaultCallVariableRegistrar;
 import org.apache.struts.flow.sugar.SugarWrapFactory;
+import org.apache.struts.flow.ibatis.SqlMap;
+
+import com.ibatis.sqlmap.client.*;
+import com.ibatis.common.resources.*;
 
 /**
  *  Initializes the Flow interpreter and loads system and user scripts. There
@@ -76,6 +80,7 @@
     private ServletContext context;
     private String scripts = null;
     private String scriptBase = null;
+    private List classesToRegister = new ArrayList();
 
     private boolean debugger = false;
     private boolean reloadScripts;
@@ -153,6 +158,35 @@
         this.ttl = ttl;
     }
 
+    public void setSqlMapConfig(String path) {
+        try {
+            Reader reader = Resources.getResourceAsReader(path);
+            SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(reader);
+            SqlMap.setSqlMapClient(client);
+            classesToRegister.add(SqlMap.class);
+        
+            /*
+            Set namespaces = SqlMap.getNamespaces();
+            for (Iterator i = namespaces.iterator(); i.hasNext(); ) {
+                final String ns = (String)i.next();
+                classesToRegister.add(
+                    new SqlMap() {
+                        //public SqlMap() {
+                        //    setNamespace(ns);
+                        //}
+                       
+                        public String getClassName() {
+                            return ns;
+                        }
+                    }s
+                );
+            }
+            */
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    } 
+
 
     /**
      *  Initialize the flow interpreter
@@ -227,9 +261,10 @@
         interp.setCheckTime(checkTime);
         interp.setReloadScripts(reloadScripts);
         interp.setWrapFactory(new SugarWrapFactory());
-        interp.initialize();
+        interp.initialize(classesToRegister);
         interp.register("/system.js");
         interp.addVariableRegistrar(new DefaultCallVariableRegistrar(Struts.class, "struts"));
+        interp.addVariableRegistrar(new DefaultCallVariableRegistrar(SqlMap.class, "sqlMap"));
         return interp;
     }
 

Modified: struts/flow/trunk/src/java/org/apache/struts/flow/core/JavaScriptInterpreter.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/core/JavaScriptInterpreter.java?rev=295142&r1=295141&r2=295142&view=diff
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/core/JavaScriptInterpreter.java (original)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/core/JavaScriptInterpreter.java Wed Oct  5 16:54:04 2005
@@ -222,6 +222,16 @@
      *@exception  FlowException  If anything goes wrong
      */
     public void initialize() throws FlowException {
+        initialize(null);
+    }
+    
+
+    /**
+     *  Initialize the global scope
+     *
+     *@exception  FlowException  If anything goes wrong
+     */
+    public void initialize(List classes) throws FlowException {
         if (enableDebugger) {
             if (getLogger().isDebugEnabled()) {
                 getLogger().debug("Flow debugger enabled, creating");
@@ -241,6 +251,13 @@
             // Register some handy classes with JavaScript, so we can make
             // use of them from the flow layer.
             initScope(context, scope);
+
+            // Register any custom classes
+            if (classes != null) {
+                for (Iterator i = classes.iterator(); i.hasNext(); ) {
+                    ScriptableObject.defineClass(scope, (Class)i.next());
+                }
+            }
 
             errorReporter = new JSErrorReporter(getLogger());
         } catch (Exception e) {

Added: struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java
URL: http://svn.apache.org/viewcvs/struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java?rev=295142&view=auto
==============================================================================
--- struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java (added)
+++ struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java Wed Oct  5 16:54:04 2005
@@ -0,0 +1,134 @@
+/*
+ *  Copyright 1999-2004 The Apache Software Foundation.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.struts.flow.ibatis;
+
+import org.mozilla.javascript.*;
+import com.ibatis.sqlmap.engine.mapping.statement.*;
+import com.ibatis.sqlmap.engine.impl.*;
+import com.ibatis.sqlmap.client.*;
+import org.apache.struts.flow.core.*;
+import org.apache.struts.flow.sugar.*;
+
+import org.mozilla.javascript.JavaScriptException;
+import java.util.*;
+import java.io.*;
+import java.sql.SQLException;
+
+/**
+ *  JavaScript interface to the log facility.
+ *
+ *@jsname log
+ */
+public class SqlMap extends ScriptableObject {
+    protected static SqlMapClient client;
+    protected String namespace;
+    protected Map statements = new HashMap();
+
+
+    /**  Constructor for the JSLog object */
+    public SqlMap() { }
+
+    public static void setSqlMapClient(SqlMapClient c) {
+        client = c;
+    }
+
+    public Object jsFunction_setNamespace(String ns) throws JavaScriptException {
+        setNamespace(ns);
+        return null;
+    }
+
+    public void setNamespace(String ns) {
+        System.out.println("setting namespace");
+        this.namespace = ns;
+        statements.clear();
+        SqlMapClientImpl cimpl = (SqlMapClientImpl)client;
+        SqlMapExecutorDelegate del = cimpl.getDelegate();
+        String name;
+        for (Iterator i = del.getMappedStatementNames(); i.hasNext(); ) {
+            name = (String) i.next();
+            System.out.println("looking at statement "+name);
+            if (name.startsWith(namespace+".")) {
+                System.out.println("adding statement "+name);
+                statements.put(name.substring(namespace.length() + 1), del.getMappedStatement(name));
+            }
+        }
+    }
+
+    public Set getNamespaces() {
+        Set result = new HashSet();
+        SqlMapClientImpl cimpl = (SqlMapClientImpl)client;
+        SqlMapExecutorDelegate del = cimpl.getDelegate();
+        String name, ns;
+        int pos;
+        for (Iterator i = del.getMappedStatementNames(); i.hasNext(); ) {
+            name = (String) i.next();
+            pos = name.indexOf('.');
+            if (pos > -1) {
+                ns = name.substring(0, pos);    
+                result.add(ns);
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     *  Gets the class name
+     *
+     *@return    The className value
+     */
+    public String getClassName() {
+        return (this.namespace == null ? "SqlMap" : this.namespace);
+    }
+
+    public Object get(final String name, Scriptable start) {
+
+        System.out.println("getting property "+name);
+        final MappedStatement ms = (MappedStatement) statements.get(name);
+        if (ms != null) {
+            System.out.println("found as a function");
+            return new ExtensionFunction() {    
+                public Object execute(Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args) 
+                    throws IOException {
+                   
+                    Map params = JSFlow.jsobjectToMap(thisObj); 
+                    String stmName = namespace+"."+name;
+                    Object result = null;
+                    StatementType type = ms.getStatementType();
+                    try {  
+                        if (type == StatementType.INSERT) {
+                            result = client.insert(stmName, params);
+                        } else if (type == StatementType.DELETE) {
+                            result = new Integer(client.delete(stmName, params));
+                        } else if (type == StatementType.UPDATE) {
+                            result = new Integer(client.update(stmName, params));
+                        } else {
+                            result = client.queryForList(stmName, params);
+                        }
+                    } catch (SQLException ex) {
+                        ex.printStackTrace();
+                    }
+                    return result;
+                }
+            };
+        } else {
+            return super.get(name, start);
+        }
+    }
+ 
+    
+}
+

Propchange: struts/flow/trunk/src/java/org/apache/struts/flow/ibatis/SqlMap.java
------------------------------------------------------------------------------
    svn:executable = *



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org