[Major] Moved the auditing trail to the ElementMaps themselves

This means that we can't access the ElementMaps from the Realms, but
must use the TX (this was better anyhow)
This commit is contained in:
Robert von Burg 2014-08-24 12:45:20 +02:00
parent 72ff553e74
commit e84daf14b7
5 changed files with 26 additions and 55 deletions

View File

@ -86,7 +86,7 @@ public class XmlAuditDao implements AuditDao {
SubTypeRef subTypeRef = getTypeRef(type); SubTypeRef subTypeRef = getTypeRef(type);
Set<String> keySet = this.tx.getMetadataDao().queryKeySet(subTypeRef); Set<String> keySet = this.tx.getMetadataDao().queryKeySet(subTypeRef);
for (String key : keySet) { for (String key : keySet) {
ObjectRef objectRef = subTypeRef.getChildIdRef(tx, key); ObjectRef objectRef = subTypeRef.getChildIdRef(this.tx, key);
Audit audit = this.tx.getObjectDao().queryById(objectRef); Audit audit = this.tx.getObjectDao().queryById(objectRef);
if (dateRange.contains(audit.getDate())) if (dateRange.contains(audit.getDate()))
size++; size++;
@ -117,7 +117,7 @@ public class XmlAuditDao implements AuditDao {
SubTypeRef subTypeRef = getTypeRef(type); SubTypeRef subTypeRef = getTypeRef(type);
Set<String> keySet = this.tx.getMetadataDao().queryKeySet(subTypeRef); Set<String> keySet = this.tx.getMetadataDao().queryKeySet(subTypeRef);
for (String key : keySet) { for (String key : keySet) {
ObjectRef objectRef = subTypeRef.getChildIdRef(tx, key); ObjectRef objectRef = subTypeRef.getChildIdRef(this.tx, key);
Audit audit = this.tx.getObjectDao().queryById(objectRef); Audit audit = this.tx.getObjectDao().queryById(objectRef);
if (dateRange.contains(audit.getDate())) if (dateRange.contains(audit.getDate()))
audits.add(audit); audits.add(audit);
@ -177,7 +177,7 @@ public class XmlAuditDao implements AuditDao {
SubTypeRef subTypeRef = getTypeRef(type); SubTypeRef subTypeRef = getTypeRef(type);
Set<String> keySet = this.tx.getMetadataDao().queryKeySet(subTypeRef); Set<String> keySet = this.tx.getMetadataDao().queryKeySet(subTypeRef);
for (String key : keySet) { for (String key : keySet) {
ObjectRef objectRef = subTypeRef.getChildIdRef(tx, key); ObjectRef objectRef = subTypeRef.getChildIdRef(this.tx, key);
Audit audit = this.tx.getObjectDao().queryById(objectRef); Audit audit = this.tx.getObjectDao().queryById(objectRef);
if (dateRange.contains(audit.getDate())) { if (dateRange.contains(audit.getDate())) {
PersistenceContext<Audit> ctx = this.tx.getObjectDao().createCtx(objectRef); PersistenceContext<Audit> ctx = this.tx.getObjectDao().createCtx(objectRef);

View File

@ -77,6 +77,7 @@ public class XmlPersistenceHandler extends StrolchComponent implements Persisten
super.initialize(componentConfiguration); super.initialize(componentConfiguration);
} }
@SuppressWarnings("resource")
@Override @Override
public StrolchTransaction openTx(StrolchRealm realm, Certificate certificate, String action) { public StrolchTransaction openTx(StrolchRealm realm, Certificate certificate, String action) {
PersistenceTransaction tx = this.persistenceManager.openTx(realm.getRealm()); PersistenceTransaction tx = this.persistenceManager.openTx(realm.getRealm());

View File

@ -15,17 +15,13 @@
*/ */
package li.strolch.persistence.xml; package li.strolch.persistence.xml;
import java.util.ArrayList;
import java.util.List;
import java.util.Set; import java.util.Set;
import li.strolch.agent.api.StrolchRealm; import li.strolch.agent.api.StrolchRealm;
import li.strolch.model.StrolchRootElement;
import li.strolch.persistence.api.AbstractTransaction; import li.strolch.persistence.api.AbstractTransaction;
import li.strolch.persistence.api.PersistenceHandler; import li.strolch.persistence.api.PersistenceHandler;
import ch.eitchnet.privilege.model.Certificate; import ch.eitchnet.privilege.model.Certificate;
import ch.eitchnet.xmlpers.api.ModificationResult; import ch.eitchnet.xmlpers.api.ModificationResult;
import ch.eitchnet.xmlpers.api.PersistenceContext;
import ch.eitchnet.xmlpers.api.PersistenceTransaction; import ch.eitchnet.xmlpers.api.PersistenceTransaction;
import ch.eitchnet.xmlpers.api.TransactionResult; import ch.eitchnet.xmlpers.api.TransactionResult;
@ -53,37 +49,9 @@ public class XmlStrolchTransaction extends AbstractTransaction {
Set<String> keys = result.getKeys(); Set<String> keys = result.getKeys();
for (String key : keys) { for (String key : keys) {
ModificationResult modificationResult = result.getModificationResult(key); ModificationResult modificationResult = result.getModificationResult(key);
txResult.incCreated(modificationResult.getCreated().size());
List<StrolchRootElement> created = new ArrayList<>(); txResult.incUpdated(modificationResult.getUpdated().size());
List<StrolchRootElement> updated = new ArrayList<>(); txResult.incDeleted(modificationResult.getDeleted().size());
List<StrolchRootElement> deleted = new ArrayList<>();
List<Object> createdCtx = modificationResult.getCreated();
for (Object object : createdCtx) {
@SuppressWarnings("unchecked")
PersistenceContext<StrolchRootElement> ctx = (PersistenceContext<StrolchRootElement>) object;
if (ctx.getObject() != null)
created.add(ctx.getObject());
}
List<Object> updatedCtx = modificationResult.getUpdated();
for (Object object : updatedCtx) {
@SuppressWarnings("unchecked")
PersistenceContext<StrolchRootElement> ctx = (PersistenceContext<StrolchRootElement>) object;
if (ctx.getObject() != null)
updated.add(ctx.getObject());
}
List<Object> deletedCtx = modificationResult.getDeleted();
for (Object object : deletedCtx) {
@SuppressWarnings("unchecked")
PersistenceContext<StrolchRootElement> ctx = (PersistenceContext<StrolchRootElement>) object;
if (ctx.getObject() != null)
deleted.add(ctx.getObject());
}
li.strolch.persistence.api.ModificationResult mr = new li.strolch.persistence.api.ModificationResult(key,
created, updated, deleted);
txResult.addModificationResult(mr);
} }
} }

View File

@ -34,6 +34,7 @@ import ch.eitchnet.privilege.model.Certificate;
public class ExistingDbTest { public class ExistingDbTest {
private static final String TEST = "test"; //$NON-NLS-1$
public static final String RUNTIME_PATH = "target/existingDbRuntime/"; //$NON-NLS-1$ public static final String RUNTIME_PATH = "target/existingDbRuntime/"; //$NON-NLS-1$
public static final String DB_STORE_PATH_DIR = "dbStore"; //$NON-NLS-1$ public static final String DB_STORE_PATH_DIR = "dbStore"; //$NON-NLS-1$
public static final String CONFIG_SRC = "src/test/resources/existingDbRuntime"; //$NON-NLS-1$ public static final String CONFIG_SRC = "src/test/resources/existingDbRuntime"; //$NON-NLS-1$
@ -59,14 +60,14 @@ public class ExistingDbTest {
public void shouldQueryExistingData() { public void shouldQueryExistingData() {
PrivilegeHandler privilegeHandler = runtimeMock.getAgent().getContainer().getPrivilegeHandler(); PrivilegeHandler privilegeHandler = runtimeMock.getAgent().getContainer().getPrivilegeHandler();
Certificate certificate = privilegeHandler.authenticate("test", "test".getBytes()); Certificate certificate = privilegeHandler.authenticate(TEST, TEST.getBytes());
try (StrolchTransaction tx = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM).openTx(certificate, "test")) { try (StrolchTransaction tx = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM).openTx(certificate, TEST)) {
Resource resource = tx.getResourceMap().getBy(tx, "MyType", "@1"); Resource resource = tx.getResourceMap().getBy(tx, "MyType", "@1"); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull("Should be able to read existing element from db", resource); assertNotNull("Should be able to read existing element from db", resource); //$NON-NLS-1$
Order order = tx.getOrderMap().getBy(tx, "MyType", "@1"); Order order = tx.getOrderMap().getBy(tx, "MyType", "@1"); //$NON-NLS-1$//$NON-NLS-2$
assertNotNull("Should be able to read existing element from db", order); assertNotNull("Should be able to read existing element from db", order); //$NON-NLS-1$
} }
} }
} }

View File

@ -28,7 +28,7 @@ import java.util.Map;
import li.strolch.model.Order; import li.strolch.model.Order;
import li.strolch.model.Resource; import li.strolch.model.Resource;
import li.strolch.model.State; import li.strolch.model.State;
import li.strolch.model.StrolchElement; import li.strolch.model.StrolchRootElement;
import li.strolch.model.Tags; import li.strolch.model.Tags;
import li.strolch.persistence.api.StrolchTransaction; import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.runtime.StrolchConstants; import li.strolch.runtime.StrolchConstants;
@ -49,6 +49,7 @@ import ch.eitchnet.xmlpers.api.ModificationResult;
*/ */
public class ObserverUpdateTest { public class ObserverUpdateTest {
private static final String TEST = "test"; //$NON-NLS-1$
public static final String RUNTIME_PATH = "target/observerUpdateStrolchRuntime/"; //$NON-NLS-1$ public static final String RUNTIME_PATH = "target/observerUpdateStrolchRuntime/"; //$NON-NLS-1$
public static final String DB_STORE_PATH_DIR = "dbStore"; //$NON-NLS-1$ public static final String DB_STORE_PATH_DIR = "dbStore"; //$NON-NLS-1$
public static final String CONFIG_SRC = "src/test/resources/cachedruntime"; //$NON-NLS-1$ public static final String CONFIG_SRC = "src/test/resources/cachedruntime"; //$NON-NLS-1$
@ -89,17 +90,17 @@ public class ObserverUpdateTest {
} }
@Override @Override
public void update(String key, List<StrolchElement> elements) { public void update(String key, List<StrolchRootElement> elements) {
getModificationResult(key).getUpdated().addAll(elements); getModificationResult(key).getUpdated().addAll(elements);
} }
@Override @Override
public void remove(String key, List<StrolchElement> elements) { public void remove(String key, List<StrolchRootElement> elements) {
getModificationResult(key).getDeleted().addAll(elements); getModificationResult(key).getDeleted().addAll(elements);
} }
@Override @Override
public void add(String key, List<StrolchElement> elements) { public void add(String key, List<StrolchRootElement> elements) {
getModificationResult(key).getCreated().addAll(elements); getModificationResult(key).getCreated().addAll(elements);
} }
} }
@ -109,26 +110,26 @@ public class ObserverUpdateTest {
// register an observer for orders and resources // register an observer for orders and resources
ElementAddedObserver observer = new ElementAddedObserver(); ElementAddedObserver observer = new ElementAddedObserver();
runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver(Tags.ORDER, observer); //$NON-NLS-1$ runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver(Tags.ORDER, observer);
runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver(Tags.RESOURCE, observer); //$NON-NLS-1$ runtimeMock.getContainer().getComponent(ObserverHandler.class).registerObserver(Tags.RESOURCE, observer);
PrivilegeHandler privilegeHandler = runtimeMock.getAgent().getContainer().getPrivilegeHandler(); PrivilegeHandler privilegeHandler = runtimeMock.getAgent().getContainer().getPrivilegeHandler();
Certificate certificate = privilegeHandler.authenticate("test", "test".getBytes()); Certificate certificate = privilegeHandler.authenticate(TEST, TEST.getBytes());
// create order // create order
Order newOrder = createOrder("MyTestOrder", "Test Name", "TestType", new Date(), State.CREATED); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ Order newOrder = createOrder("MyTestOrder", "Test Name", "TestType", new Date(), State.CREATED); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
try (StrolchTransaction tx = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM).openTx(certificate, "test")) { try (StrolchTransaction tx = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM).openTx(certificate, TEST)) {
tx.getOrderMap().add(tx, newOrder); tx.getOrderMap().add(tx, newOrder);
} }
// create resource // create resource
Resource newResource = createResource("MyTestResource", "Test Name", "TestType"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ Resource newResource = createResource("MyTestResource", "Test Name", "TestType"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
try (StrolchTransaction tx = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM).openTx(certificate, "test")) { try (StrolchTransaction tx = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM).openTx(certificate, TEST)) {
tx.getResourceMap().add(tx, newResource); tx.getResourceMap().add(tx, newResource);
} }
assertEquals(2, observer.results.size()); assertEquals(2, observer.results.size());
assertEquals(1, observer.results.get(Tags.ORDER).getCreated().size()); //$NON-NLS-1$ assertEquals(1, observer.results.get(Tags.ORDER).getCreated().size());
assertEquals(1, observer.results.get(Tags.RESOURCE).getCreated().size()); //$NON-NLS-1$ assertEquals(1, observer.results.get(Tags.RESOURCE).getCreated().size());
} }
} }