package org.sigmah.client.ui.presenter.project.logframe;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
/**
* Defines a code displayer.
*
* @author tmi (v1.3)
* @author Denis Colliot (dcolliot@ideia.fr) (v2.0)
*/
public final class CodePolicy {
private CodePolicy() {
// Only provides static methods.
}
/**
* Gets the character indexed by the given <code>index</code> in the alphabet. Indexes start at <code>0</code> and
* ends at <code>25</code>.
*
* <ul>
* <li>0 → a</li>
* <li>1 → b</li>
* <li>2 → c</li>
* <li>...</li>
* <li>25 → z</li>
* </ul>
*
* @param index
* The character index.
* @param upper
* Upper character?
* @return The corresponding character.
*/
public static char getLetter(int index, boolean upper) {
return getLetter(index, upper, 0);
}
/**
* Gets the character indexed by the given <code>index</code> in the alphabet. Indexes start at <code>start</code> and
* ends at <code>start + 25</code>.
*
* <ul>
* <li>start → a</li>
* <li>start + 1 → b</li>
* <li>start + 2 → c</li>
* <li>...</li>
* <li>start + 25 → z</li>
* </ul>
*
* @param index
* The character index.
* @param upper
* Upper character?
* @param start
* The index of the first letter <code>a</code>.
* @return The corresponding character.
*/
public static char getLetter(int index, boolean upper, int start) {
// Adjusts index.
index = start > 0 ? index - start : index + start;
// Checks the index.
if (index < 0 || index > 25) {
throw new IllegalArgumentException("The index #" + index + " doesn't not refer to a valid alphabetical character (must be between 0 and 25).");
}
// Computes the ascii code shift to get alphabetical characters.
final int shift;
if (upper) {
shift = 65;
} else {
shift = 97;
}
return (char) (index + shift);
}
}