From e085a5cc65b933f3809b63642ccfadcb36334632 Mon Sep 17 00:00:00 2001 From: Konstantin Blaschke <blaschke@fortiss.org> Date: Wed, 28 Jun 2023 11:13:21 +0200 Subject: [PATCH] Switching to singleton service use in ext.quality Issue-Ref: 4310 Issue-Url: https://git.fortiss.org/af3/af3/-/issues/4310 Signed-off-by: Konstantin Blaschke <blaschke@fortiss.org> --- .../META-INF/MANIFEST.MF | 8 ++-- .../ui/ModelQualityExtractionMenu.java | 9 +++- .../ext/quality/AF3QualityActivator.java | 5 +++ .../quality/service/IModelQualityService.java | 5 +++ .../quality/service/ModelQualityService.java | 43 ++++++++++++------- 5 files changed, 48 insertions(+), 22 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 7fcef617d..d4bd3f279 100644 --- a/org.fortiss.tooling.ext.quality.ui/META-INF/MANIFEST.MF +++ b/org.fortiss.tooling.ext.quality.ui/META-INF/MANIFEST.MF @@ -2,14 +2,12 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: org.fortiss.tooling.ext.quality.ui Bundle-SymbolicName: org.fortiss.tooling.ext.quality.ui;singleton:=true -Bundle-Version: 1.0.0 +Bundle-Version: 1.0.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.reuse, - org.eclipse.emf.ecore, - org.fortiss.tooling.ext.quality -Import-Package: org.fortiss.af3.project.model + org.fortiss.tooling.ext.quality, + org.fortiss.af3.project;bundle-version="2.23.0" 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 3dcbcbb01..594099b41 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 @@ -28,9 +28,13 @@ import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.resource.ImageDescriptor; import org.fortiss.af3.project.model.FileProject; +import org.fortiss.tooling.ext.quality.service.IModelQualityService; import org.fortiss.tooling.ext.quality.service.ModelQualityService; +import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; +import org.fortiss.tooling.kernel.service.IPersistencyService; import org.fortiss.tooling.kernel.ui.extension.IContextMenuContributor; import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider; +import org.fortiss.tooling.kernel.utils.KernelModelElementUtils; /** * Crates a context menu entry to generate the for the selected @@ -78,8 +82,9 @@ public class ModelQualityExtractionMenu implements IContextMenuContributor { /** {@inheritDoc} */ @Override public void run() { - ModelQualityService ms = new ModelQualityService(); - ms.performMetricAnalysis(this.fp); + ITopLevelElement top = IPersistencyService.getInstance().getTopLevelElementFor(this.fp); + + IModelQualityService.getInstance().performMetricAnalysis(top); System.out.println("We print something"); } diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/AF3QualityActivator.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/AF3QualityActivator.java index 0f067724e..1714186e5 100644 --- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/AF3QualityActivator.java +++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/AF3QualityActivator.java @@ -17,6 +17,9 @@ package org.fortiss.tooling.ext.quality; +--------------------------------------------------------------------------*/ import org.eclipse.core.runtime.Plugin; +import org.fortiss.tooling.base.model.element.IHierarchicElement; +import org.fortiss.tooling.ext.quality.service.HierarchicElementSizeProvider; +import org.fortiss.tooling.ext.quality.service.IModelQualityService; import org.fortiss.tooling.ext.quality.service.ModelQualityService; import org.osgi.framework.BundleContext; @@ -39,6 +42,8 @@ public class AF3QualityActivator extends Plugin { plugin = this; System.out.println("[Plugin] " + PLUGIN_ID + " started."); ModelQualityService.getInstance().startService(); + IModelQualityService.getInstance().registerMetricProvider( + new HierarchicElementSizeProvider("dasd"), IHierarchicElement.class); } /** {@inheritDoc} */ diff --git a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityService.java b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityService.java index b5b7310ca..c9f521e55 100644 --- a/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityService.java +++ b/org.fortiss.tooling.ext.quality/src/org/fortiss/tooling/ext/quality/service/IModelQualityService.java @@ -17,6 +17,8 @@ package org.fortiss.tooling.ext.quality.service; import java.util.Map; +import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; + /** * The migration service checks and upgrades the old models from the last release. * @@ -33,4 +35,7 @@ public interface IModelQualityService { /** trigger extraction to csv document */ void metricExtractionToCSV(Map<String, Double> data); + + /** */ + void performMetricAnalysis(ITopLevelElement top); } 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 2fa1be0c7..4be3b2362 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 @@ -30,8 +30,7 @@ import java.util.Map; import java.util.Map.Entry; import org.eclipse.emf.ecore.EObject; -import org.fortiss.af3.project.model.FileProject; -import org.fortiss.tooling.base.model.element.IHierarchicElement; +import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem; import org.fortiss.tooling.kernel.introspection.IIntrospectionItem; import org.fortiss.tooling.kernel.introspection.IIntrospectiveKernelService; @@ -39,6 +38,7 @@ 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; +import org.fortiss.tooling.kernel.utils.EcoreUtils; /** * This class implements the {@link IMigrationService} interface. @@ -51,7 +51,12 @@ public class ModelQualityService extends EObjectAwareServiceBase<IModelQualityPr /** The singleton instance. */ private static final ModelQualityService INSTANCE = new ModelQualityService(); + /** Constructor. */ + private ModelQualityService() { + } + /** Returns singleton instance of the service. */ + /* package */ public static ModelQualityService getInstance() { return INSTANCE; } @@ -102,27 +107,35 @@ public class ModelQualityService extends EObjectAwareServiceBase<IModelQualityPr } /** - * @param fp + * @param top * @return */ - public List<IModelQualityProvider<? extends EObject>> performMetricAnalysis(FileProject fp) { + @Override + public void performMetricAnalysis(ITopLevelElement top) { 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); - } + + for(IProjectRootElement ele : EcoreUtils.getChildrenWithType(top.getRootModelElement(), + IProjectRootElement.class)) { + List<IModelQualityProvider<? extends EObject>> providers = + getRegisteredHandlers(ele.getClass()); + + // for(IModelQualityProvider<? extends EObject> provider: providers) { + // if(provider instanceof IModelQualityProvider<IHierarchicElement>) { + // + // } + // } + // mqp.apply(ele); + // System.out.println("checked in hierarchic metrics for: " + mqp.getName()); + // result.add(mqp) + // } } - // List<IModelQualityProvider<?>> handlers = getRegisteredHandlers(modelElement.getClass()); + // // Map<String, Double> qualityData = new HashMap<String, Double>(); // getRegisteredHandlers(IHierarchicElement.class); - // List<IModelQualityProvider<?>> hierarchicHandlers2 = getAllMetricProviders(fp); + // List<IModelQualityProvider<?>> hierarchicHandlers2 = getRegisteredHandlers(fp); // if(handlers == null) { // return null; // } @@ -134,7 +147,7 @@ public class ModelQualityService extends EObjectAwareServiceBase<IModelQualityPr // metricsList.addAll(metrics); // } // } - return result; + // return result; } /** */ -- GitLab