]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/symbolcontribution/SymbolProviderFactories.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / symbolcontribution / SymbolProviderFactories.java
1 package org.simantics.diagram.symbolcontribution;
2
3 import org.eclipse.core.runtime.IStatus;
4 import org.eclipse.core.runtime.Status;
5 import org.simantics.db.ReadGraph;
6 import org.simantics.db.Resource;
7 import org.simantics.db.common.primitiverequest.PossibleAdapter;
8 import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
9 import org.simantics.db.exception.DatabaseException;
10 import org.simantics.diagram.internal.Activator;
11 import org.simantics.diagram.stubs.DiagramResource;
12
13 /**
14  * @author Tuukka Lehtonen
15  */
16 public class SymbolProviderFactories {
17
18     public static boolean accept(ReadGraph graph, DiagramResource DIA, Resource contribution, Resource diagram) throws DatabaseException {
19         String name = graph.getPossibleAdapter(contribution, String.class);
20         if (name == null)
21             return false;
22         
23         for (Resource filterR : graph.getObjects(contribution, DIA.HasSymbolContributionFilter)) {
24             try {
25                 SymbolContributionFilter filter = graph.syncRequest(
26                         new PossibleAdapter<SymbolContributionFilter>(filterR, SymbolContributionFilter.class),
27                         TransientCacheAsyncListener.<SymbolContributionFilter> instance());
28                 if (filter == null || !filter.accept(graph, contribution, filterR, diagram)) {
29                         return false;
30                 }
31             } catch (DatabaseException e) {
32                 // If any errors happen when requesting for the filter, we can
33                 // only assume that the graph related to their definitions is
34                 // somehow corrupted. In this case we must assume that the filter
35                 // did not pass since it did not work properly and true checking
36                 // could not be performed to completion.
37                 Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Filter " + filterR + " testing failed", e));
38                 return false;
39             }
40         }
41         return true;
42     }
43
44 }