Coverage Report - palmed.edit.text.CoordinateExtractor

Classes in this Package Line Coverage Branch Coverage Complexity
CoordinateExtractor
89% 
100% 
4,5

 1  
 /**
 2  
  * Redistribution  and use  in source  and binary  forms, with  or without
 3  
  * modification, are permitted provided  that the following conditions are
 4  
  * met :
 5  
  *
 6  
  * . Redistributions  of  source  code  must  retain  the  above copyright
 7  
  *   notice, this list of conditions and the following disclaimer.
 8  
  *
 9  
  * . Redistributions in  binary form  must reproduce  the above  copyright
 10  
  *   notice, this list of conditions  and the following disclaimer in  the
 11  
  *   documentation and/or other materials provided with the distribution.
 12  
  *
 13  
  * . The name of the author may not be used to endorse or promote products
 14  
  *   derived from this software without specific prior written permission.
 15  
  *
 16  
  * THIS SOFTWARE IS  PROVIDED BY THE  AUTHOR ``AS IS''  AND ANY EXPRESS  OR
 17  
  * IMPLIED  WARRANTIES,  INCLUDING,  BUT   NOT  LIMITED  TO,  THE   IMPLIED
 18  
  * WARRANTIES OF MERCHANTABILITY AND  FITNESS FOR A PARTICULAR  PURPOSE ARE
 19  
  * DISCLAIMED.  IN NO  EVENT SHALL  THE AUTHOR  BE LIABLE  FOR ANY  DIRECT,
 20  
  * INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL  DAMAGES
 21  
  * (INCLUDING,  BUT  NOT LIMITED  TO,  PROCUREMENT OF  SUBSTITUTE  GOODS OR
 22  
  * SERVICES;  LOSS  OF USE,  DATA,  OR PROFITS;  OR  BUSINESS INTERRUPTION)
 23  
  * HOWEVER CAUSED  AND ON  ANY THEORY  OF LIABILITY,  WHETHER IN  CONTRACT,
 24  
  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 25  
  * ANY  WAY  OUT OF  THE  USE OF  THIS  SOFTWARE, EVEN  IF  ADVISED OF  THE
 26  
  * POSSIBILITY OF SUCH DAMAGE.
 27  
  *
 28  
  * $Id$
 29  
  */
 30  
 
 31  
 package palmed.edit.text;
 32  
 
 33  
 import palmed.edit.util.Coordinate;
 34  
 
 35  
 /**
 36  
  * This class implements a coordinate extractor.
 37  
  *
 38  
  * @author Mathieu Champlon
 39  
  * @version $Revision$ $Date$
 40  
  */
 41  
 public final class CoordinateExtractor implements ILineExtractor
 42  
 {
 43  
     /**
 44  
      * The coordinate to extract.
 45  
      */
 46  
     private final Coordinate coordinate_;
 47  
     /**
 48  
      * The functor to call.
 49  
      */
 50  
     private final ICoordinateExtractor functor_;
 51  
     /**
 52  
      * The width of the line at the coordinate.
 53  
      */
 54  
     private int width_;
 55  
     /**
 56  
      * Whether the coordinate has been found or not.
 57  
      */
 58  
     private boolean hasBeenFound_;
 59  
 
 60  
     /**
 61  
      * Create a coordinate extractor.
 62  
      *
 63  
      * @param coordinate the coordinate to extract
 64  
      * @param functor the functor to call when found
 65  
      */
 66  
     public CoordinateExtractor( final Coordinate coordinate, final ICoordinateExtractor functor )
 67  30
     {
 68  30
         if( coordinate == null )
 69  0
             throw new IllegalArgumentException( "parameter 'coordinate' is null" );
 70  30
         if( functor == null )
 71  0
             throw new IllegalArgumentException( "parameter 'functor' is null" );
 72  30
         coordinate_ = coordinate;
 73  30
         functor_ = functor;
 74  30
         width_ = 0;
 75  30
         hasBeenFound_ = false;
 76  30
     }
 77  
 
 78  
     /**
 79  
      * {@inheritDoc}
 80  
      */
 81  
     public void select( final IText text, final int line )
 82  
     {
 83  85
         if( hasBeenFound_ )
 84  40
             return;
 85  45
         final int x = coordinate_.x_ - width_;
 86  45
         final int length = text.getLine( line ).length();
 87  45
         if( x <= length )
 88  
         {
 89  30
             hasBeenFound_ = true;
 90  30
             functor_.select( text, new Coordinate( x, line ) );
 91  
         }
 92  45
         width_ += length;
 93  45
     }
 94  
 }