Index: topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java diff -u topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.23 topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.24 --- topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.23 Fri Jul 21 00:52:22 2006 +++ topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java Mon Aug 21 12:56:51 2006 @@ -23,17 +23,21 @@ * * @author poussin * - * @version $Revision: 1.23 $ + * @version $Revision: 1.24 $ * - * Last update: $Date: 2006/07/21 00:52:22 $ by : $Author: thimel $ + * Last update: $Date: 2006/08/21 12:56:51 $ by : $Author: bpoussin $ */ package org.codelutin.topia.framework; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; +import java.sql.ResultSet; +import java.sql.Statement; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -90,6 +94,8 @@ import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.ReplicationMode; +import org.hibernate.SQLQuery; +import org.hibernate.ScrollableResults; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; @@ -1416,4 +1422,57 @@ return permissionManager; } + /** + * Only work for h2 database + * + * @see org.codelutin.topia.TopiaContext#backup(java.io.File) + */ + public void backup(File file) throws TopiaException { + checkClosed("Ce contexte a ete ferme, impossible d'effectuer le backup"); + try { +// Statement stat = getHibernate().connection().createStatement(); +// ResultSet rs = stat.executeQuery("SCRIPT TO '" + file.getAbsolutePath() + "'"); + + Query query = getHibernate().createSQLQuery("SCRIPT TO '" + file.getAbsolutePath() + "'"); + query.list(); + + // en fait on est un peu obligé d'exporter toute la base + // (creation du schema compris) car sinon lors de la restauration + // si le schema a ete creer avant il contient aussi les + // contrainte et du coup les inserts se passent mal :( + // Si on ne voulait que les inserts, lors de la resauration il + // faudrait desactiver les contraintes et les reactiver ensuite + +// Iterator result = query.list().iterator(); +// Writer out = new BufferedWriter(new FileWriter(file)); +// while (result.hasNext()) { +// String insert = (String)result.next(); +// if (insert.toUpperCase().startsWith("INSERT")) { +// out.write(insert + ";\n"); +// } +// } +// out.close(); + } catch (Exception eee) { + throw new TopiaException("Can't backup", eee); + } + } + + /** + * Only work for h2 database + * + * @see org.codelutin.topia.TopiaContext#restore(java.io.File) + */ + public void restore(File file) throws TopiaException { + checkClosed("Ce contexte a ete ferme, impossible d'effectuer le restore"); + try { + Statement stat = getHibernate().connection().createStatement(); + stat.execute("RUNSCRIPT FROM '" + file.getAbsolutePath() + "'"); //:file\"); + +// SQLQuery query = getHibernate().createSQLQuery("RUNSCRIPT FROM '" + file.getAbsolutePath() + "'"); //:file\"); +// List result = query.list(); + } catch (Exception eee) { + throw new TopiaException("Can't restore", eee); + } + } + } //TopiaContextImpl