src/core/net/sf/basedb/util/Coordinate.java

Code
Comments
Other
Rev Date Author Line
1568 04 Nov 05 enell 1 /*
1568 04 Nov 05 enell 2   $Id$
1568 04 Nov 05 enell 3
3675 16 Aug 07 jari 4   Copyright (C) 2005 Johan Enell
4889 06 Apr 09 nicklas 5   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg
1568 04 Nov 05 enell 6   
2304 22 May 06 jari 7   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 8   Available at http://base.thep.lu.se/
1568 04 Nov 05 enell 9
1568 04 Nov 05 enell 10   BASE is free software; you can redistribute it and/or
1568 04 Nov 05 enell 11   modify it under the terms of the GNU General Public License
4479 05 Sep 08 jari 12   as published by the Free Software Foundation; either version 3
1568 04 Nov 05 enell 13   of the License, or (at your option) any later version.
1568 04 Nov 05 enell 14
1568 04 Nov 05 enell 15   BASE is distributed in the hope that it will be useful,
1568 04 Nov 05 enell 16   but WITHOUT ANY WARRANTY; without even the implied warranty of
1568 04 Nov 05 enell 17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1568 04 Nov 05 enell 18   GNU General Public License for more details.
1568 04 Nov 05 enell 19
1568 04 Nov 05 enell 20   You should have received a copy of the GNU General Public License
4515 11 Sep 08 jari 21   along with BASE. If not, see <http://www.gnu.org/licenses/>.
1568 04 Nov 05 enell 22 */
1568 04 Nov 05 enell 23 package net.sf.basedb.util;
1568 04 Nov 05 enell 24
1568 04 Nov 05 enell 25 import net.sf.basedb.core.InvalidUseOfNullException;
1568 04 Nov 05 enell 26
1568 04 Nov 05 enell 27 /**
1568 04 Nov 05 enell 28   Util class for coordinate transformations in base.
1568 04 Nov 05 enell 29   
1568 04 Nov 05 enell 30   @base.modified $Date$
1568 04 Nov 05 enell 31   @author Enell
1568 04 Nov 05 enell 32   @version 2.0
1568 04 Nov 05 enell 33 */
1568 04 Nov 05 enell 34 public class Coordinate
1568 04 Nov 05 enell 35 {
1568 04 Nov 05 enell 36   
1568 04 Nov 05 enell 37   /**
1568 04 Nov 05 enell 38     Convert an alphanumeric coordinate to a numeric coordinate, case is unimportent.
1568 04 Nov 05 enell 39
7703 11 Apr 19 nicklas 40     <table class="as-grid">
6881 21 Apr 15 nicklas 41     <caption>Coordinate conversion examaples</caption>
1568 04 Nov 05 enell 42     <tr><th>Alphanumeric coordinate</th><th>Numeric coordinate</th></tr>
1568 04 Nov 05 enell 43     <tr><td>a</td><td>1</td></tr>
1568 04 Nov 05 enell 44     <tr><td>...</td><td>...</td></tr>
1568 04 Nov 05 enell 45     <tr><td>z</td><td>26</td></tr>
1568 04 Nov 05 enell 46     <tr><td>aa</td><td>27</td></tr>
1568 04 Nov 05 enell 47     <tr><td>...</td><td>...</td></tr>
1568 04 Nov 05 enell 48     <tr><td>az</td><td>52</td></tr>
1568 04 Nov 05 enell 49     <tr><td>ba</td><td>53</td></tr>
1568 04 Nov 05 enell 50     <tr><td>...</td><td>...</td></tr>
1568 04 Nov 05 enell 51     <tr><td>zz</td><td>702</td></tr>
1568 04 Nov 05 enell 52     <tr><td>aaa</td><td>703</td></tr>
1568 04 Nov 05 enell 53     </table>
1568 04 Nov 05 enell 54
1568 04 Nov 05 enell 55     @param s The string representation of the alphanumeric coordinate.
1568 04 Nov 05 enell 56     @return The int representation of the numeric coordinate.
1568 04 Nov 05 enell 57   */
1568 04 Nov 05 enell 58   public static int alphaToNumeric(String s)
1568 04 Nov 05 enell 59   {
1568 04 Nov 05 enell 60     int result = 0;
1568 04 Nov 05 enell 61     if (s == null)
1568 04 Nov 05 enell 62     {
1568 04 Nov 05 enell 63       throw new InvalidUseOfNullException("coordinate");
1568 04 Nov 05 enell 64     }
1568 04 Nov 05 enell 65     else if (s.matches("[a-zA-Z]+"))
1568 04 Nov 05 enell 66     {
1568 04 Nov 05 enell 67       for (int i = 0; i < s.length(); i++)
1568 04 Nov 05 enell 68       {
1568 04 Nov 05 enell 69         int value = Character.getNumericValue(s.charAt(s.length()-i-1))-9;
1568 04 Nov 05 enell 70         result += value * Math.pow(26, i);
1568 04 Nov 05 enell 71       }
1568 04 Nov 05 enell 72     }
1568 04 Nov 05 enell 73     else
1568 04 Nov 05 enell 74     {
2751 20 Oct 06 nicklas 75       result = Float.valueOf(s).intValue();
1568 04 Nov 05 enell 76     }
1568 04 Nov 05 enell 77     return result;
1568 04 Nov 05 enell 78   }
1568 04 Nov 05 enell 79   
1568 04 Nov 05 enell 80   /**
1568 04 Nov 05 enell 81     Convert a numeric coordinate to an alphanumeric coordinate. See 
1568 04 Nov 05 enell 82     {@link #alphaToNumeric(String)} for details.
1568 04 Nov 05 enell 83      
1568 04 Nov 05 enell 84     @param i The int representation of the numeric coordinate.
1568 04 Nov 05 enell 85     @return The string representation of the alphanumeric coordinate.
1568 04 Nov 05 enell 86     
1568 04 Nov 05 enell 87   */
1568 04 Nov 05 enell 88   public static String numericToAlpha(int i)
1568 04 Nov 05 enell 89   {
4856 27 Mar 09 nicklas 90     StringBuilder result = new StringBuilder();
1568 04 Nov 05 enell 91     while(i > 0)
1568 04 Nov 05 enell 92     {
1568 04 Nov 05 enell 93       i--;
4856 27 Mar 09 nicklas 94       result = result.insert(0, (char)((i%26)+97));
1568 04 Nov 05 enell 95       i = i / 26;
1568 04 Nov 05 enell 96     }
4856 27 Mar 09 nicklas 97     return result.toString().toUpperCase();
1568 04 Nov 05 enell 98   }
1568 04 Nov 05 enell 99   
1568 04 Nov 05 enell 100 }