use of org.osate.ge.graphics.Color 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.graphics.Color in project osate2 by osate.
the class DiagramSerialization method createElement.
private static void createElement(final IProject project, final DiagramModification m, final DiagramNode container, final org.osate.ge.diagram.DiagramElement mmChild, final Map<Long, UUID> legacyIdToUuidMap) {
final String[] refSegs = toReferenceSegments(mmChild.getBo());
if (refSegs == null) {
throw new GraphicalEditorException("Invalid element. Invalid business object reference.");
}
final RelativeBusinessObjectReference relReference = new RelativeBusinessObjectReference(refSegs);
final Object bo = InternalReferenceUtil.createEmbeddedObject(relReference, mmChild.getBoData());
// Set the ID
final UUID uuid = UUID.fromString(mmChild.getUuid());
final DiagramElement newElement = new DiagramElement(container, bo, null, relReference, uuid);
// Size and Position
newElement.setPosition(convertPoint(mmChild.getPosition()));
newElement.setSize(convertDimension(mmChild.getSize()));
// Dock Area
final String dockAreaId = mmChild.getDockArea();
if (dockAreaId != null) {
final DockArea dockArea = DockArea.getById(dockAreaId);
if (dockArea != null) {
newElement.setDockArea(dockArea);
}
}
// Style
final Boolean showAsImage = mmChild.getShowAsImage();
final Color background = mmChild.getBackground() != null ? parseColor(mmChild.getBackground()) : null;
final IPath image = mmChild.getImage() != null ? project.getFile(Path.fromPortableString(mmChild.getImage())).getFullPath() : null;
final Color fontColor = mmChild.getFontColor() != null ? parseColor(mmChild.getFontColor()) : null;
final Color outline = mmChild.getOutline() != null ? parseColor(mmChild.getOutline()) : null;
final Double lineWidth = mmChild.getLineWidth();
final Double fontSize = mmChild.getFontSize();
final Boolean primaryLabelVisible = mmChild.getPrimaryLabelVisible();
newElement.setStyle(StyleBuilder.create().backgroundColor(background).showAsImage(showAsImage).imagePath(image).fontColor(fontColor).outlineColor(outline).fontSize(fontSize).lineWidth(lineWidth).primaryLabelVisible(primaryLabelVisible).build());
// Bendpoints
final org.osate.ge.diagram.BendpointList mmBendpoints = mmChild.getBendpoints();
if (mmBendpoints == null) {
newElement.setBendpoints(Collections.emptyList());
} else {
newElement.setBendpoints(mmBendpoints.getPoint().stream().map(DiagramSerialization::convertPoint).collect(Collectors.toList()));
}
// Primary Label Position (Only Supported for Connections)
newElement.setConnectionPrimaryLabelPosition(convertPoint(mmChild.getPrimaryLabelPosition()));
// Add the element
m.addElement(newElement);
// Create children
readElements(project, m, newElement, mmChild, legacyIdToUuidMap);
}
use of org.osate.ge.graphics.Color in project osate2 by osate.
the class CreateEndToEndFlowSpecificationTool method setColor.
private void setColor(final Object o, final Color color) {
if (o instanceof DiagramElement) {
final DiagramElement de = (DiagramElement) o;
coloring.setForeground(de, color);
} else if (o instanceof SegmentData) {
final SegmentData segmentData = (SegmentData) o;
final BusinessObjectContext boc = segmentData.getBoc();
// Do not remove color from duplicate segments
if (color == null) {
for (final SegmentData sd : segmentSelections) {
if (sd.getBoc() == boc) {
return;
}
}
}
setColor(boc, color);
segmentData.getOwnedSegments().forEach(de -> setColor(de, color));
}
}
use of org.osate.ge.graphics.Color 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