Para realizar a criação do portlet “Lista de Aniversários” primeiramente devemos ter o ambiente de criação de plugins SDK do liferay devidamente configurado.
Em ambiente Windows, podemos criar um portlet a partir de um exemplo, para tanto execute o programa “create.bat” localizado na pasta {diretorioSDK}/portlet/ , esse programa irá criar a estrutura básica de um portlet de Liferay.
Para começar a criação do nosso portlet, primeiramente precisamos editar o arquivo view.jsp que é a primeira classe a ser carregada quando o portlet é executado.
Nele iremos realizar todas as nossas modificações.
O portlet funciona basicamente da seguinte maneira:
> O usuário deve pertencer a organização pai para que possa ver a lista de aniversariantes
> A lista de aniversariantes deve conter apenas usuários que pertençam a comunidade pai.
> A listagem precisa ser ordenada por dia
O Algoritmo:
A seqüência de atividades que devemos fazer para implementar essa listagem é:
1) Recuperar o ID do usuário atual:
Para que possamos listar apenas para usuários pertencentes a comunidade pai, por exemplo.
2) Recuperar o ID das organizações a qual o usuário pertencem
Fazendo dessa maneira, se o usuário pertencer a organização pai, poderemos encontrá-la.
3) Recuperar o ID da organização pai
É a partir desse ID que recuperaremos todos os usuários que precisaremos para a listagem.
4) Recuperar os usuários pertencentes a Organização:
Recuperamos os usuários e já testamos se eles fazem aniversário no mês atual ou no próximo. Armazenamos em duas listas, uma com os aniversariantes do mês atual e outra com os aniversariantes do mês seguinte.
5) Ordenação da lista de usuários por dia do mês
6) Realizamos a listagem:
De ambos os meses, intercalando cores escuras e claras entre as linhas, o que facilita a leitura.
Trechos interessantes do Código:
Recuperar o userID pela classe renderRequest:
String remoteUserId = renderRequest.getRemoteUser();
User userId = UserServiceUtil.getUserById(Long.parseLong(remoteUserId));
Recuperar a lista de organizações a partir do id do usuário
organizations = OrganizationLocalServiceUtil.getUserOrganizations(userId.getUserId());
Recuperar a organização pai das organizações que o usuário participa:
for (int> i = 0; i < organizations.size(); i++) {
if (organizations != nul && organizations.size() != 0) {
Organization organization = (Organization) organizations.get(i);
if (organization.isRoot()){
orgID = organization.getOrganizationId()
}
}
}
Ordenar a lista de usuários pelo dia de aniversário
Collections.sort(mesAtual, new Comparator() {
public int compare(Object o1, Object o2) {
int ret = 0;
User d1 = (User) o1;
User d2 = (User) o2;
if(d1.getBirthday().getDate() < d2.getBirthday().getDate()) {
ret = -1;
}
else if (d1.getBirthday().getDate() > d2.getBirthday().getDate()) {
ret = 1;
}
else {
ret = d1.getFirstName().compareTo(d2.getFirstName());
}
return ret;
}
});
Recuperar um atributo personalizado do usuário:
str = (String[])mesSeguinte.get(i).getExpandoBridge().getAttribute("NomeAtributoPersonalizado");
É importante lembrar que por padrão esse atributo personalizado não fica habilitado para ser exibido.
Para alterar é necessário acessar a opção de permissões dos atributos personalizados presente na aba Usuários do Painel de Controle. Setar como visualização para os usuários.