Search in sources :

Example 6 with FactIdentifier

use of org.drools.scenariosimulation.api.model.FactIdentifier in project drools-wb by kiegroup.

the class AbstractScesimGridModel method setCell.

/**
 * This method <i>set</i> a cell value to the grid <b>and</b> to the underlying model
 * @param rowIndex
 * @param columnIndex
 * @param cellSupplier
 */
@Override
public Range setCell(int rowIndex, int columnIndex, Supplier<GridCell<?>> cellSupplier) {
    checkSimulation();
    Range toReturn = super.setCell(rowIndex, columnIndex, cellSupplier);
    try {
        Optional<?> optionalValue = getCellValue(getCell(rowIndex, columnIndex));
        Object rawValue = optionalValue.orElse(null);
        String cellValue = (rawValue instanceof String) ? (String) rawValue : null;
        E scenarioByIndex = abstractScesimModel.getDataByIndex(rowIndex);
        FactMapping factMappingByIndex = abstractScesimModel.getScesimModelDescriptor().getFactMappingByIndex(columnIndex);
        FactIdentifier factIdentifier = factMappingByIndex.getFactIdentifier();
        ExpressionIdentifier expressionIdentifier = factMappingByIndex.getExpressionIdentifier();
        scenarioByIndex.addOrUpdateMappingValue(factIdentifier, expressionIdentifier, cellValue);
    } catch (Exception e) {
        toReturn = super.deleteCell(rowIndex, columnIndex);
        eventBus.fireEvent(new ScenarioGridReloadEvent(getGridWidget()));
    }
    return toReturn;
}
Also used : FactMapping(org.drools.scenariosimulation.api.model.FactMapping) ExpressionIdentifier(org.drools.scenariosimulation.api.model.ExpressionIdentifier) ScenarioGridReloadEvent(org.drools.workbench.screens.scenariosimulation.client.events.ScenarioGridReloadEvent) FactIdentifier(org.drools.scenariosimulation.api.model.FactIdentifier)

Example 7 with FactIdentifier

use of org.drools.scenariosimulation.api.model.FactIdentifier in project drools-wb by kiegroup.

the class AbstractScesimGridModel method checkValidAndUniqueInstanceHeaderTitle.

/**
 * Verify the given value is not already used as instance header name <b>between different groups</b>
 * @param instanceHeaderCellValue
 * @param columnIndex
 * @throws IllegalArgumentException if the given <b>instanceHeaderCellValue</b> contains a <i>dot</i> <b>OR</b>
 * it has already been used inside the <b>group (GIVEN/EXPECT)</b> of the given column
 */
