From ee6c232a85711b9ec0d67bf84b0294163e6d2f58 Mon Sep 17 00:00:00 2001
From: Konstantin Blaschke <blaschke@fortiss.org>
Date: Mon, 19 Jun 2023 12:02:54 +0200
Subject: [PATCH] Adding initialization of size provider for IHierarchicElement
 Issue-Ref: 4310 Issue-Url: https://git.fortiss.org/af3/af3/-/issues/4310

Signed-off-by: Konstantin Blaschke <blaschke@fortiss.org>
---
 .../ui/ModelQualityExtractionMenu.java        |  1 +
 .../HierarchicElementSizeProvider.java        | 20 ++++++++++++--
 .../service/IModelQualityProvider.java        |  4 +--
 .../quality/service/ModelQualityService.java  | 27 ++++++++++++-------
 4 files changed, 38 insertions(+), 14 deletions(-)

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 fae5ff921..3dcbcbb01 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
@@ -67,6 +67,7 @@ public class ModelQualityExtractionMenu implements IContextMenuContributor {
 	/** Action for generating the set of . */
 	protected class MetricExtractionAction extends Action {
 
+		/** */
 		private final FileProject fp;
 		/** Constructor. */
 		public MetricExtractionAction(FileProject fp) {
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/HierarchicElementSizeProvider.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/HierarchicElementSizeProvider.java
index 41bc8536d..350d038e8 100644
--- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/HierarchicElementSizeProvider.java
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/HierarchicElementSizeProvider.java
@@ -38,10 +38,26 @@ public class HierarchicElementSizeProvider implements IModelQualityProvider<IHie
 	 * Number of totalElements in whole tree
 	 * Average SubTree Size
 	 */
+	/* */
+	private final String rootName;
+	/**  */
+	Map<String, Double> sizes = new HashMap<String, Double>();
+
+	/** */
+	public HierarchicElementSizeProvider(String rootName) {
+		super();
+		this.rootName = rootName;
+		// TODO Auto-generated constructor stub
+	}
+
+	/** */
+	public String getName() {
+		return this.rootName;
+	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Map<String, Double> apply(IHierarchicElement ele) {
+	public void apply(IHierarchicElement ele) {
 		Map<String, Double> sizes = new HashMap<String, Double>();
 		sizes.put("numberOfPorts", (double)ele.getConnectors().size());
 		sizes.put("numberOfChildren", (double)ele.getContainedElements().size());
@@ -63,7 +79,7 @@ public class HierarchicElementSizeProvider implements IModelQualityProvider<IHie
 		for(IHierarchicElement child : ele.getContainedElements()) {
 			apply(child);
 		}
-		return sizes;
+		this.sizes = sizes;
 	}
 
 	/**
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityProvider.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityProvider.java
index db893d2a2..77c3bf38e 100644
--- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityProvider.java
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityProvider.java
@@ -15,8 +15,6 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.ext.quality.service;
 
-import java.util.Map;
-
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.tooling.kernel.service.base.IEObjectAware;
 
@@ -30,5 +28,5 @@ import org.fortiss.tooling.kernel.service.base.IEObjectAware;
 public interface IModelQualityProvider<C extends EObject> extends IEObjectAware<EObject> {
 
 	/** Applies the IMetricProvider to the given model element. */
-	Map<String, Double> apply(C element);
+	void apply(C element);
 }
diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java
index 6398acae0..2fa1be0c7 100644
--- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java
+++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/ModelQualityService.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -36,6 +35,7 @@ import org.fortiss.tooling.base.model.element.IHierarchicElement;
 import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem;
 import org.fortiss.tooling.kernel.introspection.IIntrospectionItem;
 import org.fortiss.tooling.kernel.introspection.IIntrospectiveKernelService;
+import org.fortiss.tooling.kernel.model.IProjectRootElement;
 import org.fortiss.tooling.kernel.service.IKernelIntrospectionSystemService;
 import org.fortiss.tooling.kernel.service.IMigrationService;
 import org.fortiss.tooling.kernel.service.base.EObjectAwareServiceBase;
@@ -47,6 +47,7 @@ import org.fortiss.tooling.kernel.service.base.EObjectAwareServiceBase;
  */
 public class ModelQualityService extends EObjectAwareServiceBase<IModelQualityProvider<?>>
 		implements IIntrospectiveKernelService, IModelQualityService {
+
 	/** The singleton instance. */
 	private static final ModelQualityService INSTANCE = new ModelQualityService();
 
@@ -89,7 +90,6 @@ public class ModelQualityService extends EObjectAwareServiceBase<IModelQualityPr
 	}
 
 	/** Get all suitable {@link IModelQualityProvider} for the given input. */
-	@SuppressWarnings("unused")
 	private List<IModelQualityProvider<?>> getAllMetricProviders(EObject input) {
 		List<IModelQualityProvider<?>> providers = new ArrayList<>();
 		for(Entry<Class<?>, List<IModelQualityProvider<?>>> migEntry : handlerMap.entrySet()) {
@@ -102,18 +102,27 @@ public class ModelQualityService extends EObjectAwareServiceBase<IModelQualityPr
 	}
 
 	/**
-	 * @param modelElement
+	 * @param fp
 	 * @return
 	 */
-	public List<IModelQualityProvider<? extends EObject>>
-			performMetricAnalysis(FileProject modelElement) {
+	public List<IModelQualityProvider<? extends EObject>> performMetricAnalysis(FileProject fp) {
 		List<IModelQualityProvider<? extends EObject>> result =
 				new LinkedList<IModelQualityProvider<? extends EObject>>();
+		for(IProjectRootElement ele : fp.getRootElements()) {
+			if(ele instanceof IHierarchicElement) {
+				HierarchicElementSizeProvider hes =
+						new HierarchicElementSizeProvider(ele.getName());
+				hes.apply((IHierarchicElement)ele);
+				System.out.println("checked in hierarchic metrics for: " + hes.getName());
+				result.add(hes);
+			}
+		}
+
 		// List<IModelQualityProvider<?>> handlers = getRegisteredHandlers(modelElement.getClass());
-		Map<String, Double> qualityData = new HashMap<String, Double>();
-		List<IModelQualityProvider<?>> hierarchicHandlers =
-				getRegisteredHandlers(IHierarchicElement.class);
-		List<IModelQualityProvider<?>> hierarchicHandlers2 = getRegisteredHandlers(EObject.class);
+		// Map<String, Double> qualityData = new HashMap<String, Double>();
+
+		// getRegisteredHandlers(IHierarchicElement.class);
+		// List<IModelQualityProvider<?>> hierarchicHandlers2 = getAllMetricProviders(fp);
 		// if(handlers == null) {
 		// return null;
 		// }
-- 
GitLab