]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/view/ProfileSelectionProcessor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.diagram.profile / src / org / simantics / diagram / profile / view / ProfileSelectionProcessor.java
1 package org.simantics.diagram.profile.view;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.Collections;\r
6 import java.util.Set;\r
7 import java.util.TreeSet;\r
8 \r
9 import org.simantics.db.ReadGraph;\r
10 import org.simantics.db.Resource;\r
11 import org.simantics.db.exception.DatabaseException;\r
12 import org.simantics.db.layer0.SelectionHints;\r
13 import org.simantics.diagram.stubs.DiagramResource;\r
14 import org.simantics.selectionview.ComparableTabContributor;\r
15 import org.simantics.selectionview.SelectionProcessor;\r
16 import org.simantics.utils.ui.ErrorLogger;\r
17 import org.simantics.utils.ui.ISelectionUtils;\r
18 \r
19 /**\r
20  * @author Tuukka Lehtonen\r
21  */\r
22 public class ProfileSelectionProcessor implements SelectionProcessor<Object, ReadGraph> {\r
23 \r
24     @Override\r
25     public Collection<?> process(Object selection, ReadGraph g) {\r
26         try {\r
27             Resource object = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MAIN, Resource.class);\r
28             ResourcePair object2 = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MAIN, ResourcePair.class);\r
29 \r
30             return processInternal(g, object, object2, selection);\r
31                 \r
32         } catch (DatabaseException e) {\r
33             ErrorLogger.defaultLogError(e);\r
34         }\r
35 \r
36         return Collections.emptyList();\r
37     }\r
38 \r
39     private Collection<?> processInternal(ReadGraph g, Resource object, ResourcePair pair, Object selection) throws DatabaseException {\r
40 \r
41         Collection<Object> inputs = new ArrayList<Object>();\r
42         \r
43         parseResourceInput(g, object, pair, inputs);\r
44 \r
45         return accept(inputs);\r
46     }\r
47 \r
48     Collection<ComparableTabContributor> accept(Collection<?> inputs) {\r
49         Set<ComparableTabContributor> result = new TreeSet<ComparableTabContributor>();\r
50 //        System.out.println("accept:");\r
51         for (Object input : inputs) {\r
52 //            System.out.println("\tINPUT: " + input);\r
53                 if (input instanceof SCLInput) {\r
54                 SCLInput configurationInput = (SCLInput)input;\r
55                 result.add(new ComparableTabContributor(new SCLEditorComposite(), configurationInput.priority, configurationInput.getDatum(), configurationInput.text));\r
56 //                result.add(new ComparableTabContributor(new ResourceDescriptionSourceComposite(), -4, configurationInput.getDatum(), "Source"));\r
57             }\r
58         }\r
59         return result;\r
60     }\r
61 \r
62     private void parseResourceInput(ReadGraph g, Resource part, ResourcePair pair, Collection<Object> inputs) throws DatabaseException {\r
63         getGroups(g, part, pair, inputs);\r
64     }\r
65 \r
66     void getGroups(ReadGraph g, Resource r, ResourcePair p, Collection<Object> result) throws DatabaseException {\r
67         DiagramResource dr = DiagramResource.getInstance(g);\r
68         if (r != null && g.isInstanceOf(r, dr.SCLGroup)) {\r
69             result.add(new SCLInput(r, 1, "SCL Group"));\r
70         }\r
71         if (r != null && g.isInstanceOf(r, dr.SCLTextStyle)) {\r
72             result.add(new SCLInput(r, 2, "SCL Text Style"));\r
73         }\r
74         if (p != null && g.isInstanceOf(p.getSecond(), dr.GroupStyleProfileEntry)) {\r
75                 Resource group = g.getPossibleObject(p.getSecond(), dr.ProfileEntry_HasGroup);\r
76                 if (group != null && g.isInstanceOf(group, dr.SCLGroup)) {\r
77                 result.add(new SCLInput(group, 1, "SCL Group"));\r
78             }\r
79                 Resource style = g.getPossibleObject(p.getSecond(), dr.ProfileEntry_HasStyle);\r
80                 if (style != null && g.isInstanceOf(style, dr.SCLTextStyle)) {\r
81                 result.add(new SCLInput(style, 2, "SCL Text Style"));\r
82             }\r
83         }\r
84     }\r
85 \r
86 }