]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.structural2/src/org/simantics/structural2/queries/ConnectionSet.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.structural2 / src / org / simantics / structural2 / queries / ConnectionSet.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.structural2.queries;\r
13 \r
14 import gnu.trove.set.hash.THashSet;\r
15 \r
16 import java.util.Collection;\r
17 import java.util.Collections;\r
18 import java.util.Set;\r
19 \r
20 import org.simantics.db.ReadGraph;\r
21 import org.simantics.db.Resource;\r
22 import org.simantics.db.exception.DatabaseException;\r
23 import org.simantics.db.service.CollectionSupport;\r
24 import org.simantics.structural.stubs.StructuralResource2;\r
25 \r
26 public class ConnectionSet {\r
27         \r
28     final Set<Resource> connections;\r
29     THashSet<Resource> joins;\r
30     THashSet<Resource> excluded;\r
31     THashSet<Resource> excludedJoins;\r
32     \r
33     StructuralResource2 sr;\r
34     \r
35 //    public ConnectionSet() {\r
36 //      \r
37 //    }\r
38     \r
39     public ConnectionSet(ReadGraph graph) {\r
40         sr = StructuralResource2.getInstance(graph);\r
41         connections = graph.getService(CollectionSupport.class).createSet();\r
42     }\r
43 \r
44     public boolean excludeConnection(Resource connection) {\r
45         if (excluded == null)\r
46             excluded = new THashSet<Resource>();\r
47         return excluded.add(connection);\r
48     }\r
49 \r
50     public boolean excludeJoin(Resource join) {\r
51         if (excludedJoins == null)\r
52                 excludedJoins = new THashSet<Resource>();\r
53         return excludedJoins.add(join);\r
54     }\r
55     \r
56     public boolean excludeConnections(Collection<Resource> connections) {\r
57         if (connections.isEmpty())\r
58             return false;\r
59         if (excluded == null)\r
60             excluded = new THashSet<Resource>();\r
61         return excluded.addAll(connections);\r
62     }\r
63 \r
64     public boolean isExcluded(Resource connection) {\r
65         return excluded != null && excluded.contains(connection);\r
66     }\r
67 \r
68     public boolean isJoinExcluded(Resource join) {\r
69         return excludedJoins != null && excludedJoins.contains(join);\r
70     }\r
71 \r
72     public void addConnection(ReadGraph g, Resource connection) throws DatabaseException {\r
73         if(isExcluded(connection))\r
74             return;\r
75         if(connections.add(connection)) {\r
76                 if(sr == null) sr = StructuralResource2.getInstance(g);\r
77             for(Resource join : g.getObjects(connection, sr.IsJoinedBy))\r
78                 addJoin(g, join);\r
79         }\r
80     }\r
81 \r
82     public void addJoin(ReadGraph g, Resource join) throws DatabaseException {\r
83         if(isJoinExcluded(join))\r
84             return;\r
85         if (joins == null)\r
86                 joins = new THashSet<Resource>();\r
87         if(joins.add(join)) {\r
88                 if(sr == null) sr = StructuralResource2.getInstance(g);\r
89             for(Resource connection : g.getObjects(join, sr.Joins))\r
90                 addConnection(g, connection);\r
91         }\r
92     }\r
93 \r
94     public Set<Resource> getConnections() {\r
95         return connections;\r
96     }\r
97 \r
98     public Set<Resource> getJoins() {\r
99         if(joins == null) return Collections.emptySet();\r
100         return joins;\r
101     }\r
102 }\r