private FactMapping(FactMapping original) { original.expressionElements.forEach(expressionElement -> this.addExpressionElement(expressionElement.getStep(), original.className)); this.expressionIdentifier = original.expressionIdentifier; this.factIdentifier = original.factIdentifier; this.className = original.className; this.factAlias = original.factAlias; this.expressionAlias = original.expressionAlias; }
private FactMapping(FactMapping original) { original.expressionElements.forEach(expressionElement -> this.addExpressionElement(expressionElement.getStep(), original.className)); this.expressionIdentifier = original.expressionIdentifier; this.factIdentifier = original.factIdentifier; this.className = original.className; this.factAlias = original.factAlias; this.expressionAlias = original.expressionAlias; }
public FactMapping getFactMapping(FactModelTree factModelTree, String propertyName, List<String> previousSteps, String factType) { String factAlias = previousSteps.size() > 0 ? previousSteps.get(0) : factModelTree.getFactName(); ExpressionIdentifier expressionIdentifier = ExpressionIdentifier.create(row + "|" + id.getAndIncrement(), type); final FactMapping factMapping = simulationDescriptor.addFactMapping(factAlias, factIdentifier, expressionIdentifier); List<String> localPreviousStep = new ArrayList<>(previousSteps); localPreviousStep.add(propertyName); String expressionAlias = String.join(".", localPreviousStep.size() > 1 ? localPreviousStep.subList(1, localPreviousStep.size()) : localPreviousStep); factMapping.setExpressionAlias(expressionAlias); previousSteps.forEach(step -> factMapping.addExpressionElement(step, factType)); if (previousSteps.isEmpty()) { factMapping.addExpressionElement(factModelTree.getFactName(), factType); } scenario.addMappingValue(factIdentifier, expressionIdentifier, null); return factMapping; } }
private void addToScenario(FactMappingExtractor factMappingExtractor, FactModelTree factModelTree, List<String> previousSteps, Map<String, FactModelTree> hiddenValues) { // if is a simple type it generates a single column if (factModelTree.isSimple()) { String factType = factModelTree.getSimpleProperties().get("value"); factMappingExtractor.getFactMapping(factModelTree, "value", previousSteps, factType); } // otherwise it adds a column for each simple properties direct or nested else { for (Map.Entry<String, String> entry : factModelTree.getSimpleProperties().entrySet()) { String factName = entry.getKey(); String factType = entry.getValue(); FactMapping factMapping = factMappingExtractor.getFactMapping(factModelTree, factName, previousSteps, factType); factMapping.addExpressionElement(factName, factType); } for (Map.Entry<String, String> entry : factModelTree.getExpandableProperties().entrySet()) { String factType = entry.getValue(); FactModelTree nestedModelTree = hiddenValues.get(factType); if (previousSteps.isEmpty()) { previousSteps.add(factModelTree.getFactName()); } previousSteps.add(entry.getKey()); addToScenario(factMappingExtractor, nestedModelTree, previousSteps, hiddenValues); } } }
/** * This method update the type mapped inside a give column and updates the underlying model * @param columnIndex * @param column * @param value * @param lastLevelClassName * @param keepData */ public void updateColumnProperty(int columnIndex, final GridColumn<?> column, String value, String lastLevelClassName, boolean keepData) { checkSimulation(); List<GridCellValue<?>> originalValues = new ArrayList<>(); if (keepData) { IntStream.range(0, getRowCount()) .forEach(rowIndex -> originalValues.add(getCell(rowIndex, columnIndex).getValue())); } deleteColumn(columnIndex); String group = ((ScenarioGridColumn) column).getInformationHeaderMetaData().getColumnGroup(); String columnId = ((ScenarioGridColumn) column).getInformationHeaderMetaData().getColumnId(); String[] elements = value.split("\\."); ExpressionIdentifier ei = ExpressionIdentifier.create(columnId, FactMappingType.valueOf(group)); commonAddColumn(columnIndex, column, ei); final FactMapping factMappingByIndex = simulation.getSimulationDescriptor().getFactMappingByIndex(columnIndex); IntStream.range(0, elements.length) .forEach(stepIndex -> factMappingByIndex.addExpressionElement(elements[stepIndex], lastLevelClassName)); if (keepData) { IntStream.range(0, getRowCount()) .forEach(rowIndex -> setCellValue(rowIndex, columnIndex, originalValues.get(rowIndex))); } }
@Test public void getExpressionElementsWithoutClass() { FactMapping original = new FactMapping("FACT_ALIAS", new FactIdentifier("FI_TEST", "com.test.Foo"), new ExpressionIdentifier("EI_TEST", FactMappingType.GIVEN)); assertThatThrownBy(original::getExpressionElementsWithoutClass) .isInstanceOf(IllegalStateException.class) .hasMessage("ExpressionElements malformed"); assertEquals(0, original.getExpressionElements().size()); original.addExpressionElement("STEP", String.class.getCanonicalName()); assertEquals(0, original.getExpressionElementsWithoutClass().size()); assertEquals(1, original.getExpressionElements().size()); } }
@Test public void getExpressionElementsWithoutClass() { FactMapping original = new FactMapping("FACT_ALIAS", new FactIdentifier("FI_TEST", "com.test.Foo"), new ExpressionIdentifier("EI_TEST", FactMappingType.GIVEN)); assertThatThrownBy(original::getExpressionElementsWithoutClass) .isInstanceOf(IllegalStateException.class) .hasMessage("ExpressionElements malformed"); assertEquals(0, original.getExpressionElements().size()); original.addExpressionElement("STEP", String.class.getCanonicalName()); assertEquals(0, original.getExpressionElementsWithoutClass().size()); assertEquals(1, original.getExpressionElements().size()); } }
firstNameGivenExpressionIdentifier = ExpressionIdentifier.create("First Name Given", FactMappingType.GIVEN); firstNameGivenFactMapping = simulation.getSimulationDescriptor().addFactMapping(personFactIdentifier, firstNameGivenExpressionIdentifier); firstNameGivenFactMapping.addExpressionElement("Fact 1", String.class.getCanonicalName()); firstNameGivenFactMapping.addExpressionElement("firstName", String.class.getCanonicalName()); amountNameGivenFactMapping.addExpressionElement("Fact 2", BigDecimal.class.getCanonicalName()); amountNameGivenFactMapping.addExpressionElement("amount", BigDecimal.class.getCanonicalName()); firstNameExpectedFactMapping.addExpressionElement("Fact 1", String.class.getCanonicalName()); firstNameExpectedFactMapping.addExpressionElement("firstName", String.class.getCanonicalName()); amountNameExpectedFactMapping.addExpressionElement("Fact 2", Double.class.getCanonicalName()); amountNameExpectedFactMapping.addExpressionElement("amount", Double.class.getCanonicalName());
firstNameGivenExpressionIdentifier = ExpressionIdentifier.create("First Name Given", FactMappingType.GIVEN); firstNameGivenFactMapping = simulation.getSimulationDescriptor().addFactMapping(personFactIdentifier, firstNameGivenExpressionIdentifier); firstNameGivenFactMapping.addExpressionElement("Fact 1", String.class.getCanonicalName()); firstNameGivenFactMapping.addExpressionElement("firstName", String.class.getCanonicalName()); amountNameGivenFactMapping.addExpressionElement("Fact 2", Double.class.getCanonicalName()); amountNameGivenFactMapping.addExpressionElement("amount", Double.class.getCanonicalName()); firstNameExpectedFactMapping.addExpressionElement("Fact 1", String.class.getCanonicalName()); firstNameExpectedFactMapping.addExpressionElement("firstName", String.class.getCanonicalName()); amountNameExpectedFactMapping.addExpressionElement("Fact 2", Double.class.getCanonicalName()); amountNameExpectedFactMapping.addExpressionElement("amount", Double.class.getCanonicalName());
@Test public void cloneFactMapping() { FactMapping original = new FactMapping("FACT_ALIAS", new FactIdentifier("FI_TEST", "com.test.Foo"), new ExpressionIdentifier("EI_TEST", FactMappingType.GIVEN)); original.addExpressionElement("FIRST_STEP", String.class.getName()); original.setExpressionAlias("EA_TEST"); FactMapping retrieved = original.cloneFactMapping(); assertTrue(retrieved.equals(original)); }
@Test public void cloneFactMapping() { FactMapping original = new FactMapping("FACT_ALIAS", new FactIdentifier("FI_TEST", "com.test.Foo"), new ExpressionIdentifier("EI_TEST", FactMappingType.GIVEN)); original.addExpressionElement("FIRST_STEP", String.class.getName()); original.setExpressionAlias("EA_TEST"); FactMapping retrieved = original.cloneFactMapping(); assertTrue(retrieved.equals(original)); }