1 /*******************************************************************************
\r
2 * Copyright (c) 2010, 2011 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.selectionview;
\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
28 public class StandardPropertySorterRule implements SorterRule {
\r
30 final private Sorter sorter;
\r
32 public StandardPropertySorterRule(Resource rule) {
\r
33 this.sorter = new StandardSorter(rule);
\r
36 static class StandardSorter extends AbstractSorter<ComparablePair<String, String>> {
\r
38 final private Resource rule;
\r
40 public StandardSorter(Resource rule) {
\r
45 public ComparablePair<String, String> getSortingCriterion(ReadGraph graph, BrowseContext context, NodeContext node) throws DatabaseException {
\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
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
58 Variable special = SelectionViewUtils.getSpecialCategory(graph, rule, info);
\r
59 if(special != null) info = special;
\r
61 String cat = info.getPossiblePropertyValue(graph, SelectionVariables.CATEGORY_SORTING_NAME, Bindings.STRING);
\r
63 cat = info.getPossiblePropertyValue(graph, SelectionVariables.CATEGORY_NAME, Bindings.STRING);
\r
64 if(cat == null) cat = "";
\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
71 } else if (content instanceof CategoryNode) {
\r
72 return ComparablePair.make(((CategoryNode)content).getSortingName(), "");
\r
75 throw new IllegalArgumentException("Content type should be Variable or CategoryNode");
\r
80 public int compare(ComparablePair<String, String> a, ComparablePair<String, String> b) {
\r
81 return a.compareTo(b);
\r
88 public boolean isCompatible(Class<?> contentType) {
\r
89 return contentType.equals(Variable.class);
\r
93 public Sorter getSorter(ReadGraph graph, Object content)
\r
94 throws DatabaseException {
\r