]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.selectionview/src/org/simantics/selectionview/StandardPropertySorterRule.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.selectionview / src / org / simantics / selectionview / StandardPropertySorterRule.java
1 /*******************************************************************************\r
2  * Copyright (c) 2010, 2011 Association for Decentralized Information Management in\r
3  * 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.selectionview;\r
13 \r
14 import org.simantics.browsing.ui.BuiltinKeys;\r
15 import org.simantics.browsing.ui.NodeContext;\r
16 import org.simantics.browsing.ui.common.ColumnKeys;\r
17 import org.simantics.browsing.ui.model.browsecontexts.BrowseContext;\r
18 import org.simantics.browsing.ui.model.sorters.AbstractSorter;\r
19 import org.simantics.browsing.ui.model.sorters.Sorter;\r
20 import org.simantics.browsing.ui.model.sorters.SorterRule;\r
21 import org.simantics.databoard.Bindings;\r
22 import org.simantics.db.ReadGraph;\r
23 import org.simantics.db.Resource;\r
24 import org.simantics.db.exception.DatabaseException;\r
25 import org.simantics.db.layer0.variable.Variable;\r
26 import org.simantics.utils.datastructures.ComparablePair;\r
27 \r
28 public class StandardPropertySorterRule implements SorterRule {    \r
29     \r
30         final private Sorter sorter;\r
31         \r
32         public StandardPropertySorterRule(Resource rule) {\r
33                 this.sorter = new StandardSorter(rule);\r
34         }\r
35         \r
36         static class StandardSorter extends AbstractSorter<ComparablePair<String, String>> {\r
37                 \r
38                 final private Resource rule;\r
39                 \r
40                 public StandardSorter(Resource rule) {\r
41                         this.rule = rule;\r
42                 }\r
43 \r
44                 @Override\r
45                 public ComparablePair<String, String> getSortingCriterion(ReadGraph graph, BrowseContext context, NodeContext node) throws DatabaseException {\r
46 \r
47                         Object content = node.getConstant(BuiltinKeys.INPUT);\r
48                         if(content instanceof Variable) {\r
49                                 Variable var = (Variable)content;\r
50                         Variable info = var.getPossibleProperty(graph, SelectionVariables.PROPERTY_INFO);\r
51                         // FIXME: what is this block ??\r
52                         if(info == null) { \r
53 //                              System.err.println("null info for " + ((Variable)content).getURI(graph));\r
54 //                              info = ((Variable)content).getPossiblePropertyValue(graph, SelectionVariables.PROPERTY_INFO);\r
55                                 return ComparablePair.make("", ((Variable)content).getName(graph));\r
56                         }\r
57                         \r
58                         Variable special = SelectionViewUtils.getSpecialCategory(graph, rule, info);\r
59                         if(special != null) info = special;\r
60                         \r
61                         String cat = info.getPossiblePropertyValue(graph, SelectionVariables.CATEGORY_SORTING_NAME, Bindings.STRING);\r
62                         if(cat == null) {\r
63                                 cat = info.getPossiblePropertyValue(graph, SelectionVariables.CATEGORY_NAME, Bindings.STRING);\r
64                                 if(cat == null) cat = "";\r
65                         }\r
66                         String label = ((Variable)content).getPossiblePropertyValue(graph, SelectionVariables.PROPERTY_SORTING_NAME, Bindings.STRING);\r
67                         if(label == null) label = ((Variable)content).getPossiblePropertyValue(graph, ColumnKeys.DISPLAY_PROPERTY, Bindings.STRING);\r
68                         if(label == null) label = "Invalid label for " + ((Variable)content).getURI(graph); \r
69                         return ComparablePair.make(cat,label);\r
70                                 \r
71                         } else if (content instanceof CategoryNode) {\r
72                                 return ComparablePair.make(((CategoryNode)content).getSortingName(), "");\r
73                         }\r
74                         \r
75                         throw new IllegalArgumentException("Content type should be Variable or CategoryNode");\r
76                         \r
77                 }\r
78 \r
79                 @Override\r
80                 public int compare(ComparablePair<String, String> a, ComparablePair<String, String> b) {\r
81                         return a.compareTo(b);\r
82                 }\r
83                 \r
84         };\r
85         \r
86         \r
87     @Override\r
88     public boolean isCompatible(Class<?> contentType) {\r
89         return contentType.equals(Variable.class);\r
90     }\r
91 \r
92     @Override\r
93     public Sorter getSorter(ReadGraph graph, Object content)\r
94             throws DatabaseException {\r
95         return sorter;\r
96     }\r
97 \r
98 }\r