]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/typicals/AvailableSynchronizationRules.java
Fixed ComponentTypeCommands.setUnit to support unit == null
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / typicals / AvailableSynchronizationRules.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2012 Association for Decentralized Information Management in
3  * Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.modeling.typicals;
13
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.HashSet;
17 import java.util.Set;
18
19 import org.simantics.db.ReadGraph;
20 import org.simantics.db.Resource;
21 import org.simantics.db.common.NamedResource;
22 import org.simantics.db.common.request.ObjectsWithType;
23 import org.simantics.db.common.request.ResourceRead;
24 import org.simantics.db.common.utils.NameUtils;
25 import org.simantics.db.exception.DatabaseException;
26 import org.simantics.diagram.stubs.DiagramResource;
27 import org.simantics.layer0.Layer0;
28 import org.simantics.modeling.ModelingResources;
29
30 public class AvailableSynchronizationRules extends ResourceRead<Collection<NamedResource>> {
31
32         public AvailableSynchronizationRules(Resource resource) {
33                 super(resource);
34         }
35
36         @Override
37         public Collection<NamedResource> perform(ReadGraph graph)
38                         throws DatabaseException {
39
40                 Layer0 L0 = Layer0.getInstance(graph);
41                 DiagramResource DIA = DiagramResource.getInstance(graph);
42
43                 Set<Resource> rules = new HashSet<Resource>();
44                 tryAddRules(graph, resource, rules);
45                 for (Resource element : graph.syncRequest(new ObjectsWithType(resource, L0.ConsistsOf, DIA.Element))) {
46                         tryAddRules(graph, element, rules);
47                 }
48
49                 Collection<NamedResource> result = new ArrayList<>();
50                 for(Resource rule : rules) {
51                         String name = NameUtils.getSafeLabel(graph, rule);
52                         result.add(new NamedResource(name, rule));
53                 }
54
55                 return result;
56         }
57
58         private int tryAddRules(ReadGraph graph, Resource r, Set<Resource> rules) throws DatabaseException {
59                 ModelingResources MOD = ModelingResources.getInstance(graph);
60                 int count = 0;
61                 for (Resource ruleResource : graph.getObjects(r, MOD.HasTypicalSynchronizationRule)) {
62                         ITypicalSynchronizationRule rule = graph.getPossibleAdapter(ruleResource, ITypicalSynchronizationRule.class);
63                         if (rule != null && rules.add(ruleResource))
64                                 ++count;
65                 }
66                 return count;
67         }
68
69 }