/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content; import java.util.Comparator; import java.util.List; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; public class ContentLocationComparatorOnPath implements Comparator<ContentLocation> { public int compare( final ContentLocation a, final ContentLocation b ) { if (a == b) { return 0; } final int siteNameCompare = a.getSiteName().compareTo( b.getSiteName() ); if ( siteNameCompare != 0 ) { return siteNameCompare; } final MenuItemEntity menuitemA = a.getMenuItem(); final MenuItemEntity menuitemB = b.getMenuItem(); final int menuitemALevel = menuitemA.getLevel(); final int menuitemBLevel = menuitemB.getLevel(); if ( menuitemALevel < menuitemBLevel ) { return -1; } else if ( menuitemALevel > menuitemBLevel ) { return 1; } // at this point save levels...compare each level List<MenuItemEntity> menuitemAPath = menuitemA.getMenuItemPath(); List<MenuItemEntity> menuitemBPath = menuitemB.getMenuItemPath(); for ( int i = 0; i < menuitemAPath.size(); i++ ) { final MenuItemEntity currentALevel = menuitemAPath.get( i ); final MenuItemEntity currentBLevel = menuitemBPath.get( i ); final int currentLevelCompare = currentALevel.getName().compareTo( currentBLevel.getName() ); if ( currentLevelCompare != 0 ) { return currentLevelCompare; } } // at this point they are completely equal, according to this comparator return 0; } }