From 2ee957f5e2770403c36ff3d9a000c1d7dc844217 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Sat, 20 May 2006 15:34:17 +0000 Subject: [PATCH] Point checkin. Hibernate is currently beating me up by not doing what I expect when trying to determine the concrete type of a polymorphic type. Some major surgery seems to be in order. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@2927 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/avm/AVMServiceTest.java | 42 +++++++ .../alfresco/repo/avm/hibernate/AVM.hbm.xml | 119 +++++++++--------- .../hibernate/BasicAttributesBeanImpl.java | 35 ++++++ .../repo/avm/hibernate/HibernateHelper.java | 29 +++-- .../repo/avm/hibernate/TestPopulate.java | 4 +- .../repo/avm/impl/RepositoryImpl.java | 1 + .../repo/avm/impl/SuperRepositoryImpl.java | 4 +- 7 files changed, 164 insertions(+), 70 deletions(-) diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index 757af66a0c..68313ef3e6 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -17,6 +17,8 @@ package org.alfresco.repo.avm; +import java.util.ArrayList; + import org.alfresco.repo.avm.hibernate.HibernateHelper; import org.alfresco.repo.avm.impl.AVMServiceImpl; import org.hibernate.cfg.Configuration; @@ -56,6 +58,7 @@ public class AVMServiceTest extends TestCase @Override protected void tearDown() throws Exception { + HibernateHelper.Reset(); } /** @@ -64,4 +67,43 @@ public class AVMServiceTest extends TestCase public void testNothing() { } + + /** + * Test making a simple directory. + */ + public void testCreateDirectory() + { + try + { + fService.createDirectory("main:/", "testdir"); + ArrayList toSnapshot = new ArrayList(); + toSnapshot.add("main"); + fService.createSnapshot(toSnapshot); + } + catch (Exception e) + { + e.printStackTrace(System.err); + fail(); + } + } + + /** + * Test creating a file. + */ + public void testCreateFile() + { + try + { + testCreateDirectory(); + fService.createFile("main:testdir", "testfile"); + ArrayList toSnapshot = new ArrayList(); + toSnapshot.add("main"); + fService.createSnapshot(toSnapshot); + } + catch (Exception e) + { + e.printStackTrace(System.err); + fail(); + } + } } diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml index 4bbc973aec..c27b85caea 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml +++ b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml @@ -4,10 +4,10 @@ - + optimistic-lock="version" lazy="false"> @@ -49,61 +49,65 @@ + abstract="true" + lazy="false"> - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + discriminator-value="plaindirectory" proxy="PlainDirectoryNodeBean" lazy="false"> - + to work we need to specially mark the root directory of + a Repository as special so that its absence of parents will + not cause it to be vacuumed away. TODO: for ease of queries, + this probably wants to be in the base class. --> + + that nodes don't know there own names, only there containers do. --> - - - - + + + + @@ -115,19 +119,20 @@ + abstract="true" + lazy="false"> + name="PlainFileNodeBeanImpl" proxy="PlainFileNodeBean" lazy="false"> - + discriminator-value="layeredfile" proxy="LayeredFileNodeBean" lazy="false"> + diff --git a/source/java/org/alfresco/repo/avm/hibernate/BasicAttributesBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/BasicAttributesBeanImpl.java index b24a7249a1..a7df5a008d 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/BasicAttributesBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/BasicAttributesBeanImpl.java @@ -222,4 +222,39 @@ public class BasicAttributesBeanImpl implements BasicAttributesBean { return fAccessDate; } + + // TODO This is probably wrong. + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (fID == null) + { + return false; + } + if (!(obj instanceof BasicAttributesBean)) + { + return false; + } + return fID == ((BasicAttributesBean)obj).getId(); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + if (fID == null) + { + return 0; + } + return fID.hashCode(); + } } diff --git a/source/java/org/alfresco/repo/avm/hibernate/HibernateHelper.java b/source/java/org/alfresco/repo/avm/hibernate/HibernateHelper.java index 654b544e6b..8ccfcf011b 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/HibernateHelper.java +++ b/source/java/org/alfresco/repo/avm/hibernate/HibernateHelper.java @@ -30,6 +30,25 @@ public class HibernateHelper static { + Reset(); + } + + public static SessionFactory GetSessionFactory() + { + return fgFactory; + } + + public static Configuration GetConfiguration() + { + return fgCfg; + } + + public static void Reset() + { + if (fgFactory != null) + { + fgFactory.close(); + } try { fgCfg = new Configuration(); @@ -42,14 +61,4 @@ public class HibernateHelper System.exit(1); } } - - public static SessionFactory GetSessionFactory() - { - return fgFactory; - } - - public static Configuration GetConfiguration() - { - return fgCfg; - } } diff --git a/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java b/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java index 00e833b976..84ce1fa7b8 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java +++ b/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java @@ -77,8 +77,8 @@ public class TestPopulate extends TestCase { // Set up issuers. Issuer nodeIssuer = new Issuer("node", 0, session); - Issuer contentIssuer = new Issuer("content", 0, session); - Issuer repositoryIssuer = new Issuer("repository", 0, session); + new Issuer("content", 0, session); + new Issuer("repository", 0, session); // Make the initial root directory. long time = System.currentTimeMillis(); BasicAttributesBean attrs = new BasicAttributesBeanImpl("britt", diff --git a/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java b/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java index 29e6c0b876..4166f03d7e 100644 --- a/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java +++ b/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java @@ -99,6 +99,7 @@ public class RepositoryImpl implements Repository fData.setRoot(rootBean); fData.getRoots().put(fData.getNextVersionID(), rootBean); fData.setNextVersionID(fData.getNextVersionID()); + fSuper.getSession().save(fData); } /** diff --git a/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java b/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java index aa1062def9..6fbb383b9e 100644 --- a/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java +++ b/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java @@ -142,6 +142,8 @@ public class SuperRepositoryImpl implements SuperRepository // Newing up the object causes it to be written to the db. @SuppressWarnings("unused") Repository rep = new RepositoryImpl(this, name); + // Special handling for repository creation. + rep.getDataBean().getRoot().setIsNew(false); } /* (non-Javadoc) @@ -485,7 +487,7 @@ public class SuperRepositoryImpl implements SuperRepository */ private Repository getRepositoryByName(String name) { - Query query = fSession.createQuery("from repositories r where r.name = :name"); + Query query = fSession.createQuery("from RepositoryBeanImpl r where r.name = :name"); query.setString("name", name); return new RepositoryImpl(this, (RepositoryBean)query.uniqueResult()); }