use of org.osate.ge.internal.ui.tools.Tool in project osate2 by osate.
the class CreateEndToEndFlowSpecificationTool method update.
/**
* Update the diagram and tool dialog
* @param selectedBocs - the selected bocs
*/
private void update(final List<BusinessObjectContext> selectedBocs) {
if (createFlowDialog != null) {
if (createFlowDialog.getShell() != null && !createFlowDialog.getShell().isDisposed() && createFlowDialog.elementSelectionDlg == null) {
// If the selection is qualified, add it
if (selectedBocs.size() > 1) {
createFlowDialog.setErrorMessage("Multiple elements selected. Select a single element. " + " " + getDialogMessage());
} else if (selectedBocs.size() == 1) {
// Get the selected boc
final BusinessObjectContext selectedBoc = (BusinessObjectContext) selectedBocs.get(0);
if (!modeFeatureSelections.contains(selectedBoc) && createFlowDialog.addSelectedElement(selectedBoc)) {
// Insert flow segments before first mode feature
final Color color;
if (selectedBoc.getBusinessObject() instanceof ModeFeature) {
modeFeatureSelections.add(selectedBoc);
color = Color.MAGENTA.brighter();
} else {
segmentSelections.add(new SegmentData(selectedBoc, new ArrayList<>()));
if (segmentSelections.size() == 1) {
// Set default name on first selection if one does not exist
createFlowDialog.getOwnerComponentImplementation().ifPresent(ci -> {
createFlowDialog.setTitle("Creating End To End Flow in: " + ci.getQualifiedName());
if (createFlowDialog.endToEndFlowName.isEmpty()) {
createFlowDialog.setEndToEndFlowName(ci);
}
});
color = Color.ORANGE.darker();
} else {
color = Color.MAGENTA.darker();
}
}
setColor(selectedBoc, color);
}
createFlowDialog.updateSegments();
final boolean isValid = createFlowDialog.isEndToEndFlowValid(createEndToEndFlow());
createFlowDialog.updateWidgets(isValid);
createFlowDialog.setErrorMessage(null);
createFlowDialog.setMessage(getDialogMessage());
} else {
createFlowDialog.updateSegments();
}
} else if (createFlowDialog.elementSelectionDlg != null && createFlowDialog.elementSelectionDlg.getShell() != null && !createFlowDialog.elementSelectionDlg.getShell().isDisposed() && createFlowDialog.elementSelectionDlg.getShell().isVisible()) {
final CreateFlowsToolsDialog.ElementSelectionDialog elementSelectionDlg = createFlowDialog.elementSelectionDlg;
// Selecting an element for editing end to end flows
if (selectedBocs.size() > 1) {
elementSelectionDlg.setErrorMessage("Multiple elements are selected.\n " + elementSelectionDlg.getMessage());
elementSelectionDlg.setSelection(null);
} else if (selectedBocs.size() == 1) {
elementSelectionDlg.setErrorMessage(null);
final BusinessObjectContext selectedBoc = selectedBocs.get(0);
elementSelectionDlg.setSelection(selectedBoc);
}
}
}
}
use of org.osate.ge.internal.ui.tools.Tool in project osate2 by osate.
the class CreateFlowImplementationTool method activated.
@Override
public void activated(final ActivatedEvent ctx) {
final UiService uiService = ctx.getUiService();
try {
ctx.getSelectedBoc().ifPresent(selectedBoc -> {
final AadlModificationService aadlModService = ctx.getAadlModificatonService();
final ColoringService coloringService = ctx.getColoringService();
// Check for existing errors and warnings
final Set<Diagnostic> diagnostics = ToolUtil.getAllReferencedPackageDiagnostics(selectedBoc);
// Do not allow tool activation if there are errors in the models
final Set<Diagnostic> errors = FlowDialogUtil.getErrors(diagnostics);
if (!errors.isEmpty()) {
Display.getDefault().asyncExec(() -> new FlowDialogUtil.ErrorDialog("The Create Flow Implementation", errors).open());
} else {
coloring = coloringService.adjustColors();
// Create and update based on current selection
createFlowImplDlg.create();
if (segmentSelections.isEmpty() && modeFeatureSelections.isEmpty()) {
update(Collections.singletonList(selectedBoc), true);
} else {
final Iterator<SegmentData> segmentIt = segmentSelections.iterator();
if (segmentIt.hasNext()) {
// Set color for flow spec
setColor(segmentIt.next().getBoc(), Color.ORANGE.darker());
// Set color for flow segments
while (segmentIt.hasNext()) {
setColor(segmentIt.next().getBoc(), Color.MAGENTA.darker());
}
}
// Set color for in mode and mode transitions
for (Iterator<BusinessObjectContext> modeFeatureIt = modeFeatureSelections.iterator(); modeFeatureIt.hasNext(); setColor(modeFeatureIt.next(), Color.MAGENTA.brighter())) {
}
}
if (createFlowImplDlg.open() == Window.OK && createFlowImplDlg != null) {
final BusinessObjectContext ownerBoc = createFlowImplDlg.getOwnerBoc().orElse(null);
// Create a new flow impl based on selections
final FlowImplementation flowImpl = createFlowImplDlg.createFlow(ownerBoc);
createFlowImplDlg.getFlowComponentImplementation(ownerBoc).ifPresent(ownerCi -> {
// Modifications to perform
final List<AadlModificationService.Modification<? extends NamedElement, ? extends NamedElement>> modifications = new ArrayList<>();
if (createFlowImplDlg.flowImplToEdit != null) {
// Editing existing flow impl
final FlowImplementation flowImplToEdit = createFlowImplDlg.flowImplToEdit;
// Copy owned property associations from old flow impl to new flow impl and remove old flow impl
modifications.add(Modification.create(flowImplToEdit, fi -> {
flowImpl.getOwnedPropertyAssociations().addAll(EcoreUtil.copyAll(fi.getOwnedPropertyAssociations()));
EcoreUtil.remove(fi);
}));
}
// Add new flow impl
modifications.add(Modification.create(ownerCi, ci -> {
ci.getOwnedFlowImplementations().add(flowImpl);
ci.setNoFlows(false);
}));
// Perform modifications
aadlModService.modify(modifications);
});
}
}
});
} finally {
uiService.deactivateActiveTool();
}
}
Aggregations