From b8b0806e12cb86404d2f3b86f48918c3b4a6baf3 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Thu, 8 Jun 2017 14:33:59 +0200 Subject: [PATCH] [New] Now StrolchTimedState compact only if boolean supplied --- .../java/li/strolch/model/ModelGenerator.java | 32 +++++++++---------- .../timedstate/AbstractStrolchTimedState.java | 5 +-- .../strolch/model/timedstate/ITimedState.java | 2 +- .../model/timedstate/StrolchTimedState.java | 2 +- .../strolch/model/timedstate/TimedState.java | 4 +-- .../model/timevalue/ITimeVariable.java | 4 ++- .../model/timevalue/impl/TimeVariable.java | 5 +-- .../test/java/li/strolch/model/ModelTest.java | 2 +- .../model/timedstate/TimeStateTest.java | 4 +-- .../timevalue/FloatTimeVariableTest.java | 4 +-- .../timevalue/IntegerTimeVariableTest.java | 2 +- .../timevalue/StringTimeVariableTest.java | 2 +- .../strolch/planning/AbstractPlanCommand.java | 4 +-- .../li/strolch/planning/AssignActionTest.java | 6 ++-- .../li/strolch/planning/PlanActionTest.java | 2 +- .../li/strolch/planning/PlanActivityTest.java | 6 ++-- .../li/strolch/planning/ShiftActionTest.java | 2 +- 17 files changed, 47 insertions(+), 41 deletions(-) diff --git a/li.strolch.model/src/main/java/li/strolch/model/ModelGenerator.java b/li.strolch.model/src/main/java/li/strolch/model/ModelGenerator.java index 6e77ab354..702d0a321 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/ModelGenerator.java +++ b/li.strolch.model/src/main/java/li/strolch/model/ModelGenerator.java @@ -178,48 +178,48 @@ public class ModelGenerator { // float state FloatTimedState floatTimedState = new FloatTimedState(STATE_FLOAT_ID, STATE_FLOAT_NAME); - floatTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new FloatValue(STATE_FLOAT_TIME_0))); + floatTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new FloatValue(STATE_FLOAT_TIME_0)), true); FloatValue floatValueChange = new FloatValue(STATE_FLOAT_TIME_10); - floatTimedState.applyChange(new ValueChange<>(STATE_TIME_10, floatValueChange)); - floatTimedState.applyChange(new ValueChange<>(STATE_TIME_20, floatValueChange)); - floatTimedState.applyChange(new ValueChange<>(STATE_TIME_30, floatValueChange)); + floatTimedState.applyChange(new ValueChange<>(STATE_TIME_10, floatValueChange), true); + floatTimedState.applyChange(new ValueChange<>(STATE_TIME_20, floatValueChange), true); + floatTimedState.applyChange(new ValueChange<>(STATE_TIME_30, floatValueChange), true); resource.addTimedState(floatTimedState); // integer state IntegerTimedState integerTimedState = new IntegerTimedState(STATE_INTEGER_ID, STATE_INTEGER_NAME); - integerTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + integerTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), true); IntegerValue integerValueChange = new IntegerValue(STATE_INTEGER_TIME_10); - integerTimedState.applyChange(new ValueChange<>(STATE_TIME_10, integerValueChange)); - integerTimedState.applyChange(new ValueChange<>(STATE_TIME_20, integerValueChange)); - integerTimedState.applyChange(new ValueChange<>(STATE_TIME_30, integerValueChange)); + integerTimedState.applyChange(new ValueChange<>(STATE_TIME_10, integerValueChange), true); + integerTimedState.applyChange(new ValueChange<>(STATE_TIME_20, integerValueChange), true); + integerTimedState.applyChange(new ValueChange<>(STATE_TIME_30, integerValueChange), true); resource.addTimedState(integerTimedState); // boolean state BooleanTimedState booleanTimedState = new BooleanTimedState(STATE_BOOLEAN_ID, STATE_BOOLEAN_NAME); - booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new BooleanValue(STATE_BOOLEAN_TIME_0))); + booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new BooleanValue(STATE_BOOLEAN_TIME_0)), true); BooleanValue booleanValueChange = new BooleanValue(STATE_BOOLEAN_TIME_10); - booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_10, booleanValueChange)); + booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_10, booleanValueChange), true); booleanValueChange = booleanValueChange.getInverse(); - booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_20, booleanValueChange)); + booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_20, booleanValueChange), true); booleanValueChange = booleanValueChange.getInverse(); - booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_30, booleanValueChange)); + booleanTimedState.applyChange(new ValueChange<>(STATE_TIME_30, booleanValueChange), true); resource.addTimedState(booleanTimedState); // string state StringSetTimedState stringTimedState = new StringSetTimedState(STATE_STRING_ID, STATE_STRING_NAME); StringSetValue change = new StringSetValue(asSet(STATE_STRING_TIME_0)); - stringTimedState.applyChange(new ValueChange<>(STATE_TIME_0, change)); + stringTimedState.applyChange(new ValueChange<>(STATE_TIME_0, change), true); change = change.getInverse(); change.add(asSet(STATE_STRING_TIME_10)); - stringTimedState.applyChange(new ValueChange<>(STATE_TIME_10, change)); + stringTimedState.applyChange(new ValueChange<>(STATE_TIME_10, change), true); removeInverted(change.getValue()); change = change.getInverse(); change.add(asSet(STATE_STRING_TIME_20)); - stringTimedState.applyChange(new ValueChange<>(STATE_TIME_20, change)); + stringTimedState.applyChange(new ValueChange<>(STATE_TIME_20, change), true); removeInverted(change.getValue()); change = change.getInverse(); change.add(asSet(STATE_STRING_TIME_30)); - stringTimedState.applyChange(new ValueChange<>(STATE_TIME_30, change)); + stringTimedState.applyChange(new ValueChange<>(STATE_TIME_30, change), true); resource.addTimedState(stringTimedState); } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timedstate/AbstractStrolchTimedState.java b/li.strolch.model/src/main/java/li/strolch/model/timedstate/AbstractStrolchTimedState.java index bcb055050..95ab7e5c3 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timedstate/AbstractStrolchTimedState.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timedstate/AbstractStrolchTimedState.java @@ -17,6 +17,7 @@ package li.strolch.model.timedstate; import static li.strolch.model.StrolchModelConstants.INTERPRETATION_NONE; import static li.strolch.model.StrolchModelConstants.UOM_NONE; + import li.strolch.model.AbstractStrolchElement; import li.strolch.model.Locator; import li.strolch.model.Locator.LocatorBuilder; @@ -118,8 +119,8 @@ public abstract class AbstractStrolchTimedState extends Abstra } @Override - public > void applyChange(U change) { - this.state.applyChange(change); + public > void applyChange(U change, boolean compact) { + this.state.applyChange(change, compact); } @Override diff --git a/li.strolch.model/src/main/java/li/strolch/model/timedstate/ITimedState.java b/li.strolch.model/src/main/java/li/strolch/model/timedstate/ITimedState.java index e1e60a2be..01b5eb201 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timedstate/ITimedState.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timedstate/ITimedState.java @@ -45,7 +45,7 @@ public interface ITimedState { * @param change * the state change to be applied */ - > void applyChange(final U change); + > void applyChange(final U change, boolean compact); /** * @return the state at the given time diff --git a/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java b/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java index 76f8281e8..ad06ad1ad 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timedstate/StrolchTimedState.java @@ -104,7 +104,7 @@ public interface StrolchTimedState extends StrolchElement { public ITimeValue getPreviousMatch(Long time, T value); - public > void applyChange(U change); + public > void applyChange(U change, boolean compact); public ITimeValue getStateAt(Long time); diff --git a/li.strolch.model/src/main/java/li/strolch/model/timedstate/TimedState.java b/li.strolch.model/src/main/java/li/strolch/model/timedstate/TimedState.java index 7c88c94b0..d419460b3 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timedstate/TimedState.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timedstate/TimedState.java @@ -64,8 +64,8 @@ public class TimedState implements ITimedState, Serializabl } @Override - public > void applyChange(U change) { - this.timeVariable.applyChange(change); + public > void applyChange(U change, boolean compact) { + this.timeVariable.applyChange(change, compact); } @Override diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/ITimeVariable.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/ITimeVariable.java index 167f62298..a076046bd 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/ITimeVariable.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/ITimeVariable.java @@ -49,8 +49,10 @@ public interface ITimeVariable { * * @param change * the {@link IValueChange} to be applied + * @param compact + * if set to true, then the values are compacted, otherwiss not */ - void applyChange(final IValueChange change); + void applyChange(final IValueChange change, boolean compact); /** * Get all {@link ITimeValue} objects whose time field is greater or equal to the given time diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeVariable.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeVariable.java index 4fbc28f6c..d825a9276 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeVariable.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeVariable.java @@ -77,7 +77,7 @@ public class TimeVariable implements ITimeVariable, Seriali } @Override - public void applyChange(final IValueChange change) { + public void applyChange(final IValueChange change, boolean compact) { SortedSet> futureValues = getFutureValues(change.getTime()); for (ITimeValue value : futureValues) { @@ -94,7 +94,8 @@ public class TimeVariable implements ITimeVariable, Seriali this.container.add(newValue); } - compact(); + if (compact) + compact(); } @SuppressWarnings("unchecked") diff --git a/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java b/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java index 0f1852c79..74d2c554f 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/ModelTest.java @@ -339,7 +339,7 @@ public class ModelTest { Resource srcRes = createResource("@res01", "Test resource", "MyType"); Resource dstRes = createResource("@res01", "Test resource", "MyType"); BooleanTimedState timedState = dstRes.getTimedState(STATE_BOOLEAN_ID); - timedState.applyChange(new ValueChange<>(System.currentTimeMillis(), new BooleanValue(Boolean.FALSE))); + timedState.applyChange(new ValueChange<>(System.currentTimeMillis(), new BooleanValue(Boolean.FALSE)), true); timedState.setName("Ohla"); StrolchElementDeepEqualsVisitor visitor = new StrolchElementDeepEqualsVisitor(srcRes); List mismatches = dstRes.accept(visitor); diff --git a/li.strolch.model/src/test/java/li/strolch/model/timedstate/TimeStateTest.java b/li.strolch.model/src/test/java/li/strolch/model/timedstate/TimeStateTest.java index 9229aa338..3543f5f6c 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/timedstate/TimeStateTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/timedstate/TimeStateTest.java @@ -43,7 +43,7 @@ public class TimeStateTest { public void before() { final IValueChange change1 = new ValueChange<>(this.t10, this.expectedValue1); - this.state.applyChange(change1); + this.state.applyChange(change1, true); final ITimeValue stateAt9 = this.state.getStateAt(9L); assertNull(stateAt9); @@ -53,7 +53,7 @@ public class TimeStateTest { assertEquals(true, stateAt11.getValue().matches(this.expectedValue1)); final IValueChange change2 = new ValueChange<>(this.t30, this.expectedValue1); - this.state.applyChange(change2); + this.state.applyChange(change2, true); final ITimeValue stateAt31 = this.state.getStateAt(31L); assertNotNull(stateAt31); diff --git a/li.strolch.model/src/test/java/li/strolch/model/timevalue/FloatTimeVariableTest.java b/li.strolch.model/src/test/java/li/strolch/model/timevalue/FloatTimeVariableTest.java index aa5b04676..fc899c0ac 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/timevalue/FloatTimeVariableTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/timevalue/FloatTimeVariableTest.java @@ -100,7 +100,7 @@ public class FloatTimeVariableTest { FloatValue doubleValue = new FloatValue(STEP.doubleValue()); IValueChange change = new ValueChange<>(PICK, doubleValue); - this.timeVariable.applyChange(change); + this.timeVariable.applyChange(change, true); Collection> futureValues = this.timeVariable.getFutureValues(PICK); Long expectedTime = PICK; @@ -126,7 +126,7 @@ public class FloatTimeVariableTest { FloatValue doubleValue = new FloatValue(STEP.doubleValue()); IValueChange change = new ValueChange<>(PICK, doubleValue); - this.timeVariable.applyChange(change); + this.timeVariable.applyChange(change, true); ITimeValue actual = this.timeVariable.getValueAt(PICK); assertNotNull(actual); diff --git a/li.strolch.model/src/test/java/li/strolch/model/timevalue/IntegerTimeVariableTest.java b/li.strolch.model/src/test/java/li/strolch/model/timevalue/IntegerTimeVariableTest.java index 48dd1bfdd..61b5fb920 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/timevalue/IntegerTimeVariableTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/timevalue/IntegerTimeVariableTest.java @@ -105,7 +105,7 @@ public class IntegerTimeVariableTest { IntegerValue integerValue = new IntegerValue(STEP.intValue()); IValueChange change = new ValueChange<>(PICK, integerValue); - this.timeVariable.applyChange(change); + this.timeVariable.applyChange(change, false); Collection> futureValues = this.timeVariable.getFutureValues(PICK); Long expectedTime = PICK; diff --git a/li.strolch.model/src/test/java/li/strolch/model/timevalue/StringTimeVariableTest.java b/li.strolch.model/src/test/java/li/strolch/model/timevalue/StringTimeVariableTest.java index e76010b8a..0934d9aa1 100644 --- a/li.strolch.model/src/test/java/li/strolch/model/timevalue/StringTimeVariableTest.java +++ b/li.strolch.model/src/test/java/li/strolch/model/timevalue/StringTimeVariableTest.java @@ -104,7 +104,7 @@ public class StringTimeVariableTest { IValue> inverseTestValue = testValue.getInverse(); IValueChange>> change = new ValueChange<>(PICK, inverseTestValue); - this.timeVariable.applyChange(change); + this.timeVariable.applyChange(change, true); // check the future values Collection>>> futureValues = this.timeVariable.getFutureValues(0L); diff --git a/li.strolch.service/src/main/java/li/strolch/planning/AbstractPlanCommand.java b/li.strolch.service/src/main/java/li/strolch/planning/AbstractPlanCommand.java index 51b68c699..54e1dffc4 100644 --- a/li.strolch.service/src/main/java/li/strolch/planning/AbstractPlanCommand.java +++ b/li.strolch.service/src/main/java/li/strolch/planning/AbstractPlanCommand.java @@ -64,7 +64,7 @@ public abstract class AbstractPlanCommand extends Command { List>> changes = action.getChanges(); for (IValueChange change : changes) { StrolchTimedState timedState = resource.getTimedState(change.getStateId()); - timedState.applyChange(change); + timedState.applyChange(change, true); } action.setState(State.PLANNED); @@ -98,7 +98,7 @@ public abstract class AbstractPlanCommand extends Command { List>> changes = action.getChanges(); for (IValueChange change : changes) { StrolchTimedState timedState = resource.getTimedState(change.getStateId()); - timedState.applyChange(change.getInverse()); + timedState.applyChange(change.getInverse(), true); } action.setState(State.CREATED); diff --git a/li.strolch.service/src/test/java/li/strolch/planning/AssignActionTest.java b/li.strolch.service/src/test/java/li/strolch/planning/AssignActionTest.java index 5569108f9..be49f8ad9 100644 --- a/li.strolch.service/src/test/java/li/strolch/planning/AssignActionTest.java +++ b/li.strolch.service/src/test/java/li/strolch/planning/AssignActionTest.java @@ -70,13 +70,15 @@ public class AssignActionTest { this.initialResource = ModelGenerator.createResource("initial", "Test With States", "Stated"); this.initialTimedState = this.initialResource.getTimedState(STATE_INTEGER_ID); this.initialTimedState.getTimeEvolution().clear(); - this.initialTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + this.initialTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), + true); // add target resource with integer state variable this.targetResource = ModelGenerator.createResource("target", "Test With States", "Stated"); this.targetTimedState = this.targetResource.getTimedState(STATE_INTEGER_ID); this.targetTimedState.getTimeEvolution().clear(); - this.targetTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + this.targetTimedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), + true); this.action = new Action("action", "Action", "Use"); diff --git a/li.strolch.service/src/test/java/li/strolch/planning/PlanActionTest.java b/li.strolch.service/src/test/java/li/strolch/planning/PlanActionTest.java index e8795d1ca..aadc35d4e 100644 --- a/li.strolch.service/src/test/java/li/strolch/planning/PlanActionTest.java +++ b/li.strolch.service/src/test/java/li/strolch/planning/PlanActionTest.java @@ -65,7 +65,7 @@ public class PlanActionTest { this.resource = ModelGenerator.createResource("@1", "Test With States", "Stated"); IntegerTimedState timedState = this.resource.getTimedState(STATE_INTEGER_ID); timedState.getTimeEvolution().clear(); - timedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + timedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), true); this.action = new Action("action", "Action", "Use"); diff --git a/li.strolch.service/src/test/java/li/strolch/planning/PlanActivityTest.java b/li.strolch.service/src/test/java/li/strolch/planning/PlanActivityTest.java index a16ef9c71..dfbde787c 100644 --- a/li.strolch.service/src/test/java/li/strolch/planning/PlanActivityTest.java +++ b/li.strolch.service/src/test/java/li/strolch/planning/PlanActivityTest.java @@ -82,19 +82,19 @@ public class PlanActivityTest { this.resource1 = ModelGenerator.createResource("@1", "Test With States 1", "Stated"); this.timedState1 = resource1.getTimedState(STATE_INTEGER_ID); this.timedState1.getTimeEvolution().clear(); - this.timedState1.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + this.timedState1.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), true); // create resource with integer state this.resource2 = ModelGenerator.createResource("@2", "Test With States 2", "Stated"); this.timedState2 = resource2.getTimedState(STATE_INTEGER_ID); this.timedState2.getTimeEvolution().clear(); - this.timedState2.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + this.timedState2.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), true); // create resource with integer state this.resource3 = ModelGenerator.createResource("@3", "Test With States 3", "Stated"); this.timedState3 = resource3.getTimedState(STATE_INTEGER_ID); this.timedState3.getTimeEvolution().clear(); - this.timedState3.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + this.timedState3.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), true); // create activity element this.activity = new Activity("activity", "Activity", "testType", TimeOrdering.SERIES); diff --git a/li.strolch.service/src/test/java/li/strolch/planning/ShiftActionTest.java b/li.strolch.service/src/test/java/li/strolch/planning/ShiftActionTest.java index 996a30537..e77e78a57 100644 --- a/li.strolch.service/src/test/java/li/strolch/planning/ShiftActionTest.java +++ b/li.strolch.service/src/test/java/li/strolch/planning/ShiftActionTest.java @@ -69,7 +69,7 @@ public class ShiftActionTest { this.resource = ModelGenerator.createResource("@1", "Test With States", "Stated"); this.timedState = this.resource.getTimedState(STATE_INTEGER_ID); this.timedState.getTimeEvolution().clear(); - this.timedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0))); + this.timedState.applyChange(new ValueChange<>(STATE_TIME_0, new IntegerValue(STATE_INTEGER_TIME_0)), true); this.action = new Action("action", "Action", "Use");