/******************************************************************************* * Copyright (c) 2007, 2010 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.browsing.ui.common.comparators; import org.simantics.browsing.ui.BuiltinKeys; import org.simantics.browsing.ui.NodeContext; import org.simantics.browsing.ui.NodeQueryManager; import org.simantics.browsing.ui.content.ComparableContext; import org.simantics.browsing.ui.content.ComparableContextFactory; import org.simantics.browsing.ui.content.Labeler; public class LexicalComparatorFactory implements ComparableContextFactory { private final String column; private final String label; public LexicalComparatorFactory(String column) { this.column = column; this.label = null; } public LexicalComparatorFactory(String column, String label) { this.column = column; this.label = label; } @Override public ComparableContext[] create(NodeQueryManager manager, NodeContext parent, NodeContext[] children) { ComparableContext[] result = new ComparableContext[children.length]; for (int i = 0; i < children.length; i++) { NodeContext child = children[i]; Labeler labeler = manager.query(child, BuiltinKeys.SELECTED_LABELER); int category = (labeler != null) ? labeler.getCategory() : 0; String label = (labeler != null) ? labeler.getLabels().get(column) : ""; if (label == null) label = ""; result[i] = new ImmutableLexicalComparable(category, label, child) { @Override public int compareTo(ComparableContext arg0) { ImmutableLexicalComparable other = (ImmutableLexicalComparable) arg0; int catDelta = getCategory() - other.getCategory(); if (catDelta != 0) return catDelta; String label1 = getLabel(); String label2 = other.getLabel(); return label1.compareToIgnoreCase(label2); } }; } return result; } @Override public String toString() { return label != null ? label : "Alphabetical"; } }