1568 |
04 Nov 05 |
enell |
1 |
/* |
1568 |
04 Nov 05 |
enell |
$Id$ |
1568 |
04 Nov 05 |
enell |
3 |
|
3675 |
16 Aug 07 |
jari |
Copyright (C) 2005 Johan Enell |
4889 |
06 Apr 09 |
nicklas |
Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg |
1568 |
04 Nov 05 |
enell |
6 |
|
2304 |
22 May 06 |
jari |
This file is part of BASE - BioArray Software Environment. |
2304 |
22 May 06 |
jari |
Available at http://base.thep.lu.se/ |
1568 |
04 Nov 05 |
enell |
9 |
|
1568 |
04 Nov 05 |
enell |
BASE is free software; you can redistribute it and/or |
1568 |
04 Nov 05 |
enell |
modify it under the terms of the GNU General Public License |
4479 |
05 Sep 08 |
jari |
as published by the Free Software Foundation; either version 3 |
1568 |
04 Nov 05 |
enell |
of the License, or (at your option) any later version. |
1568 |
04 Nov 05 |
enell |
14 |
|
1568 |
04 Nov 05 |
enell |
BASE is distributed in the hope that it will be useful, |
1568 |
04 Nov 05 |
enell |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
1568 |
04 Nov 05 |
enell |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1568 |
04 Nov 05 |
enell |
GNU General Public License for more details. |
1568 |
04 Nov 05 |
enell |
19 |
|
1568 |
04 Nov 05 |
enell |
You should have received a copy of the GNU General Public License |
4515 |
11 Sep 08 |
jari |
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 |
Util class for coordinate transformations in base. |
1568 |
04 Nov 05 |
enell |
29 |
|
1568 |
04 Nov 05 |
enell |
@base.modified $Date$ |
1568 |
04 Nov 05 |
enell |
@author Enell |
1568 |
04 Nov 05 |
enell |
@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 |
Convert an alphanumeric coordinate to a numeric coordinate, case is unimportent. |
1568 |
04 Nov 05 |
enell |
39 |
|
7703 |
11 Apr 19 |
nicklas |
<table class="as-grid"> |
6881 |
21 Apr 15 |
nicklas |
<caption>Coordinate conversion examaples</caption> |
1568 |
04 Nov 05 |
enell |
<tr><th>Alphanumeric coordinate</th><th>Numeric coordinate</th></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>a</td><td>1</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>...</td><td>...</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>z</td><td>26</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>aa</td><td>27</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>...</td><td>...</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>az</td><td>52</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>ba</td><td>53</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>...</td><td>...</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>zz</td><td>702</td></tr> |
1568 |
04 Nov 05 |
enell |
<tr><td>aaa</td><td>703</td></tr> |
1568 |
04 Nov 05 |
enell |
</table> |
1568 |
04 Nov 05 |
enell |
54 |
|
1568 |
04 Nov 05 |
enell |
@param s The string representation of the alphanumeric coordinate. |
1568 |
04 Nov 05 |
enell |
@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 |
Convert a numeric coordinate to an alphanumeric coordinate. See |
1568 |
04 Nov 05 |
enell |
{@link #alphaToNumeric(String)} for details. |
1568 |
04 Nov 05 |
enell |
83 |
|
1568 |
04 Nov 05 |
enell |
@param i The int representation of the numeric coordinate. |
1568 |
04 Nov 05 |
enell |
@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 |
} |