protected void checkValidAndUniqueInstanceHeaderTitle(String instanceHeaderCellValue, int columnIndex) {
    if (instanceHeaderCellValue.contains(".")) {
        throw new IllegalArgumentException(ScenarioSimulationEditorConstants.INSTANCE.instanceTitleWithPeriodsError());
    }
    Range instanceLimits = getInstanceLimits(columnIndex);
    ScesimModelDescriptor simulationDescriptor = abstractScesimModel.getScesimModelDescriptor();
    FactIdentifier factIdentifier = simulationDescriptor.getFactMappingByIndex(columnIndex).getFactIdentifier();
    if (IntStream.range(0, getColumnCount()).filter(index -> index < instanceLimits.getMinRowIndex() || index > instanceLimits.getMaxRowIndex()).filter(index -> !Objects.equals(factIdentifier, simulationDescriptor.getFactMappingByIndex(index).getFactIdentifier())).mapToObj(index -> (ScenarioGridColumn) getColumns().get(index)).filter(elem -> elem.getInformationHeaderMetaData() != null).map(ScenarioGridColumn::getInformationHeaderMetaData).anyMatch(elem -> Objects.equals(elem.getTitle(), instanceHeaderCellValue))) {
        throw new IllegalArgumentException(ScenarioSimulationEditorConstants.INSTANCE.instanceTitleAssignedError(instanceHeaderCellValue));
    }
}
Also used : ScesimModelDescriptor(org.drools.scenariosimulation.api.model.ScesimModelDescriptor) Arrays(java.util.Arrays) ScenarioNotificationEvent(org.drools.workbench.screens.scenariosimulation.client.events.ScenarioNotificationEvent) ScenarioSimulationModel(org.drools.scenariosimulation.api.model.ScenarioSimulationModel) GridWidget(org.drools.workbench.screens.scenariosimulation.client.enums.GridWidget) GridColumn(org.uberfire.ext.wires.core.grids.client.model.GridColumn) NotificationEvent(org.uberfire.workbench.events.NotificationEvent) FactMappingValueType(org.drools.scenariosimulation.api.model.FactMappingValueType) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) ScesimModelDescriptor(org.drools.scenariosimulation.api.model.ScesimModelDescriptor) ScenarioSimulationUtils(org.drools.workbench.screens.scenariosimulation.client.utils.ScenarioSimulationUtils) BaseSingletonDOMElementFactory(org.uberfire.ext.wires.core.grids.client.widget.dom.single.impl.BaseSingletonDOMElementFactory) EventBus(com.google.gwt.event.shared.EventBus) GridCell(org.uberfire.ext.wires.core.grids.client.model.GridCell) Set(java.util.Set) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) ScenarioHeaderMetaData(org.drools.workbench.screens.scenariosimulation.client.metadata.ScenarioHeaderMetaData) ScenarioGridColumn(org.drools.workbench.screens.scenariosimulation.client.widgets.ScenarioGridColumn) List(java.util.List) FactMapping(org.drools.scenariosimulation.api.model.FactMapping) GridCellValue(org.uberfire.ext.wires.core.grids.client.model.GridCellValue) ScenarioHeaderTextBoxSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.ScenarioHeaderTextBoxSingletonDOMElementFactory) Optional(java.util.Optional) ScenarioSimulationEditorConstants(org.drools.workbench.screens.scenariosimulation.client.resources.i18n.ScenarioSimulationEditorConstants) ReloadTestToolsEvent(org.drools.workbench.screens.scenariosimulation.client.events.ReloadTestToolsEvent) ScenarioGridCell(org.drools.workbench.screens.scenariosimulation.client.widgets.ScenarioGridCell) ScenarioGridReloadEvent(org.drools.workbench.screens.scenariosimulation.client.events.ScenarioGridReloadEvent) IntStream(java.util.stream.IntStream) ScenarioSimulationUtils.getPropertyNameElementsWithoutAlias(org.drools.workbench.screens.scenariosimulation.client.utils.ScenarioSimulationUtils.getPropertyNameElementsWithoutAlias) CollectionEditorSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.CollectionEditorSingletonDOMElementFactory) FactMappingValueStatus(org.drools.scenariosimulation.api.model.FactMappingValueStatus) OptionalDouble(java.util.OptionalDouble) FactIdentifier(org.drools.scenariosimulation.api.model.FactIdentifier) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) ExpressionElement(org.drools.scenariosimulation.api.model.ExpressionElement) AbstractScesimModel(org.drools.scenariosimulation.api.model.AbstractScesimModel) ScenarioGridCellValue(org.drools.workbench.screens.scenariosimulation.client.values.ScenarioGridCellValue) GridRow(org.uberfire.ext.wires.core.grids.client.model.GridRow) ExpressionIdentifier(org.drools.scenariosimulation.api.model.ExpressionIdentifier) ScenarioSimulationSharedUtils(org.drools.scenariosimulation.api.utils.ScenarioSimulationSharedUtils) ScenarioCellTextAreaSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.ScenarioCellTextAreaSingletonDOMElementFactory) ScenarioExpressionCellTextAreaSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.ScenarioExpressionCellTextAreaSingletonDOMElementFactory) FactMappingValue(org.drools.scenariosimulation.api.model.FactMappingValue) FactMappingType(org.drools.scenariosimulation.api.model.FactMappingType) AbstractMap(java.util.AbstractMap) BaseGridData(org.uberfire.ext.wires.core.grids.client.model.impl.BaseGridData) Collections(java.util.Collections) AbstractScesimData(org.drools.scenariosimulation.api.model.AbstractScesimData) FactIdentifier(org.drools.scenariosimulation.api.model.FactIdentifier) ScenarioGridColumn(org.drools.workbench.screens.scenariosimulation.client.widgets.ScenarioGridColumn)

