From 5e702879e0ee3f352b5c88625fe05e1bf50f8889 Mon Sep 17 00:00:00 2001 From: Jussi Koskela Date: Tue, 20 Dec 2016 14:13:57 +0200 Subject: [PATCH] Show modelled STS tests in model browser in execution order refs #6890 Change-Id: Ib86a41bb738cf9fab476ce062811deeeccc3f317 --- .../graph.tg | Bin 5545 -> 5689 bytes .../graph/TestsUI.pgraph | 7 ++ .../modelled/ui/ontology/TestsUIResource.java | 3 + .../META-INF/MANIFEST.MF | 3 +- .../adapters.xml | 10 ++ .../tests/modelled/ui/STSSuiteSorterRule.java | 101 ++++++++++++++++++ 6 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 bundles/org.simantics.tests.modelled.ui/adapters.xml create mode 100644 bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSSuiteSorterRule.java diff --git a/bundles/org.simantics.tests.modelled.ui.ontology/graph.tg b/bundles/org.simantics.tests.modelled.ui.ontology/graph.tg index 862131139dfd500072221ac32ba7b194cd28064c..7935f8a67dbcc34681cf0040100c7ae759666b6d 100644 GIT binary patch literal 5689 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 C^n?ch diff --git a/bundles/org.simantics.tests.modelled.ui.ontology/graph/TestsUI.pgraph b/bundles/org.simantics.tests.modelled.ui.ontology/graph/TestsUI.pgraph index b51213dc8..ecebcf8fa 100644 --- a/bundles/org.simantics.tests.modelled.ui.ontology/graph/TestsUI.pgraph +++ b/bundles/org.simantics.tests.modelled.ui.ontology/graph/TestsUI.pgraph @@ -33,6 +33,13 @@ MBC @VP.namedRelationChildRule TestsUI.Contributions.STSTests L0.Entity L0.ConsistsOf TESTS.STSTest @VP.namedConstantImageRule TestsUI.Contributions.TestImage TESTS.STSTest TestsUI.testImage +MBC + VP.BrowseContext.HasVisualsContribution _ : VP.VisualsContribution + VP.VisualsContribution.HasNodeType TESTS.STSSuite + VP.VisualsContribution.HasRule MBC.STSSuiteSorterRule + +MBC.STSSuiteSorterRule : VP.SorterRule + MAC = TestsUI.ModelingActionContext : VP.BrowseContext VP.BrowseContext.IsIncludedIn PROJECT.ProjectActionContext diff --git a/bundles/org.simantics.tests.modelled.ui.ontology/src/org/simantics/tests/modelled/ui/ontology/TestsUIResource.java b/bundles/org.simantics.tests.modelled.ui.ontology/src/org/simantics/tests/modelled/ui/ontology/TestsUIResource.java index 897d42c9d..752d44620 100644 --- a/bundles/org.simantics.tests.modelled.ui.ontology/src/org/simantics/tests/modelled/ui/ontology/TestsUIResource.java +++ b/bundles/org.simantics.tests.modelled.ui.ontology/src/org/simantics/tests/modelled/ui/ontology/TestsUIResource.java @@ -11,6 +11,7 @@ import org.simantics.db.service.QueryControl; public class TestsUIResource { public final Resource BrowseContext; + public final Resource BrowseContext_STSSuiteSorterRule; public final Resource Contributions; public final Resource Contributions_NewSTSSuite; public final Resource Contributions_NewSTSTest; @@ -29,6 +30,7 @@ public class TestsUIResource { public static class URIs { public static final String BrowseContext = "http://www.simantics.org/TestsUI-1.0/BrowseContext"; + public static final String BrowseContext_STSSuiteSorterRule = "http://www.simantics.org/TestsUI-1.0/BrowseContext/STSSuiteSorterRule"; public static final String Contributions = "http://www.simantics.org/TestsUI-1.0/Contributions"; public static final String Contributions_NewSTSSuite = "http://www.simantics.org/TestsUI-1.0/Contributions/NewSTSSuite"; public static final String Contributions_NewSTSTest = "http://www.simantics.org/TestsUI-1.0/Contributions/NewSTSTest"; @@ -57,6 +59,7 @@ public class TestsUIResource { public TestsUIResource(ReadGraph graph) { BrowseContext = getResourceOrNull(graph, URIs.BrowseContext); + BrowseContext_STSSuiteSorterRule = getResourceOrNull(graph, URIs.BrowseContext_STSSuiteSorterRule); Contributions = getResourceOrNull(graph, URIs.Contributions); Contributions_NewSTSSuite = getResourceOrNull(graph, URIs.Contributions_NewSTSSuite); Contributions_NewSTSTest = getResourceOrNull(graph, URIs.Contributions_NewSTSTest); diff --git a/bundles/org.simantics.tests.modelled.ui/META-INF/MANIFEST.MF b/bundles/org.simantics.tests.modelled.ui/META-INF/MANIFEST.MF index 0e787d233..776eea39e 100644 --- a/bundles/org.simantics.tests.modelled.ui/META-INF/MANIFEST.MF +++ b/bundles/org.simantics.tests.modelled.ui/META-INF/MANIFEST.MF @@ -15,7 +15,8 @@ Require-Bundle: org.eclipse.ui, org.simantics.tests.modelled.ui.ontology;bundle-version="1.0.0", org.simantics.tests.modelled;bundle-version="1.0.0", org.eclipse.e4.ui.model.workbench, - org.simantics.scl.osgi + org.simantics.scl.osgi, + org.simantics.browsing.ui.model Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Bundle-Vendor: Semantum Oy diff --git a/bundles/org.simantics.tests.modelled.ui/adapters.xml b/bundles/org.simantics.tests.modelled.ui/adapters.xml new file mode 100644 index 000000000..d68f46686 --- /dev/null +++ b/bundles/org.simantics.tests.modelled.ui/adapters.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSSuiteSorterRule.java b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSSuiteSorterRule.java new file mode 100644 index 000000000..bdb55b6a2 --- /dev/null +++ b/bundles/org.simantics.tests.modelled.ui/src/org/simantics/tests/modelled/ui/STSSuiteSorterRule.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2007, 2011 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.tests.modelled.ui; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.simantics.browsing.ui.BuiltinKeys; +import org.simantics.browsing.ui.NodeContext; +import org.simantics.browsing.ui.model.browsecontexts.BrowseContext; +import org.simantics.browsing.ui.model.sorters.Sorter; +import org.simantics.browsing.ui.model.sorters.SorterRule; +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ResourceRead; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.exception.RuntimeDatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.tests.modelled.ontology.TestsResource; +import org.simantics.utils.datastructures.Pair; +import org.simantics.utils.strings.AlphanumComparator; + +public class STSSuiteSorterRule implements SorterRule, Sorter { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Resource.class); + } + + @Override + public Sorter getSorter(ReadGraph graph, Object content) throws DatabaseException { + return this; + } + + @Override + public void sort(ReadGraph graph, BrowseContext context, List nodes) throws DatabaseException + { + try { + STSTestComparator stc = new STSTestComparator(); + stc.graph = graph; + Collections.sort(nodes, stc); + } catch (RuntimeDatabaseException e) { + if (e.getCause()!=null && e.getCause() instanceof DatabaseException) throw (DatabaseException) e.getCause(); + throw e; + } + } + + static class STSTestQuery extends ResourceRead> { + + public STSTestQuery(Resource resource) { + super(resource); + } + + @Override + public Pair perform(ReadGraph graph) throws DatabaseException { + Layer0 L0 = Layer0.getInstance(graph); + TestsResource TESTS = TestsResource.getInstance(graph); + + String name = graph.getRelatedValue2(resource, L0.HasName, Bindings.STRING); + Integer priority = graph.getRelatedValue2(resource, TESTS.STSTest_executionPriority, Bindings.INTEGER); + + return new Pair(priority, name); + } + + } + + static class STSTestComparator implements Comparator { + ReadGraph graph; + + @Override + public int compare(NodeContext nc1, NodeContext nc2) { + Resource r1 = (Resource) nc1.getConstant(BuiltinKeys.INPUT); + Resource r2 = (Resource) nc2.getConstant(BuiltinKeys.INPUT); + + try { + Pair test1 = graph.sync(new STSTestQuery(r1)); + Pair test2 = graph.sync(new STSTestQuery(r2)); + + if (test1.first < test2.first) + return -1; + else if (test1.first > test2.first) + return 1; + else return AlphanumComparator.COMPARATOR.compare(test1.second, test2.second); + + } catch (DatabaseException e) { + throw new RuntimeDatabaseException(e); + } + } + } +} -- 2.43.2