From 49013dcf3abc43a3832ebe607af2fd978f31f2f9 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Mon, 16 Oct 2023 18:08:46 +0200 Subject: [PATCH] Update Review (1 RED). Note done yet. Issue-Ref: 4310 Issue-Url: https://git.fortiss.org/af3/af3/-/issues/4310 Signed-off-by: Simon Barner <barner@fortiss.org> --- .../META-INF/MANIFEST.MF | 11 ++---- .../fortiss/tooling/ext/quality/ui/.ratings | 2 +- .../ui/ModelQualityExtractionMenu.java | 14 ++++--- .../tooling/ext/quality/ui/view/fx/.ratings | 4 +- .../ui/view/fx/ModelQualityFXController.java | 37 +++++++++---------- .../ui/view/fx/ModelQualityFXViewPart.java | 4 -- 6 files changed, 32 insertions(+), 40 deletions(-) diff --git a/org.fortiss.tooling.ext.quality.ui/META-INF/MANIFEST.MF b/org.fortiss.tooling.ext.quality.ui/META-INF/MANIFEST.MF index f86a41034..b0798135a 100644 --- a/org.fortiss.tooling.ext.quality.ui/META-INF/MANIFEST.MF +++ b/org.fortiss.tooling.ext.quality.ui/META-INF/MANIFEST.MF @@ -5,14 +5,9 @@ Bundle-SymbolicName: org.fortiss.tooling.ext.quality.ui;singleton:=true Bundle-Version: 2.23.0.qualifier Automatic-Module-Name: org.fortiss.tooling.ext.quality.ui Bundle-RequiredExecutionEnvironment: JavaSE-11 -Require-Bundle: org.eclipse.ui.ide;visibility:=reexport, - org.fortiss.tooling.base.ui;visibility:=reexport, - org.fortiss.tooling.kernel, - org.fortiss.tooling.kernel.ui, - org.fortiss.tooling.ext.quality, - org.fortiss.tooling.spiderchart.ui, - org.eclipse.emf.ecore, - org.fortiss.af3.project;bundle-version="2.23.0" +Require-Bundle: org.fortiss.tooling.base.ui;visibility:=reexport, + org.fortiss.tooling.ext.quality;visibility:=reexport, + org.fortiss.tooling.spiderchart.ui;visibility:=reexport Export-Package: org.fortiss.tooling.ext.quality.ui.view.fx Bundle-Activator: org.fortiss.tooling.ext.quality.ui.ModelQualityUIActivator Bundle-ActivationPolicy: lazy diff --git a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/.ratings b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/.ratings index 10f0daaec..cbf0a8d86 100644 --- a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/.ratings +++ b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/.ratings @@ -1,2 +1,2 @@ -ModelQualityExtractionMenu.java 3bdbf3d37715539648af8ba7feefbec9370c4dc4 YELLOW +ModelQualityExtractionMenu.java d9282c7df44aa9461ec662beb557e74589f6b05f GREEN ModelQualityUIActivator.java 2f47db82bc088072dbfe53f82d3ed417d77fd23c GREEN diff --git a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/ModelQualityExtractionMenu.java b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/ModelQualityExtractionMenu.java index 3bdbf3d37..d9282c7df 100644 --- a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/ModelQualityExtractionMenu.java +++ b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/ModelQualityExtractionMenu.java @@ -47,9 +47,12 @@ public class ModelQualityExtractionMenu implements IContextMenuContributor { @Override public List<IContributionItem> getContributedItems(EObject selection, ContextMenuContextProvider contextProvider) { + if(!(selection.eContainer() != null)) { return emptyList(); } + + // A null eContainer indicates the model root return asList(new IContributionItem[] { new ActionContributionItem(new MetricExtractionAction(selection))}); } @@ -68,19 +71,20 @@ public class ModelQualityExtractionMenu implements IContextMenuContributor { /** Action for generating the set of . */ protected class MetricExtractionAction extends Action { - /** {@link FileProject} on which the action will be triggered. */ - private final EObject fp; + /** Model on which the action will be triggered. */ + private final EObject model; /** Constructor. */ - public MetricExtractionAction(EObject fp) { + public MetricExtractionAction(EObject model) { super(MENU_NAME, getActionIcon()); - this.fp = fp; + this.model = model; } /** {@inheritDoc} */ @Override public void run() { - ITopLevelElement top = IPersistencyService.getInstance().getTopLevelElementFor(this.fp); + ITopLevelElement top = + IPersistencyService.getInstance().getTopLevelElementFor(this.model); IModelQualityService.getInstance().scheduleMetricCollection(top); } } diff --git a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings index c0833d43f..ed265042f 100644 --- a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings +++ b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/.ratings @@ -1,3 +1,3 @@ IModelQualityViewPart.java 708f8089645df12098ea67190805cce343045d2e GREEN -ModelQualityFXController.java 67bb0a067c578ac9a9b30e5973587cc57374a782 YELLOW -ModelQualityFXViewPart.java a1e82fe68a3fe7d813fa61d5148ffcd1592000f7 YELLOW +ModelQualityFXController.java 64c5fb2ca8cca77982b5a20695efcf2b1442045e RED +ModelQualityFXViewPart.java 9cfc7f60a86ea5b915c726b16712f8be7dec2c5f GREEN diff --git a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java index 67bb0a067..64c5fb2ca 100644 --- a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java +++ b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXController.java @@ -15,10 +15,10 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.ext.quality.ui.view.fx; +import static java.util.stream.Collectors.toList; import static javafx.scene.paint.Color.BLUE; import static javafx.scene.paint.Color.DARKGRAY; import static javafx.scene.paint.Color.LIGHTGRAY; -import static java.util.stream.Collectors.toList; import static org.fortiss.tooling.common.ui.javafx.style.FontStyle.BLACK_VERDANA_10PT; import static org.fortiss.tooling.common.ui.javafx.style.FontStyle.BLACK_VERDANA_12PT; import static org.fortiss.tooling.common.ui.javafx.style.FontStyle.BLACK_VERDANA_14PT; @@ -27,7 +27,6 @@ import static org.fortiss.tooling.common.ui.javafx.style.LineStyle.SOLID_BLACK_1 import static org.fortiss.tooling.kernel.ui.util.SelectionUtils.checkAndPickFirst; import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstParentWithType; - import java.text.DecimalFormat; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -35,7 +34,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; - import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.ISelectionListener; @@ -153,8 +151,6 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan // Invalidate last selection, so if no new selection is found the charts are cleared lastSelectedElement = null; - IModelQualityService mqs = IModelQualityService.getInstance(); - EObject selected = checkAndPickFirst(selection, EObject.class); if(selected == null) { @@ -170,6 +166,8 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan updateCharts("Selection does not have a project root element."); return; } + + IModelQualityService mqs = IModelQualityService.getInstance(); var rootDataElement = mqs.getMetricData().getDataRootElementMap().get(currentRootElement); if(rootDataElement == null) { @@ -209,14 +207,10 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan private void updateCharts(String message) { if(lastSelectedElement != null) { - MetricData metricData = - IModelQualityService.getInstance().getMetricData(); + MetricData metricData = IModelQualityService.getInstance().getMetricData(); MetricTreeNode node = metricData.getTreeNodeLookupTable().get(lastSelectedElement); if(node != null) { - - // updateChoiceBoxes(node); - if(!node.getChildren().isEmpty()) { updatePieChart(node); @@ -334,18 +328,21 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan private SpiderChartViewer buildSpiderChart() { // Calculate the intersection of the keys, i.e. a set of keys which have a non-null value in // all elements of the lastViewedElements list + // TODO (SB): Add check that lastViewedElements is non empty, and add a corresonding comment + // to the .get(0) statement Set<MetricKey> keysIntersection = lastViewedElements.get(0).getValue(); for(var p : lastViewedElements) { keysIntersection.retainAll(p.getValue()); } // Create DataSeries for all elements - List<Pair<MetricTreeNode, DataSeries>> dataSeriesList = lastViewedElements.stream() - .map(pair -> new Pair<>(pair.getKey(), - (pair.getKey().getName() == null) ? new DataSeries("No Name found") : new DataSeries(pair.getKey().getName()) - )) - .collect(toList()); - + List<Pair<MetricTreeNode, DataSeries>> dataSeriesList = + lastViewedElements.stream().map(pair -> { + MetricTreeNode key = pair.getKey(); + String name = key.getName(); + return new Pair<>(key, (name == null) ? new DataSeries("No name found") + : new DataSeries(name)); + }).collect(toList()); // Create SpiderChart and set basic styling SpiderChart spiderChart = new SpiderChart(); @@ -384,6 +381,8 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan for(var pair : dataSeriesList) { spiderChart.addData(pair.getValue()); // Assign different colors to different data series + // updateLastViewedElements() ensures that the are are at most three elements in + // updateLastViewedElements, from which dataSeriesList is derived above. Color color = SPIDER_CHART_OVERLAY_COLORS[i]; LineStyle olive1pt = new LineStyle(color); FillStyle oliveFill = new FillStyle(color, 0.25); @@ -415,10 +414,8 @@ public class ModelQualityFXController extends CompositeFXControllerBase<SplitPan return; } - // Store IModelQualityService.getInstance() (sic!) in a variable (e.g. "mqs") for - // readability - var rootDataElement = IModelQualityService.getInstance().getMetricData() - .getDataRootElementMap().get(updatedElement); + IModelQualityService mqs = IModelQualityService.getInstance(); + var rootDataElement = mqs.getMetricData().getDataRootElementMap().get(updatedElement); if(rootDataElement != null) { bottomText.setText("Metrics last updated: " + timeFormat.format(rootDataElement.getLastRefresh()) + diff --git a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXViewPart.java b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXViewPart.java index a1e82fe68..9cfc7f60a 100644 --- a/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXViewPart.java +++ b/org.fortiss.tooling.ext.quality.ui/src/org/fortiss/tooling/ext/quality/ui/view/fx/ModelQualityFXViewPart.java @@ -27,9 +27,6 @@ import javafx.scene.Scene; */ public class ModelQualityFXViewPart extends AF3FXViewPart implements IModelQualityViewPart { - // TODO (SB): Is there a reason to make the controller static? (also rename to viewController) - // FIXME (KB): Naming convention and static taken from reuse library. So you want me to change the FX controller class to viewController? - // Would result in inconsistent use otherwise. still change it and add the view controller as parameter for instancing a View Part? /** The FX Controller for this view. */ private static final ModelQualityFXController VIEW_CONTROLLER = new ModelQualityFXController(); @@ -52,7 +49,6 @@ public class ModelQualityFXViewPart extends AF3FXViewPart implements IModelQuali @Override protected Scene createFxScene() { Scene scene = super.createFxScene(); - getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(VIEW_CONTROLLER); return scene; -- GitLab