Example 8 with FactIdentifier

use of org.drools.scenariosimulation.api.model.FactIdentifier in project drools-wb by kiegroup.

the class AbstractScesimGridModel method checkUniquePropertyHeaderTitle.

/**
 * Verify if the given value is not already used as property header name <b>inside the same instance</b>
 * @param propertyHeaderCellValue
 * @param columnIndex
 * @throws IllegalArgumentException if the given <b>propertyHeaderCellValue</b> has already been used
 * inside the <b>instance</b> of the given column
 */
protected void checkUniquePropertyHeaderTitle(String propertyHeaderCellValue, int columnIndex) {
    ScesimModelDescriptor simulationDescriptor = abstractScesimModel.getScesimModelDescriptor();
    FactIdentifier factIdentifier = simulationDescriptor.getFactMappingByIndex(columnIndex).getFactIdentifier();
    if (IntStream.range(0, getColumnCount()).filter(index -> index != columnIndex).filter(index -> Objects.equals(factIdentifier, simulationDescriptor.getFactMappingByIndex(index).getFactIdentifier())).mapToObj(index -> (ScenarioGridColumn) getColumns().get(index)).filter(elem -> elem.getPropertyHeaderMetaData() != null).map(ScenarioGridColumn::getPropertyHeaderMetaData).anyMatch(elem -> Objects.equals(elem.getTitle(), propertyHeaderCellValue))) {
        throw new IllegalArgumentException(ScenarioSimulationEditorConstants.INSTANCE.propertyTitleAssignedError(propertyHeaderCellValue));
    }
}
Also used : ScesimModelDescriptor(org.drools.scenariosimulation.api.model.ScesimModelDescriptor) Arrays(java.util.Arrays) ScenarioNotificationEvent(org.drools.workbench.screens.scenariosimulation.client.events.ScenarioNotificationEvent) ScenarioSimulationModel(org.drools.scenariosimulation.api.model.ScenarioSimulationModel) GridWidget(org.drools.workbench.screens.scenariosimulation.client.enums.GridWidget) GridColumn(org.uberfire.ext.wires.core.grids.client.model.GridColumn) NotificationEvent(org.uberfire.workbench.events.NotificationEvent) FactMappingValueType(org.drools.scenariosimulation.api.model.FactMappingValueType) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) ScesimModelDescriptor(org.drools.scenariosimulation.api.model.ScesimModelDescriptor) ScenarioSimulationUtils(org.drools.workbench.screens.scenariosimulation.client.utils.ScenarioSimulationUtils) BaseSingletonDOMElementFactory(org.uberfire.ext.wires.core.grids.client.widget.dom.single.impl.BaseSingletonDOMElementFactory) EventBus(com.google.gwt.event.shared.EventBus) GridCell(org.uberfire.ext.wires.core.grids.client.model.GridCell) Set(java.util.Set) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) ScenarioHeaderMetaData(org.drools.workbench.screens.scenariosimulation.client.metadata.ScenarioHeaderMetaData) ScenarioGridColumn(org.drools.workbench.screens.scenariosimulation.client.widgets.ScenarioGridColumn) List(java.util.List) FactMapping(org.drools.scenariosimulation.api.model.FactMapping) GridCellValue(org.uberfire.ext.wires.core.grids.client.model.GridCellValue) ScenarioHeaderTextBoxSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.ScenarioHeaderTextBoxSingletonDOMElementFactory) Optional(java.util.Optional) ScenarioSimulationEditorConstants(org.drools.workbench.screens.scenariosimulation.client.resources.i18n.ScenarioSimulationEditorConstants) ReloadTestToolsEvent(org.drools.workbench.screens.scenariosimulation.client.events.ReloadTestToolsEvent) ScenarioGridCell(org.drools.workbench.screens.scenariosimulation.client.widgets.ScenarioGridCell) ScenarioGridReloadEvent(org.drools.workbench.screens.scenariosimulation.client.events.ScenarioGridReloadEvent) IntStream(java.util.stream.IntStream) ScenarioSimulationUtils.getPropertyNameElementsWithoutAlias(org.drools.workbench.screens.scenariosimulation.client.utils.ScenarioSimulationUtils.getPropertyNameElementsWithoutAlias) CollectionEditorSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.CollectionEditorSingletonDOMElementFactory) FactMappingValueStatus(org.drools.scenariosimulation.api.model.FactMappingValueStatus) OptionalDouble(java.util.OptionalDouble) FactIdentifier(org.drools.scenariosimulation.api.model.FactIdentifier) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) ExpressionElement(org.drools.scenariosimulation.api.model.ExpressionElement) AbstractScesimModel(org.drools.scenariosimulation.api.model.AbstractScesimModel) ScenarioGridCellValue(org.drools.workbench.screens.scenariosimulation.client.values.ScenarioGridCellValue) GridRow(org.uberfire.ext.wires.core.grids.client.model.GridRow) ExpressionIdentifier(org.drools.scenariosimulation.api.model.ExpressionIdentifier) ScenarioSimulationSharedUtils(org.drools.scenariosimulation.api.utils.ScenarioSimulationSharedUtils) ScenarioCellTextAreaSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.ScenarioCellTextAreaSingletonDOMElementFactory) ScenarioExpressionCellTextAreaSingletonDOMElementFactory(org.drools.workbench.screens.scenariosimulation.client.factories.ScenarioExpressionCellTextAreaSingletonDOMElementFactory) FactMappingValue(org.drools.scenariosimulation.api.model.FactMappingValue) FactMappingType(org.drools.scenariosimulation.api.model.FactMappingType) AbstractMap(java.util.AbstractMap) BaseGridData(org.uberfire.ext.wires.core.grids.client.model.impl.BaseGridData) Collections(java.util.Collections) AbstractScesimData(org.drools.scenariosimulation.api.model.AbstractScesimData) FactIdentifier(org.drools.scenariosimulation.api.model.FactIdentifier) ScenarioGridColumn(org.drools.workbench.screens.scenariosimulation.client.widgets.ScenarioGridColumn)

