]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.hibernate/src/main/java/org/argeo/server/hibernate/HibernateLightDaoSync.java
Introduce argeo server hibernate
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.hibernate / src / main / java / org / argeo / server / hibernate / HibernateLightDaoSync.java
diff --git a/server/runtime/org.argeo.server.hibernate/src/main/java/org/argeo/server/hibernate/HibernateLightDaoSync.java b/server/runtime/org.argeo.server.hibernate/src/main/java/org/argeo/server/hibernate/HibernateLightDaoSync.java
new file mode 100644 (file)
index 0000000..ebc7376
--- /dev/null
@@ -0,0 +1,66 @@
+package org.argeo.server.hibernate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.server.dao.LightDaoSupport;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+
+public class HibernateLightDaoSync {
+       private final static Log log = LogFactory
+                       .getLog(HibernateLightDaoSync.class);
+
+       private String externalSuffix = LightDaoInterceptor.DEFAULT_EXTERNAL_SUFFIX;
+
+       private SessionFactory sessionFactory;
+
+       private LightDaoSupport lightDaoSupport;
+
+       private List<Class<?>> classes = new ArrayList<Class<?>>();
+
+       public void sync() {
+               List<Class<?>> lst;
+               if (classes.size() > 0)
+                       lst = classes;
+               else
+                       lst = lightDaoSupport.getSupportedClasses();
+
+               Session session = sessionFactory.getCurrentSession();
+               session.beginTransaction();
+               try {
+                       for (Class<?> clss : lst) {
+                               String entityName = clss.getSimpleName() + externalSuffix;
+                               int count = 0;
+                               for (Object obj : lightDaoSupport.list(clss, null)) {
+                                       session.save(entityName, obj);
+                                       count++;
+                               }
+                               if (log.isDebugEnabled())
+                                       log.debug("Synchronized " + count + "\tentities '"
+                                                       + entityName + "'");
+                       }
+                       session.getTransaction().commit();
+               } catch (Exception e) {
+                       session.getTransaction().rollback();
+               }
+       }
+
+       public void setClasses(List<Class<?>> classes) {
+               this.classes = classes;
+       }
+
+       public void setExternalSuffix(String externalSuffix) {
+               this.externalSuffix = externalSuffix;
+       }
+
+       public void setSessionFactory(SessionFactory sessionFactory) {
+               this.sessionFactory = sessionFactory;
+       }
+
+       public void setLightDaoSupport(LightDaoSupport lightDaoSupport) {
+               this.lightDaoSupport = lightDaoSupport;
+       }
+}