Depois de ler um monte de código-fonte aberto, descobri que a maioria deles conta com o Chesspresso, uma sólida biblioteca Java Chess que pode lidar com validação de movimento, analisador PGN (o que eu estava procurando), renderização de tabuleiro de xadrez, etc.
O código está bem documentado e fácil de entender. Levei cerca de 30 minutos para ler o código e iniciar o teste. Muito feliz com esta biblioteca.
Você pode baixar o código-fonte do sourceforge: Código-fonte do Chesspresso
Código de exemplo: (este é um fragmento da classe Game, eu só preciso adicionar mais detalhes para a seção do cabeçalho e estarei pronto para despejar cada jogo pgn no meu banco de dados).
public String getHeaderString(int line)
{
if (line == 0) {
StringBuffer sb = new StringBuffer();
sb.append(getWhite());
if (getWhiteElo() != 0) sb.append(" [").append(getWhiteElo()).append("]");
sb.append(" - ").append(getBlack());
if (getBlackElo() != 0) sb.append(" [").append(getBlackElo()).append("]");
sb.append(" ").append(getResultStr()).append(" (").append(getNumOfMoves()).append(")");
return sb.toString();
} else if (line == 1) {
StringBuffer sb = new StringBuffer();
sb.append(getEvent()).append(", ").append(getSite()).append(", ").append(getDate());
sb.append(" [").append(getRound()).append("]");
return sb.toString();
} else if (line == 2) {
return getECO();
} else {
throw new RuntimeException("Only 3 header lines supported");
}
}