/**
* Copyright (c) 2009-2014 Câmara dos Deputados. Todos os direitos reservados.
*
* e-Democracia é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro
* dos termos da Licença Pública Geral Menor GNU como publicada pela Fundação do
* Software Livre (FSF); na versão 2.1 da Licença, ou (na sua opinião) qualquer versão.
*
* Este programa é distribuído na esperança de que possa ser útil, mas SEM NENHUMA GARANTIA;
* sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR.
* Veja a Licença Pública Geral Menor GNU para maiores detalhes.
*/
package br.gov.camara.edemocracia.portlets.libs;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.context.FacesContext;
import org.apache.commons.lang.StringUtils;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.model.Country;
import com.liferay.portal.model.Region;
import com.liferay.portal.model.User;
import com.liferay.portal.service.CountryServiceUtil;
import com.liferay.portal.service.RegionServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;
public class Biblioteca {
private static Pattern p = Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$");
private static Log _log = LogFactoryUtil.getLog(Biblioteca.class);
public static boolean validarEmail(String email) {
Matcher m = p.matcher(email);
if (m.find()) {
return true;
} else {
return false;
}
}
public static Validacao validarCampos(Long companyId, String nome, String email, String emailValidacao, String senha, String senhaValidacao,
Boolean termosB, Long uf, String captcha) {
List<String> mensagens = new ArrayList<String>();
Validacao validar = new Validacao(true, mensagens);
if (StringUtils.isBlank(nome)) {
mensagens.add("somente-um-nome");
} else if (nome.trim().length() > 70) {
mensagens.add("nome-invalido");
}
if (StringUtils.isBlank(email)) {
mensagens.add("infome-email");
} else if (email.trim().length() > 70) {
mensagens.add("email-excedido");
}
if (StringUtils.isBlank(senha)) {
mensagens.add("informe-senha");
} else if (senha.trim().length() > 70) {
mensagens.add("senha-excedida");
}
if (uf == null) {
mensagens.add("selecione-uf");
} else {
// Verifica se o país está correto
try {
Region regiao = RegionServiceUtil.getRegion(uf);
Country pais = CountryServiceUtil.getCountry(regiao.getCountryId());
if (!"BR".equalsIgnoreCase(pais.getA2()))
mensagens.add("selecione-uf");
} catch (SystemException e) {
throw new RuntimeException(e);
} catch (PortalException e) {
mensagens.add("selecione-uf");
}
}
if (StringUtils.isBlank(captcha)) {
validar.setValidar(false);
mensagens.add("informe-captcha");
}
if (!mensagens.isEmpty()) {
validar.setValidar(false);
validar.setMensagem(mensagens);
return validar;
}
nome = nome.trim();
email = email.trim();
String nomeFinal = retornaUltima(nome);
if (nomeFinal.equals("")) {
validar.setValidar(false);
mensagens.add("somente-um-nome");
}
if (!senha.equals(senhaValidacao)) {
validar.setValidar(false);
mensagens.add("validacao-senha");
}
if (!email.equals(emailValidacao)) {
validar.setValidar(false);
mensagens.add("validacao-email");
} else if (!validarEmail(email)) {
validar.setValidar(false);
mensagens.add("email-invalido");
} else {
try {
User user = UserLocalServiceUtil.getUserByEmailAddress(companyId, email);
if (user != null) {
validar.setValidar(false);
mensagens.add("usuario-cadastrado");
}
} catch (PortalException e) {
_log.info("Usuário inexistente");
} catch (SystemException e) {
_log.info("Usuário inexistente");
}
}
if (!termosB) {
validar.setValidar(false);
mensagens.add("termos-enabled");
}
if (uf.equals(new Long(0))) {
validar.setValidar(false);
mensagens.add("selecione-uf");
}
if (!validarCaptcha(captcha)) {
validar.setValidar(false);
mensagens.add("captcha-invalido");
}
validar.setMensagem(mensagens);
return validar;
}
public static String retornaUltima(String palavra) {
String str = palavra;
StringBuilder palavraFinal = new StringBuilder();
int index = -1;
// aqui é procurado um último espaço contido na "String" e o índice
// desse espaço
// é armazenado na variável "index"
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ')
index = i;
}
// imprime letra por letra só que começando do (índice + 1) que levará
// na última palavra
// Se for so 1 nome retorna S-U-N(sem ultimo nome)
if (index == -1) {
return "";
}
for (int i = index + 1; i < str.length(); i++)
palavraFinal.append(str.charAt(i));
return palavraFinal.toString();
}
// Retorna nome do meio
// if tiver apenas 2 nomes retorna "S-N-M"(Sem nome do meio)
public static String retornaMeio(String palavra) {
StringTokenizer nome = new StringTokenizer(palavra);
StringBuilder meio = new StringBuilder();
if (nome.countTokens() > 1) {
if (nome.countTokens() == 2) {
return "";
}
nome.nextToken();
int qtdPalavras = nome.countTokens() - 1;
while (nome.hasMoreTokens()) {
meio.append(nome.nextToken());
if (nome.hasMoreTokens())
meio.append(" ");
if (qtdPalavras == 1)
break;
qtdPalavras -= 1;
}
} else {
return "";
}
return meio.toString();
}
public static String retornaPrimeiro(String palavra) {
StringTokenizer nome = new StringTokenizer(palavra);
return nome.nextToken();
}
public static boolean validarCaptcha(String captcha) {
String realCaptchaText = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("CAPTCHA_TEXT");
return StringUtils.equals(realCaptchaText, captcha);
}
}