From e08d16de629ed8381daf6465c2ecad1c03d05fc2 Mon Sep 17 00:00:00 2001 From: Stefan Kapferer Date: Thu, 14 Nov 2019 23:07:21 +0100 Subject: [PATCH 1/3] Context Map generator: allow generation of multiple formats in one step --- .../contextmap/ContextMapGeneratorTest.java | 4 +- .../handler/ContextMapGenerationHandler.java | 3 +- .../wizard/GenerateContextMapContext.java | 12 ++-- .../wizard/GenerateContextMapWizard.java | 2 +- .../pages/GenerateContextMapWizardPage.java | 62 ++++++++++++------- .../dsl/generator/ContextMapGenerator.java | 35 +++++++---- 6 files changed, 74 insertions(+), 44 deletions(-) diff --git a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/tests/generators/contextmap/ContextMapGeneratorTest.java b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/tests/generators/contextmap/ContextMapGeneratorTest.java index 314d7c53..4106a554 100644 --- a/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/tests/generators/contextmap/ContextMapGeneratorTest.java +++ b/org.contextmapper.dsl.tests/src/org/contextmapper/dsl/tests/generators/contextmap/ContextMapGeneratorTest.java @@ -64,7 +64,7 @@ void canGenerateSVGFile() { // when IFileSystemAccess2Mock filesystem = new IFileSystemAccess2Mock(); - this.generator.setContextMapFormat(ContextMapFormat.SVG); + this.generator.setContextMapFormats(ContextMapFormat.SVG); this.generator.doGenerate(new ContextMappingModelResourceMock(model, "testmodel", "cml"), filesystem, new IGeneratorContextMock()); // then @@ -80,7 +80,7 @@ void canGenerateDOTFile() { // when IFileSystemAccess2Mock filesystem = new IFileSystemAccess2Mock(); - this.generator.setContextMapFormat(ContextMapFormat.DOT); + this.generator.setContextMapFormats(ContextMapFormat.DOT); this.generator.doGenerate(new ContextMappingModelResourceMock(model, "testmodel", "cml"), filesystem, new IGeneratorContextMock()); // then diff --git a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/ContextMapGenerationHandler.java b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/ContextMapGenerationHandler.java index 1333085c..07ff38cb 100644 --- a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/ContextMapGenerationHandler.java +++ b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/ContextMapGenerationHandler.java @@ -16,6 +16,7 @@ package org.contextmapper.dsl.ui.handler; import org.contextmapper.dsl.generator.ContextMapGenerator; +import org.contextmapper.dsl.generator.contextmap.ContextMapFormat; import org.contextmapper.dsl.generator.exception.GeneratorInputException; import org.contextmapper.dsl.ui.handler.wizard.GenerateContextMapContext; import org.contextmapper.dsl.ui.handler.wizard.GenerateContextMapWizard; @@ -63,7 +64,7 @@ protected void runGeneration(Resource resource, ExecutionEvent event, IFileSyste GenerateContextMapContext context = new GenerateContextMapContext(); new WizardDialog(HandlerUtil.getActiveShell(event), new GenerateContextMapWizard(context, executionContext -> { - generator.setContextMapFormat(context.getFormat()); + generator.setContextMapFormats(context.getFormats().toArray(new ContextMapFormat[context.getFormats().size()])); generator.setLabelSpacingFactor(context.getLabelSpacingFactor()); if (context.isFixWidth()) generator.setWidth(context.getWidth()); diff --git a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapContext.java b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapContext.java index 3ccc35b0..4a058050 100644 --- a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapContext.java +++ b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapContext.java @@ -15,23 +15,25 @@ */ package org.contextmapper.dsl.ui.handler.wizard; +import java.util.Set; + import org.contextmapper.dsl.generator.contextmap.ContextMapFormat; public class GenerateContextMapContext { - private ContextMapFormat format; + private Set formats; private int labelSpacingFactor; private boolean fixWidth; private boolean fixHeight; private int width; private int height; - public void setFormat(ContextMapFormat format) { - this.format = format; + public void setFormats(Set formats) { + this.formats = formats; } - public ContextMapFormat getFormat() { - return format; + public Set getFormats() { + return formats; } public void setLabelSpacingFactor(int labelSpacingFactor) { diff --git a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapWizard.java b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapWizard.java index 31a43b3c..4ee246d4 100644 --- a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapWizard.java +++ b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/GenerateContextMapWizard.java @@ -46,7 +46,7 @@ public void addPages() { @Override public boolean performFinish() { - context.setFormat(page.getSelectedFormat()); + context.setFormats(page.getSelectedFormats()); context.setLabelSpacingFactor(page.getLabelSpacingFactor()); context.setFixHeight(page.takeHeight()); context.setFixWidth(page.takeWidth()); diff --git a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java index c270bd10..80b3ca24 100644 --- a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java +++ b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java @@ -15,21 +15,21 @@ */ package org.contextmapper.dsl.ui.handler.wizard.pages; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; +import java.util.HashSet; +import java.util.Set; import org.contextmapper.dsl.generator.contextmap.ContextMapFormat; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Scale; @@ -37,20 +37,23 @@ public class GenerateContextMapWizardPage extends ContextMapperWizardPage { - private Combo formatSelectionCombo; private Composite container; private Button widthCheckBox; private Spinner widthSpinner; private Button heightCheckBox; private Spinner heightSpinner; - private ContextMapFormat selectedFormat = ContextMapFormat.PNG; + private Set selectedFormats;// = ContextMapFormat.PNG; private int labelSpacingFactor = 5; private int width = 3600; private int height = 1500; public GenerateContextMapWizardPage() { super("Generate Context Map Configuration Page"); + this.selectedFormats = new HashSet<>(); + this.selectedFormats.add(ContextMapFormat.PNG); + this.selectedFormats.add(ContextMapFormat.SVG); + this.selectedFormats.add(ContextMapFormat.DOT); } @Override @@ -73,21 +76,33 @@ public void createControl(Composite parent) { // name label Label formatSelectionLabel = new Label(container, SWT.NONE); - formatSelectionLabel.setText("Format:"); - - // selection field - formatSelectionCombo = new Combo(container, SWT.DROP_DOWN | SWT.READ_ONLY); - formatSelectionCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - List selectionStrings = Arrays.asList(ContextMapFormat.values()).stream().map(l -> l.toString()).collect(Collectors.toList()); - formatSelectionCombo.setItems(selectionStrings.toArray(new String[selectionStrings.size()])); - formatSelectionCombo.select(selectionStrings.indexOf(ContextMapFormat.PNG.toString())); - formatSelectionCombo.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - selectedFormat = ContextMapFormat.valueOf(formatSelectionCombo.getText()); + formatSelectionLabel.setText("Generated formats:"); + + // format selection checkboxes + Group formatSelectionGroup = new Group(container, SWT.NONE); + GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 3; + formatSelectionGroup.setLayout(gridLayout); + formatSelectionGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + SelectionListener formatSelectionListener = new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + Button button = ((Button) event.widget); + ContextMapFormat format = ContextMapFormat.valueOf(button.getText()); + if (button.getSelection()) + selectedFormats.add(format); + else if (selectedFormats.contains(format)) + selectedFormats.remove(format); setPageComplete(isPageComplete()); - } - }); + }; + }; + + for (ContextMapFormat format : ContextMapFormat.values()) { + Button button = new Button(formatSelectionGroup, SWT.CHECK); + button.setText(format.toString()); + button.setSelection(true); + button.addSelectionListener(formatSelectionListener); + } // fix width to custom value widthCheckBox = new Button(container, SWT.CHECK); @@ -169,11 +184,10 @@ public void handleEvent(Event event) { @Override public void setVisible(boolean visible) { super.setVisible(visible); - this.formatSelectionCombo.forceFocus(); } - public ContextMapFormat getSelectedFormat() { - return selectedFormat; + public Set getSelectedFormats() { + return new HashSet<>(selectedFormats); } public int getLabelSpacingFactor() { @@ -198,7 +212,7 @@ public int getHeight() { @Override public boolean isPageComplete() { - return this.selectedFormat != null; + return this.selectedFormats.size() > 0; } @Override diff --git a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/ContextMapGenerator.java b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/ContextMapGenerator.java index a88a5d7f..d39a5523 100644 --- a/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/ContextMapGenerator.java +++ b/org.contextmapper.dsl/src/org/contextmapper/dsl/generator/ContextMapGenerator.java @@ -16,14 +16,16 @@ package org.contextmapper.dsl.generator; import static org.contextmapper.dsl.generator.contextmap.ContextMapFormat.DOT; -import static org.contextmapper.dsl.generator.contextmap.ContextMapFormat.PNG; import static org.contextmapper.dsl.generator.contextmap.ContextMapFormat.SVG; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Arrays; +import java.util.HashSet; import java.util.Optional; +import java.util.Set; import org.contextmapper.contextmap.generator.model.ContextMap; import org.contextmapper.dsl.generator.contextmap.ContextMapFormat; @@ -37,18 +39,24 @@ public class ContextMapGenerator extends AbstractContextMapGenerator { - private ContextMapFormat format = PNG; + private Set formats; private int labelSpacingFactor = 5; private int width = -1; private int height = -1; private boolean useWidth = true; + public ContextMapGenerator() { + this.formats = new HashSet<>(); + formats.add(ContextMapFormat.PNG); + formats.add(ContextMapFormat.SVG); + formats.add(ContextMapFormat.DOT); + } + @Override protected void generateFromContextMap(org.contextmapper.dsl.contextMappingDSL.ContextMap cmlContextMap, IFileSystemAccess2 fsa, URI inputFileURI) { String fileName = inputFileURI.trimFileExtension().lastSegment(); try { - ByteArrayOutputStream outputstream = new ByteArrayOutputStream(); ContextMap contextMap = new ContextMapModelConverter().convert(cmlContextMap); org.contextmapper.contextmap.generator.ContextMapGenerator generator = createContextMapGenerator(); generator.setLabelSpacingFactor(labelSpacingFactor); @@ -56,9 +64,13 @@ protected void generateFromContextMap(org.contextmapper.dsl.contextMappingDSL.Co generator.setWidth(width); else if (this.height > 0) generator.setHeight(height); - generator.generateContextMapGraphic(contextMap, getGraphvizLibFormat(), outputstream); - InputStream inputstream = new ByteArrayInputStream(outputstream.toByteArray()); - fsa.generateFile(fileName + "_ContextMap." + format.getFileExtension(), inputstream); + for (ContextMapFormat format : formats) { + ByteArrayOutputStream outputstream = new ByteArrayOutputStream(); + generator.generateContextMapGraphic(contextMap, getGraphvizLibFormat(format), outputstream); + InputStream inputstream = new ByteArrayInputStream(outputstream.toByteArray()); + fsa.generateFile(fileName + "_ContextMap." + format.getFileExtension(), inputstream); + } + } catch (IOException e) { throw new RuntimeException("An error occured while generating the Context Map!", e); } @@ -66,12 +78,13 @@ else if (this.height > 0) } /** - * Changes the format which will be generated when calling the generator. + * Changes the formats which will be generated when calling the generator. * - * @param format the requested format + * @param formats the formats which shall be generated */ - public void setContextMapFormat(ContextMapFormat format) { - this.format = format; + public void setContextMapFormats(ContextMapFormat... formats) { + this.formats.clear(); + this.formats.addAll(Arrays.asList(formats)); } /** @@ -106,7 +119,7 @@ public void setHeight(int height) { this.height = height; } - private Format getGraphvizLibFormat() { + private Format getGraphvizLibFormat(ContextMapFormat format) { if (format == SVG) return Format.SVG; if (format == DOT) From 2d92a6ab4b859131c6e134c3b6ed7c1902d5a107 Mon Sep 17 00:00:00 2001 From: Stefan Kapferer Date: Fri, 15 Nov 2019 11:30:04 +0100 Subject: [PATCH 2/3] Context Map generator: reduce default resolution --- .../org.contextmapper.dsl.target.target | 2 +- org.contextmapper.dsl.tests/META-INF/MANIFEST.MF | 2 +- .../handler/wizard/pages/GenerateContextMapWizardPage.java | 6 +++--- org.contextmapper.dsl/META-INF/MANIFEST.MF | 2 +- org.contextmapper.dsl/build.gradle | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/org.contextmapper.dsl.target/org.contextmapper.dsl.target.target b/org.contextmapper.dsl.target/org.contextmapper.dsl.target.target index b5a92de7..57c3e4ed 100644 --- a/org.contextmapper.dsl.target/org.contextmapper.dsl.target.target +++ b/org.contextmapper.dsl.target/org.contextmapper.dsl.target.target @@ -55,7 +55,7 @@ - + \ No newline at end of file diff --git a/org.contextmapper.dsl.tests/META-INF/MANIFEST.MF b/org.contextmapper.dsl.tests/META-INF/MANIFEST.MF index a8ff984d..c9e0a3f4 100644 --- a/org.contextmapper.dsl.tests/META-INF/MANIFEST.MF +++ b/org.contextmapper.dsl.tests/META-INF/MANIFEST.MF @@ -13,7 +13,7 @@ Require-Bundle: org.contextmapper.dsl, org.eclipse.xtext.xbase.testing, org.eclipse.xtext.xbase.lib;bundle-version="2.14.0", org.apache.commons.io;bundle-version="2.2.0", - org.contextmapper.contextmap.generator;bundle-version="1.0.0" + org.contextmapper.contextmap.generator;bundle-version="1.0.1" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Export-Package: org.contextmapper.dsl.tests;x-internal=true, org.contextmapper.tactic.dsl.tests;x-internal=true, diff --git a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java index 80b3ca24..15405c08 100644 --- a/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java +++ b/org.contextmapper.dsl.ui/src/org/contextmapper/dsl/ui/handler/wizard/pages/GenerateContextMapWizardPage.java @@ -43,10 +43,10 @@ public class GenerateContextMapWizardPage extends ContextMapperWizardPage { private Button heightCheckBox; private Spinner heightSpinner; - private Set selectedFormats;// = ContextMapFormat.PNG; + private Set selectedFormats; private int labelSpacingFactor = 5; - private int width = 3600; - private int height = 1500; + private int width = 2000; + private int height = 1000; public GenerateContextMapWizardPage() { super("Generate Context Map Configuration Page"); diff --git a/org.contextmapper.dsl/META-INF/MANIFEST.MF b/org.contextmapper.dsl/META-INF/MANIFEST.MF index 791dfbe0..1a72d252 100644 --- a/org.contextmapper.dsl/META-INF/MANIFEST.MF +++ b/org.contextmapper.dsl/META-INF/MANIFEST.MF @@ -21,7 +21,7 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.emf.henshin.interpreter;bundle-version="1.4.0", org.apache.commons.io;bundle-version="2.2.0", org.freemarker;bundle-version="2.3.22", - org.contextmapper.contextmap.generator;bundle-version="1.0.0", + org.contextmapper.contextmap.generator;bundle-version="1.0.1", org.apache.commons.lang3;bundle-version="3.9.0", org.slf4j.api, org.apache.commons.exec;bundle-version="1.3.0", diff --git a/org.contextmapper.dsl/build.gradle b/org.contextmapper.dsl/build.gradle index c93dbada..561e2873 100644 --- a/org.contextmapper.dsl/build.gradle +++ b/org.contextmapper.dsl/build.gradle @@ -9,7 +9,7 @@ dependencies { compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.9' compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.9' compile group: 'org.contextmapper', name: 'henshin-interpreter', version: '1.4.0' - compile group: 'org.contextmapper', name: 'context-map-generator', version: '1.0.0' + compile group: 'org.contextmapper', name: 'context-map-generator', version: '1.0.1' } configurations { mwe2 { From a586e327b9d87aeedac72138a5ddedba34a85f5f Mon Sep 17 00:00:00 2001 From: Stefan Kapferer Date: Fri, 15 Nov 2019 11:39:20 +0100 Subject: [PATCH 3/3] Reorder generator context menu --- org.contextmapper.dsl.ui/plugin.xml | 30 ++++++++++++----------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/org.contextmapper.dsl.ui/plugin.xml b/org.contextmapper.dsl.ui/plugin.xml index 65285266..638fd0af 100644 --- a/org.contextmapper.dsl.ui/plugin.xml +++ b/org.contextmapper.dsl.ui/plugin.xml @@ -675,27 +675,24 @@ - + + + - + - - - - + name="org.contextmapper.dsl.ui.separator3" visible="true"> @@ -799,7 +796,7 @@ - + @@ -810,7 +807,7 @@ - + @@ -819,10 +816,7 @@ - - - + @@ -832,9 +826,9 @@ + name="org.contextmapper.dsl.ui.separator1" visible="true"> - + @@ -844,7 +838,7 @@ + name="org.contextmapper.dsl.ui.separator2" visible="true"> @@ -883,7 +877,7 @@ + name="org.contextmapper.dsl.ui.separator3" visible="true">