Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/
public final class DimensionContext implements PluginDataBuilderContainer {

private SimulationState simulationState;
private Map<Class<?>, List<PluginDataBuilder>> pluginDataBuilderBaseMap = new LinkedHashMap<>();
private Map<Class<?>, List<PluginDataBuilder>> pluginDataBuilderWorkingMap = new LinkedHashMap<>();
private Map<Class<?>, List<PluginData>> pluginDataBaseMap = new LinkedHashMap<>();
Expand All @@ -28,17 +29,32 @@ public static class Builder {
private Builder() {
}

private SimulationState simulationState;
private Map<Class<?>, List<PluginDataBuilder>> pluginDataBuilderMap = new LinkedHashMap<>();
private Map<Class<?>, List<PluginData>> pluginDataMap = new LinkedHashMap<>();

private void validate() {
if(simulationState == null) {
throw new ContractException(NucleusError.NULL_SIMULATION_STATE);
}
}

/**
* Returns the DimensionContext instance composed from the inputs to this
* builder.
*
* @throws ContractException
* <ul>
* <li>{@linkplain NucleusError#NULL_SIMULATION_STATE}
* if the simulation state is not set</li>
* </ul>
*/
public DimensionContext build() {
validate();
DimensionContext result = new DimensionContext();
result.pluginDataBuilderBaseMap.putAll(pluginDataBuilderMap);
result.pluginDataBaseMap.putAll(pluginDataMap);
result.simulationState = simulationState;
return result;
}

Expand Down Expand Up @@ -69,6 +85,10 @@ public <T extends PluginData> PluginDataBuilder add(T t) {
pluginDataBuilders.add(builder);
return builder;
}

public void setSimulationState(SimulationState simulationState) {
this.simulationState = simulationState;
}
}

/**
Expand Down Expand Up @@ -120,24 +140,24 @@ public <T extends PluginDataBuilder> T getPluginDataBuilder(Class<T> classRef) {

return classRef.cast(pluginDataBuilder);
}

/**
* Returns the stored plugin data builders matching the given class reference.
*
* @throws ContractException
* <ul>
* <li>{@linkplain NucleusError#NULL_PLUGIN_DATA_BUILDER_CLASS}
* if the class reference is null</li> *
* if the class reference is null</li> *
* </ul>
*/
@SuppressWarnings("unchecked")
@SuppressWarnings("unchecked")
public <T extends PluginDataBuilder> List<T> getPluginDataBuilders(Class<T> classRef) {
if (classRef == null) {
throw new ContractException(NucleusError.NULL_PLUGIN_DATA_BUILDER_CLASS);
}

List<T> result = new ArrayList<>();

List<PluginDataBuilder> pluginDataBuilders = pluginDataBuilderWorkingMap.get(classRef);

if (pluginDataBuilders == null) {
Expand All @@ -150,11 +170,11 @@ public <T extends PluginDataBuilder> List<T> getPluginDataBuilders(Class<T> clas
}
pluginDataBuilderWorkingMap.put(classRef, pluginDataBuilders);
}
for(PluginDataBuilder pluginDataBuilder : pluginDataBuilders) {
result.add((T)pluginDataBuilder);

for (PluginDataBuilder pluginDataBuilder : pluginDataBuilders) {
result.add((T) pluginDataBuilder);
}

return result;
}

Expand Down Expand Up @@ -212,14 +232,13 @@ public <T extends PluginData> T getPluginData(Class<T> classRef) {
* if the class reference is null</li>
* </ul>
*/
@SuppressWarnings("unchecked")
@SuppressWarnings("unchecked")
public <T extends PluginData> List<T> getPluginDatas(Class<T> classRef) {


if (classRef == null) {
throw new ContractException(NucleusError.NULL_PLUGIN_DATA_CLASS);
}

List<T> result = new ArrayList<>();

List<PluginData> pluginDatas = pluginDataWorkingMap.get(classRef);
Expand All @@ -233,11 +252,18 @@ public <T extends PluginData> List<T> getPluginDatas(Class<T> classRef) {
}
pluginDataWorkingMap.put(classRef, pluginDatas);
}
for(PluginData pluginData : pluginDatas) {
result.add((T)pluginData);

for (PluginData pluginData : pluginDatas) {
result.add((T) pluginData);
}

return result;
}

/**
* Returns the simulation state.
*/
public SimulationState getSimulationState() {
return simulationState;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,9 @@ private List<Plugin> getNewPluginInstancesFromScenarioId(final int scenarioId) {
list.add(contextBuilder.add(pluginData));
}
}

contextBuilder.setSimulationState(data.simulationState);

final DimensionContext dimensionContext = contextBuilder.build();

// initialize the scenario meta data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ public void testGetPluginDataBuilder() {
PluginData p4 = new PluginData2();

DimensionContext.Builder dimensionContextBuilder = DimensionContext.builder();
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());

dimensionContextBuilder.add(p1);
dimensionContextBuilder.add(p2);
Expand Down Expand Up @@ -223,6 +224,7 @@ public void testGetPluginDataBuilders() {
PluginData p4 = new PluginData2();

DimensionContext.Builder dimensionContextBuilder = DimensionContext.builder();
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());

dimensionContextBuilder.add(p1);
dimensionContextBuilder.add(p2);
Expand All @@ -245,13 +247,15 @@ public void testGetPluginDataBuilders() {
assertEquals(p1.toBuilder(), pluginData1Builders.get(0));

// There should be exactly one type3 builder
List<PluginData3.Builder> pluginData3Builders = dimensionContext.getPluginDataBuilders(PluginData3.Builder.class);
List<PluginData3.Builder> pluginData3Builders = dimensionContext
.getPluginDataBuilders(PluginData3.Builder.class);
assertNotNull(pluginData3Builders);
assertEquals(1, pluginData3Builders.size());
assertEquals(p3.toBuilder(), pluginData3Builders.get(0));

// There should be exactly two type2 builders
List<PluginData2.Builder> pluginData2Builders = dimensionContext.getPluginDataBuilders(PluginData2.Builder.class);
List<PluginData2.Builder> pluginData2Builders = dimensionContext
.getPluginDataBuilders(PluginData2.Builder.class);
assertNotNull(pluginData2Builders);
assertEquals(2, pluginData2Builders.size());
assertTrue(pluginData2Builders.contains(p2.toBuilder()));
Expand All @@ -267,7 +271,8 @@ public void testGetPluginDataBuilders() {
assertTrue(pluginDataBuilders.contains(p4.toBuilder()));

// There should be exactly zero type4s
List<PluginData4.Builder> pluginData4Builders = dimensionContext.getPluginDataBuilders(PluginData4.Builder.class);
List<PluginData4.Builder> pluginData4Builders = dimensionContext
.getPluginDataBuilders(PluginData4.Builder.class);
assertNotNull(pluginData4Builders);
assertEquals(0, pluginData4Builders.size());

Expand All @@ -293,6 +298,8 @@ public void testGetPluginData() {
PluginData p4 = new PluginData2();

DimensionContext.Builder dimensionContextBuilder = DimensionContext.builder();
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());

dimensionContextBuilder.add(p1);
dimensionContextBuilder.add(p2);
Expand Down Expand Up @@ -356,6 +363,7 @@ public void testGetPluginDatas() {
PluginData p4 = new PluginData2();

DimensionContext.Builder dimensionContextBuilder = DimensionContext.builder();
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());

dimensionContextBuilder.add(p1);
dimensionContextBuilder.add(p2);
Expand Down Expand Up @@ -406,6 +414,27 @@ public void testGetPluginDatas() {
}

@Test
@UnitTestMethod(target = DimensionContext.class, name = "getSimulationState", args = {})
public void testGetSimulationState() {
SimulationState simulationState = SimulationState.builder().build();
DimensionContext.Builder builder = DimensionContext.builder();
builder.setSimulationState(simulationState);
DimensionContext dimensionContext = builder.build();
assertTrue(simulationState == dimensionContext.getSimulationState());
}

@Test
@UnitTestMethod(target = DimensionContext.Builder.class, name = "setSimulationState", args = {SimulationState.class})
public void testSetSimulationState() {
SimulationState simulationState = SimulationState.builder().build();
DimensionContext.Builder builder = DimensionContext.builder();
builder.setSimulationState(simulationState);
DimensionContext dimensionContext = builder.build();
assertTrue(simulationState == dimensionContext.getSimulationState());
}


@Test
@UnitTestMethod(target = DimensionContext.Builder.class, name = "add", args = { PluginData.class })
public void testAdd() {
PluginData p1 = new PluginData1();
Expand All @@ -417,6 +446,7 @@ public void testAdd() {
expectedContents.add(p2);

DimensionContext.Builder builder = DimensionContext.builder();
builder.setSimulationState(SimulationState.builder().build());

PluginDataBuilder p1b = builder.add(p1);
PluginDataBuilder p2b = builder.add(p2);
Expand Down Expand Up @@ -449,6 +479,7 @@ public void testBuild() {
expectedContents.add(p2);

DimensionContext.Builder builder = DimensionContext.builder();
builder.setSimulationState(SimulationState.builder().build());

PluginDataBuilder p1b = builder.add(p1);
PluginDataBuilder p2b = builder.add(p2);
Expand All @@ -464,5 +495,11 @@ public void testBuild() {

assertEquals(expectedContents, actualContents);

// precondition test: if the simulation state is null
ContractException contractException = assertThrows(ContractException.class, () -> {
DimensionContext.builder().build();
});
assertEquals(NucleusError.NULL_SIMULATION_STATE, contractException.getErrorType());

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.junit.jupiter.api.Test;

import gov.hhs.aspr.ms.gcm.simulation.nucleus.DimensionContext;
import gov.hhs.aspr.ms.gcm.simulation.nucleus.SimulationState;
import gov.hhs.aspr.ms.gcm.simulation.plugins.globalproperties.datamanagers.GlobalPropertiesPluginData;
import gov.hhs.aspr.ms.gcm.simulation.plugins.globalproperties.testsupport.TestGlobalPropertyId;
import gov.hhs.aspr.ms.gcm.simulation.plugins.properties.support.PropertyDefinition;
Expand Down Expand Up @@ -94,6 +95,7 @@ public void testExecuteLevel() {

pluginDataBuilder = (GlobalPropertiesPluginData.Builder) dimensionContextBuilder
.add(pluginDataBuilder.build());
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());
DimensionContext dimensionContext = dimensionContextBuilder.build();

// execute the dimension with the level
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.junit.jupiter.api.Test;

import gov.hhs.aspr.ms.gcm.simulation.nucleus.DimensionContext;
import gov.hhs.aspr.ms.gcm.simulation.nucleus.SimulationState;
import gov.hhs.aspr.ms.gcm.simulation.plugins.groups.datamanagers.GroupsPluginData;
import gov.hhs.aspr.ms.gcm.simulation.plugins.groups.testsupport.TestGroupPropertyId;
import gov.hhs.aspr.ms.gcm.simulation.plugins.groups.testsupport.TestGroupTypeId;
Expand Down Expand Up @@ -98,6 +99,7 @@ public void testExecuteLevel() {
DimensionContext.Builder dimensionContextBuilder = DimensionContext.builder();

pluginDataBuilder = (GroupsPluginData.Builder) dimensionContextBuilder.add(pluginDataBuilder.build());
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());
DimensionContext dimensionContext = dimensionContextBuilder.build();

// execute the dimension with the level
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.junit.jupiter.api.Test;

import gov.hhs.aspr.ms.gcm.simulation.nucleus.DimensionContext;
import gov.hhs.aspr.ms.gcm.simulation.nucleus.SimulationState;
import gov.hhs.aspr.ms.gcm.simulation.plugins.personproperties.datamanagers.PersonPropertiesPluginData;
import gov.hhs.aspr.ms.gcm.simulation.plugins.personproperties.testsupport.TestPersonPropertyId;
import gov.hhs.aspr.ms.gcm.simulation.plugins.properties.support.PropertyDefinition;
Expand Down Expand Up @@ -90,6 +91,7 @@ public void testExecuteLevel() {

pluginDataBuilder = (PersonPropertiesPluginData.Builder) dimensionContextBuilder
.add(pluginDataBuilder.build());
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());
DimensionContext dimensionContext = dimensionContextBuilder.build();

// execute the dimension with the level
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.junit.jupiter.api.Test;

import gov.hhs.aspr.ms.gcm.simulation.nucleus.DimensionContext;
import gov.hhs.aspr.ms.gcm.simulation.nucleus.SimulationState;
import gov.hhs.aspr.ms.gcm.simulation.plugins.properties.support.PropertyDefinition;
import gov.hhs.aspr.ms.gcm.simulation.plugins.regions.datamanagers.RegionsPluginData;
import gov.hhs.aspr.ms.gcm.simulation.plugins.regions.testsupport.TestRegionPropertyId;
Expand Down Expand Up @@ -97,6 +98,7 @@ public void testExecuteLevel() {
DimensionContext.Builder dimensionContextBuilder = DimensionContext.builder();

pluginDataBuilder = (RegionsPluginData.Builder) dimensionContextBuilder.add(pluginDataBuilder.build());
dimensionContextBuilder.setSimulationState(SimulationState.builder().build());
DimensionContext dimensionContext = dimensionContextBuilder.build();

// execute the dimension with the level
Expand Down