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

View File

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

View File

@ -15,17 +15,13 @@
*/
package li.strolch.persistence.xml;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import li.strolch.agent.api.StrolchRealm;
import li.strolch.model.StrolchRootElement;
import li.strolch.persistence.api.AbstractTransaction;
import li.strolch.persistence.api.PersistenceHandler;
import ch.eitchnet.privilege.model.Certificate;
import ch.eitchnet.xmlpers.api.ModificationResult;
import ch.eitchnet.xmlpers.api.PersistenceContext;
import ch.eitchnet.xmlpers.api.PersistenceTransaction;
import ch.eitchnet.xmlpers.api.TransactionResult;
@ -53,37 +49,9 @@ public class XmlStrolchTransaction extends AbstractTransaction {
Set<String> keys = result.getKeys();
for (String key : keys) {
ModificationResult modificationResult = result.getModificationResult(key);
List<StrolchRootElement> created = new ArrayList<>();
List<StrolchRootElement> updated = new ArrayList<>();
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);
txResult.incCreated(modificationResult.getCreated().size());
txResult.incUpdated(modificationResult.getUpdated().size());
txResult.incDeleted(modificationResult.getDeleted().size());
}
}

View File

@ -34,6 +34,7 @@ import ch.eitchnet.privilege.model.Certificate;
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 DB_STORE_PATH_DIR = "dbStore"; //$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() {
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")) {
Resource resource = tx.getResourceMap().getBy(tx, "MyType", "@1");
assertNotNull("Should be able to read existing element from db", resource);
try (StrolchTransaction tx = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM).openTx(certificate, TEST)) {
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); //$NON-NLS-1$
Order order = tx.getOrderMap().getBy(tx, "MyType", "@1");
assertNotNull("Should be able to read existing element from db", order);
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); //$NON-NLS-1$
}
}
}

View File

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