in plugins/ldapbrowser.common/src/main/java/org/apache/directory/studio/ldapbrowser/common/widgets/browser/BrowserSorter.java [136:406]
public int compare( Viewer viewer, Object o1, Object o2 )
{
// o1 is StudioConnectionRunnableWithProgress
if ( o1 instanceof StudioConnectionRunnableWithProgress )
{
StudioConnectionRunnableWithProgress runnable = ( StudioConnectionRunnableWithProgress ) o1;
for ( Object lockedObject : runnable.getLockedObjects() )
{
if ( lockedObject instanceof ISearch )
{
ISearch search = ( ISearch ) lockedObject;
if ( o1 == search.getTopSearchRunnable() )
{
return lessThanEntries();
}
else if ( o1 == search.getNextSearchRunnable() )
{
return greaterThanEntries();
}
}
else if ( lockedObject instanceof IEntry )
{
IEntry entry = ( IEntry ) lockedObject;
if ( o1 == entry.getTopPageChildrenRunnable() )
{
return lessThanEntries();
}
else if ( o1 == entry.getNextPageChildrenRunnable() )
{
return greaterThanEntries();
}
}
}
return lessThanEntries();
}
// o2 is StudioConnectionRunnableWithProgress
if ( o2 instanceof StudioConnectionRunnableWithProgress )
{
StudioConnectionRunnableWithProgress runnable = ( StudioConnectionRunnableWithProgress ) o2;
for ( Object lockedObject : runnable.getLockedObjects() )
{
if ( lockedObject instanceof ISearch )
{
ISearch search = ( ISearch ) lockedObject;
if ( o2 == search.getTopSearchRunnable() )
{
return greaterThanEntries();
}
else if ( o2 == search.getNextSearchRunnable() )
{
return lessThanEntries();
}
}
else if ( lockedObject instanceof IEntry )
{
IEntry entry = ( IEntry ) lockedObject;
if ( o2 == entry.getTopPageChildrenRunnable() )
{
return greaterThanEntries();
}
else if ( o2 == entry.getNextPageChildrenRunnable() )
{
return lessThanEntries();
}
}
}
return greaterThanEntries();
}
// o1 and o2 are null
if ( o1 == null && o2 == null )
{
return equal();
}
// o1 is null, o2 isn't
else if ( o1 == null && o2 != null )
{
return lessThanEntries();
}
// o1 isn't null, o1 is
else if ( o1 != null && o2 == null )
{
return greaterThanEntries();
}
// special case for quick search
else if ( o1 instanceof IQuickSearch || o2 instanceof IQuickSearch )
{
if ( !( o1 instanceof IQuickSearch ) && ( o2 instanceof IQuickSearch ) )
{
return 1;
}
else if ( ( o1 instanceof IQuickSearch ) && !( o2 instanceof IQuickSearch ) )
{
return -1;
}
else
{
return equal();
}
}
// o1 and o2 are entries
else if ( o1 instanceof IEntry || o2 instanceof IEntry )
{
if ( !( o1 instanceof IEntry ) && !( o2 instanceof IEntry ) )
{
return equal();
}
else if ( !( o1 instanceof IEntry ) && ( o2 instanceof IEntry ) )
{
return lessThanEntries();
}
else if ( ( o1 instanceof IEntry ) && !( o2 instanceof IEntry ) )
{
return greaterThanEntries();
}
else
{
IEntry entry1 = ( IEntry ) o1;
IEntry entry2 = ( IEntry ) o2;
int cat1 = category( entry1 );
int cat2 = category( entry2 );
if ( cat1 != cat2 )
{
return cat1 - cat2;
}
else if ( preferences.getSortEntriesBy() == BrowserCoreConstants.SORT_BY_NONE )
{
return equal();
}
else if ( preferences.getSortEntriesBy() == BrowserCoreConstants.SORT_BY_RDN )
{
return compareRdns( entry1, entry2 );
}
else if ( preferences.getSortEntriesBy() == BrowserCoreConstants.SORT_BY_RDN_VALUE )
{
return compareRdnValues( entry1, entry2 );
}
else
{
return equal();
}
}
}
// o1 and o2 are search results
else if ( o1 instanceof ISearchResult || o2 instanceof ISearchResult )
{
if ( !( o1 instanceof ISearchResult ) && !( o2 instanceof ISearchResult ) )
{
return equal();
}
else if ( !( o1 instanceof ISearchResult ) && ( o2 instanceof ISearchResult ) )
{
return lessThanEntries();
}
else if ( ( o1 instanceof ISearchResult ) && !( o2 instanceof ISearchResult ) )
{
return greaterThanEntries();
}
else
{
ISearchResult sr1 = ( ISearchResult ) o1;
ISearchResult sr2 = ( ISearchResult ) o2;
int cat1 = category( sr1 );
int cat2 = category( sr2 );
if ( cat1 != cat2 )
{
return cat1 - cat2;
}
else if ( preferences.getSortEntriesBy() == BrowserCoreConstants.SORT_BY_NONE )
{
return equal();
}
else if ( preferences.getSortEntriesBy() == BrowserCoreConstants.SORT_BY_RDN )
{
return compareRdns( sr1.getEntry(), sr2.getEntry() );
}
else if ( preferences.getSortEntriesBy() == BrowserCoreConstants.SORT_BY_RDN_VALUE )
{
return compareRdnValues( sr1.getEntry(), sr2.getEntry() );
}
else
{
return equal();
}
}
}
// o1 and o2 are searches
else if ( o1 instanceof ISearch || o2 instanceof ISearch )
{
if ( !( o1 instanceof ISearch ) && !( o2 instanceof ISearch ) )
{
return equal();
}
else if ( !( o1 instanceof ISearch ) && ( o2 instanceof ISearch ) )
{
return lessThanSearches();
}
else if ( ( o1 instanceof ISearch ) && !( o2 instanceof ISearch ) )
{
return greaterThanSearches();
}
else
{
ISearch s1 = ( ISearch ) o1;
ISearch s2 = ( ISearch ) o2;
if ( preferences.getSortSearchesOrder() == BrowserCoreConstants.SORT_ORDER_NONE )
{
return equal();
}
else
{
return compareSearches( s1.getName(), s2.getName() );
}
}
}
// o1 and o2 are bookmarks
else if ( o1 instanceof IBookmark || o2 instanceof IBookmark )
{
if ( !( o1 instanceof IBookmark ) && !( o2 instanceof IBookmark ) )
{
return equal();
}
else if ( !( o1 instanceof IBookmark ) && ( o2 instanceof IBookmark ) )
{
return lessThanBookmarks();
}
else if ( ( o1 instanceof IBookmark ) && !( o2 instanceof IBookmark ) )
{
return greaterThanBookmarks();
}
else
{
IBookmark b1 = ( IBookmark ) o1;
IBookmark b2 = ( IBookmark ) o2;
if ( preferences.getSortBookmarksOrder() == BrowserCoreConstants.SORT_ORDER_NONE )
{
return equal();
}
else
{
return compareBookmarks( b1.getName(), b2.getName() );
}
}
}
else
{
return equal();
}
}