+ Button saveVisualisationTemplateButton = new Button(this, SWT.NONE);
+ saveVisualisationTemplateButton.setText("Save");
+ saveVisualisationTemplateButton.setEnabled(visualisation == null || visualisation.getVisualisationResource() != null);
+ saveVisualisationTemplateButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ persistVisualisationTemplate(visualisation.getName(), Optional.of(visualisation.getVisualisationResource()));
+ }
+ });
+
+ Button saveVisualisationTemplateAsButton = new Button(this, SWT.NONE);
+ saveVisualisationTemplateAsButton.setText("Save as visualisation template");
+ saveVisualisationTemplateAsButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ showSaveVisualisationTemplateDialog(e.widget.getDisplay().getActiveShell());
+ }
+ });
+
+ }
+
+ private void showSaveVisualisationTemplateDialog(Shell shell) {
+
+ InputDialog dialog = new InputDialog(shell, "Save visualisation template", "Give template a name", "", new IInputValidator() {
+
+ @Override
+ public String isValid(String newText) {
+ if (newText == null || newText.isEmpty())
+ return "Name cannot be empty";
+ return null;
+ }
+ });
+
+ if (dialog.open() == Dialog.OK) {
+ String name = dialog.getValue();
+ persistVisualisationTemplate(name, Optional.empty());
+ }
+ }
+
+ private void persistVisualisationTemplate(String templateName, Optional<Resource> existing) {
+
+ List<Pair<String, DynamicColorContribution>> colorCollect = colorSuppliers.stream().map(s -> s.get()).filter(Objects::nonNull).collect(Collectors.toList());
+
+ String colorLocation = colorLocationCombo.getItem(colorLocationCombo.getSelectionIndex());
+ String colorSize = colorSizeCombo.getItem(colorSizeCombo.getSelectionIndex());
+
+ ColorBarOptions colorBarOptions = new ColorBarOptions()
+ .showColorBars(showColorButton.getSelection())
+ .showColorBarsTicks(colorTicksButton.getSelection())
+ .withLocation(ColorBarsLocation.valueOf(colorLocation))
+ .withSize(ColorBarsSize.valueOf(colorSize));
+
+ List<Pair<String, DynamicSizeContribution>> sizeCollect = sizeSuppliers.stream().map(s -> s.get()).filter(Objects::nonNull).collect(Collectors.toList());
+
+ String sizeLocation = sizeLocationCombo.getItem(sizeLocationCombo.getSelectionIndex());
+ String sizeSize = sizeSizeCombo.getItem(sizeSizeCombo.getSelectionIndex());
+
+ SizeBarOptions sizeBarOptions = new SizeBarOptions()
+ .showSizeBars(showSizeButton.getSelection())
+ .showSizeBarsTicks(sizeTicksButton.getSelection())
+ .withLocation(SizeBarsLocation.valueOf(sizeLocation))
+ .withSize(SizeBarsSize.valueOf(sizeSize));
+
+ Simantics.getSession().asyncRequest(new WriteRequest() {
+
+ @Override
+ public void perform(WriteGraph graph) throws DatabaseException {
+ DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
+ Resource exist;
+ if (existing.isPresent()) {
+ exist = existing.get();
+ } else {
+ exist = DistrictNetworkUtil.createVisualisation(graph, diagramResource, templateName);
+ }
+
+ DistrictNetworkUtil.setColorContributions(graph, exist, colorCollect);
+
+ DistrictNetworkUtil.setColorBarOptions(graph, exist, colorBarOptions);
+ DistrictNetworkUtil.setSizeContributions(graph, exist, sizeCollect);
+ DistrictNetworkUtil.setSizeBarOptions(graph, exist, sizeBarOptions);
+ }
+ });