Example 9 with FactIdentifier

use of org.drools.scenariosimulation.api.model.FactIdentifier in project drools-wb by kiegroup.

the class AbstractScesimGridModel method updateFactMapping.

/**
 * If the <code>FactIdentifier</code> of the given <code>FactMapping</code> equals the one at <b>index</b>, update the <code>FactMapping.FactAlias</code> at <b>index</b>
 * position with the provided <b>value</b>
 * @param simulationDescriptor
 * @param factMappingReference
 * @param index
 * @param value
 */
protected void updateFactMapping(ScesimModelDescriptor simulationDescriptor, FactMapping factMappingReference, int index, String value, ScenarioHeaderMetaData.MetadataType metadataType) {
    final FactIdentifier factIdentifierReference = factMappingReference.getFactIdentifier();
    FactMapping factMappingToCheck = simulationDescriptor.getFactMappingByIndex(index);
    final FactIdentifier factIdentifierToCheck = factMappingToCheck.getFactIdentifier();
    boolean toUpdate = (Objects.equals(FactIdentifier.EMPTY, factIdentifierReference) && (Objects.equals(factIdentifierToCheck, factIdentifierReference) && Objects.equals(factMappingReference.getFactAlias(), factMappingToCheck.getFactAlias()))) || (Objects.equals(factIdentifierToCheck, factIdentifierReference));
    if (toUpdate) {
        switch(metadataType) {
            case INSTANCE:
                ((ScenarioGridColumn) columns.get(index)).getInformationHeaderMetaData().setTitle(value);
                factMappingToCheck.setFactAlias(value);
                break;
            case PROPERTY:
                if (Objects.equals(factMappingToCheck.getFullExpression(), factMappingReference.getFullExpression())) {
                    ((ScenarioGridColumn) columns.get(index)).getPropertyHeaderMetaData().setTitle(value);
                    factMappingToCheck.setExpressionAlias(value);
                }
                break;
            default:
                break;
        }
    }
}
Also used : FactMapping(org.drools.scenariosimulation.api.model.FactMapping) FactIdentifier(org.drools.scenariosimulation.api.model.FactIdentifier)

