use of org.osate.ge.operations.OperationBuilder in project osate2 by osate.
the class CreateVariablePaletteCommand method getOperation.
@Override
public Optional<Operation> getOperation(final GetTargetedOperationContext ctx) {
return ctx.getTarget().getBusinessObject(BehaviorAnnex.class).map(behaviorAnnex -> {
final PublicPackageSection section = getPackage(behaviorAnnex).map(AadlPackage::getPublicSection).orElse(null);
if (section == null) {
return null;
}
return Operation.createWithBuilder(builder -> {
final OperationBuilder<DataClassifier> prompt = builder.supply(() -> BehaviorAnnexUtil.promptForDataClassifier(behaviorAnnex.eResource()).filter(c -> BehaviorAnnexUtil.getPackage(c).isPresent()).map(StepResult::forValue).orElseGet(StepResult::abort));
final OperationBuilder<DataClassifier> addImportIfNeeded = prompt.modifyModel(null, (tag, prevResult) -> section, (tag, sectionToModify, dataClassifier) -> {
BehaviorAnnexUtil.getPackage(dataClassifier).ifPresent(classifierPkg -> AadlImportsUtil.addImportIfNeeded(sectionToModify, classifierPkg));
return StepResult.forValue(dataClassifier);
});
addImportIfNeeded.modifyModel(null, (tag, dataClassifier) -> behaviorAnnex, (tag, behaviorAnnexToModify, prevResult) -> {
final BehaviorVariable newVariable = (BehaviorVariable) EcoreUtil.create(AadlBaPackage.eINSTANCE.getBehaviorVariable());
final String newName = BehaviorAnnexNamingUtil.buildUniqueIdentifier(behaviorAnnexToModify, "new_behavior_variable");
newVariable.setName(newName);
newVariable.setDataClassifier(prevResult);
behaviorAnnexToModify.getVariables().add(newVariable);
return StepResultBuilder.create().showNewBusinessObject(ctx.getTarget(), newVariable).build();
});
});
});
}
use of org.osate.ge.operations.OperationBuilder in project osate2 by osate.
the class OperationTest method testSplit.
@Test
public void testSplit() {
DefaultOperationBuilder rootOpBuilder = new DefaultOperationBuilder();
final OperationBuilder<Integer> b = rootOpBuilder.map(arg -> StepResultBuilder.create(1).build());
b.map(pr -> StepResultBuilder.create(pr + 2).build()).modifyModel(null, (tag, prevResult) -> testBo, (tag, boToModify, prevResult) -> {
return StepResultBuilder.create(prevResult + 1).build();
}).modifyModel(null, (tag, prevResult) -> testBo, (tag, boToModify, prevResult) -> {
return StepResultBuilder.create().showNewBusinessObject(stubBoc, prevResult + 2).build();
});
b.map(pr -> StepResultBuilder.create(pr + 6).build()).modifyModel(null, (tag, prevResult) -> testBo, (tag, boToModify, prevResult) -> {
return StepResultBuilder.create().showNewBusinessObject(stubBoc, prevResult + 3).build();
});
final Step firstStep = rootOpBuilder.build();
final OperationExecutor executor = new OperationExecutor(modificationService, referenceBuilder);
final OperationResults results = executor.execute(firstStep);
// Verify that results were created from both paths
final ImmutableSet<Integer> expectedBosToShow = ImmutableSet.of(6, 10);
final Set<?> bosToShow = results.getContainerToBoToShowDetailsMap().values().stream().map(v -> v.bo).collect(Collectors.toSet());
assertEquals(expectedBosToShow, bosToShow);
}
use of org.osate.ge.operations.OperationBuilder in project osate2 by osate.
the class OperationTest method testSequential.
/**
* Tests a simple sequential modification
*/
@Test
public void testSequential() {
DefaultOperationBuilder rootOpBuilder = new DefaultOperationBuilder();
final OperationBuilder<Integer> b = rootOpBuilder.map(arg -> StepResultBuilder.create(1).build());
b.map(pr -> StepResultBuilder.create(pr + 2).build()).modifyModel(null, (tag, prevResult) -> testBo, (tag, boToModify, prevResult) -> {
return StepResultBuilder.create(prevResult + 1).build();
}).modifyModel(null, (tag, prevResult) -> testBo, (tag, boToModify, prevResult) -> {
return StepResultBuilder.create().showNewBusinessObject(stubBoc, prevResult + 2).build();
});
final Step firstStep = rootOpBuilder.build();
final OperationExecutor executor = new OperationExecutor(modificationService, referenceBuilder);
final OperationResults results = executor.execute(firstStep);
// Verify that result was created.
final ImmutableSet<Integer> expectedBosToShow = ImmutableSet.of(6);
final Set<?> bosToShow = results.getContainerToBoToShowDetailsMap().values().stream().map(v -> v.bo).collect(Collectors.toSet());
assertEquals(expectedBosToShow, bosToShow);
}
use of org.osate.ge.operations.OperationBuilder in project osate2 by osate.
the class OperationTest method testMapWithoutodify.
@Test
public void testMapWithoutodify() {
DefaultOperationBuilder rootOpBuilder = new DefaultOperationBuilder();
final OperationBuilder<Integer> b = rootOpBuilder.map(arg -> StepResultBuilder.create(1).build());
b.map(pr -> StepResultBuilder.create().showNewBusinessObject(stubBoc, Integer.valueOf(100)).build());
final Step firstStep = rootOpBuilder.build();
final OperationExecutor executor = new OperationExecutor(modificationService, referenceBuilder);
final OperationResults results = executor.execute(firstStep);
// Verify that result was created from the map after the modification
final ImmutableSet<Integer> expectedBosToShow = ImmutableSet.of(100);
final Set<?> bosToShow = results.getContainerToBoToShowDetailsMap().values().stream().map(v -> v.bo).collect(Collectors.toSet());
assertEquals(expectedBosToShow, bosToShow);
}
use of org.osate.ge.operations.OperationBuilder in project osate2 by osate.
the class OperationTest method testAbort.
@Test
public void testAbort() {
final DefaultOperationBuilder rootOpBuilder = new DefaultOperationBuilder();
final OperationBuilder<Integer> b = rootOpBuilder.map(arg -> StepResultBuilder.create(1).build());
final AtomicBoolean executed = new AtomicBoolean(false);
b.map(pr -> StepResultBuilder.create(pr + 2).build()).modifyModel(null, (tag, prevResult) -> testBo, (tag, boToModify, prevResult) -> {
return StepResultBuilder.create(prevResult + 1).abort().build();
}).modifyModel(null, (tag, prevResult) -> testBo, (tag, boToModify, prevResult) -> {
executed.set(true);
return StepResultBuilder.create().showNewBusinessObject(stubBoc, prevResult + 2).build();
});
final Step firstStep = rootOpBuilder.build();
final OperationExecutor executor = new OperationExecutor(modificationService, referenceBuilder);
executor.execute(firstStep);
assertEquals(false, executed.get());
}
Aggregations