diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/impl/CachedElementMap.java b/li.strolch.agent/src/main/java/li/strolch/agent/impl/CachedElementMap.java index 2dcf00e5b..6029350af 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/impl/CachedElementMap.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/impl/CachedElementMap.java @@ -21,9 +21,6 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import li.strolch.agent.api.ElementMap; import li.strolch.agent.api.StrolchAgent; import li.strolch.agent.api.StrolchRealm; @@ -37,6 +34,8 @@ import li.strolch.persistence.api.StrolchDao; import li.strolch.persistence.api.StrolchPersistenceException; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.runtime.StrolchConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Robert von Burg @@ -228,6 +227,7 @@ public abstract class CachedElementMap implements * {@link CachedRealm} * * @param element + * the element to insert */ synchronized void insert(T element) { getCachedDao().save(element); @@ -235,7 +235,7 @@ public abstract class CachedElementMap implements @Override public synchronized void add(StrolchTransaction tx, T element) { - if (realm.isVersioningEnabled()) { + if (this.realm.isVersioningEnabled()) { int latestVersion = getLatestVersionFor(tx, element.getType(), element.getId()); Version.setInitialVersionFor(element, latestVersion, tx.getCertificate().getUsername()); } else { @@ -251,7 +251,7 @@ public abstract class CachedElementMap implements @Override public synchronized void addAll(StrolchTransaction tx, List elements) { for (T element : elements) { - if (realm.isVersioningEnabled()) { + if (this.realm.isVersioningEnabled()) { int latestVersion = getLatestVersionFor(tx, element.getType(), element.getId()); Version.setInitialVersionFor(element, latestVersion, tx.getCertificate().getUsername()); } else { @@ -267,10 +267,7 @@ public abstract class CachedElementMap implements @Override public synchronized void update(StrolchTransaction tx, T element) { - if (realm.isVersioningEnabled()) - Version.updateVersionFor(element, tx.getCertificate().getUsername(), false); - else - Version.setInitialVersionFor(element, -1, tx.getCertificate().getUsername()); + updateVersion(tx, element); // first perform cached change getCachedDao().update(element); @@ -281,10 +278,7 @@ public abstract class CachedElementMap implements @Override public synchronized void updateAll(StrolchTransaction tx, List elements) { for (T t : elements) { - if (realm.isVersioningEnabled()) - Version.updateVersionFor(t, tx.getCertificate().getUsername(), false); - else - Version.setInitialVersionFor(t, -1, tx.getCertificate().getUsername()); + updateVersion(tx, t); } // first perform cached change @@ -295,10 +289,7 @@ public abstract class CachedElementMap implements @Override public synchronized void remove(StrolchTransaction tx, T element) { - if (realm.isVersioningEnabled()) - Version.updateVersionFor(element, tx.getCertificate().getUsername(), true); - else - Version.setInitialVersionFor(element, -1, tx.getCertificate().getUsername()); + updateVersion(tx, element); if (this.realm.isVersioningEnabled()) { @@ -319,10 +310,7 @@ public abstract class CachedElementMap implements @Override public synchronized void removeAll(StrolchTransaction tx, List elements) { for (T t : elements) { - if (realm.isVersioningEnabled()) - Version.updateVersionFor(t, tx.getCertificate().getUsername(), true); - else - Version.setInitialVersionFor(t, -1, tx.getCertificate().getUsername()); + updateVersion(tx, t); } if (this.realm.isVersioningEnabled()) { @@ -341,6 +329,14 @@ public abstract class CachedElementMap implements } } + private void updateVersion(StrolchTransaction tx, T element) { + if (this.realm.isVersioningEnabled()) { + Version.updateVersionFor(element, tx.getCertificate().getUsername(), false); + } else { + Version.setInitialVersionFor(element, -1, tx.getCertificate().getUsername()); + } + } + @Override public synchronized long removeAll(StrolchTransaction tx) { // first perform cached change diff --git a/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java b/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java index 22520fa78..923daf179 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java +++ b/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java @@ -1,12 +1,12 @@ /* * Copyright 2013 Robert von Burg - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -29,7 +29,7 @@ import li.strolch.model.activity.Activity; /** * {@link StrolchElementListener} to store the {@link StrolchRootElement} in {@link Map} objects when parsing an object * model from an external source - * + * * @author Robert von Burg */ public class SimpleStrolchElementListener implements StrolchElementListener { diff --git a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java index 01fc752d9..b36653655 100644 --- a/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java +++ b/li.strolch.rest/src/main/java/li/strolch/rest/endpoint/Inspector.java @@ -70,6 +70,7 @@ import li.strolch.service.UpdateActivityService.UpdateActivityArg; import li.strolch.service.UpdateOrderService.UpdateOrderArg; import li.strolch.service.UpdateResourceService.UpdateResourceArg; import li.strolch.service.api.ServiceResult; +import li.strolch.utils.dbc.DBC; import li.strolch.utils.helper.StringHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -723,6 +724,7 @@ public class Inspector { Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); Resource resource = parseResourceFromXml(type, data); + DBC.INTERIM.assertEquals("Posted id must be same as request!", id, resource.getId()); UpdateResourceService svc = new UpdateResourceService(); UpdateResourceArg arg = new UpdateResourceArg(); @@ -772,6 +774,8 @@ public class Inspector { arg.refreshUnknownVersion = true; } + DBC.INTERIM.assertEquals("Posted id must be same as request!", id, resource.getId()); + // prepare argument arg.resource = resource; arg.realm = realm; @@ -798,6 +802,7 @@ public class Inspector { Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); Order order = parseOrderFromXml(type, data); + DBC.INTERIM.assertEquals("Posted id must be same as request!", id, order.getId()); UpdateOrderService svc = new UpdateOrderService(); UpdateOrderArg arg = new UpdateOrderArg(); @@ -847,6 +852,8 @@ public class Inspector { arg.refreshUnknownVersion = true; } + DBC.INTERIM.assertEquals("Posted id must be same as request!", id, order.getId()); + // prepare argument arg.order = order; arg.realm = realm; @@ -873,6 +880,7 @@ public class Inspector { Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); Activity activity = parseActivityFromXml(type, data); + DBC.INTERIM.assertEquals("Posted id must be same as request!", id, activity.getId()); UpdateActivityService svc = new UpdateActivityService(); UpdateActivityArg arg = new UpdateActivityArg(); @@ -922,6 +930,8 @@ public class Inspector { arg.refreshUnknownVersion = true; } + DBC.INTERIM.assertEquals("Posted id must be same as request!", id, activity.getId()); + // prepare argument arg.activity = activity; arg.realm = realm; @@ -1148,7 +1158,7 @@ public class Inspector { @Produces(MediaType.APPLICATION_XML) @Consumes(MediaType.APPLICATION_XML) @Path("{realm}/activities") - public Response addActivitiyAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm, + public Response addActivityAsXml(@Context HttpServletRequest request, @PathParam("realm") String realm, String data) { Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); @@ -1173,7 +1183,7 @@ public class Inspector { @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Path("{realm}/activities") - public Response addActivitiyAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm, + public Response addActivityAsJson(@Context HttpServletRequest request, @PathParam("realm") String realm, String data) { Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); @@ -1201,7 +1211,7 @@ public class Inspector { @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @Path("{realm}/activities/{type}") - public Response addActivitiyAsJsonFlat(@Context HttpServletRequest request, @PathParam("realm") String realm, + public Response addActivityAsJsonFlat(@Context HttpServletRequest request, @PathParam("realm") String realm, @PathParam("type") String type, @QueryParam("flat") String flatS, String data) { Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE); @@ -1295,6 +1305,9 @@ public class Inspector { "")); resource = listener.getResources().get(0); + resource.setVersion(null); + + DBC.INTERIM.assertEquals("Posted type must be same as request!", type, resource.getType()); } catch (Exception e) { throw new StrolchPersistenceException( @@ -1322,6 +1335,9 @@ public class Inspector { "")); order = listener.getOrders().get(0); + order.setVersion(null); + + DBC.INTERIM.assertEquals("Posted type must be same as request!", type, order.getType()); } catch (Exception e) { throw new StrolchPersistenceException( @@ -1351,6 +1367,9 @@ public class Inspector { "")); activity = listener.getActivities().get(0); + activity.setVersion(null); + + DBC.INTERIM.assertEquals("Posted type must be same as request!", type, activity.getType()); } catch (Exception e) { throw new StrolchPersistenceException( @@ -1380,6 +1399,9 @@ public class Inspector { // parse from complete JSON ResourceFromJsonVisitor visitor = new ResourceFromJsonVisitor(); resource = visitor.visit(jsonObject); + resource.setVersion(null); + + DBC.INTERIM.assertEquals("Posted type must be same as request!", type, resource.getType()); } return resource; @@ -1404,6 +1426,9 @@ public class Inspector { // parse from complete JSON OrderFromJsonVisitor visitor = new OrderFromJsonVisitor(); order = visitor.visit(jsonObject); + order.setVersion(null); + + DBC.INTERIM.assertEquals("Posted type must be same as request!", type, order.getType()); } return order; @@ -1428,6 +1453,9 @@ public class Inspector { // parse from complete JSON ActivityFromJsonVisitor visitor = new ActivityFromJsonVisitor(); activity = visitor.visit(jsonObject); + activity.setVersion(null); + + DBC.INTERIM.assertEquals("Posted type must be same as request!", type, activity.getType()); } return activity;