package br.com.caelum.stella.gateway.visa;
import java.util.Calendar;
import br.com.caelum.stella.gateway.core.InvalidCheckoutException;
/**
* Classe responsável por gerar o TID, tá isolado para facilitar os testes e
* para que possa ser usada em outro contexto.
*
* @author Alberto Pc
*
*/
public class TIDGenerator {
/**
* identificador unico gerado para cada compra.
*
* @param data
* data que serve de referencia para o calculo do tid
* @param numeroDeAfiliacao
* numeroDeAfiliacao que serve de base para o calculo.
* @return
* @throws InvalidCheckoutException
* caso o parcelamento não tenha sido definido
*/
public String getTid(VISAFormaPagamento parcelamento, Calendar data,
long numeroDeFiliacao) {
String dataNoFormatoJuliano = obterDataNoFormatoJuliano(data);
String numeroDeFiliacaoString = String.valueOf(numeroDeFiliacao);
String numeroDeAfiliacaoDoVisaFormatado = String.valueOf(numeroDeFiliacaoString).substring(4,
numeroDeFiliacaoString.length() - 1);
String horaFormatadaComOMilesimoDoSegundo = String.format(
"%1$tH%1$tM%1$tS"
+ String.valueOf(data.get(Calendar.MILLISECOND))
.substring(0, 1), data);
String ultimoDigitoDoAno = getUltimoDigitoDoAno(data);
String tid = numeroDeAfiliacaoDoVisaFormatado + ultimoDigitoDoAno
+ dataNoFormatoJuliano + horaFormatadaComOMilesimoDoSegundo
+ parcelamento.getCodigoDePagamento();
return tid;
}
private String getUltimoDigitoDoAno(Calendar data) {
String ano = String.valueOf(data.get(Calendar.YEAR));
return ano.substring(ano.length() - 1);
}
private String obterDataNoFormatoJuliano(Calendar data) {
int diaDoAno = data.get(Calendar.DAY_OF_YEAR);
String result = String.format("%03d", diaDoAno);
return result;
}
}