package com.marshalchen.common.uimodule.tileView.tileview.tiles.selector; import com.marshalchen.common.uimodule.tileView.tileview.detail.DetailLevel; import com.marshalchen.common.uimodule.tileView.tileview.detail.DetailLevelSet; public class TileSetSelectorMinimalUpScale implements TileSetSelector { @Override public DetailLevel find( double scale, DetailLevelSet levels ) { // fast-fail if ( levels.size() == 0 ) { return null; } // if there's just one level, that's our best-case if( levels.size() == 1 ) { return levels.get( 0 ); } // set to null initially, but should never fail to populate DetailLevel match = null; // start at the last index int index = levels.size() - 1; // loop from largest to smallest for ( int i = index; i >= 0; i-- ) { // store the iteration level in the return product for now match = levels.get( i ); // if the iteration scale is less than the desired scale... if ( match.getScale() < scale ) { // and there's a level registered with a larger scale if ( i < index ) { // ... try to get the next largest match = levels.get( i + 1 ); // if we're at the largest level and can't go up one, then we've got our best-case } // we've got a match, all done break; } } return match; } }