Author: tdraier
Date: Fri Sep 14 13:33:34 2007
New Revision: 18489

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18489&repname=
=3Djahia
Log:
added sql patcher (port 18356)

Modified:
    trunk/core/src/java/org/jahia/version/GroovyPatcher.java
    trunk/core/src/java/org/jahia/version/SqlPatcher.java
    trunk/core/src/java/org/jahia/version/VersionService.java

Modified: trunk/core/src/java/org/jahia/version/GroovyPatcher.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/version/GroovyPatcher.java&rev=3D18489&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/version/GroovyPatcher.java (original)
+++ trunk/core/src/java/org/jahia/version/GroovyPatcher.java Fri Sep 14 13:=
33:34 2007
@@ -7,6 +7,7 @@
 import org.jahia.services.events.JahiaGroovyEngine;
 import org.jahia.hibernate.manager.SpringContextSingleton;
 import org.jahia.bin.Jahia;
+import org.apache.log4j.Logger;
 =

 import java.io.File;
 import java.io.IOException;
@@ -19,18 +20,19 @@
  * To change this template use File | Settings | File Templates.
  */
 public class GroovyPatcher implements Patcher {
+    private Logger logger =3D Logger.getLogger(GroovyPatcher.class);
     private GroovyScriptEngine scriptEngine;
 =

     public GroovyPatcher() {
         try {
             scriptEngine =3D new GroovyScriptEngine(Jahia.getSettings().ge=
tJahiaEtcDiskPath() + File.separator + "patches");
         } catch (IOException e) {
-            e.printStackTrace();  //To change body of catch statement use =
File | Settings | File Templates.
+            logger.error("Cannot instantiate groovyt engine",e);
         }
     }
 =

     public boolean canHandlePatch(Patch patch, int lastVersion, int curren=
tVersion) {
-        if ("groovy".equals(patch.getExt())) {
+        if ("groovy".equals(patch.getExt()) && scriptEngine !=3D null) {
             return patch.getNumber() > lastVersion && patch.getNumber() < =
currentVersion;
         }
         return false;
@@ -41,10 +43,10 @@
             Binding binding =3D new Binding();
             scriptEngine.run(patch.getName(), binding);
         } catch (ResourceException e) {
-            e.printStackTrace();  //To change body of catch statement use =
File | Settings | File Templates.
+            logger.error("Resource exception",e);
             return 1;
         } catch (ScriptException e) {
-            e.printStackTrace();  //To change body of catch statement use =
File | Settings | File Templates.
+            logger.error("Exception when executing script",e);
             return 2;
         }
 =


Modified: trunk/core/src/java/org/jahia/version/SqlPatcher.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/version/SqlPatcher.java&rev=3D18489&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/version/SqlPatcher.java (original)
+++ trunk/core/src/java/org/jahia/version/SqlPatcher.java Fri Sep 14 13:33:=
34 2007
@@ -1,5 +1,21 @@
 package org.jahia.version;
 =

+import org.apache.log4j.Logger;
+import org.jahia.bin.Jahia;
+import org.jahia.admin.database.DatabaseScripts;
+import org.jahia.services.database.ConnectionDispenser;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Iterator;
+import java.io.File;
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.sql.Connection;
+import java.sql.Statement;
+import java.sql.SQLException;
+
 /**
  * Created by IntelliJ IDEA.
  * User: toto
@@ -7,5 +23,71 @@
  * Time: 10:44:44
  * To change this template use File | Settings | File Templates.
  */
-public class SqlPatcher {
+public class SqlPatcher implements Patcher {
+    private Logger logger =3D Logger.getLogger(SqlPatcher.class);
+    private String dbSchema;
+    private DatabaseScripts scriptHelper =3D new DatabaseScripts();
+
+    public SqlPatcher() {
+        dbSchema =3D Jahia.getSettings().getPropertiesFile().getProperty("=
db_script");
+        dbSchema =3D dbSchema.substring(0, dbSchema.indexOf('.'));
+    }
+
+    public boolean canHandlePatch(Patch patch, int lastVersion, int curren=
tVersion) {
+        if ("sql".equals(patch.getExt())) {
+            String name =3D patch.getName();
+            if (name.indexOf('_') !=3D name.lastIndexOf('_')) {
+                String db =3D name.substring(name.indexOf('_')+1,name.last=
IndexOf('_'));
+                if (!db.equals(dbSchema)) {
+                    return false;
+                }
+            }
+            return patch.getNumber() > lastVersion && patch.getNumber() < =
currentVersion;
+        }
+        return false;
+    }
+
+    public int execute(Patch patch) {
+        Connection c =3D null;
+        Statement stmt =3D null;
+        try {
+            c =3D ConnectionDispenser.getConnection();
+            stmt =3D c.createStatement();
+
+            List stmts =3D scriptHelper.getScriptFileStatements(patch.getF=
ile());
+            for (Iterator iterator =3D stmts.iterator(); iterator.hasNext(=
);) {
+                String line =3D (String) iterator.next();
+                try {
+                    stmt.execute(line);
+                } catch (Exception e) {
+                    // first let's check if it is a DROP TABLE query, if i=
t is,
+                    // we will just fail silently.
+                    String upperCaseLine =3D line.toUpperCase().trim();
+                    if (!upperCaseLine.startsWith("DROP") && !upperCaseLin=
e.startsWith("ALTER TABLE")
+                        && !upperCaseLine.startsWith("CREATE INDEX")) {
+                        logger.error("Error while trying to execute query =
: " + line + " from script " + patch.getName(), e);
+                        // continue to propagate the exception upwards.
+                        return 1;
+                    } else if(upperCaseLine.startsWith("CREATE INDEX")){
+                        logger.warn("Error while trying to execute query :=
 " + line, e);
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            logger.error("Error when executing SQL script " + patch.getNam=
e(),e);
+            return 2;
+        } finally {
+            try {
+                if (c !=3D null) {
+                    c.close();
+                }
+            } catch (SQLException e) {
+                logger.error("Cannot close connection",e);
+            }
+        }
+        return 0;
+    }
+   =

+
 }

Modified: trunk/core/src/java/org/jahia/version/VersionService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/version/VersionService.java&rev=3D18489&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/version/VersionService.java (original)
+++ trunk/core/src/java/org/jahia/version/VersionService.java Fri Sep 14 13=
:33:34 2007
@@ -40,7 +40,8 @@
         patchManager =3D (JahiaInstalledPatchManager) SpringContextSinglet=
on.getInstance().getContext().getBean(JahiaInstalledPatchManager.class.getN=
ame());
 =

         patchers.add(new GroovyPatcher());
-
+        patchers.add(new SqlPatcher());
+        =

         File dir =3D new File(Jahia.getSettings().getJahiaEtcDiskPath() + =
File.separator + "patches");
         File[] files =3D dir.listFiles();
 =


_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to