001 /*
002 * file NoTypeSorter.java
003 *
004 * Licensed Materials - Property of IBM
005 * Restricted Materials of IBM - you are allowed to copy, modify and
006 * redistribute this file as part of any program that interfaces with
007 * IBM Rational CM API.
008 *
009 * com.ibm.rational.teamapi.scout.NoTypeSorter
010 *
011 * © Copyright IBM Corporation 2004, 2008. All Rights Reserved.
012 * Note to U.S. Government Users Restricted Rights: Use, duplication or
013 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
014 */
015 package com.ibm.rational.teamapi.scout;
016
017 import org.eclipse.jface.viewers.ContentViewer;
018 import org.eclipse.jface.viewers.IBaseLabelProvider;
019 import org.eclipse.jface.viewers.ILabelProvider;
020 import org.eclipse.jface.viewers.Viewer;
021 import org.eclipse.jface.viewers.ViewerSorter;
022
023 /**
024 * A ViewSorter that sorts the bound member list on the simple name of the child
025 * (as opposed to sorting on the label displayed in the tree view, which includes
026 * resource type information).
027 */
028 public class NoTypeSorter extends ViewerSorter {
029 /*
030 * @see ViewerSorter#compare(Viewer, Object, Object)
031 */
032 public int compare(Viewer viewer, Object e1, Object e2) {
033 int cat1 = category(e1);
034 int cat2 = category(e2);
035
036 if (cat1 != cat2) return cat1 - cat2;
037
038 String name1, name2;
039 if (viewer == null || !(viewer instanceof ContentViewer)) {
040 name1 = e1.toString();
041 name2 = e2.toString();
042 } else {
043 IBaseLabelProvider prov = ((ContentViewer)viewer).getLabelProvider();
044 if (prov instanceof ILabelProvider) {
045 ILabelProvider lprov = (ILabelProvider)prov;
046 name1 = lprov.getText(e1);
047 name2 = lprov.getText(e2);
048 } else {
049 name1 = e1.toString();
050 name2 = e2.toString();
051 }
052 }
053 return collator.compare(stripType(name1, e1), stripType(name2, e2));
054 }
055
056 /**
057 * Strips the resource type from the head of the display name
058 * @param name The element display name
059 * @param obj The ProxyElement from which the name was derived
060 * @return The element display name stripped of its resource type.
061 */
062 protected String stripType(String name, Object obj) {
063 if (name == null)
064 return "";
065
066 if (obj!=null && (obj instanceof ProxyElement)) {
067 int space = name.indexOf(" ");
068
069 if (space > 0) {
070 String type = name.substring(0,space);
071 ProxyElement pe = (ProxyElement)obj;
072
073 if (type.equals(pe.resourceType())) {
074 return name.substring(space+1);
075 }
076 }
077 }
078
079 return name;
080 }
081
082 }