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