From 2c71270a02a8d18b780c93d417e9f68fb38b28f7 Mon Sep 17 00:00:00 2001 From: Tuukka Lehtonen Date: Fri, 13 Jan 2017 08:56:18 +0200 Subject: [PATCH] Preliminary support for purely Variable based dynamic issue sources refs #6948 Change-Id: I7da7446a57a3da7836b59eb2e2c3dc60858818bf --- .../common/ActiveModelIssueSources.java | 14 +-- .../common/ActiveProjectIssueSources.java | 23 ++-- .../issues/common/DynamicIssueSources.java | 51 ++++++++ .../simantics/issues/common/IssueUtils.java | 2 +- .../SelectedModelBatchIssueSources.java | 14 +-- .../org.simantics.issues.ontology/graph.tg | Bin 14510 -> 14830 bytes .../graph/Issue.pgraph | 3 + .../issues/ontology/IssueResource.java | 3 + .../org.simantics.issues.ui.ontology/graph.tg | Bin 15066 -> 15919 bytes .../graph/IssueUI.pgraph | 117 +++++++++++------- .../issues/ui/ontology/IssueUIResource.java | 15 ++- bundles/org.simantics.issues.ui/adapters.xml | 20 +-- bundles/org.simantics.issues.ui/plugin.xml | 2 +- .../ui/DynamicIssueSourceHierarchyRule.java | 34 +++++ .../issues/ui/DynamicIssueSourceRule.java | 33 +++++ .../simantics/issues/ui/IssueImageRule.java | 60 ++++++--- .../simantics/issues/ui/IssueLabelRule.java | 2 - .../simantics/issues/ui/ModeledActions.java | 17 --- .../ui/handler/RunActiveValidations.java | 25 ++-- .../handler/UpdateIssuesForOpenDiagrams.java | 17 ++- 20 files changed, 308 insertions(+), 144 deletions(-) create mode 100644 bundles/org.simantics.issues.common/src/org/simantics/issues/common/DynamicIssueSources.java create mode 100644 bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceHierarchyRule.java create mode 100644 bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceRule.java delete mode 100644 bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/ModeledActions.java diff --git a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveModelIssueSources.java b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveModelIssueSources.java index 40d7f2ec3..1803d4274 100644 --- a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveModelIssueSources.java +++ b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveModelIssueSources.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management + * Copyright (c) 2007, 2017 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 @@ -8,6 +8,7 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy - #6948 *******************************************************************************/ package org.simantics.issues.common; @@ -16,18 +17,17 @@ import java.util.Collection; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.ObjectsWithType; -import org.simantics.db.common.request.ResourceRead; +import org.simantics.db.common.request.ResourceRead2; import org.simantics.db.exception.DatabaseException; -import org.simantics.issues.ontology.IssueResource; import org.simantics.operation.Layer0X; /** * @author Tuukka Lehtonen */ -public class ActiveModelIssueSources extends ResourceRead> { +public class ActiveModelIssueSources extends ResourceRead2> { - public ActiveModelIssueSources(Resource resource) { - super(resource); + public ActiveModelIssueSources(Resource resource, Resource expectedSourceType) { + super(resource, expectedSourceType); } @Override @@ -36,7 +36,7 @@ public class ActiveModelIssueSources extends ResourceRead> new ObjectsWithType( resource, Layer0X.getInstance(graph).Activates, - IssueResource.getInstance(graph).ContinuousIssueSource) + resource2) ); } diff --git a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveProjectIssueSources.java b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveProjectIssueSources.java index 3f593e643..b44e80f74 100644 --- a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveProjectIssueSources.java +++ b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/ActiveProjectIssueSources.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management + * Copyright (c) 2007, 2017 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 @@ -8,6 +8,7 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy - #6948 *******************************************************************************/ package org.simantics.issues.common; @@ -16,28 +17,26 @@ import java.util.Collection; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; -import org.simantics.db.common.request.ResourceRead; +import org.simantics.db.common.request.ResourceRead2; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.ActiveModels; /** * @author Tuukka Lehtonen */ -public class ActiveProjectIssueSources extends ResourceRead> { +public class ActiveProjectIssueSources extends ResourceRead2> { - public ActiveProjectIssueSources(Resource resource) { - super(resource); + public ActiveProjectIssueSources(Resource resource, Resource expectedType) { + super(resource, expectedType); } @Override public Collection perform(ReadGraph graph) throws DatabaseException { - - ArrayList result = new ArrayList(); - for(Resource model : graph.sync(new ActiveModels(resource))) { - result.addAll(graph.sync(new ActiveModelIssueSources(model))); - } - return result; - + ArrayList result = new ArrayList<>(); + for (Resource model : graph.syncRequest(new ActiveModels(resource))) { + result.addAll(graph.syncRequest(new ActiveModelIssueSources(model, resource2))); + } + return result; } } diff --git a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/DynamicIssueSources.java b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/DynamicIssueSources.java new file mode 100644 index 000000000..c0b0adee6 --- /dev/null +++ b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/DynamicIssueSources.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2017 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: + * Semantum Oy - initial API and implementation + *******************************************************************************/ +package org.simantics.issues.common; + +import java.util.Set; + +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.layer0.request.PossibleVariable; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.issues.ontology.IssueResource; + +import gnu.trove.set.hash.THashSet; + +/** + * @author Tuukka Lehtonen + * @since 1.27 + */ +public class DynamicIssueSources extends ResourceRead> { + + public DynamicIssueSources(Resource project) { + super(project); + } + + @Override + public Set perform(ReadGraph graph) throws DatabaseException { + IssueResource ISSUE = IssueResource.getInstance(graph); + Set result = new THashSet<>(); + for (Resource source : graph.syncRequest(new ActiveProjectIssueSources(resource, ISSUE.DynamicIssueSource))) { + boolean selected = graph.hasStatement(source, ISSUE.IssueSource_Selected); + if (!selected) + continue; + Variable v = graph.syncRequest(new PossibleVariable(source)); + if (v != null) + result.add(v); + } + return result; + } + +} diff --git a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/IssueUtils.java b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/IssueUtils.java index 866323bab..bb0c8a5b1 100644 --- a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/IssueUtils.java +++ b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/IssueUtils.java @@ -278,7 +278,7 @@ public class IssueUtils { public static Disposable listenActiveProjectIssueSources(RequestProcessor processor, Resource project) throws DatabaseException { final AtomicBoolean disposed = new AtomicBoolean(false); processor.syncRequest( - new ActiveProjectIssueSources(project), + new ActiveProjectIssueSources(project, IssueResource.getInstance(processor).ContinuousIssueSource), new ActiveIssueSourceListener(disposed)); return new Disposable() { @Override diff --git a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/SelectedModelBatchIssueSources.java b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/SelectedModelBatchIssueSources.java index 9d2df7a04..9931ec64b 100644 --- a/bundles/org.simantics.issues.common/src/org/simantics/issues/common/SelectedModelBatchIssueSources.java +++ b/bundles/org.simantics.issues.common/src/org/simantics/issues/common/SelectedModelBatchIssueSources.java @@ -33,13 +33,13 @@ public class SelectedModelBatchIssueSources extends ResourceRead perform(ReadGraph graph) throws DatabaseException { - Layer0 L0 = Layer0.getInstance(graph); - IssueResource ISSUE = IssueResource.getInstance(graph); - ArrayList result = new ArrayList(); - for(Resource issueSource : graph.sync(new ObjectsWithType(resource, L0.ConsistsOf, ISSUE.IssueSource))) { - if(graph.hasStatement(issueSource, ISSUE.IssueSource_Selected)) result.add(issueSource); - } - return result; + Layer0 L0 = Layer0.getInstance(graph); + IssueResource ISSUE = IssueResource.getInstance(graph); + ArrayList result = new ArrayList<>(); + for(Resource issueSource : graph.sync(new ObjectsWithType(resource, L0.ConsistsOf, ISSUE.IssueSource))) { + if(graph.hasStatement(issueSource, ISSUE.IssueSource_Selected)) result.add(issueSource); + } + return result; } } diff --git a/bundles/org.simantics.issues.ontology/graph.tg b/bundles/org.simantics.issues.ontology/graph.tg index 23e0bb966130559958b64a621b58761346a6a198..d0ad31bf4c0463847af4658c7484b4f053f0fcaf 100644 GIT binary patch literal 14830 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 H6>u! literal 14510 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 diff --git a/bundles/org.simantics.issues.ontology/graph/Issue.pgraph b/bundles/org.simantics.issues.ontology/graph/Issue.pgraph index f97f68240..3d428ed59 100644 --- a/bundles/org.simantics.issues.ontology/graph/Issue.pgraph +++ b/bundles/org.simantics.issues.ontology/graph/Issue.pgraph @@ -24,6 +24,9 @@ ISSUE.IssueSource -- ISSUE.ContinuousIssueSource.lastUpdateRevision --> L0.Long -- ISSUE.Issue.HasContext 1++zNM~Uu)zvTEMXIaXT9P#TzJ|py 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%0DiJux(GjZT~m0wm%zn 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 EAB`_q7XSbN literal 15066 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 ACTIONS.SetSeverityAction.HasSeverity --> ISSUE.Severity -- IBC.SeverityFolderRule.HasSeverity --> ISSUE.Severity -- IBC.SeverityChildRule.HasSeverity --> ISSUE.Severity -- IBC.SeverityFolderLabelRule.HasSeverity --> ISSUE.Severity -- ACTIONS.SetSeverityAction.HasSeverity --> ISSUE.Severity + class="org.simantics.issues.ui.IssueImageRule"> + + @@ -45,8 +47,7 @@ class="org.simantics.issues.ui.contribution.IssueContextDropAction" /> - - + @@ -55,8 +56,11 @@ class="org.simantics.issues.ui.SeverityChildRule"> - - + + + @@ -74,7 +78,7 @@ - - + + - \ No newline at end of file + diff --git a/bundles/org.simantics.issues.ui/plugin.xml b/bundles/org.simantics.issues.ui/plugin.xml index 88623c5b2..e67d2e12b 100644 --- a/bundles/org.simantics.issues.ui/plugin.xml +++ b/bundles/org.simantics.issues.ui/plugin.xml @@ -156,7 +156,7 @@ id="org.simantics.issues.actions"> diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceHierarchyRule.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceHierarchyRule.java new file mode 100644 index 000000000..0e6120951 --- /dev/null +++ b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceHierarchyRule.java @@ -0,0 +1,34 @@ +package org.simantics.issues.ui; + +import java.util.Collection; +import java.util.Collections; + +import org.simantics.browsing.ui.model.children.ChildRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.variable.Variable; + +/** + * @author Tuukka Lehtonen + * @since 1.27 + */ +public class DynamicIssueSourceHierarchyRule implements ChildRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Variable.class); + } + + @Override + public Collection getChildren(ReadGraph graph, Object parent) throws DatabaseException { + Variable v = (Variable) parent; + return v.getChildren(graph); + } + + @Override + public Collection getParents(ReadGraph graph, Object child) throws DatabaseException { + Variable parent = ((Variable)child).getParent(graph); + return parent != null ? Collections.singleton(parent) : Collections.emptyList(); + } + +} diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceRule.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceRule.java new file mode 100644 index 000000000..3a62551eb --- /dev/null +++ b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/DynamicIssueSourceRule.java @@ -0,0 +1,33 @@ +package org.simantics.issues.ui; + +import java.util.Collection; +import java.util.Collections; + +import org.simantics.browsing.ui.model.children.ChildRule; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.issues.common.DynamicIssueSources; + +/** + * @author Tuukka Lehtonen + * @since 1.27 + */ +public class DynamicIssueSourceRule implements ChildRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Resource.class); + } + + @Override + public Collection getChildren(ReadGraph graph, Object parent) throws DatabaseException { + return graph.syncRequest(new DynamicIssueSources((Resource) parent)); + } + + @Override + public Collection getParents(ReadGraph graph, Object child) throws DatabaseException { + return Collections.singleton(child); + } + +} diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueImageRule.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueImageRule.java index b19a1f711..10de114c7 100644 --- a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueImageRule.java +++ b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueImageRule.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 Association for Decentralized Information Management + * Copyright (c) 2007, 2017 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 @@ -8,6 +8,7 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy - #6948 *******************************************************************************/ package org.simantics.issues.ui; @@ -31,6 +32,25 @@ public class IssueImageRule implements ImageRule { private final String DESCRIPTION = ColumnKeys.SINGLE; + private final ImageDescriptor tick; + private final ImageDescriptor fatal; + private final ImageDescriptor error; + private final ImageDescriptor warning; + private final ImageDescriptor info; + private final ImageDescriptor note; + private final ImageDescriptor help; + + public IssueImageRule(ReadGraph graph) throws DatabaseException { + SilkResources SILK = SilkResources.getInstance(graph); + tick = graph.adapt(SILK.tick, ImageDescriptor.class); + fatal = graph.adapt(SILK.bomb, ImageDescriptor.class); + error = graph.adapt(SILK.exclamation, ImageDescriptor.class); + warning = graph.adapt(SILK.error, ImageDescriptor.class); + info = graph.adapt(SILK.information, ImageDescriptor.class); + note = graph.adapt(SILK.note, ImageDescriptor.class); + help = graph.adapt(SILK.help, ImageDescriptor.class); + } + @Override public boolean isCompatible(Class contentType) { return contentType.equals(Variable.class); @@ -38,26 +58,32 @@ public class IssueImageRule implements ImageRule { @Override public Map getImage(ReadGraph graph, Object content) throws DatabaseException { + Variable issue = (Variable) content; + String severity = issue.getPossiblePropertyValue(graph, "severity"); + if (severity == null) + return Collections.emptyMap(); + boolean resolved = isResolved(graph, issue); + return Collections.singletonMap(DESCRIPTION, resolved ? tick : toImageDescriptor(severity)); + } - Variable issue = (Variable)content; - - IssueResource ISSUE = IssueResource.getInstance(graph); - SilkResources SILK = SilkResources.getInstance(graph); - String severity = issue.getPropertyValue(graph, "severity"); - - // TODO: now to do this with variables? + public boolean isResolved(ReadGraph graph, Variable issue) throws DatabaseException { Resource issueResource = issue.getPossibleRepresents(graph); - boolean resolved = issueResource != null ? graph.hasStatement(issueResource, ISSUE.Resolved) : false; - if (resolved) - return Collections.singletonMap(DESCRIPTION, graph.adapt(SILK.tick, ImageDescriptor.class)); + if (issueResource != null) + return graph.hasStatement(issueResource, IssueResource.getInstance(graph).Resolved); - if("Fatal".equals(severity)) return Collections.singletonMap(DESCRIPTION, graph.adapt(SILK.bomb, ImageDescriptor.class)); - else if("Error".equals(severity)) return Collections.singletonMap(DESCRIPTION, graph.adapt(SILK.exclamation, ImageDescriptor.class)); - else if("Warning".equals(severity)) return Collections.singletonMap(DESCRIPTION, graph.adapt(SILK.error, ImageDescriptor.class)); - else if("Info".equals(severity)) return Collections.singletonMap(DESCRIPTION, graph.adapt(SILK.information, ImageDescriptor.class)); - else if("Note".equals(severity)) return Collections.singletonMap(DESCRIPTION, graph.adapt(SILK.note, ImageDescriptor.class)); - else return Collections.singletonMap(DESCRIPTION, graph.adapt(SILK.help, ImageDescriptor.class)); + Boolean resolved = issue.getPossiblePropertyValue(graph, "resolved"); + return Boolean.TRUE.equals(resolved); + } + private ImageDescriptor toImageDescriptor(String severity) { + switch (severity) { + case "Fatal": return fatal; + case "Error": return error; + case "Warning": return warning; + case "Info": return info; + case "Note": return note; + default: return help; + } } } diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueLabelRule.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueLabelRule.java index 1a58f4d81..1d9b1099c 100644 --- a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueLabelRule.java +++ b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/IssueLabelRule.java @@ -39,8 +39,6 @@ public class IssueLabelRule implements LabelRule { public Map getLabel(ReadGraph graph, Object content) throws DatabaseException { Variable issue = (Variable)content; - //Layer0 L0 = Layer0.getInstance(graph); - //IssueResource ISSUE = IssueResource.getInstance(graph); String description = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "HasDescription") ); String resource = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "resource") ); String path = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "path") ); diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/ModeledActions.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/ModeledActions.java deleted file mode 100644 index 84118d08a..000000000 --- a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/ModeledActions.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.simantics.issues.ui; - -import java.util.Collection; -import java.util.Collections; -import java.util.Set; - -import org.simantics.issues.ui.ontology.IssueUIResource; - -public class ModeledActions extends org.simantics.modeling.ui.actions.ModeledActions { - - final static public Set browseContexts = Collections.singleton(IssueUIResource.URIs.ActionContext); - - public Collection getBrowseContexts() { - return browseContexts; - } - -} diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/RunActiveValidations.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/RunActiveValidations.java index d2e257211..803324613 100644 --- a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/RunActiveValidations.java +++ b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/RunActiveValidations.java @@ -31,6 +31,7 @@ import org.simantics.Simantics; import org.simantics.SleepingDatabaseJob; import org.simantics.db.Issue; import org.simantics.db.ReadGraph; +import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; import org.simantics.db.Session; import org.simantics.db.common.request.Queries; @@ -66,7 +67,7 @@ public class RunActiveValidations extends AbstractHandler { final Session session = Simantics.getSession(); // 1. query for which composites to run the validation - final Collection validations = new ArrayList(); + final Collection validations = new ArrayList<>(); final BatchIssueValidationContext context = new BatchIssueValidationContext(); try { @@ -79,12 +80,9 @@ public class RunActiveValidations extends AbstractHandler { Resource model = session.sync(new PossibleActiveModel(Simantics.getProjectResource())); if(model == null) return; - Collection activeSources = session.syncRequest(new SelectedModelBatchIssueSources(model)); - for(Resource source : activeSources) { - BatchIssueSource bis = session.syncRequest(Queries.adapt(source, BatchIssueSource.class, true)); - if(bis != null) - validations.add(bis); - } + toBatchIssueSources(session, + session.syncRequest(new SelectedModelBatchIssueSources(model)), + validations); SubMonitor.convert(monitor, "Preparing resources for validation", 100); context.contexts = Collections.singletonList(model); @@ -111,12 +109,21 @@ public class RunActiveValidations extends AbstractHandler { // Operation cancelled, ignore. return; } - + if(!validations.isEmpty() && !context.contexts.isEmpty()) run(postValidation, validations, context); } + static Collection toBatchIssueSources(RequestProcessor processor, Collection sources, Collection result) throws DatabaseException { + for (Resource source : sources) { + BatchIssueSource bis = processor.syncRequest(Queries.adapt(source, BatchIssueSource.class, true)); + if (bis != null) + result.add(bis); + } + return result; + } + public static void run(Runnable postValidation, final Collection validations, final BatchIssueValidationContext context) { // Run the validations for the selected composites SleepingDatabaseJob dbLock = new SleepingDatabaseJob("Validation"); @@ -139,7 +146,7 @@ public class RunActiveValidations extends AbstractHandler { @Override public Collection perform(ReadGraph graph) throws DatabaseException { IssueResource ISSUE = IssueResource.getInstance(graph); - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for (Resource issue : graph.syncRequest(new ManagedIssues(resource))) { Resource list = graph.getSingleObject(issue, ISSUE.Issue_HasContexts); List l = ListUtils.toList(graph, list); diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/UpdateIssuesForOpenDiagrams.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/UpdateIssuesForOpenDiagrams.java index 9b2040c4b..0f7cec48d 100644 --- a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/UpdateIssuesForOpenDiagrams.java +++ b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/UpdateIssuesForOpenDiagrams.java @@ -34,7 +34,6 @@ import org.simantics.browsing.ui.common.ErrorLogger; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.Session; -import org.simantics.db.common.request.Queries; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.ActiveModels; @@ -67,7 +66,7 @@ public class UpdateIssuesForOpenDiagrams extends AbstractHandler { } public static void update(Runnable postValidation) throws DatabaseException, PartInitException { - final List inputs = new ArrayList(); + final List inputs = new ArrayList<>(); IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); for (IWorkbenchWindow wb : windows) { IWorkbenchPage pages[] = wb.getPages(); @@ -82,9 +81,9 @@ public class UpdateIssuesForOpenDiagrams extends AbstractHandler { } } - final Set compositesToValidate = new TreeSet(); - final Collection validations = new ArrayList(); - final Collection activeModels = new ArrayList(); + final Set compositesToValidate = new TreeSet<>(); + final Collection validations = new ArrayList<>(); + final Collection activeModels = new ArrayList<>(); final BatchIssueValidationContext context = new BatchIssueValidationContext(); try { @@ -98,11 +97,9 @@ public class UpdateIssuesForOpenDiagrams extends AbstractHandler { activeModels.addAll(session.syncRequest(new ActiveModels(project))); if(activeModels.size() != 1) return; - Collection activeSources = session.syncRequest(new SelectedModelBatchIssueSources(activeModels.iterator().next())); - for(Resource source : activeSources) { - BatchIssueSource bis = session.syncRequest(Queries.adapt(source, BatchIssueSource.class)); - validations.add(bis); - } + RunActiveValidations.toBatchIssueSources(session, + session.syncRequest(new SelectedModelBatchIssueSources(activeModels.iterator().next())), + validations); session.syncRequest(new ReadRequest() { @Override -- 2.43.2