package br.com.dextra.dextranet.usuario;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import br.com.dextra.dextranet.grupo.GrupoJSON;
import br.com.dextra.dextranet.grupo.UsuarioJSON;
import br.com.dextra.dextranet.persistencia.Entidade;
import br.com.dextra.dextranet.utils.ConteudoHTML;
import br.com.dextra.dextranet.utils.MD5;
import br.com.dextra.dextranet.utils.TimeMachine;
import com.google.appengine.api.datastore.Entity;
public class Usuario extends Entidade {
public static final String DEFAULT_DOMAIN = "@dextra-sw.com";
private String username;
private String md5;
private String nome;
private String apelido;
private String area;
private String unidade;
private String ramal;
private String telefoneResidencial;
private String telefoneCelular;
private String gitHub;
private String skype;
private Date ultimaAtualizacao;
private String blog;
private List<GrupoJSON> grupos;
private Boolean ativo;
public Usuario(String username) {
this.username = username.trim();
this.md5 = geraMD5(this.username);
this.ativo = true;
}
public Usuario(Entity entidade) {
this.id = (String) entidade.getProperty(UsuarioFields.id.name());
this.username = (String) entidade.getProperty(UsuarioFields.username.name());
this.md5 = (String) entidade.getProperty(UsuarioFields.md5.name());
this.nome = (String) entidade.getProperty(UsuarioFields.nome.name());
this.apelido = (String) entidade.getProperty(UsuarioFields.apelido.name());
this.area = (String) entidade.getProperty(UsuarioFields.area.name());
this.unidade = (String) entidade.getProperty(UsuarioFields.unidade.name());
this.ramal = (String) entidade.getProperty(UsuarioFields.ramal.name());
this.telefoneResidencial = (String) entidade.getProperty(UsuarioFields.telefoneResidencial.name());
this.telefoneCelular = (String) entidade.getProperty(UsuarioFields.telefoneCelular.name());
this.gitHub = (String) entidade.getProperty(UsuarioFields.gitHub.name());
this.skype = (String) entidade.getProperty(UsuarioFields.skype.name());
this.ultimaAtualizacao = (Date) entidade.getProperty(UsuarioFields.ultimaAtualizacao.name());
this.blog = (String) entidade.getProperty(UsuarioFields.blog.name());
this.ativo = (Boolean) entidade.getProperty(UsuarioFields.ativo.name());
}
public String getUsername() {
return username;
}
public String getMD5() {
return md5;
}
public String getNome() {
return nome;
}
public String getApelido() {
return apelido;
}
public String getArea() {
return area;
}
public String getUnidade() {
return unidade;
}
public String getRamal() {
return ramal;
}
public String getTelefoneResidencial() {
return telefoneResidencial;
}
public String getTelefoneCelular() {
return telefoneCelular;
}
public String getGitHub() {
return gitHub;
}
public String getSkype() {
return skype;
}
public Date getUltimaAtualizacao() {
return ultimaAtualizacao;
}
public String getBlog() {
return blog;
}
public Usuario preenchePerfil(String nome, String apelido, String area, String unidade, String ramal,
String telefoneResidencial, String telefoneCelular, String gitHub, String skype, String blog) {
ConteudoHTML conteudoHTML = new ConteudoHTML(nome);
this.nome = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(apelido);
this.apelido = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(area);
this.area = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(unidade);
this.unidade = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(ramal);
this.ramal = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(telefoneResidencial);
this.telefoneResidencial = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(telefoneCelular);
this.telefoneCelular = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(gitHub);
this.gitHub = conteudoHTML.removeJavaScript();
conteudoHTML.setConteudo(skype);
this.skype = conteudoHTML.removeJavaScript();
this.ultimaAtualizacao = new TimeMachine().dataAtual();
conteudoHTML.setConteudo(blog);
this.blog = conteudoHTML.removeJavaScript();
return this;
}
@Override
public Entity toEntity() {
Entity entidade = new Entity(this.getKey(this.getClass()));
entidade.setProperty(UsuarioFields.id.name(), this.id);
entidade.setProperty(UsuarioFields.username.name(), this.username);
entidade.setProperty(UsuarioFields.md5.name(), this.md5);
entidade.setProperty(UsuarioFields.nome.name(), this.nome);
entidade.setProperty(UsuarioFields.apelido.name(), this.apelido);
entidade.setProperty(UsuarioFields.area.name(), this.area);
entidade.setProperty(UsuarioFields.unidade.name(), this.unidade);
entidade.setProperty(UsuarioFields.ramal.name(), this.ramal);
entidade.setProperty(UsuarioFields.ultimaAtualizacao.name(), this.ultimaAtualizacao);
entidade.setProperty(UsuarioFields.telefoneResidencial.name(), this.telefoneResidencial);
entidade.setProperty(UsuarioFields.telefoneCelular.name(), this.telefoneCelular);
entidade.setProperty(UsuarioFields.skype.name(), this.skype);
entidade.setProperty(UsuarioFields.gitHub.name(), this.gitHub);
entidade.setProperty(UsuarioFields.blog.name(), this.blog);
entidade.setProperty(UsuarioFields.ativo.name(), this.ativo);
return entidade;
}
public static String geraMD5(String username) {
return MD5.hash(username + DEFAULT_DOMAIN);
}
public List<GrupoJSON> getGrupos() {
return grupos;
}
public void setGrupos(List<GrupoJSON> grupos) {
this.grupos = grupos;
}
public Boolean isAtivo() {
return ativo;
}
public void setAtivo(Boolean ativo) {
this.ativo = ativo;
}
public String getEmail() {
if (StringUtils.isNotEmpty(username)) {
return username + DEFAULT_DOMAIN;
}
return null;
}
public UsuarioJSON getUsuarioJSON() {
UsuarioJSON json = new UsuarioJSON(this.id, this.nome, this.username + DEFAULT_DOMAIN);
json.setAtivo(ativo);
json.setApelido(this.apelido);
json.setUsername(this.username);
return json;
}
}