X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fhibernate%2Fstructure%2Ftree%2FTreeSRegistryDaoHibernate.java;h=15a7cede53ae186f5e9d475d3bc92b81c09e1cf0;hb=9c864d891daf7e3d341b5c5996aeb3d3ab1a57be;hp=57d06dd1470972eb5d238719f2a91b7b649726f1;hpb=90b484c35a563691c0923011bb43e2a881db2d5e;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java index 57d06dd14..15a7cede5 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/hibernate/structure/tree/TreeSRegistryDaoHibernate.java @@ -4,8 +4,15 @@ import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.argeo.slc.core.structure.SimpleSElement; +import org.argeo.slc.core.structure.StructureElement; +import org.argeo.slc.core.structure.StructureRegistry; import org.argeo.slc.core.structure.tree.TreeSPath; import org.argeo.slc.core.structure.tree.TreeSRegistry; +import org.argeo.slc.dao.structure.tree.TreeSPathDao; import org.argeo.slc.dao.structure.tree.TreeSRegistryDao; /** @@ -16,8 +23,9 @@ import org.argeo.slc.dao.structure.tree.TreeSRegistryDao; public class TreeSRegistryDaoHibernate extends HibernateDaoSupport implements TreeSRegistryDao { - // private static Log log = - // LogFactory.getLog(TreeSRegistryDaoHibernate.class); + private TreeSPathDao treeSPathDao; + + private static Log log = LogFactory.getLog(TreeSRegistryDaoHibernate.class); public void create(TreeSRegistry registry) { getHibernateTemplate().save(registry); @@ -29,7 +37,8 @@ public class TreeSRegistryDaoHibernate extends HibernateDaoSupport implements public TreeSRegistry getActiveTreeSRegistry() { List list = getHibernateTemplate().find( - "from TreeSRegistry where status=?", TreeSRegistry.STATUS_ACTIVE); + "from TreeSRegistry where status=?", + TreeSRegistry.STATUS_ACTIVE); if (list.size() == 0) { return null; } else { @@ -37,4 +46,41 @@ public class TreeSRegistryDaoHibernate extends HibernateDaoSupport implements } } + public void syncPath(TreeSRegistry registry, + StructureRegistry localRegistry, TreeSPath path) { + if (path.getParent() != null) { + TreeSPath parent = treeSPathDao.getOrCreate(path.getParent()); + syncPath(registry, localRegistry, parent); + } + + if (log.isDebugEnabled()) + log.debug("Synchronize path " + path); + + if (registry.getElement(path) == null) { + if (localRegistry != null) { + registry.register(path, getElement(registry, localRegistry, path)); + } else { + registry.register(path, new SimpleSElement(path.getName())); + } + update(registry); + } else { + if (localRegistry != null) { + StructureElement sElement = getElement(registry, localRegistry, path); + if (sElement != null) { + registry.register(path, sElement); + update(registry); + } + } + } + + } + + public void setTreeSPathDao(TreeSPathDao treeSPathDao) { + this.treeSPathDao = treeSPathDao; + } + + protected StructureElement getElement(TreeSRegistry registry, + StructureRegistry localRegistry, TreeSPath path){ + return localRegistry.getElement(path); + } }