diff --git a/src/main/java/ch/eitchnet/xmlpers/api/FileDao.java b/src/main/java/ch/eitchnet/xmlpers/api/FileDao.java index 2a4eeb3aa..8a7e54af4 100644 --- a/src/main/java/ch/eitchnet/xmlpers/api/FileDao.java +++ b/src/main/java/ch/eitchnet/xmlpers/api/FileDao.java @@ -46,6 +46,13 @@ public class FileDao { } } + public boolean exists(PersistenceContext ctx) { + ObjectRef objectRef = ctx.getObjectRef(); + assertIsIdRef(IoOperation.READ, objectRef); + File path = objectRef.getPath(this.pathBuilder); + return path.exists(); + } + public void performCreate(PersistenceContext ctx) { ObjectRef objectRef = ctx.getObjectRef(); assertIsIdRef(IoOperation.CREATE, objectRef); diff --git a/src/main/java/ch/eitchnet/xmlpers/api/ObjectDao.java b/src/main/java/ch/eitchnet/xmlpers/api/ObjectDao.java index 9f5ab34cb..c2a492ed5 100644 --- a/src/main/java/ch/eitchnet/xmlpers/api/ObjectDao.java +++ b/src/main/java/ch/eitchnet/xmlpers/api/ObjectDao.java @@ -125,16 +125,16 @@ public class ObjectDao { refs.add(typeRef); try { - Set types = tx.getMetadataDao().queryTypeSet(typeRef); + Set types = this.tx.getMetadataDao().queryTypeSet(typeRef); for (String type : types) { - ObjectRef childTypeRef = typeRef.getChildTypeRef(tx, type); + ObjectRef childTypeRef = typeRef.getChildTypeRef(this.tx, type); childTypeRef.lock(); refs.add(childTypeRef); Set ids = queryKeySet(childTypeRef); for (String id : ids) { - ObjectRef idRef = childTypeRef.getChildIdRef(tx, id); + ObjectRef idRef = childTypeRef.getChildIdRef(this.tx, id); PersistenceContext ctx = createCtx(idRef); ctx.getObjectRef().lock(); @@ -163,7 +163,7 @@ public class ObjectDao { Set ids = queryKeySet(subTypeRef); for (String id : ids) { - ObjectRef idRef = subTypeRef.getChildIdRef(tx, id); + ObjectRef idRef = subTypeRef.getChildIdRef(this.tx, id); PersistenceContext ctx = createCtx(idRef); ctx.getObjectRef().lock(); @@ -206,6 +206,19 @@ public class ObjectDao { } } + public boolean hasElement(ObjectRef objectRef) { + assertNotClosed(); + assertIsIdRef(objectRef); + + objectRef.lock(); + try { + PersistenceContext ctx = objectRef. createPersistenceContext(this.tx); + return this.fileDao.exists(ctx); + } finally { + objectRef.unlock(); + } + } + public T queryById(ObjectRef objectRef) { assertNotClosed(); assertIsIdRef(objectRef); @@ -213,13 +226,8 @@ public class ObjectDao { objectRef.lock(); try { PersistenceContext ctx = objectRef. createPersistenceContext(this.tx); - ctx.getObjectRef().lock(); - try { - this.fileDao.performRead(ctx); - return ctx.getObject(); - } finally { - ctx.getObjectRef().unlock(); - } + this.fileDao.performRead(ctx); + return ctx.getObject(); } finally { objectRef.unlock(); } diff --git a/src/test/java/ch/eitchnet/xmlpers/test/LockingTest.java b/src/test/java/ch/eitchnet/xmlpers/test/LockingTest.java index ce8574cb6..473be20d4 100644 --- a/src/test/java/ch/eitchnet/xmlpers/test/LockingTest.java +++ b/src/test/java/ch/eitchnet/xmlpers/test/LockingTest.java @@ -165,6 +165,7 @@ public class LockingTest extends AbstractPersistenceTest { this.resourceId = resourceId; } + @Override public void run() { logger.info("Waiting for ok to work..."); //$NON-NLS-1$