Example 10 with FactIdentifier

use of org.drools.scenariosimulation.api.model.FactIdentifier in project drools-wb by kiegroup.

the class AbstractScesimGridModel method checkAlreadyAssignedProperty.

/**
 * Check if property mapped to the column at given index is already assigned to
 * another column of the same <b>instance</b>
 * @param columnIndex
 * @param propertyNameElements
 * @throws IllegalStateException if the given <code>propertyNameElements</code> are already mapped to a column of the same <b>instance</b>
 */
public void checkAlreadyAssignedProperty(int columnIndex, List<String> propertyNameElements) {
    Range instanceLimits = getInstanceLimits(columnIndex);
    ScesimModelDescriptor simulationDescriptor = abstractScesimModel.getScesimModelDescriptor();
    FactIdentifier factIdentifier = simulationDescriptor.getFactMappingByIndex(columnIndex).getFactIdentifier();
    // We have to keep the original List unmodified
    List<String> propertyNameElementsClone = new ArrayList<>();
    propertyNameElementsClone.add(factIdentifier.getClassNameWithoutPackage());
    propertyNameElementsClone.addAll(propertyNameElements.subList(1, propertyNameElements.size()));
    if (IntStream.range(instanceLimits.getMinRowIndex(), instanceLimits.getMaxRowIndex() + 1).filter(index -> index != columnIndex).mapToObj(simulationDescriptor::getFactMappingByIndex).anyMatch(factMapping -> {
        List<String> factMappingPropertyNameElements = factMapping.getExpressionElements().stream().map(ExpressionElement::getStep).collect(Collectors.toList());
        return Objects.equals(factMappingPropertyNameElements, propertyNameElementsClone);
    })) {
        throw new IllegalStateException(String.join(".", propertyNameElements) + " has already been used in the current instance.");
    }
}
Also used : ScesimModelDescriptor(org.drools.scenariosimulation.api.model.ScesimModelDescriptor) ArrayList(java.util.ArrayList) FactIdentifier(org.drools.scenariosimulation.api.model.FactIdentifier)

Aggregations

FactIdentifier (org.drools.scenariosimulation.api.model.FactIdentifier)28 FactMapping (org.drools.scenariosimulation.api.model.FactMapping)15 ExpressionIdentifier (org.drools.scenariosimulation.api.model.ExpressionIdentifier)12 List (java.util.List)10 ArrayList (java.util.ArrayList)9 FactMappingValue (org.drools.scenariosimulation.api.model.FactMappingValue)9 Test (org.junit.Test)9 Map (java.util.Map)8 ScesimModelDescriptor (org.drools.scenariosimulation.api.model.ScesimModelDescriptor)8 Set (java.util.Set)6 Objects (java.util.Objects)5 Collectors.toList (java.util.stream.Collectors.toList)5 ExpressionElement (org.drools.scenariosimulation.api.model.ExpressionElement)5 FactMappingType (org.drools.scenariosimulation.api.model.FactMappingType)5 ExpressionEvaluator (org.drools.scenariosimulation.backend.expression.ExpressionEvaluator)5 InstanceGiven (org.drools.scenariosimulation.backend.runner.model.InstanceGiven)5 ScenarioExpect (org.drools.scenariosimulation.backend.runner.model.ScenarioExpect)5 Supplier (java.util.function.Supplier)4 Collectors (java.util.stream.Collectors)4 FactMappingValueStatus (org.drools.scenariosimulation.api.model.FactMappingValueStatus)4