Commit 0a82dd56 by rodrigo

Initial commit

parents
/target/
# Created by https://www.gitignore.io/api/maven
### Maven ###
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
.svn/
# End of https://www.gitignore.io/api/maven
# Created by https://www.gitignore.io/api/eclipse
### Eclipse ###
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.recommenders
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# PyDev specific (Python IDE for Eclipse)
*.pydevproject
# CDT-specific (C/C++ Development Tooling)
.cproject
# CDT- autotools
.autotools
# Java annotation processor (APT)
.factorypath
# PDT-specific (PHP Development Tools)
.buildpath
# sbteclipse plugin
.target
# Tern plugin
.tern-project
# TeXlipse plugin
.texlipse
# STS (Spring Tool Suite)
.springBeans
# Code Recommenders
.recommenders/
# Annotation Processing
.apt_generated/
# Scala IDE specific (Scala & Java development for Eclipse)
.cache-main
.scala_dependencies
.worksheet
### Eclipse Patch ###
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath
# Annotation Processing
.apt_generated
.sts4-cache/
# End of https://www.gitignore.io/api/eclipse
\ No newline at end of file
# portlet-gestao-mensagens (versão 6.2)
## Fase inicial
Essa fase do projeto, será migração do SVN para o GITHUB.
### Pre-requisitos
* JAVA 1.7
* Liferay 6.2
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>portlet-gestao-mensagens</artifactId>
<packaging>war</packaging>
<name>Portlet - Gestão de Mensagens</name>
<parent>
<groupId>root-pom</groupId>
<artifactId>root-pom</artifactId>
<version>arthur</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>com.liferay.maven.plugins</groupId>
<artifactId>liferay-maven-plugin</artifactId>
<version>${liferay.maven.plugin.version}</version>
<!-- Manter este build-css possibilita utilizar
SASS e Compass no CSS do portlet. -->
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>build-css</goal>
</goals>
</execution>
</executions>
<configuration>
<autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir>
<appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir>
<appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir>
<appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir>
<liferayVersion>${liferay.version}</liferayVersion>
<pluginType>portlet</pluginType>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
<dependencies>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>portal-service</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>util-bridges</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>util-taglib</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>util-java</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.portlet</groupId>
<artifactId>portlet-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.9</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
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.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.util.bridges.mvc.ActionCommand;
/**
* Classe controller utilizada com a finalidade em
* remover um anexo mensagem utilizando o metodo de exclusao logica.
* @author Aiello
*
*/
public class AnexoMensagemExcluirActionCommand implements ActionCommand{
private static final Log _log = LogFactoryUtil.getLog(TemplateExcluirActionCommand.class);
@Override
public boolean processCommand(PortletRequest portletRequest,
PortletResponse portletResponse) throws PortletException {
long anexoMensagemId = ParamUtil.getLong(portletRequest, "anexoMensagemId");
try {
AnexoMensagem anexoMensagem = AnexoMensagemLocalServiceUtil.getAnexoMensagem(anexoMensagemId);
anexoMensagem.setAtivo(false);
AnexoMensagemLocalServiceUtil.updateAnexoMensagem(anexoMensagem);
SessionMessages.add(portletRequest, "sucesso-excluir");
return true;
} catch (PortalException | SystemException e) {
SessionErrors.add(portletRequest, "erro-gravar");
_log.error("Ocorreu uma falha durante na exclusão do anexo.");
GestaoMensagensUtil.descartarRascunhos(portletRequest);
return false;
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ValidatorException;
import javax.servlet.ServletContext;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatarioClp;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil;
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.portlet.ConfigurationAction;
import com.liferay.portal.kernel.portlet.PortletConfigurationLayoutUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.Constants;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PrefsParamUtil;
import com.liferay.portal.kernel.util.PropertiesParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.UnicodeProperties;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Layout;
import com.liferay.portal.model.Portlet;
import com.liferay.portal.security.permission.ActionKeys;
import com.liferay.portal.service.PortletLocalServiceUtil;
import com.liferay.portal.service.permission.PortletPermissionUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.PortletConfigFactoryUtil;
import com.liferay.util.portlet.PortletProps;
/**
* Classe controller utilizada com a finalidade em
* remover um anexo mensagem utilizando o metodo de exclusao logica.
* @author Aiello
*
*/
public class ConfiguracaoAction implements ConfigurationAction{
private static final Log _log = LogFactoryUtil.getLog(TemplateExcluirActionCommand.class);
private static final Integer DESTINATARIOS =0;
public static final String PREFERENCES_PREFIX = "preferences--";
@Override
public void processAction(
PortletConfig portletConfig, ActionRequest actionRequest,
ActionResponse actionResponse)
throws Exception {
/*----------------*/
String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
if (!cmd.equals(Constants.UPDATE)) {
return;
}
ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
WebKeys.THEME_DISPLAY);
UnicodeProperties properties = PropertiesParamUtil.getProperties(
actionRequest, PREFERENCES_PREFIX);
String portletResource = ParamUtil.getString(
actionRequest, "portletResource");
Layout layout = PortletConfigurationLayoutUtil.getLayout(themeDisplay);
PortletPermissionUtil.check(
themeDisplay.getPermissionChecker(), themeDisplay.getScopeGroupId(),
layout, portletResource, ActionKeys.CONFIGURATION);
PortletPreferences portletPreferences = actionRequest.getPreferences();
for (Map.Entry<String, String> entry : properties.entrySet()) {
String name = entry.getKey();
String value = entry.getValue();
portletPreferences.setValue(name, value);
}
Map<String, String[]> portletPreferencesMap =
(Map<String, String[]>)actionRequest.getAttribute(
WebKeys.PORTLET_PREFERENCES_MAP);
if (portletPreferencesMap != null) {
for (Map.Entry<String, String[]> entry :
portletPreferencesMap.entrySet()) {
String name = entry.getKey();
String[] values = entry.getValue();
portletPreferences.setValues(name, values);
}
}
if (SessionErrors.isEmpty(actionRequest)) {
try {
portletPreferences.store();
}
catch (ValidatorException ve) {
SessionErrors.add(
actionRequest, ValidatorException.class.getName(), ve);
return;
}
SessionMessages.add(
actionRequest,
PortalUtil.getPortletId(actionRequest) +
SessionMessages.KEY_SUFFIX_REFRESH_PORTLET,
portletResource);
SessionMessages.add(
actionRequest,
PortalUtil.getPortletId(actionRequest) +
SessionMessages.KEY_SUFFIX_UPDATED_CONFIGURATION);
String redirect = PortalUtil.escapeRedirect(
ParamUtil.getString(actionRequest, "redirect"));
if (Validator.isNotNull(redirect)) {
actionResponse.sendRedirect(redirect);
}
}
/*----------------*/
}
@Override
public String render(PortletConfig portletConfig,
RenderRequest renderRequest, RenderResponse renderResponse)
throws Exception {
try {
ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
List<GrupoDestinatario> grupoDestinatario = GrupoDestinatarioLocalServiceUtil
.findByTipoListaAtivo(DESTINATARIOS, true);
List<GrupoDestinatario> listByGroupId = new ArrayList<>();
for(int i = 0; i < grupoDestinatario.size();i++){
if(grupoDestinatario.get(i).getGroupId() == groupId){
listByGroupId.add(grupoDestinatario.get(i));
}
}
renderRequest.setAttribute("grupo", listByGroupId);
//System.out.println(grupoDestinatario);
PortletPreferences preferences = renderRequest.getPreferences();
String grupoDestinatarioId = PrefsParamUtil.getString(preferences, renderRequest, "grupoDestinatarioId", PortletProps.get("configuracao.valor-padrao.IdgrupoMensagem"));
String emailRemetente = PrefsParamUtil.getString(preferences, renderRequest, "emailRemetente", PortletProps.get("configuracao.valor-padrao.IdgrupoMensagem"));
GrupoDestinatario GrupoSelecionado = GrupoDestinatarioLocalServiceUtil.getGrupoDestinatario( Long.parseLong(grupoDestinatarioId));
//System.out.println(grupoDestinatarioId);
renderRequest.setAttribute("grupoId", grupoDestinatarioId);
renderRequest.setAttribute("emailRemetente", emailRemetente);
renderRequest.setAttribute("nomeGrupo", GrupoSelecionado.getNome());
//System.out.println(GrupoSelecionado.getNome());
} catch (Exception e) {
// TODO: handle exception
System.out.println("=====>" + e.getMessage());
}
/*-----------------*/
PortletConfig selPortletConfig = getSelPortletConfig(renderRequest);
String configTemplate = selPortletConfig.getInitParameter(
"config-template");
if (Validator.isNotNull(configTemplate)) {
return configTemplate;
}
String configJSP = selPortletConfig.getInitParameter("config-template");
if (Validator.isNotNull(configJSP)) {
return configJSP;
}
/*-----------------*/
// pagina
return "/jsp/cadastro-usuario-config.jsp";
}
protected PortletConfig getSelPortletConfig(PortletRequest portletRequest)
throws SystemException {
ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
WebKeys.THEME_DISPLAY);
String portletResource = ParamUtil.getString(
portletRequest, "portletResource");
Portlet selPortlet = PortletLocalServiceUtil.getPortletById(
themeDisplay.getCompanyId(), portletResource);
ServletContext servletContext =
(ServletContext)portletRequest.getAttribute(WebKeys.CTX);
PortletConfig selPortletConfig = PortletConfigFactoryUtil.create(
selPortlet, servletContext);
return selPortletConfig;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.util.ArrayList;
import java.util.List;
import javax.portlet.PortletException;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletURL;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.EmailDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PrefsParamUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.PortletURLFactoryUtil;
import com.liferay.util.bridges.mvc.ActionCommand;
import com.liferay.util.portlet.PortletProps;
public class ExcluirEmailDestinatarioActionCommand implements ActionCommand{
private static final Log _log = LogFactoryUtil.getLog(ExcluirEmailDestinatarioActionCommand.class);
public String EMAIL_USUARIO_EXCLUIR = null;
@Override
public boolean processCommand(PortletRequest portletRequest, PortletResponse response) throws PortletException {
try {
if (!ParamUtil.getString(portletRequest, "email_usuario").isEmpty()) {
EMAIL_USUARIO_EXCLUIR = ParamUtil.getString(portletRequest,"email_usuario");
}else{
return false;
}
PortletPreferences preferences = portletRequest.getPreferences();
long grupoDestinatarioIdLong = Long.parseLong(PrefsParamUtil.getString(preferences, portletRequest, "grupoDestinatarioId", PortletProps.get("configuracao.valor-padrao.IdgrupoMensagem")));
List<EmailDestinatario> listaEmail = EmailDestinatarioLocalServiceUtil.findByGrupoDestinatarioId(grupoDestinatarioIdLong);
List<EmailDestinatario> listaEmailExcluir = new ArrayList<EmailDestinatario>();
for (EmailDestinatario email : listaEmail){
if(EMAIL_USUARIO_EXCLUIR.equals(email.getEmail())){
listaEmailExcluir.add(email);
}
}
if (!listaEmailExcluir.isEmpty()) {
for (EmailDestinatario email : listaEmailExcluir) {
EmailDestinatarioLocalServiceUtil.deleteEmailDestinatario(email);
}
}else{
_log.error("Problemas ao gravar !");
SessionErrors.add(portletRequest, "nao-cadastrado");
return false;
}
SessionMessages.add(portletRequest, "sucesso-excluir");
return true;
} catch (Exception ex) {
_log.error("Problemas ao gravar:", ex);
SessionErrors.add(portletRequest, "erro-gravar");
SessionErrors.add(portletRequest, "duplicado");
GestaoMensagensUtil.descartarRascunhos(portletRequest);
return false;
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.EmailDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.Constantes;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import com.liferay.counter.service.CounterLocalServiceUtil;
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.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.util.bridges.mvc.ActionCommand;
/**
* Classe Controller do fluxo de inclusao de um grupo de destinatario.
* @author caiello
*
*/
public class GrupoDestinatarioAlterarIncluirActionCommand implements ActionCommand {
private static final Log _log = LogFactoryUtil.getLog(GrupoDestinatarioAlterarIncluirActionCommand.class);
@Override
public boolean processCommand(PortletRequest portletRequest,
PortletResponse portletResponse) throws PortletException {
try {
if (!validarIntegridade(portletRequest)){
return false;
}
ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
long companyId = themeDisplay.getCompanyId();
long userId = themeDisplay.getUserId();
final GrupoDestinatario grupoDestinatario = loadGrupoDestinatario(userId , companyId , groupId , portletRequest);
final List<EmailDestinatario> listaEmails = loadEmailsDestinatario(grupoDestinatario.getGrupoDestinatarioId()
, portletRequest);
if (identificaOperacaoInclusao(portletRequest)){
//GrupoDestinatarioLocalServiceUtil.inserirGrupoDestinatario(grupoDestinatario, listaEmails);
GrupoDestinatarioLocalServiceUtil.updateGrupoDestinatario(grupoDestinatario);
for (EmailDestinatario email : listaEmails){
EmailDestinatarioLocalServiceUtil.updateEmailDestinatario(email);
}
SessionMessages.add(portletRequest, "destinatario.sucesso-gravar");
}else{
// GrupoDestinatarioLocalServiceUtil.atualizarGrupoDestinatario(grupoDestinatario, listaEmails);
EmailDestinatarioLocalServiceUtil.removeByGrupoDestinatarioId(grupoDestinatario.getGrupoDestinatarioId());
GrupoDestinatarioLocalServiceUtil.updateGrupoDestinatario(grupoDestinatario);
for (EmailDestinatario email : listaEmails){
EmailDestinatarioLocalServiceUtil.updateEmailDestinatario(email);
}
SessionMessages.add(portletRequest, "destinatario.sucesso-atualizar");
}
Thread.sleep(3000);
return true; }
catch (Exception ex) {
_log.error("Problemas ao gravar:", ex);
SessionErrors.add(portletRequest, "erro-gravar");;
GestaoMensagensUtil.descartarRascunhos(portletRequest);
return false;
}
}
private boolean identificaOperacaoInclusao(PortletRequest portletRequest){
return (ParamUtil.getString(portletRequest, "grupoDestinatarioId") == null ||
"".equals(ParamUtil.getString(portletRequest, "grupoDestinatarioId")));
}
/**
* Carrega a lista de emails dos destinarios
*/
private List<EmailDestinatario> loadEmailsDestinatario(final long grupoDestinatarioId , final PortletRequest req) throws SystemException {
List<EmailDestinatario> emails = new ArrayList<EmailDestinatario>();
String [] listaDestinatarios = getEmails(req);
if (listaDestinatarios != null){
for (String email : listaDestinatarios){
EmailDestinatario emailDestinatario = EmailDestinatarioLocalServiceUtil.
createEmailDestinatario(CounterLocalServiceUtil.increment());
emailDestinatario.setGrupoDestinatarioId(grupoDestinatarioId);
emailDestinatario.setEmail(email);
emails.add(emailDestinatario);
}
}
return emails;
}
private String [] getEmails(final PortletRequest req){
if (Validator.isNotNull(ParamUtil.getString(req, "emailDestinatariosPrimaryKeys"))){
return ParamUtil.getParameterValues(req, "emailDestinatariosPrimaryKeys");
}
return null;
}
/**
* Carrega o Grupo de Destinatario.
*/
private GrupoDestinatario loadGrupoDestinatario(final long userId ,
final long companyId,final long groupId ,final PortletRequest portletRequest) throws SystemException, PortalException{
GrupoDestinatario grupoDestinatario = null;
if (identificaOperacaoInclusao(portletRequest)){
grupoDestinatario =
GrupoDestinatarioLocalServiceUtil.createGrupoDestinatario(CounterLocalServiceUtil.increment());
} else {
long id = Long.valueOf(ParamUtil.getString(portletRequest, "grupoDestinatarioId"));
grupoDestinatario = GrupoDestinatarioLocalServiceUtil.getGrupoDestinatario(id);
}
grupoDestinatario.setNome(ParamUtil.getString(portletRequest, "nome"));
grupoDestinatario.setFinalidade(ParamUtil.getString(portletRequest, "finalidade"));
if (Validator.isNotNull(ParamUtil.getString(portletRequest, "userResponsaveisPrimaryKeys"))){
grupoDestinatario.setUserIdResponsaveis(GestaoMensagensUtil.parseArrayString(portletRequest, "userResponsaveisPrimaryKeys"));
}else {
grupoDestinatario.setUserIdResponsaveis("");
}
if ("0".equals(ParamUtil.getString(portletRequest, Constantes.TIPO_LISTA))){
grupoDestinatario.setTipoLista(0);
} else if ("1".equals(ParamUtil.getString(portletRequest, Constantes.TIPO_LISTA))){
grupoDestinatario.setTipoLista(1);
}
grupoDestinatario.setAtivo(true);
if (Constantes.OPCAO_SIM.equals(ParamUtil.getString(portletRequest, Constantes.RADIO_TEMPORARIA))){
grupoDestinatario.setListaTemporaria(true);
final Calendar c = Calendar.getInstance();
int dayParam = Integer.parseInt(ParamUtil.getString(portletRequest,"d1"));
int monthParam = Integer.parseInt(ParamUtil.getString(portletRequest, "m1"));
int yearParam = Integer.parseInt(ParamUtil.getString(portletRequest,"y1"));
c.set(yearParam, monthParam, dayParam);
grupoDestinatario.setDataFinalListaTemporaria(c.getTime());
} else {
grupoDestinatario.setListaTemporaria(false);
grupoDestinatario.setDataFinalListaTemporaria(null);
}
if (Constantes.OPCAO_SIM.equals(ParamUtil.getString(portletRequest, Constantes.RADIO_MODERADA))){
if (Validator.isNotNull(ParamUtil.getString(portletRequest, "userModeracaoPrimaryKeys"))){
grupoDestinatario.setUserIdListaModerada(GestaoMensagensUtil.parseArrayString(portletRequest, "userModeracaoPrimaryKeys"));
grupoDestinatario.setListaModerada(true);
}else{
grupoDestinatario.setListaModerada(false);
grupoDestinatario.setUserIdListaModerada("");
}
}else{
grupoDestinatario.setListaModerada(false);
grupoDestinatario.setUserIdListaModerada("");
}
if (Constantes.OPCAO_SIM.equals(ParamUtil.getString(portletRequest, Constantes.RADIO_EM_NOME))){
if (Validator.isNotNull(ParamUtil.getString(portletRequest, "userEmNomePrimaryKeys"))){
grupoDestinatario.setUserIdNomesLista(GestaoMensagensUtil.parseArrayString(portletRequest, "userEmNomePrimaryKeys"));
grupoDestinatario.setEnvioEmNomeLista(true);
} else {
grupoDestinatario.setEnvioEmNomeLista(false);
grupoDestinatario.setUserIdNomesLista("");
}
} else {
grupoDestinatario.setEnvioEmNomeLista(false);
grupoDestinatario.setUserIdNomesLista("");
}
grupoDestinatario.setUserId(userId);
grupoDestinatario.setCompanyId(companyId);
grupoDestinatario.setGroupId(groupId);
return grupoDestinatario;
}
/**
* Metodo privado responsavel em validar
* a integridade das informacoes referentes
* ao registro de um grupo de destinatarios.
*/
private boolean validarIntegridade(final PortletRequest request){
boolean integro = true;
if (Validator.isNull(ParamUtil.getString(request, "nome"))) {
SessionErrors.add(request, "conteudo-obrigatorio");
integro = false;
}
if (Validator.isNull(ParamUtil.getString(request, "finalidade"))) {
SessionErrors.add(request, "conteudo-obrigatorio");
integro = false;
}
if (Validator.isNull(ParamUtil.getString(request, "emailDestinatariosPrimaryKeys"))) {
SessionErrors.add(request, "conteudo-obrigatorio");
integro = false;
}
return integro;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.util.bridges.mvc.ActionCommand;
/**
* Classe Controller do fluxo de inclusao de um grupo de destinatario.
* @author caiello
*
*/
public class GrupoDestinatarioExcluirActionCommand implements ActionCommand{
private static final Log _log = LogFactoryUtil.getLog(GrupoDestinatarioExcluirActionCommand.class);
@Override
public boolean processCommand(PortletRequest portletRequest,
PortletResponse portletResponse) throws PortletException {
long grupoDestinatarioId = ParamUtil.getLong(portletRequest, "grupoDestinatarioId");
try {
//GrupoDestinatarioLocalServiceUtil.removerGrupoDestinatario(grupoDestinatarioId);
GrupoDestinatario grupoDestinatario = GrupoDestinatarioLocalServiceUtil.getGrupoDestinatario(grupoDestinatarioId);
grupoDestinatario.setAtivo(false);
GrupoDestinatarioLocalServiceUtil.updateGrupoDestinatario(grupoDestinatario);
SessionMessages.add(portletRequest, "destinatario.sucesso-excluir");
return true;
} catch (Exception ex) {
_log.error("Problemas ao gravar:", ex);
SessionErrors.add(portletRequest, "erro-gravar");
GestaoMensagensUtil.descartarRascunhos(portletRequest);
return false;
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.util.ArrayList;
import java.util.List;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.ProcessAction;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.EmailDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.action.GrupoDestinatarioAlterarIncluirActionCommand;
import com.liferay.counter.service.CounterLocalServiceUtil;
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.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.util.bridges.mvc.ActionCommand;
public class IncluirEmailAction implements ActionCommand {
private static final Log _log = LogFactoryUtil.getLog(GrupoDestinatarioAlterarIncluirActionCommand.class);
public IncluirEmailAction() {
}
@SuppressWarnings("unused")
private void ProcesssAction() {
// TODO Auto-generated method stub
System.out.println("teste 0 ");
}
@Override
public boolean processCommand(PortletRequest request, PortletResponse arg1)
throws PortletException {
System.out.println("teste 1 ");
GrupoDestinatario grupoDestinatario = (GrupoDestinatario) request.getAttribute("grupoDestinatario");
try {
final List<EmailDestinatario> listaEmails = loadEmailsDestinatario(grupoDestinatario.getGrupoDestinatarioId(), request);
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
/**
* Carrega a lista de emails dos destinarios
*/
private List<EmailDestinatario> loadEmailsDestinatario(final long grupoDestinatarioId , final PortletRequest req) throws SystemException {
List<EmailDestinatario> emails = new ArrayList<EmailDestinatario>();
String [] listaDestinatarios = getEmails(req);
if (listaDestinatarios != null){
for (String email : listaDestinatarios){
EmailDestinatario emailDestinatario = EmailDestinatarioLocalServiceUtil.
createEmailDestinatario(CounterLocalServiceUtil.increment());
emailDestinatario.setGrupoDestinatarioId(grupoDestinatarioId);
emailDestinatario.setEmail(email);
emails.add(emailDestinatario);
}
}
return emails;
}
private String [] getEmails(final PortletRequest req){
if (Validator.isNotNull(ParamUtil.getString(req, "emailDestinatariosPrimaryKeys"))){
return ParamUtil.getParameterValues(req, "emailDestinatariosPrimaryKeys");
}
return null;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.nio.channels.SeekableByteChannel;
import java.util.ArrayList;
import java.util.List;
import javax.mail.internet.InternetAddress;
import javax.portlet.PortletException;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletURL;
import javax.servlet.http.HttpServletRequest;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.EmailDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.Constantes;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GerarLink;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GerarListaDecisao;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.mail.service.MailServiceUtil;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.events.SessionAction;
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.mail.MailMessage;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PrefsParamUtil;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.SessionParamUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.model.Company;
import com.liferay.portal.model.Group;
import com.liferay.portal.service.CompanyLocalServiceUtil;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.PortletURLUtil;
import com.liferay.util.ContentUtil;
import com.liferay.util.bridges.mvc.ActionCommand;
import com.liferay.util.portlet.PortletProps;
import com.liferay.util.servlet.SessionParameters;
public class InserirEmailDestinatarioActionCommand implements ActionCommand{
private static final Log _log = LogFactoryUtil.getLog(InserirEmailDestinatarioActionCommand.class);
public String EMAIL_NOVO_USUARIO = null;
@Override
public boolean processCommand(PortletRequest portletRequest, PortletResponse response)throws PortletException {
try {
if (!ParamUtil.getString(portletRequest, "email_usuario").isEmpty()) {
EMAIL_NOVO_USUARIO = ParamUtil.getString(portletRequest,"email_usuario");
}else{
return false;
}
PortletPreferences preferences = portletRequest.getPreferences();
String emailRemetente = PrefsParamUtil.getString(preferences, portletRequest, "emailRemetente", PortletProps.get("configuracao.valor-padrao.IdgrupoMensagem"));
long grupoDestinatarioIdLong = Long.parseLong(PrefsParamUtil.getString(preferences, portletRequest, "grupoDestinatarioId", PortletProps.get("configuracao.valor-padrao.IdgrupoMensagem")));
List<EmailDestinatario> listaEmail = EmailDestinatarioLocalServiceUtil.findByGrupoDestinatarioId(grupoDestinatarioIdLong);
for (EmailDestinatario email : listaEmail){
if(EMAIL_NOVO_USUARIO.equals(email.getEmail())){
_log.error("Problemas ao gravar: Usuario tentou cadastrar e-mail já cadastrado");
SessionErrors.add(portletRequest, "duplicado");
return false;
}
}
final List<EmailDestinatario> listaEmails = loadEmailsDestinatario( grupoDestinatarioIdLong, portletRequest, EMAIL_NOVO_USUARIO);
if (!listaEmails.isEmpty()) {
for (EmailDestinatario email : listaEmails) {
EmailDestinatarioLocalServiceUtil.updateEmailDestinatario(email);
}
}else{
_log.error("Problemas ao gravar !");
SessionErrors.add(portletRequest, "Email já cadastrado !");
return false;
}
enviaEmail(emailRemetente,"",EMAIL_NOVO_USUARIO,portletRequest);
SessionMessages.add(portletRequest, "cadastro-sucesso");
return true;
} catch (Exception ex) {
_log.error("Problemas ao gravar:", ex);
SessionErrors.add(portletRequest, "erro-gravar");
GestaoMensagensUtil.descartarRascunhos(portletRequest);
return false;
}
}
private List<EmailDestinatario> loadEmailsDestinatario(final long grupoDestinatarioId , final PortletRequest req, String email) throws SystemException {
List<EmailDestinatario> emailNovoCadastro = new ArrayList<EmailDestinatario>();
EmailDestinatario emailDestinatario2 = EmailDestinatarioLocalServiceUtil.createEmailDestinatario(CounterLocalServiceUtil.increment());
emailDestinatario2.setGrupoDestinatarioId(grupoDestinatarioId);
emailDestinatario2.setEmail(email);
emailNovoCadastro.add(emailDestinatario2);
return emailNovoCadastro;
}
public static void enviaEmail(String emailRemetente, String emailGestor, String destinatario,PortletRequest portletRequest) throws PortalException, SystemException {
try {
//Company company = CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID));
//long groupId1 = company.getGroup().getGroupId();
//Group currentGroup = GroupLocalServiceUtil.getGroup(groupId);
ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
Group currentGroup = GroupLocalServiceUtil.getGroup(groupId);
String rodapeEndereco = null;
String rodapeTexto = null;
String url = null;
/*----------*/
/*---------*/
rodapeEndereco = currentGroup.getExpandoBridge().getAttribute("RODAPE_ENDERECO").toString();
rodapeTexto = currentGroup.getExpandoBridge().getAttribute("RODAPE_TEXTO").toString();
url = currentGroup.getExpandoBridge().getAttribute("HOST_NAME_ID").toString();
String assunto = "Newsletter - Consumidor Vencedor";
String body = ContentUtil.get("template/email/mail-cadastro.html", true);
body = StringUtil.replace(body, new String[] {"[$URL$]","[$RODAPE_ENDERECO$]","[$RODAPE_TEXTO$]"},new String[] {url,rodapeEndereco,rodapeTexto});
MailMessage mailMessage = new MailMessage();
// email de confirmacao para solicitante
mailMessage.setBody(body);
mailMessage.setSubject(assunto);
mailMessage.setHTMLFormat(true);
mailMessage.setFrom(new InternetAddress(emailRemetente));
mailMessage.setTo(new InternetAddress(destinatario));
MailServiceUtil.sendEmail(mailMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.util.Date;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
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.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.service.ServiceContextFactory;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.util.bridges.mvc.ActionCommand;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.EmailUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.AcaoWorkflowEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.WorkflowUtil;
/**
* Classe Controller do fluxo do workflow de mensagem.
* @author caiello
*
*/
public class MensagemWorkFlowActionCommand implements ActionCommand {
private static final Log _log = LogFactoryUtil.getLog(MensagemWorkFlowActionCommand.class);
@Override
public boolean processCommand(PortletRequest portletRequest,
PortletResponse portletResponse) throws PortletException {
String acao = ParamUtil.getString(portletRequest, "acao");
try {
if (AcaoWorkflowEnum.APROVAR.toString().equals(acao)) {
processarWorkflowMensagem(portletRequest, AcaoWorkflowEnum.APROVAR.toString());
SessionMessages.add(portletRequest, "mensagem.sucesso-aprovar");
} else if (AcaoWorkflowEnum.CANCELAR.toString().equals(acao)) {
processarWorkflowMensagem(portletRequest, AcaoWorkflowEnum.CANCELAR.toString());
SessionMessages.add(portletRequest, "mensagem.sucesso-cancelar");
} else if (AcaoWorkflowEnum.REPROVAR.toString().equals(acao)) {
processarWorkflowMensagem(portletRequest, AcaoWorkflowEnum.REPROVAR.toString());
SessionMessages.add(portletRequest, "mensagem.sucesso-reprovar");
}
Thread.sleep(3000);
return true;
}
catch (PortletException | InterruptedException ex) {
_log.error("Problemas ao gravar workflow da mensagem: ", ex);
SessionErrors.add(portletRequest, "mensagem.erro-workflow");
GestaoMensagensUtil.descartarRascunhos(portletRequest);
return true;
}
}
private void processarWorkflowMensagem(PortletRequest portletRequest, String acao)
throws PortletException {
try {
ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);
long mensagemId = ParamUtil.getLong(portletRequest, "mensagemId");
Mensagem mensagem = MensagemLocalServiceUtil.getMensagem(mensagemId);
if (AcaoWorkflowEnum.APROVAR.toString().equals(acao)){
mensagem.setPrioridade(ParamUtil.getInteger(portletRequest, "prioridadeId"));
mensagem.setStatusWorkflow(StatusWorkflowEnum.APROVADO.getStatus());
mensagem.setUserIdAprovador(themeDisplay.getUserId());
} else if (AcaoWorkflowEnum.REPROVAR.toString().equals(acao)) {
mensagem.setStatusWorkflow(StatusWorkflowEnum.PENDENTE_REVISAO.getStatus());
mensagem.setUserIdReprovador(themeDisplay.getUserId());
} else if (AcaoWorkflowEnum.CANCELAR.toString().equals(acao)) {
try {
mensagem.setAtivo(false);
mensagem.setUserIdCancel(themeDisplay.getUserId());
mensagem.setStatusWorkflow(StatusWorkflowEnum.CANCELADO.getStatus());
mensagem.setDataCancel(new Date());
MensagemLocalServiceUtil.cancelarMensagem(mensagemId);
} catch (SystemException e) {
GestaoMensagensUtil.descartarRascunhos(portletRequest);
throw new PortletException(e);
} catch (PortalException e) {
GestaoMensagensUtil.descartarRascunhos(portletRequest);
throw new PortletException(e);
}
}
mensagem.setComentarioWorkflow(ParamUtil.getString(portletRequest, "motivo"));
if (ParamUtil.getString(portletRequest, "conteudo") != null && !"".equals(ParamUtil.getString(portletRequest, "conteudo"))){
mensagem.setConteudo(EmailUtil.definirUrlAbsoluta(portletRequest, ParamUtil.getString(portletRequest, "conteudo")));
}
MensagemLocalServiceUtil.updateMensagem(mensagem);
WorkflowUtil.atualizarStatusWorkflow(mensagem,
AcaoWorkflowEnum.getAcao(acao),
mensagem.getComentarioWorkflow(),
themeDisplay.getUserId(),
ServiceContextFactory.getInstance(portletRequest));
}
catch (PortalException|SystemException ex) {
GestaoMensagensUtil.descartarRascunhos(portletRequest);
throw new PortletException(ex);
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.TemplateImpl;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.TemplateLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.EmailUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.ImagemUtil;
import com.liferay.counter.service.CounterLocalServiceUtil;
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.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
import com.liferay.util.bridges.mvc.ActionCommand;
public class TemplateAlterarIncluirActionCommand extends WizardTemplateActionCommand implements ActionCommand {
private static final Log _log = LogFactoryUtil.getLog(TemplateAlterarIncluirActionCommand.class);
private static final String NOME_PASTA_THUMBNAIL = "template-thumbnail";
@Override
public boolean processCommand(PortletRequest req,
PortletResponse res) throws PortletException {
UploadPortletRequest reqUpload = PortalUtil.getUploadPortletRequest(req);
Template template = null;
try {
ThemeDisplay themeDisplay = (ThemeDisplay) reqUpload.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
long companyId = themeDisplay.getCompanyId();
long userId = themeDisplay.getUserId();
long templateId = ParamUtil.getLong(reqUpload, "templateId");
if (templateId == 0) {
if (templateExiste(templateId, ParamUtil.getString(reqUpload, "nome"), groupId)){
Template modelo = new TemplateImpl();
modelo.setNome(ParamUtil.getString(reqUpload, "nome"));
modelo.setCabecalho(EmailUtil.definirUrlAbsoluta(req, ParamUtil.getString(reqUpload, "cabecalho")));
modelo.setRodape(EmailUtil.definirUrlAbsoluta(req, ParamUtil.getString(reqUpload, "rodape")));
modelo.setCorpo(EmailUtil.definirUrlAbsoluta(req, ParamUtil.getString(reqUpload, "corpo")));
modelo.setEstilo(ParamUtil.getInteger(reqUpload, "estilo"));
//especifico para o formulario do template
reqUpload.setAttribute("template", modelo);
SessionErrors.add(req,"template.nome.existe");
SessionMessages.add(req, PortalUtil.getPortletId(req) + SessionMessages.KEY_SUFFIX_HIDE_DEFAULT_ERROR_MESSAGE);
return false;
}
template = TemplateLocalServiceUtil.createTemplate(CounterLocalServiceUtil.increment());
template.setGroupId(groupId);
template.setCompanyId(companyId);
template.setDataCriacao(new Date());
template.setAtivo(true);
}
else {
template = TemplateLocalServiceUtil.getTemplate(templateId);
template.setDataAtualizacao(new Date());
}
template.setUserId(userId);
preencherObjetoRequest(reqUpload, req, template);
if (templateExiste(templateId, ParamUtil.getString(reqUpload, "nome"), groupId)){
//especifico para o formulario do template
reqUpload.setAttribute("template", template);
SessionErrors.add(req,"template.nome.existe");
SessionMessages.add(req, PortalUtil.getPortletId(req) + SessionMessages.KEY_SUFFIX_HIDE_DEFAULT_ERROR_MESSAGE);
return false;
}
template = TemplateLocalServiceUtil.updateTemplate(template);
//especifico para o formulario do template
reqUpload.setAttribute("template", template);
if (ParamUtil.getBoolean(reqUpload, "wizard")) {
//incluir na session para o wizard de nova mensagem.
//reqUpload.getPortletSession().setAttribute("template", template);
req.setAttribute("templateId", template.getTemplateId());
super.processCommand(req, res);
}
SessionMessages.add(req, "template-sucesso-gravar");
//define a URL de redirect no atributo da requisicao, pois com o formulario com enctype para upload,
//afeta a recuperacao do parametro atraves do PortletRequest. Este atributo sera utilizado pelo sendRedirect do MVCPortlet.
req.setAttribute(WebKeys.REDIRECT, ParamUtil.getString(reqUpload, "redirect"));
return true;
}
catch (Exception ex) {
_log.error("Problemas ao gravar:", ex);
SessionErrors.add(req, "erro-gravar");
req.setAttribute("template", template);
GestaoMensagensUtil.descartarRascunhos(req);
return false;
}
}
private boolean templateExiste(final long templateId , final String nome, final long groupId){
Template template = TemplateLocalServiceUtil.recuperaTemplatePorNome(nome,groupId);
boolean existe = false;
if (template != null){
if (template.getTemplateId() != templateId){
existe = true;
}
}
return existe;
}
private void preencherObjetoRequest(UploadPortletRequest upReq, PortletRequest req, Template template)
throws IOException, PortalException, SystemException {
template.setNome(ParamUtil.getString(upReq, "nome"));
template.setCabecalho(EmailUtil.definirUrlAbsoluta(req, ParamUtil.getString(upReq, "cabecalho")));
template.setRodape(EmailUtil.definirUrlAbsoluta(req, ParamUtil.getString(upReq, "rodape")));
template.setCorpo(EmailUtil.definirUrlAbsoluta(req, ParamUtil.getString(upReq, "corpo")));
template.setEstilo(ParamUtil.getInteger(upReq, "estilo"));
//tratar a imagem de thumbnail
ImagemUtil imgUtil = new ImagemUtil(template.getGroupId(), template.getUserId(), req, upReq);
FileEntry fileEntry = getArquivoUpload(upReq, req, template, imgUtil);
//atualizar apenas se fez upload (obteve arquivo)
if (fileEntry != null) {
template.setThumbnailFileEntryId(fileEntry.getFileEntryId());
template.setThumbnailURL(imgUtil.criarUrlImagem(fileEntry));
}
}
/**
* Carrega o arquivo do upload e grava no Documentos e Midias, de acordo com a pasta especifica do portlet e thumbnails.
* @param upReq
* @param req
* @param template
* @param imgUtil
* @return
* @throws IOException
* @throws PortalException
* @throws SystemException
*/
private FileEntry getArquivoUpload(UploadPortletRequest upReq, PortletRequest req, Template template, ImagemUtil imgUtil)
throws IOException, PortalException, SystemException {
File file = upReq.getFile("imgThumb");
if (file != null && file.length() > 0) {
//verifica e retorna a pasta de imagens thubmnail de templates do portlet
Folder folderThumb = imgUtil.verificarPastaImagens(imgUtil.getIdPastaPrincipal(),
NOME_PASTA_THUMBNAIL,
StringPool.BLANK);
String fileName = String.valueOf(template.getTemplateId());
FileEntry entry;
try {
//verifica se ja existe imagem com o nome especificado, removendo-o caso exista.
//para manter sempre a ultima versao
entry = imgUtil.getArquivoPorNome(template.getGroupId(), folderThumb.getFolderId(), fileName);
imgUtil.removerImagem(entry.getFileEntryId());
}
catch (NoSuchFileEntryException ex){}
entry = imgUtil.criarImagem(folderThumb.getFolderId(),
fileName,
template.getNome(),
file,
"imgThumb",
ImagemUtil.IMAGEM_ALTURA,
ImagemUtil.IMAGEM_LARGURA);
return entry;
}
return null;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.util.Date;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.TemplateLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
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.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.util.bridges.mvc.ActionCommand;
/**
* Classe controller utilizada com a finalidade em
* remover um template utilizando o metodo de exclusao logica.
* @author Aiello
*
*/
public class TemplateExcluirActionCommand implements ActionCommand {
private static final Log _log = LogFactoryUtil.getLog(TemplateExcluirActionCommand.class);
@Override
public boolean processCommand(PortletRequest portletRequest,
PortletResponse portletResponse) throws PortletException {
long templateId = ParamUtil.getLong(portletRequest, "templateId");
//boolean resultado = TemplateLocalServiceUtil.removerTemplate(templateId);
Template template = null;
final String dCode = String.valueOf(new Date().getTime());
try {
template = TemplateLocalServiceUtil.getTemplate(templateId);
template.setNome(template.getNome().concat("removed-").concat(dCode));
template.setAtivo(false);
TemplateLocalServiceUtil.updateTemplate(template);
Thread.sleep(3000);
SessionMessages.add(portletRequest, "sucesso-excluir");
return true;
} catch (PortalException | SystemException | InterruptedException e) {
SessionErrors.add(portletRequest, "erro-gravar");
_log.error("Ocorreu uma falha durante na exclusão do template.");
GestaoMensagensUtil.descartarRascunhos(portletRequest);
return false;
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletSession;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
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.upload.UploadPortletRequest;
import com.liferay.util.bridges.mvc.ActionCommand;
/**
* Action padr&atilde;o para os Wizard (Passo a passo) da cria&ccedil;&atilde;o da mensagem.
* @author Henrique
*
*/
public abstract class WizardBaseActionCommand implements ActionCommand {
private static final Log _log = LogFactoryUtil.getLog(WizardBaseActionCommand.class);
/**
* Executar comando comum para todas as Actions relacionadas ao Wizard.
*/
public boolean processCommand(PortletRequest req, PortletResponse res)
throws PortletException {
/*passoAtual = ParamUtil.getInteger(req, "passoAtual");
passoAnterior = ParamUtil.getInteger(req, "passoAnterior");
utilizarWizard = ParamUtil.getBoolean(req, "wizard");*/
return false;
}
/**
* Tenta recuperar a mensagem de rascunho, caso nao exista, tenta recuperar a mensagem da sessao.
*/
protected Mensagem getMensagem(PortletRequest req) {
try {
return MensagemLocalServiceUtil.getMensagem(req);
}
catch (PortalException|SystemException ex) {
_log.error("Problemas ao recuperar mensagem:", ex);
GestaoMensagensUtil.descartarRascunhos(req);
return null;
}
}
/**
* Tenta recuperar a mensagem de rascunho, caso nao exista, tenta recuperar a mensagem da sessao.
*/
protected Mensagem getMensagem(PortletRequest req, UploadPortletRequest uploadReq) {
try {
return MensagemLocalServiceUtil.getMensagem(uploadReq , req);
}
catch (PortalException|SystemException ex) {
_log.error("Problemas ao recuperar mensagem:", ex);
GestaoMensagensUtil.descartarRascunhos(req);
return null;
}
}
/**
* Grava a mensagem no banco de dados, definindo se &eacute; rascunho ou n&atilde;o, e em seguida define a refer&ecirc;ncia na sess&atilde;o.
* @param req
* @param mensagem
* @return {@link Mensagem}
* @throws SystemException
* @throws PortalException
*/
protected Mensagem gravarMensagem(PortletRequest req, Mensagem mensagem)
throws SystemException, PortalException {
PortletSession session = req.getPortletSession();
mensagem.setRascunho(MensagemLocalServiceUtil.isRascunho(req));
mensagem = MensagemLocalServiceUtil.updateMensagem(mensagem);
session.setAttribute("mensagem", mensagem);
return mensagem;
}
protected void removerMensagemSession(PortletRequest req) {
req.getPortletSession().removeAttribute("mensagem");
req.getPortletSession().removeAttribute("edicao");
req.getPortletSession().removeAttribute("rascunhoRecuperado");
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Map;
import java.util.TreeMap;
import javax.mail.internet.AddressException;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import com.liferay.counter.service.CounterLocalServiceUtil;
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.servlet.SessionErrors;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.service.ServiceContextFactory;
import com.liferay.util.portlet.PortletProps;
import br.mp.mprj.portal.portlet.gestaomensagens.email.EnvioEmailMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.email.EnvioEmailWorkflow;
import br.mp.mprj.portal.portlet.gestaomensagens.enums.TipoAgendamentoEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.enums.TipoEnvioEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Agendamento;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AgendamentoLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.AcaoWorkflowEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.WorkflowUtil;
/**
* Action específica para tratar o agendamento da mensagem.
* @author Henrique
*
*/
public class WizardMensagemAgendamentoActionCommand extends
WizardBaseActionCommand {
private Log _log = LogFactoryUtil.getLog(WizardMensagemAgendamentoActionCommand.class);
private final String HTML_LITERAL_AGENDAMENTO_IMEDIATO = "<strong>A mensagem foi configurada para ser enviada imediatamente.</strong>";
private final String HTML_LITERAL_AGENDAMENTO_AGENDADO = "<strong>A mensagem foi configurada para ser enviada nas seguintes datas e horários:</strong><br/>";
@Override
public boolean processCommand(PortletRequest req, PortletResponse res)
throws PortletException {
super.processCommand(req, res);
try {
Mensagem mensagem = getMensagem(req);
preencherDadosFormulario(req, mensagem);
processarAgendamento(req, mensagem);
mensagem.setGravarAgendamento(true);
gravarMensagem(req, mensagem);
//Se a mensagem estiver configurada como pre-aprovada
if (mensagem.getStatusWorkflow() == StatusWorkflowEnum.APROVADO.getStatus()){
mensagem.setRascunho(false);
mensagem.setGravarAgendamento(false);
MensagemLocalServiceUtil.updateMensagem(mensagem);
if (mensagem.getClonagemPai() > 0){
MensagemLocalServiceUtil.cancelarMensagem(mensagem.getClonagemPai());
}
removerMensagemSession(req);
SessionMessages.add(req, "mensagem-gravada-aprovada-workflow");
return true;
} else if (ParamUtil.getBoolean(req, "gravarWorkflow") && !ParamUtil.getBoolean(req, "edicao")) {
ServiceContext serviceContext = ServiceContextFactory.getInstance(Mensagem.class.getName(), req);
if (mensagem.getStatusWorkflow() == StatusWorkflowEnum.PENDENTE_REVISAO.getStatus()){
WorkflowUtil.atualizarStatusWorkflow(mensagem, AcaoWorkflowEnum.REVISAR,
GetterUtil.getString(PortletProps.get("workflow.texto-padrao.revisao")), serviceContext.getUserId(),
serviceContext);
} else {
WorkflowUtil.inicializarWorkflowMensagem(mensagem, serviceContext);
}
mensagem.setRascunho(false);
mensagem.setGravarAgendamento(false);
mensagem.setStatusWorkflow(WorkflowConstants.STATUS_DRAFT);
if (mensagem.getClonagemPai() > 0){
MensagemLocalServiceUtil.cancelarMensagem(mensagem.getClonagemPai());
}
MensagemLocalServiceUtil.updateMensagem(mensagem);
EnvioEmailMensagem envioEmail = new EnvioEmailWorkflow(mensagem);
envioEmail.enviarEmail(0);
removerMensagemSession(req);
} else if (ParamUtil.getBoolean(req, "edicao")){
mensagem.setRascunho(false);
MensagemLocalServiceUtil.updateMensagem(mensagem);
removerMensagemSession(req);
}
SessionMessages.add(req, "mensagem-gravada-aguardar-workflow");
}
catch (PortalException|SystemException|AddressException|UnsupportedEncodingException ex) {
_log.error("Problemas ao processar agendamento:", ex);
SessionErrors.add(req, "erro-wizard-agendamento-mensagem");
GestaoMensagensUtil.descartarRascunhos(req);
return false;
}
return true;
}
private void preencherDadosFormulario(PortletRequest req, Mensagem mensagem) {
mensagem.setTipoEnvio(ParamUtil.getInteger(req, "tipoEnvio"));
}
private void processarAgendamento(PortletRequest req, Mensagem mensagem)
throws PortalException, SystemException {
if (mensagem.getTipoEnvio() == TipoEnvioEnum.IMEDIATO.ordinal()){
mensagem.setLiteralAgendamento(HTML_LITERAL_AGENDAMENTO_IMEDIATO);
return;
}
String literalAgendamento = "";
//transforma a string das datas selecionadas concatenada1s por virgula em array,
//para agilizar o processamento posterior
long[] datasSel = GetterUtil.getLongValues(ParamUtil.getString(req, "datasCalendario").split(","));
Date dataAtualizacao = new Date();
Map<Long, Map<String, Agendamento>> datasHorarios = mensagem.getDatasCalendario();
for (long unixDate : datasSel) {
//verifica se o objeto ja possui horarios para a data selecionada.
Map<String, Agendamento> horarios = datasHorarios.get(unixDate);
//inicializar caso necessário
if (horarios == null) {
horarios = new TreeMap<>();
datasHorarios.put(unixDate, horarios);
}
//preencher o Map com os horarios definidos para cada data na pagina
String[] horariosParam = ParamUtil.getParameterValues(req, "horario_" + unixDate);
for (String hora : horariosParam) {
if (Validator.isNull(hora)) {
continue;
}
//verificar se já existe o horário no Map da data
Agendamento agendamento = horarios.get(hora);
//criar, caso necessario
if (agendamento == null) {
agendamento = criarAgendamento(mensagem, TipoAgendamentoEnum.CALENDARIO);
mensagem.getAgendamentos().add(agendamento);
horarios.put(hora, agendamento);
}
//definir valores
String[] partesHora = hora.split(":");
Date date = new Date(unixDate);
//prepara um calendar com a data e horario
Calendar cal = GregorianCalendar.getInstance();
cal.setTimeInMillis(date.getTime());
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(partesHora[0]));
cal.set(Calendar.MINUTE, Integer.parseInt(partesHora[1]));
agendamento.setDataCalendario(date);
agendamento.setDataInicio(cal.getTime());
literalAgendamento += new SimpleDateFormat("dd/MM/yyyy").format(date) + " - " +
new SimpleDateFormat("HH:mm:ss").format(cal.getTime()) + "<br/>";
agendamento.setDataAtualizacao(dataAtualizacao);
agendamento.setNaoExcluir(true);
}
}
mensagem.setLiteralAgendamento(HTML_LITERAL_AGENDAMENTO_AGENDADO + literalAgendamento);
}
/**
* Inicializa uma instancia de {@link Agendamento}.
* @param mensagem
* @return
* @throws PortalException
* @throws SystemException
*/
private Agendamento criarAgendamento(Mensagem mensagem, TipoAgendamentoEnum tipo)
throws PortalException, SystemException {
Agendamento agendamento = AgendamentoLocalServiceUtil.createAgendamento(CounterLocalServiceUtil.increment());
agendamento.setCompanyId(mensagem.getCompanyId());
agendamento.setGroupId(mensagem.getGroupId());
agendamento.setMensagemId(mensagem.getMensagemId());
agendamento.setTipoAgendamento(tipo.ordinal());
return agendamento;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.DocumentFileUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.EmailUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.upload.FileItem;
import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.kernel.util.MimeTypesUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.documentlibrary.NoSuchFileEntryException;
import com.liferay.portlet.documentlibrary.model.DLFileEntry;
import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
/**
* ActionCommand representando o segundo passo do wizard: Preencher dados da
* Mensagem.
*
* @author HenriqueSimoes
*
*/
public class WizardMensagemDadosActionCommand extends WizardBaseActionCommand {
private static final String NOME_PASTA_ANEXOS = "anexos-mensagens";
@Override
public boolean processCommand(PortletRequest req, PortletResponse res)
throws PortletException {
super.processCommand(req, res);
UploadPortletRequest reqUpload = PortalUtil
.getUploadPortletRequest(req);
Mensagem mensagem = getMensagem(req, reqUpload);
req.setAttribute(WebKeys.REDIRECT,
ParamUtil.getString(reqUpload, "redirect"));
try {
preencherMensagemRequest(reqUpload, mensagem);
gravarMensagem(req, mensagem);
List<AnexoMensagem> anexos = loadFile(req, reqUpload,
mensagem.getMensagemId());
if (anexos != null) {
AnexoMensagemLocalServiceUtil.atualizaAnexos(anexos);
}
return true;
} catch (PortalException | SystemException | IOException ex) {
SessionErrors.add(req, "erro-wizard-dados-mensagem");
GestaoMensagensUtil.descartarRascunhos(req);
return false;
}
}
private void preencherMensagemRequest(UploadPortletRequest uploadReq,
Mensagem mensagem) {
mensagem.setAssunto(ParamUtil.getString(uploadReq, "assunto"));
mensagem.setConteudo(EmailUtil.definirUrlAbsoluta(uploadReq,
ParamUtil.getString(uploadReq, "conteudo")));
mensagem.setTemplateId(ParamUtil.getLong(uploadReq, "templateId"));
mensagem.setContaSaidaId(ParamUtil.getLong(uploadReq, "contaSaidaId"));
mensagem.setGrupoDestinatarioIds(GestaoMensagensUtil.parseArrayString(
uploadReq, "grupoDestinatariosSearchContainerPrimaryKeys"));
mensagem.setNomeSolicitante(ParamUtil.getString(uploadReq,
"nomeSolicitante"));
mensagem.setPrioridade(ParamUtil.getInteger(uploadReq, "prioridadeId"));
boolean preAprovado = ParamUtil.getBoolean(uploadReq, "checkAprovacao");
if (preAprovado) {
mensagem.setStatusWorkflow(StatusWorkflowEnum.APROVADO.getStatus());
}
}
/**
* Carrega uma lista de anexos enviados para a mensagem.
*/
private List<AnexoMensagem> loadFile(final PortletRequest portletRequest,
final UploadPortletRequest reqUpload, long mensagemId)
throws SystemException, PortalException, IOException {
if (ParamUtil.getInteger(reqUpload, "temAnexos") == 1) {
final Map<String, FileItem[]> files = reqUpload
.getMultipartParameterMap();
final List<AnexoMensagem> anexos = new ArrayList<AnexoMensagem>();
for (Entry<String, FileItem[]> current : files.entrySet()) {
FileItem item[] = current.getValue();
for (FileItem fileItem : item) {
AnexoMensagem anexoMensagem = AnexoMensagemLocalServiceUtil
.criarAnexo(portletRequest);
// Associando o anexo a mensagem corrente.
anexoMensagem.setMensagemId(mensagemId);
File file = fileItem.getStoreLocation();
DocumentFileUtil documentFileUtil = new DocumentFileUtil(
anexoMensagem.getGroupId(),
anexoMensagem.getUserId(), portletRequest);
FileEntry fileEntry = getFileUpload(file,
fileItem.getFileName(), anexoMensagem,
documentFileUtil);
anexoMensagem.setAnexoFileEntryId(fileEntry
.getFileEntryId());
anexoMensagem.setAnexoUrl(documentFileUtil
.criarUrlArquivo(fileEntry));
anexoMensagem.setVersao(fileEntry.getVersion());
anexoMensagem.setFileName(fileItem.getFileName());
anexoMensagem.setContentType(fileItem.getContentType());
anexoMensagem.setAtivo(true);
anexos.add(anexoMensagem);
}
}
return anexos;
}
return null;
}
private FileEntry getFileUpload(File file, String nomeArquivo,
AnexoMensagem anexoMensagem, DocumentFileUtil documentFileUtil)
throws IOException, PortalException, SystemException {
if (file != null) {
Folder folder = documentFileUtil.verificarPastaArquivos(
documentFileUtil.getIdPastaPrincipal(), NOME_PASTA_ANEXOS,
StringPool.BLANK);
String fileName = nomeArquivo + "-"
+ String.valueOf(anexoMensagem.getMensagemId());
anexoMensagem.setFileName(fileName);
try {
FileEntry entry = documentFileUtil.getArquivoPorNome(
anexoMensagem.getGroupId(), folder.getFolderId(),
fileName);
if (entry == null) {
entry = documentFileUtil.criarArquivo(folder.getFolderId(),
fileName, file,
MimeTypesUtil.getContentType(fileName));
} else {
entry = documentFileUtil.atualizarArquivo(
anexoMensagem.getUserId(), entry.getFileEntryId(),
fileName, file,
MimeTypesUtil.getContentType(fileName));
}
DLFileEntry dlEntry = DLFileEntryLocalServiceUtil
.getDLFileEntry(entry.getFileEntryId());
dlEntry = DLFileEntryLocalServiceUtil
.updateDLFileEntry(dlEntry);
return entry;
} catch (NoSuchFileEntryException ex) {
return null;
}
}
return null;
}
/**
* Metodo responsavel por remover a anexos associado a um Mensagem.
*
* @param anexos
* -
* @param documentFileUtil
* @throws SystemException
* @throws PortalException
*/
public void removeFile(List<AnexoMensagem> anexos,
DocumentFileUtil documentFileUtil) throws SystemException,
PortalException {
for (AnexoMensagem anexo : anexos) {
documentFileUtil.removerArquivo(anexo.getAnexoFileEntryId());
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletSession;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;
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.ParamUtil;
/**
* ActionCommand específico para descartar rascunho.
* @author Henrique
*
*/
public class WizardMensagemDescartarActionCommand
extends WizardBaseActionCommand {
private static final Log _log = LogFactoryUtil.getLog(WizardMensagemDescartarActionCommand.class);
@Override
public boolean processCommand(PortletRequest req, PortletResponse res)
throws PortletException {
super.processCommand(req, res);
long mensagemId = ParamUtil.getLong(req, "mensagemId");
Mensagem mensagem = null;
try {
mensagem = MensagemLocalServiceUtil.getMensagem(mensagemId);
} catch (PortalException | SystemException e) {
_log.error("Ocorreu um erro ao tentar recuperar a mensagem : " + e.getMessage());
GestaoMensagensUtil.descartarRascunhos(req);
}
try {
if (mensagem.getStatusWorkflow() != StatusWorkflowEnum.PENDENTE_REVISAO.getStatus() && !ParamUtil.getBoolean(req, "edicao")){
MensagemLocalServiceUtil.deleteMensagem(mensagemId);
}else {
mensagem.setRascunho(false);
MensagemLocalServiceUtil.updateMensagem(mensagem);
}
PortletSession session = req.getPortletSession();
session.removeAttribute("mensagem");
session.removeAttribute("rascunhoRecuperado");
session.removeAttribute("edicao");
return true;
}
catch (PortalException|SystemException ex) {
_log.error("Problemas ao descartar rascunho:", ex);
GestaoMensagensUtil.descartarRascunhos(req);
return false;
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.action;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.PortletSession;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.TemplateLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
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.servlet.SessionErrors;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ParamUtil;
/**
* Wizard representando o primeiro passo: Template
* @author Henrique Simoes
*
*/
public class WizardTemplateActionCommand extends WizardBaseActionCommand {
private static final Log _log = LogFactoryUtil.getLog(WizardTemplateActionCommand.class);
@Override
public boolean processCommand(PortletRequest req, PortletResponse res)
throws PortletException {
super.processCommand(req, res);
Template template = null;
Mensagem mensagem = getMensagem(req);
/* Mensagem mensagem = null;
try {
mensagem = MensagemLocalServiceUtil.clonaMensagem(67802, req);
} catch (PortalException | SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
if (mensagem != null && mensagem.getTemplate() != null){
template = mensagem.getTemplate();
}
//tenta obter o id do parametro, caso não consiga, tenta do atributo da requisicao
long templateId = ParamUtil.getLong(req, "templateId", GetterUtil.getLong(req.getAttribute("templateId")));
if (templateId >= 0) {
if ((template != null && template.getTemplateId() != templateId)
|| template == null) {
try {
template = TemplateLocalServiceUtil.getTemplate(templateId);
//atualizar dados da mensagem
mensagem.setTemplateId(templateId);
mensagem.setTemplate(template);
gravarMensagem(req, mensagem);
}
catch (PortalException|SystemException ex) {
_log.error("Problemas ao gravar wizard 'Template': " + templateId, ex);
SessionErrors.add(req, "erro-template-nao-encontrado");
GestaoMensagensUtil.descartarRascunhos(req);
}
} else if (template != null){
PortletSession session = req.getPortletSession();
session.setAttribute("mensagem", mensagem);
mensagem.setRascunho(true);
try {
MensagemLocalServiceUtil.updateMensagem(mensagem);
} catch (SystemException e) {
GestaoMensagensUtil.descartarRascunhos(req);
throw new PortletException(e);
}
}
}
return true;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.asset;
import java.util.Locale;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portlet.asset.model.BaseAssetRenderer;
public class MensagemAssetRenderer extends BaseAssetRenderer {
private Mensagem mensagem;
public MensagemAssetRenderer(Mensagem mensagem) {
this.mensagem = mensagem;
}
@Override
public String getClassName() {
return Mensagem.class.getName();
}
@Override
public long getClassPK() {
return mensagem.getMensagemId();
}
@Override
public long getGroupId() {
return mensagem.getGroupId();
}
@Override
public String getSummary(Locale locale) {
return mensagem.getConteudo();
}
@Override
public String getTitle(Locale locale) {
return mensagem.getAssunto();
}
@Override
public long getUserId() {
return mensagem.getUserIdCriador();
}
@Override
public String getUserName() {
String userName = null;
try {
userName = UserLocalServiceUtil.getUser(mensagem.getUserIdCriador())
.getFullName();
} catch (PortalException e) {
e.printStackTrace();
} catch (SystemException e) {
e.printStackTrace();
return userName;
}
return userName;
}
@Override
public String getUuid() {
return mensagem.getUuid();
}
@Override
public String render(RenderRequest renderRequest,
RenderResponse renderResponse, String template) throws Exception {
if (template.equals(TEMPLATE_FULL_CONTENT)) {
renderRequest.setAttribute("mensagem", mensagem);
return "/admin/mensagem/mensagem.jsp";
} else {
return null;
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.asset;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portlet.asset.model.AssetRenderer;
import com.liferay.portlet.asset.model.BaseAssetRendererFactory;
public class MensagemAssetRendererFactory extends BaseAssetRendererFactory {
private static final String TYPE = "mensagem";
@Override
public AssetRenderer getAssetRenderer(long classPK, int type)
throws PortalException, SystemException {
return new MensagemAssetRenderer(MensagemLocalServiceUtil.getMensagem(classPK));
}
@Override
public String getClassName() {
return Mensagem.class.getName();
}
@Override
public String getType() {
return TYPE;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.email;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.EmailDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.GetterUtil;
/**
* Classe que tem como finalidade em enviar os emails agendados.
*/
public class EnvioEmailAgendado extends EnvioEmailMensagem{
public EnvioEmailAgendado(Mensagem mensagem) {
super(mensagem);
}
@Override
protected InternetAddress getRemetente() throws PortalException,
SystemException, AddressException, UnsupportedEncodingException {
final EmailDestinatario contaSaida = getContaSaida();
if (contaSaida == null) return null;
final InternetAddress address = new InternetAddress(contaSaida.getEmail());
final GrupoDestinatario grupoDestinatario = GrupoDestinatarioLocalServiceUtil.getGrupoDestinatario(contaSaida.getGrupoDestinatarioId());
if (grupoDestinatario != null && grupoDestinatario.getNome() != null && !"".equals(grupoDestinatario.getNome())) {
address.setPersonal(grupoDestinatario.getNome());
}
return address;
}
@Override
protected InternetAddress[] getDestinatarios() throws PortalException,
SystemException, AddressException {
final List<EmailDestinatario> emailsDestinatarios = getEmailsDestinatarios();
if (emailsDestinatarios == null || emailsDestinatarios.size() == 0) return null;
final InternetAddress[] enderecoEmailsDestinatarios = new InternetAddress[emailsDestinatarios.size()];
for (int i = 0 ; i < emailsDestinatarios.size(); i++){
enderecoEmailsDestinatarios[i] = new InternetAddress(emailsDestinatarios.get(i).getEmail());
}
return enderecoEmailsDestinatarios;
}
/**
* Metodo responsavel pelo retorno da conta remetente do Grupo de Envio.
* @return GrupoDestinatario - retorna uma conta de envio.
* @throws PortalException - Em caso de falha.
* @throws SystemException - Em caso de falha.
*/
private EmailDestinatario getContaSaida() throws PortalException, SystemException{
final List<EmailDestinatario> emails = EmailDestinatarioLocalServiceUtil.findByGrupoDestinatarioId(mensagem.getContaSaidaId());
if (emails == null || emails.size() == 0) return null;
return emails.get(0);
}
/**
* Metodo resposnavel pelo retorno dos emails de destino do Grupo de Envio.
* @return List<EmailDestinatario> - retorna uma lista com os emails de destino.
* @throws SystemException - Em caso de falha.
*/
private List<EmailDestinatario> getEmailsDestinatarios() throws SystemException{
final long[] grupoDestinatarioIds = GetterUtil.getLongValues(mensagem.getGrupoDestinatarioIds().split("\\s"));
final List<EmailDestinatario> destinatarios = new ArrayList<EmailDestinatario>();
List<EmailDestinatario> emails = null;
for (long id : grupoDestinatarioIds) {
emails = EmailDestinatarioLocalServiceUtil.findByGrupoDestinatarioId(id);
destinatarios.addAll( destinatarios.size() == 0 ? 0 : destinatarios.size() - 1 , emails);
}
return destinatarios;
}
@Override
protected List<AnexoMensagem> getAnexos(long mensagemId) throws SystemException{
return AnexoMensagemLocalServiceUtil.recuperaAnexosPorMensagem(mensagemId);
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.email;
import java.awt.geom.GeneralPath;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.portlet.PortletRequest;
import javax.mail.Address;
import br.mp.mprj.portal.portlet.gestaomensagens.enums.EstiloTemplateEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.TemplateLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.Constantes;
import br.mp.mprj.portal.portlet.gestaomensagens.util.EmailUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GerarLink;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GerarListaDecisao;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;
import com.liferay.mail.model.FileAttachment;
import com.liferay.mail.service.MailServiceUtil;
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.mail.MailMessage;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.model.Company;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.User;
import com.liferay.portal.security.permission.PermissionChecker;
import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
import com.liferay.portal.security.permission.PermissionThreadLocal;
import com.liferay.portal.service.CompanyLocalServiceUtil;
import com.liferay.portal.service.GroupLocalServiceUtil;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
import com.liferay.portlet.documentlibrary.util.DLUtil;
import com.liferay.util.ContentUtil;
/**
* Classe principal para envio de Email.
* Serve de base para outras funcionalidades.
* @author HenriqueSimoes
*
*/
public abstract class EnvioEmailMensagem {
private static final Log _log = LogFactoryUtil.getLog(EnvioEmailMensagem.class);
protected final Mensagem mensagem;
private Template template;
public EnvioEmailMensagem(Mensagem mensagem) {
this.mensagem = mensagem;
try {
//_log.error(">>>"+mensagem.getTemplateId()+"<<<");
if (mensagem.getTemplateId() > 0){
this.template = TemplateLocalServiceUtil.getTemplate(mensagem.getTemplateId());
_log.error(this.template.getTemplateId());
}
}
catch (Exception ex) {
_log.error("Problemas ao inicializar envio de Email", ex);
}
}
/**
* Metodo responsavel pelo envio de emais do sistema
* @param tipoEnvio - 0 (Outros Envios) , 1 (Email Teste) , 2 (Email Job)
*/
public void enviarEmail(int tipoEnvio)
throws PortalException, SystemException, AddressException, UnsupportedEncodingException {
// Company company = CompanyLocalServiceUtil.getCompanyByMx(PropsUtil.get(PropsKeys.COMPANY_DEFAULT_WEB_ID));//
// long groupId = company.getGroup().getGroupId();
// Group currentGroup = GroupLocalServiceUtil.getGroup(groupId);
setPermissionCheckerMensagem();
Group currentGroup = GroupLocalServiceUtil.getGroup(mensagem.getGroupId());
String rodapeEndereco = null;
String rodapeTexto = null;
String token = "";
String url_wso2 = "";
String url_comunicacao = "";
String url = "";
//instanciar o objeto de email
MailMessage mail = new MailMessage();
mail.setHTMLFormat(true);
mail.setFrom(getRemetente());
List<AnexoMensagem> anexos = getAnexos(mensagem.getMensagemId());
if (anexos != null && anexos.size() > 0){
for (AnexoMensagem anexo : anexos){
File file = DLFileEntryLocalServiceUtil.getFile( anexo.getUserId(), anexo.getAnexoFileEntryId(), anexo.getVersao(), false);
FileAttachment fileAttachment = new FileAttachment(file,
anexo.getFileName());
mail.getFileAttachments().add(fileAttachment);
}
}
String body = getHtmlCompleto();
rodapeEndereco = currentGroup.getExpandoBridge().getAttribute("RODAPE_ENDERECO").toString();
rodapeTexto = currentGroup.getExpandoBridge().getAttribute("RODAPE_TEXTO").toString();
url = currentGroup.getExpandoBridge().getAttribute("HOST_NAME_ID").toString();
token = currentGroup.getExpandoBridge().getAttribute("WSO2_TOKEN").toString();
url_wso2 = currentGroup.getExpandoBridge().getAttribute("WSO2_API_LISTAR_DECISOES").toString();
url_comunicacao = url.replace("cadastro/-/gestao/descadastrar", "home/-/acao/destaque-");
/*---------------*/
String address = "gppv.liferay@mprj.mp.br";
InternetAddress[] iAdressArray;
String templateComunicacao = Constantes.INDISPONIVEL;
if(body.contains("[$comunicacao$]")){
try {
templateComunicacao = GerarListaDecisao.Listar(token, url_wso2, url_comunicacao);
} catch (Exception e) {
templateComunicacao = Constantes.INDISPONIVEL;
}
//TODO alteração fluxo destinatário
body = StringUtil.replace(body, new String[] {"[$comunicacao$]"},new String[] {templateComunicacao});
//caso indisponível o e-mail será direcionado para gppv.liferay@mprj.mp.br
if(templateComunicacao.equals(Constantes.INDISPONIVEL)){
iAdressArray = InternetAddress.parse(address);
}else if(templateComunicacao.equals(Constantes.NULO)){ // caso NULO, nenhum a lista de destinatário será vazia
iAdressArray = InternetAddress.parse("");
}else{
iAdressArray = getDestinatarios();
}
}else{
iAdressArray = getDestinatarios();
}
/*-----------------*/
//mail.setBCC(getDestinatarios());
mail.setBCC(iAdressArray);
body = StringUtil.replace(body, new String[] {"[$URL$]","[$RODAPE_ENDERECO$]","[$RODAPE_TEXTO$]"},new String[] {url,rodapeEndereco,rodapeTexto});
mail.setSubject(getAssuntoEmail(tipoEnvio));
mail.setBody(body);
MailServiceUtil.sendEmail(mail);
}
protected User getUserCriador()
throws PortalException, SystemException {
return UserLocalServiceUtil.getUser(mensagem.getUserIdCriador());
}
protected abstract InternetAddress getRemetente()
throws PortalException, SystemException, AddressException, UnsupportedEncodingException;
protected abstract InternetAddress[] getDestinatarios()
throws PortalException, SystemException, AddressException, UnsupportedEncodingException;
protected abstract List<AnexoMensagem> getAnexos(long mensagemId) throws SystemException;
/**
* Retorna HTML de acordo com o estilo do template.
* @return String
*/
protected String getHtmlCompleto() {
StringBundler sbHTML = new StringBundler();
_log.error(this.template.getTemplateId());
if (this.template != null) {
_log.error(this.template.getTemplateId());
if (this.template.getEstilo() == EstiloTemplateEnum.CABECALHO_RODAPE.getEstiloId()) {
sbHTML.append(this.template.getCabecalho());
sbHTML.append(this.mensagem.getConteudo());
sbHTML.append(this.template.getRodape());
}
else {
sbHTML.append(template.getCorpo());
//sbHTML.append(this.mensagem.getConteudo());
//_log.error(this.template.getCorpo());
}
}
else {
sbHTML.append(this.mensagem.getConteudo());
}
return sbHTML.toString();
}
protected String getAssuntoEmail(int tipoEnvio ) {
StringBuilder assunto = new StringBuilder();
if (tipoEnvio != 2){
if (tipoEnvio == 1) {
assunto.append("TESTE - ");
} else {
if (mensagem.getStatusWorkflow() == StatusWorkflowEnum.PENDENTE_APROVACAO.getStatus()) {
assunto.append("PENDENTE DE APROVAÇÃO - ");
} else if (mensagem.getStatusWorkflow() == StatusWorkflowEnum.APROVADO.getStatus()) {
assunto.append("APROVADA - ");
} else if (mensagem.getStatusWorkflow() == StatusWorkflowEnum.REPROVADO.getStatus()) {
assunto.append("PENDENTE DE RETIFICAÇÃO - ");
}
assunto.append(mensagem.getCodigoMensagem() + " - ");
}
}
assunto.append(mensagem.getAssunto());
return assunto.toString();
}
/**
* Metodo responsavel por inicializar o Permission checker
* @param userId: userId do usuário criador da mensagem
*/
private void setPermissionCheckerMensagem(){
User userCriador;
try {
userCriador = UserLocalServiceUtil.getUser(mensagem.getUserIdCriador());
PermissionChecker permissionChecker;
permissionChecker = PermissionCheckerFactoryUtil.create(userCriador);
PermissionThreadLocal.setPermissionChecker(permissionChecker);
} catch (PortalException | SystemException e) {
_log.error("Ocorreu uma falha ao recuperar o usuario criador da mensagem: [ " + mensagem.getMensagemId()
+ " ] - userId [ " + mensagem.getUserIdCriador() + " ].", e);
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
_log.error("Ocorreu uma falha ao inicializar o permissionChecker durante o envio da mensagem: [ " + mensagem.getMensagemId()
+ " ]." , e);
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.email;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.model.User;
/**
* Envio de E-mnail de teste.
* @author HenriqueSimoes
*
*/
public class EnvioEmailTeste extends EnvioEmailMensagem {
private String emailTeste;
private String remetente;
private String destinatario;
public EnvioEmailTeste(Mensagem mensagem) {
super(mensagem);
}
@Override
protected InternetAddress[] getDestinatarios() throws PortalException,
SystemException, AddressException, UnsupportedEncodingException {
InternetAddress destinatario = new InternetAddress();
if (Validator.isNotNull(emailTeste)) {
destinatario.setAddress(emailTeste);
}
else {
User user = getUserCriador();
destinatario.setAddress(user.getEmailAddress());
}
destinatario.setPersonal("Destinatário");
return new InternetAddress[]{destinatario};
}
@Override
protected InternetAddress getRemetente() throws PortalException,
SystemException, AddressException, UnsupportedEncodingException {
User user = getUserCriador();
return new InternetAddress(user.getEmailAddress(), remetente);
}
public String getEmailTeste() {
return emailTeste;
}
public void setEmailTeste(String emailTeste) {
this.emailTeste = emailTeste;
}
public String getNome() {
return remetente;
}
public void setRemetente(String nome) {
this.remetente = nome;
}
public String getDestinatario() {
return destinatario;
}
public void setDestinatario(String destinatario) throws SystemException{
this.destinatario = destinatario;
}
@Override
protected List<AnexoMensagem> getAnexos(long mensagemId) throws SystemException {
return AnexoMensagemLocalServiceUtil.recuperaAnexosPorMensagem(mensagemId);
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.email;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.AnexoMensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.EmailDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AnexoMensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.EmailDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.EmailUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.VelocityUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.WorkflowUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.model.User;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.util.portlet.PortletProps;
/**
* Classe respons&aacute;vel por enviar e-mail para todos os envolvidos no processo de workflow,
* inclusive o criador da mensagem.
* @author Henrique Simoes
*
*/
public class EnvioEmailWorkflow extends EnvioEmailMensagem {
private static final String CAMINHO_TEMPLATE = GetterUtil.getString(PortletProps.get("email.template.alerta-workflow"));
private static final String PLACEHOLDER_GROUPID = "_GROUPID_";
private static final String PLACEHOLDER_MENSAGEMID = "_MENSAGEMID_";
/**
* URL da p&aacute;gina na administra&ccedil;&atilde;o do portal para avalia&ccedil;&atilde;o do workflow.
*/
private final String mvcPathPaginaWorkflow = "/group/control_panel/manage?p_p_id=portletgestaomensagens_WAR_portletgestaomensagens"
+ "&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view"
+ "&doAsGroupId=" + PLACEHOLDER_GROUPID + "&controlPanelCategory=current_site.content"
+ "&_portletgestaomensagens_WAR_portletgestaomensagens_navigation=template"
+ "&_portletgestaomensagens_WAR_portletgestaomensagens_mvcPath=%2Fjsp%2Fadmin%2Fmensagem%2Fpainel-aprovacao.jsp"
+ "&_portletgestaomensagens_WAR_portletgestaomensagens_mensagemId=" + PLACEHOLDER_MENSAGEMID;
private final String templateEmail;
private boolean enviarCriador = false;
private final GrupoDestinatario remetente;
private final List<GrupoDestinatario> destinatarios;
private String nomesDestinatarios;
private String nomeRemetente;
private InternetAddress emailRemetente;
private final String urlServidor;
public EnvioEmailWorkflow(Mensagem mensagem) {
super(mensagem);
try {
templateEmail = VelocityUtil.carregarTemplate(CAMINHO_TEMPLATE);
remetente = GrupoDestinatarioLocalServiceUtil.getGrupoDestinatario(mensagem.getContaSaidaId());
long[] destIds = GetterUtil.getLongValues(mensagem.getGrupoDestinatarioIds().split("\\s"));
destinatarios = new ArrayList<>(destIds.length);
for (long id : destIds) {
destinatarios.add(GrupoDestinatarioLocalServiceUtil.getGrupoDestinatario(id));
}
urlServidor = EmailUtil.getURLServidor(mensagem.getCompanyId(), mensagem.getGroupId());
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}
@Override
public void enviarEmail(int tipoEnvio) throws PortalException, SystemException, AddressException, UnsupportedEncodingException {
definirNomeContaEnvio();
definirNomesDestinatarios();
definirRemetente();
enviarCriador = true;
super.enviarEmail(tipoEnvio);
//enviar para aprovadores somente se estiver com o status adequado
if (mensagem.getStatusWorkflow() == StatusWorkflowEnum.PENDENTE_APROVACAO.getStatus()) {
enviarCriador = false;
super.enviarEmail(tipoEnvio);
}
}
@Override
protected InternetAddress getRemetente() throws PortalException, SystemException, AddressException, UnsupportedEncodingException {
return emailRemetente;
}
@Override
protected InternetAddress[] getDestinatarios() throws PortalException, SystemException, AddressException {
//envia a copia para quem criou a mensagem
if (enviarCriador) {
return new InternetAddress[]{new InternetAddress(getUserCriador().getEmailAddress())};
}
//obter todos os usuarios associados ao papel de aprovadores.
long roleId = WorkflowUtil.getWorkflowRoleId(mensagem.getCompanyId());
List<User> aprovadores = UserLocalServiceUtil.getRoleUsers(roleId);
if (aprovadores.size() > 0) {
InternetAddress[] emails = new InternetAddress[aprovadores.size()];
for(int i = 0; i < aprovadores.size(); i++) {
emails[i] = new InternetAddress(aprovadores.get(i).getEmailAddress());
}
return emails;
}
else {
throw new PortalException("Nenhum usuário associado ao papel de aprovadores!");
}
}
@Override
protected String getHtmlCompleto() {
Map<String, Object> mapDetalhes = new HashMap<>();
mapDetalhes.put("ordemServico", GetterUtil.getString(mensagem.getCodigoMensagem()));
mapDetalhes.put("solicitante", mensagem.getNomeSolicitante());
mapDetalhes.put("destinatarios", nomesDestinatarios);
mapDetalhes.put("contaEnvio", nomeRemetente);
mapDetalhes.put("assunto", mensagem.getAssunto());
mapDetalhes.put("statusWorkflow", mensagem.getStatusWorkflow());
mapDetalhes.put("descricaoWorkflow", StatusWorkflowEnum.getDescricao(mensagem.getStatusWorkflow()));
mapDetalhes.put("comentarioWorkflow", mensagem.getComentarioWorkflow());
//define se o estilo do e-mail eh para o criador (true) ou para os aprovadores (false)
mapDetalhes.put("estiloCriador", enviarCriador);
mapDetalhes.put("urlPaginaWorkflow", getUrlAvaliarWorkflow());
mapDetalhes.put("literalAgendamento", mensagem.getLiteralAgendamento());
mapDetalhes.put("htmlMensagem", super.getHtmlCompleto());
return VelocityUtil.processarTemplate(mapDetalhes, templateEmail);
}
/**
* Retorna o nome das listas de destinatarios.
* @return String
*/
private void definirNomesDestinatarios() {
StringBundler sb = new StringBundler(destinatarios.size() * 2);
for (int i = 0; i < destinatarios.size(); i++) {
GrupoDestinatario dest = destinatarios.get(i);
if (i > 0) {
sb.append(StringPool.COMMA + StringPool.SPACE);
}
sb.append(dest.getNome());
}
nomesDestinatarios = sb.toString();
}
/**
* Retorna o nome da conta de envio.
* @return String
*/
private void definirNomeContaEnvio() {
nomeRemetente = remetente.getNome();
}
private void definirRemetente() throws SystemException, PortalException, AddressException, UnsupportedEncodingException {
final List<EmailDestinatario> emails = EmailDestinatarioLocalServiceUtil.findByGrupoDestinatarioId(mensagem.getContaSaidaId());
if (emails != null && emails.size() > 0) {
emailRemetente = new InternetAddress(emails.get(0).getEmail(), nomeRemetente);
}
}
/**
* Retorna a URL completa (incluindo servidor) da p&aacute;gina para o aprovador avaliar o workflow.
* @return String
*/
private String getUrlAvaliarWorkflow() {
String urlPagina = mvcPathPaginaWorkflow
.replace(PLACEHOLDER_GROUPID, String.valueOf(mensagem.getGroupId()))
.replace(PLACEHOLDER_MENSAGEMID, String.valueOf(mensagem.getMensagemId()));
return urlServidor + urlPagina;
}
@Override
protected List<AnexoMensagem> getAnexos(long mensagemId) throws SystemException {
return AnexoMensagemLocalServiceUtil.recuperaAnexosPorMensagem(mensagemId);
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.enums;
public enum EstiloTemplateEnum {
CABECALHO_RODAPE(0),
CORPO(1);
private int estiloId;
EstiloTemplateEnum(int estiloId) {
this.estiloId = estiloId;
}
public int getEstiloId() {
return estiloId;
}
/**
* Retorna o estilo de acordo com o identificador.
* @param estiloId
* @return {@link EstiloTemplateEnum}, ou null caso nao seja encontrado.
*/
public static EstiloTemplateEnum getEstiloTemplateById(int estiloId) {
for (EstiloTemplateEnum estilo : values()) {
if (estilo.getEstiloId() == estiloId) {
return estilo;
}
}
return null;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.enums;
public enum PadraoRecorrenciaEnum {
DIARIO,
SEMANAL,
MENSAL;
}
package br.mp.mprj.portal.portlet.gestaomensagens.enums;
public enum SituacaoEnvioEnum {
PENDENTE,
ENVIADO,
CANCELADO,
PROCESSANDO;
}
package br.mp.mprj.portal.portlet.gestaomensagens.enums;
public enum TipoAgendamentoEnum {
/**
* Representa data/hora do componente de calendário.
*/
CALENDARIO,
/**
* Representa todas as configurações para a recorrência.
*/
RECORRENCIA_CONFIG,
/**
* Representa as datas geradas a partir da configuração da recorrência.
*/
RECORRENCIA_GERADA,
/**
* Define o tipo de agendamento especial, para envio imediato.
*/
IMEDIATO;
}
package br.mp.mprj.portal.portlet.gestaomensagens.enums;
public enum TipoEnvioEnum {
IMEDIATO,
AGENDADO;
}
package br.mp.mprj.portal.portlet.gestaomensagens.enums;
public enum TipoListaEnum {
DESTINATARIO("Destinatário"),
CONTA_SAIDA("Conta de Envio");
private String descricao;
TipoListaEnum(String descricao) {
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
public int getId() {
return this.ordinal();
}
public TipoListaEnum getTipoLista(int id) {
for (TipoListaEnum tipo : values()) {
if (tipo.getId() == id) {
return tipo;
}
}
return null;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.job;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.messaging.MessageListenerException;
/**
* Job (Cron) respons&aacute;vel por enviar os e-mails
* das mensagens aprovadas e pendentes de agendamento.
* @author Henrique Simoes
*/
public class AgendamentoJob implements MessageListener {
private static final Log _log = LogFactoryUtil.getLog(AgendamentoJob.class);
@Override
public void receive(Message message) throws MessageListenerException {
try {
AgendamentoJobUtil.enviaMensagensAgendadas();
} catch (PortalException e) {
_log.error("Ocorreu uma falha durante o processo de envio de emails." , e);
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.job;
import java.util.List;
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 br.mp.mprj.portal.portlet.gestaomensagens.enums.TipoAgendamentoEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Agendamento;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AgendamentoLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.persistence.AgendamentoUtil;
public class AgendamentoJobUtil {
private static final Log _log = LogFactoryUtil.getLog(AgendamentoUtil.class);
/**
* Metodo responsavel em enviar todas as mensagens
* agendadas pendentes de envio, onde a data e horario
* de agendamento e menor ou igual a data e horario atual.
*/
public static void enviaMensagensAgendadas() throws PortalException{
List<Agendamento> agendamentos = AgendamentoLocalServiceUtil.findByMensagensPendetesDeEnvio();
AgendamentoLocalServiceUtil.enviaMensagem(agendamentos);
/* for (Agendamento agendamento : agendamentos){
try {
Mensagem mensagem = MensagemLocalServiceUtil.getMensagem(agendamento.getMensagemId());
if (mensagem.getStatusWorkflow() == StatusWorkflowEnum.APROVADO.getStatus()) {
if (AgendamentoLocalServiceUtil.recuperaTotalAgendamentosPorSituacao(mensagem.getMensagemId() ,
SituacaoEnvioEnum.PENDENTE.ordinal()) == 0){
mensagem.setSituacaoEnvio(SituacaoEnvioEnum.ENVIADO.ordinal());
MensagemLocalServiceUtil.updateMensagem(mensagem);
}
}
} catch (SystemException e1) {
_log.error("Ocorreu uma falha durante o processo de envio de emails." , e1);
}
}*/
}
public static void enviaMensagemImediato(long mensagemId)
throws PortalException {
try {
AgendamentoLocalServiceUtil.enviaMensagem(AgendamentoLocalServiceUtil
.findByMensagemTipoAgendamentoMultiplos(mensagemId,
new int[]{TipoAgendamentoEnum.IMEDIATO.ordinal()}));
}
catch (SystemException ex) {
throw new PortalException(ex);
}
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.principal;
import java.io.IOException;
import java.io.PrintWriter;
import javax.mail.internet.AddressException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import br.mp.mprj.portal.portlet.gestaomensagens.email.EnvioEmailTeste;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.servlet.SessionErrors;
import com.liferay.portal.kernel.util.ContentTypes;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class AdministracaoPortlet extends MVCPortlet {
public String CHARSET_SERVICO = ContentTypes.APPLICATION_JSON + "; charset=UTF-8";
@Override
public void processAction(ActionRequest actionRequest,
ActionResponse actionResponse) throws IOException, PortletException {
super.processAction(actionRequest, actionResponse);
//refedinir os principais parametros no retorno da requisicao com erro,
//para exibir a pagina com formulario novamente, e nao redirecionar para outro local.
if (!SessionErrors.isEmpty(actionRequest)) {
String mvcPath = getPath(actionRequest);
if (Validator.isNotNull(mvcPath)) {
//redefinir parametros necessarios para todos os modulos, caso esteja utilizando MvcPath
actionResponse.setRenderParameter("rascunho", ParamUtil.getString(actionRequest, "rascunho"));
actionResponse.setRenderParameter("mvcPath", ParamUtil.getString(actionRequest, "mvcPath"));
}
}else {
sendRedirect(actionRequest, actionResponse);
}
}
@Override
public void serveResource(ResourceRequest req, ResourceResponse res)
throws IOException, PortletException {
String resourceId = req.getResourceID();
JSONObject jsonResposta = JSONFactoryUtil.createJSONObject();
if (resourceId.equals("EnviarEmailMensagemTeste")) {
Mensagem mensagem = (Mensagem)req.getPortletSession().getAttribute("mensagem");
String emailTeste = ParamUtil.getString(req, "emailTeste");
if (mensagem != null) {
try {
EnvioEmailTeste envio = new EnvioEmailTeste(mensagem);
envio.setEmailTeste(emailTeste);
envio.setRemetente("Teste de envio");
envio.setDestinatario("Destinatário");
envio.enviarEmail(1);
jsonResposta.put("sucesso", true);
}
catch (AddressException adEx) {
jsonResposta.put("mensagem", "E-mail inválido na mensagem, verifique.");
jsonResposta.put("sucesso", false);
}
catch (PortalException|SystemException ex) {
jsonResposta.put("mensagem", ex.getMessage());
jsonResposta.put("sucesso", false);
}
}
}
res.setContentType(CHARSET_SERVICO);
try (PrintWriter pw = res.getWriter()) {
pw.write(JSONFactoryUtil.looseSerialize(jsonResposta));
pw.flush();
}
}
/**
* To by-pass authentication token for non-logged in user.
* Error: Invalid authentication token
* @return
*/
protected boolean isCheckMethodOnProcessAction() {
return CHECK_METHOD_ON_PROCESS_ACTION;
}
private static final boolean CHECK_METHOD_ON_PROCESS_ACTION = false;
}
package br.mp.mprj.portal.portlet.gestaomensagens.search;
/**
* Constantes especificos para recursos relacionados a busca.
* @author Henrique
*/
public interface ConstantesSearch {
/**
* Portlet ID padrao.
*/
String PORTLET_ID = "gestao-mensagens";
/**
* Portlet ID espec&iacute;fico para indexa&ccedil;&atilde;o do Template de mensagem.
*/
String PORTLET_ID_TEMPLATE = PORTLET_ID + "-template";
/**
* Portlet ID espec&iacute;fico para indexa&ccedil;&atilde;o da Mensagem.
*/
String PORTLET_ID_MENSAGEM = PORTLET_ID + "-mensagem";
/**
* Portlet ID espec&iacute;fico para indexa&ccedil;&atilde;o do Agendamento.
*/
String PORTLET_ID_AGENDAMENTO = PORTLET_ID + "-agendamento";
String CAMPO_TEMPLATE_NOME = "nome";
String CAMPO_TEMPLATE_CABECALHO = "cabecalho";
String CAMPO_TEMPLATE_RODAPE = "rodape";
String CAMPO_TEMPLATE_CORPO = "corpo";
String CAMPO_TEMPLATE_ESTILO = "estilo";
String PORTLET_ID_GRUPO_DESTINATARIO = PORTLET_ID + "-grupo-destinatario";
String PORTLET_ID_USER = PORTLET_ID + "-user";
}
package br.mp.mprj.portal.portlet.gestaomensagens.search;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.portlet.PortletRequest;
import javax.swing.text.html.HTMLEditorKit.Parser;
import br.mp.mprj.portal.portlet.gestaomensagens.search.indexer.GrupoDestinatarioIndexer;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.impl.GrupoDestinatarioImpl;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.Constantes;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.SearchUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.BooleanClauseOccur;
import com.liferay.portal.kernel.search.BooleanQuery;
import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Hits;
import com.liferay.portal.kernel.search.ParseException;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchContextFactory;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.SearchException;
import com.liferay.portal.kernel.search.Sort;
import com.liferay.portal.kernel.search.SortFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringParser;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
public class GrupoDestinatarioSearch {
private static final Sort[] SORT_PADRAO = {SortFactoryUtil.create("nome_sortable", false)};
public static Map<Integer ,List<GrupoDestinatario>> pesquisar(PortletRequest req , long companyId ,
int posicaoInicial , int tamanho , String ordem, boolean agrupamento)
throws ParseException, SearchException {
List<GrupoDestinatario> list = new ArrayList<GrupoDestinatario>();
String tipoLista = "";
Sort [] ordenacao = null;
String nome = "";
ThemeDisplay themeDisplay = (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
String groupIdStr = String.valueOf(groupId);
//if (Validator.isNotNull(ParamUtil.getString(req, Constantes.TIPO_LISTA))){
if (!"".equals(ParamUtil.getString(req, Constantes.TIPO_LISTA))){
tipoLista = ParamUtil.getString(req, Constantes.TIPO_LISTA);
} else if ("".equals(ParamUtil.getString(req, "operacao"))
&& !"".equals(ParamUtil.getString(req, "tipoListaParam"))
&& !"-1".equals(ParamUtil.getString(req, "tipoListaParam"))){
tipoLista = ParamUtil.getString(req, "tipoListaParam");
}
//}
if (!"".equals(ParamUtil.getString(req, "nomeListaDestinatarioSearch"))){
nome = ParamUtil.getString(req, "nomeListaDestinatarioSearch");
} else if ("".equals(ParamUtil.getString(req, "operacao"))
&& !"".equals(ParamUtil.getString(req, "nome"))){
nome = ParamUtil.getString(req, "nome");
}
SearchContext sc = SearchContextFactory.
getInstance(PortalUtil.getHttpServletRequest(req));
sc.setAndSearch(true);
sc.setEntryClassNames(GrupoDestinatarioIndexer.CLASS_NAMES);
if (ordem == null || "".equals(ordem)){
ordenacao = SORT_PADRAO;
}else{
Sort[] temp = {SortFactoryUtil.create(ordem, ("desc".equals(ParamUtil.getString(req, "orderByType")) ? true : false ))};
ordenacao = temp;
}
sc.setSorts(ordenacao);
BooleanQuery query = BooleanQueryFactoryUtil.create(sc);
//utilizar desta definicao para, criando outro BooleanQuery para aplicar o BooleanClauseOccur,
//evitar resultados incorretos ao utilizar BooleanQuery.
BooleanQuery bqEntryClassName = BooleanQueryFactoryUtil.create(sc);
bqEntryClassName.addExactTerm(Field.ENTRY_CLASS_NAME, GrupoDestinatario.class.getName());
//forcar que o entryClassName seja obrigatorio na query gerada pela API,
//para evitar resultados incorretos de outras entidades.
query.add(bqEntryClassName, BooleanClauseOccur.MUST);
if (Validator.isNotNull(nome)) {
query.addTerm("+nome", nome, true);
}
if (Validator.isNotNull(tipoLista)) {
query.addTerm("+tipoLista", tipoLista);
}
query.addTerm("+groupId",groupIdStr , true);
query.addTerm("+ativo", "true", true);
if (agrupamento){
BooleanQuery criterioDataTemporaria = BooleanQueryFactoryUtil.create(sc);
criterioDataTemporaria.addTerm("+dataFinalListaTemporaria", "[ " + SearchUtil.getDateFormat().format(new Date()) + " TO " +"* ]", true);
criterioDataTemporaria.addTerm("+listaTemporaria", "true", true);
BooleanQuery criterioListaTemporariaFalsa = BooleanQueryFactoryUtil.create(sc);
criterioListaTemporariaFalsa.addTerm("+listaTemporaria", "false", true);
BooleanQuery agrupadorTemporario = BooleanQueryFactoryUtil.create(sc);
agrupadorTemporario.add(criterioDataTemporaria, BooleanClauseOccur.SHOULD);
agrupadorTemporario.add(criterioListaTemporariaFalsa, BooleanClauseOccur.SHOULD);
query.add(agrupadorTemporario, BooleanClauseOccur.MUST);
}
Map<Integer , List<GrupoDestinatario>> retorno = new HashMap<>();
/* if (nome == null || "".equals(nome)){
try {
list = GrupoDestinatarioLocalServiceUtil.listaTodos();
} catch (SystemException e) {
throw new SearchException(e);
}
retorno.put(list.size(), list);
} else { */
Hits hits = SearchEngineUtil.search(sc.getSearchEngineId(), companyId, query, ordenacao , posicaoInicial , tamanho );
//fazer o parse dos resultados
for (Document doc : hits.getDocs()) {
try {
GrupoDestinatario grupoDestinatario = GrupoDestinatarioLocalServiceUtil
.getGrupoDestinatario(
GetterUtil.getLong(
doc.get(Field.ENTRY_CLASS_PK)));
if (grupoDestinatario.getAtivo()) {
list.add(grupoDestinatario);
}
}
catch (SystemException|PortalException ex) {
GestaoMensagensUtil.descartarRascunhos(req);
throw new SearchException(ex);
}
}
retorno.put(hits.getLength(), list);
//}
return retorno;
}
public static List<GrupoDestinatario> pesquisar(PortletRequest req ,long companyId , int tipoLista, boolean agrupamento )
throws ParseException, SearchException {
final List<GrupoDestinatario> list = new ArrayList<GrupoDestinatario>();
SearchContext sc = SearchContextFactory.
getInstance(PortalUtil.getHttpServletRequest(req));
ThemeDisplay themeDisplay = (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
String groupIdStr = String.valueOf(groupId);
sc.setAndSearch(true);
sc.setEntryClassNames(GrupoDestinatarioIndexer.CLASS_NAMES);
sc.setSorts(SORT_PADRAO);
BooleanQuery query = BooleanQueryFactoryUtil.create(sc);
//utilizar desta definicao para, criando outro BooleanQuery para aplicar o BooleanClauseOccur,
//evitar resultados incorretos ao utilizar BooleanQuery.
BooleanQuery bqEntryClassName = BooleanQueryFactoryUtil.create(sc);
bqEntryClassName.addExactTerm(Field.ENTRY_CLASS_NAME, GrupoDestinatario.class.getName());
//forcar que o entryClassName seja obrigatorio na query gerada pela API,
//para evitar resultados incorretos de outras entidades.
query.add(bqEntryClassName, BooleanClauseOccur.MUST);
if (Validator.isNotNull(tipoLista)) {
query.addTerm("+tipoLista", tipoLista);
}
query.addTerm("+ativo", "true", true);
query.addTerm("+groupId",groupIdStr , true);
if (agrupamento){
BooleanQuery criterioDataTemporaria = BooleanQueryFactoryUtil.create(sc);
criterioDataTemporaria.addTerm("+dataFinalListaTemporaria", "[ " + SearchUtil.getDateFormat().format(new Date()) + " TO " +"* ]", true);
criterioDataTemporaria.addTerm("+listaTemporaria", "true", true);
BooleanQuery criterioListaTemporariaFalsa = BooleanQueryFactoryUtil.create(sc);
criterioListaTemporariaFalsa.addTerm("+listaTemporaria", "false", true);
BooleanQuery agrupadorTemporario = BooleanQueryFactoryUtil.create(sc);
agrupadorTemporario.add(criterioDataTemporaria, BooleanClauseOccur.SHOULD);
agrupadorTemporario.add(criterioListaTemporariaFalsa, BooleanClauseOccur.SHOULD);
query.add(agrupadorTemporario, BooleanClauseOccur.MUST);
}
Hits hits = SearchEngineUtil.search(sc, query);
//fazer o parse dos resultados
for (Document doc : hits.getDocs()) {
GrupoDestinatario grupo = new GrupoDestinatarioImpl();
grupo.setGrupoDestinatarioId(GetterUtil.getLong(doc.get(Field.ENTRY_CLASS_PK)));
grupo.setNome(doc.get("nome"));
grupo.setFinalidade(doc.get("finalidade"));
grupo.setCompanyId((GetterUtil.getLong(doc.get("companyId"))));
grupo.setTipoLista(GetterUtil.getInteger(doc.get("tipoLista")));
list.add(grupo);
}
return list;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search;
/**
* Search para ser utilizado pelo job (cron) de envio das mensagens agendadas.
* @author Henrique Simoes
*
*/
public class MensagemJobSearch {
//TODO Implementar Pesquisa das Mensagens Aprovadas e Pendentes de envio
}
package br.mp.mprj.portal.portlet.gestaomensagens.search;
import java.util.ArrayList;
import java.util.List;
import javax.portlet.PortletRequest;
import br.mp.mprj.portal.portlet.gestaomensagens.search.indexer.TemplateIndexer;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.TemplateLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.util.GestaoMensagensUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.BooleanClauseOccur;
import com.liferay.portal.kernel.search.BooleanQuery;
import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Hits;
import com.liferay.portal.kernel.search.ParseException;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchContextFactory;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.SearchException;
import com.liferay.portal.kernel.search.Sort;
import com.liferay.portal.kernel.search.SortFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portal.util.PortalUtil;
public class TemplateSearch {
private static final Sort[] SORT_PADRAO = {SortFactoryUtil.create("nome_sortable", false)};
public static List<Template> pesquisar(PortletRequest req)
throws ParseException, SearchException {
List<Template> list = new ArrayList<Template>();
String nome = ParamUtil.getString(req, "nomeTemplateSearch");
SearchContext sc = SearchContextFactory.getInstance(PortalUtil.getHttpServletRequest(req));
sc.setAndSearch(true);
sc.setEntryClassNames(TemplateIndexer.CLASS_NAMES);
sc.setSorts(SORT_PADRAO);
BooleanQuery query = BooleanQueryFactoryUtil.create(sc);
ThemeDisplay themeDisplay = (ThemeDisplay) req.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
String groupIdStr = String.valueOf(groupId);
//utilizar desta definicao para, criando outro BooleanQuery para aplicar o BooleanClauseOccur,
//evitar resultados incorretos ao utilizar BooleanQuery.
BooleanQuery bqEntryClassName = BooleanQueryFactoryUtil.create(sc);
bqEntryClassName.addExactTerm(Field.ENTRY_CLASS_NAME, Template.class.getName());
//forcar que o entryClassName seja obrigatorio na query gerada pela API,
//para evitar resultados incorretos de outras entidades.
query.add(bqEntryClassName, BooleanClauseOccur.MUST);
if (Validator.isNotNull(nome)) {
//sc.setKeywords(nome);
query.addExactTerm("+nome", nome);
}
//TODO 1 alterar 1 para true
query.addTerm("ativo", "true", true, BooleanClauseOccur.MUST);
query.addTerm("+groupId",groupIdStr , true);
boolean doAgain = false;
do {
Hits hits = SearchEngineUtil.search(sc, query);
//fazer o parse dos resultados
for (Document doc : hits.getDocs()) {
try {
list.add(TemplateLocalServiceUtil.getTemplate(GetterUtil.getLong(doc.get(Field.ENTRY_CLASS_PK))));
if (list.size() > 0) {
for (Template template : list) {
doAgain = template.getNome().contains("removed-");
}
}
}
catch (PortalException|SystemException ex) {
GestaoMensagensUtil.descartarRascunhos(req);
throw new SearchException(ex);
}
}
} while (doAgain);
/* try {
MensagemLocalServiceUtil.enviaMensagem("Meu primeiro e-mail por servico",
"<HTM>><BODY><<P> Meu primeiro e-mail enviado por serviço.</P></BODY></HTML>",
"Bianca Passos", 102207, 108006, 1, "107912", 29601, 20182, 20155);
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
return list;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.portlet.PortletRequest;
import com.liferay.portal.kernel.search.BooleanClauseOccur;
import com.liferay.portal.kernel.search.BooleanQuery;
import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Hits;
import com.liferay.portal.kernel.search.ParseException;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchContextFactory;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.SearchException;
import com.liferay.portal.kernel.search.Sort;
import com.liferay.portal.kernel.search.SortFactoryUtil;
import com.liferay.portal.kernel.search.StringQueryFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortalUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.search.indexer.UserIndexer;
import br.mp.mprj.portal.portlet.gestaomensagens.search.vo.UserVO;
public class UserSearch {
private static final Sort[] SORT_PADRAO = {SortFactoryUtil.create("fullName_sortable", false)};
public static Map<Integer , List<UserVO>> pesquisar(PortletRequest req, long companyId , int posicaoInicial , int tamanho , String ordem)
throws ParseException, SearchException {
final List<UserVO> list = new ArrayList<UserVO>();
Sort [] ordenacao = null;
String fullName = ParamUtil.getString(req, "fullName");
String emailAddress = ParamUtil.getString(req, "emailAddress");
SearchContext sc = SearchContextFactory.
getInstance(PortalUtil.getHttpServletRequest(req));
sc.setAndSearch(true);
sc.setEntryClassNames(UserIndexer.CLASS_NAMES);
if (ordem == null || "".equals(ordem)){
ordenacao = SORT_PADRAO;
}else{
Sort[] temp = {SortFactoryUtil.create(ordem, false)};
ordenacao = temp;
}
sc.setSorts(ordenacao);
BooleanQuery query = BooleanQueryFactoryUtil.create(sc);
//utilizar desta definicao para, criando outro BooleanQuery para aplicar o BooleanClauseOccur,
//evitar resultados incorretos ao utilizar BooleanQuery.
BooleanQuery bqEntryClassName = BooleanQueryFactoryUtil.create(sc);
bqEntryClassName.addExactTerm(Field.ENTRY_CLASS_NAME, User.class.getName());
//forcar que o entryClassName seja obrigatorio na query gerada pela API,
//para evitar resultados incorretos de outras entidades.
query.add(bqEntryClassName, BooleanClauseOccur.MUST);
if (Validator.isNotNull(fullName)) {
query.addTerm("+fullName", fullName, true);
}
if (Validator.isNotNull(emailAddress)) {
query.addTerm("+emailAddress", emailAddress, true);
}
Hits hits = SearchEngineUtil.search(sc.getSearchEngineId(), companyId, query , ordenacao , posicaoInicial , tamanho );
Map<Integer , List<UserVO>> retorno = new HashMap<>();
if (hits.getLength() > 0) {
//fazer o parse dos resultados
for (Document doc : hits.getDocs()) {
UserVO user = new UserVO();
user.setUserId(GetterUtil.getLong(doc.get(Field.ENTRY_CLASS_PK)));
user.setFullName(doc.get("fullName"));
user.setEmailAddress(doc.get("emailAddress"));
user.setCompanyId(GetterUtil.getLong(doc.get("companyId")));
list.add(user);
}
retorno.put(hits.getLength(), list);
}
return retorno;
}
public static List<UserVO> pesquisar(PortletRequest req , String ids)
throws ParseException, SearchException {
final List<UserVO> list = new ArrayList<UserVO>();
SearchContext sc = SearchContextFactory.
getInstance(PortalUtil.getHttpServletRequest(req));
sc.setAndSearch(true);
sc.setEntryClassNames(UserIndexer.CLASS_NAMES);
sc.setSorts(SORT_PADRAO);
StringBundler sbQuery = new StringBundler();
sbQuery.append(StringPool.PLUS + Field.ENTRY_CLASS_NAME + StringPool.COLON + User.class.getName() + " ");
if (Validator.isNotNull(ids)) {
String [] userIds = ids.split(" ");
String textIds = "";
for (String i : userIds){
textIds+= " userId:" + i;
}
sbQuery.append(StringPool.PLUS + "("+ textIds + ")");
}
Hits hits = SearchEngineUtil.search(sc, StringQueryFactoryUtil.create(sbQuery.toString()));
if (hits.getLength() > 0) {
//fazer o parse dos resultados
for (Document doc : hits.getDocs()) {
UserVO user = new UserVO();
user.setUserId(GetterUtil.getLong(doc.get(Field.ENTRY_CLASS_PK)));
user.setFullName(doc.get("fullName"));
user.setEmailAddress(doc.get("emailAddress"));
user.setCompanyId(GetterUtil.getLong(doc.get("companyId")));
list.add(user);
}
}
return list;
}
public static UserVO pesquisarUsuario(PortletRequest req , long id) throws ParseException, SearchException {
SearchContext sc = SearchContextFactory.getInstance(PortalUtil.getHttpServletRequest(req));
sc.setAndSearch(true);
sc.setEntryClassNames(UserIndexer.CLASS_NAMES);
sc.setSorts(SORT_PADRAO);
StringBundler sbQuery = new StringBundler();
sbQuery.append(StringPool.PLUS + Field.ENTRY_CLASS_NAME + StringPool.COLON + User.class.getName() + " ");
if (Validator.isNotNull(id)) {
sbQuery.append(StringPool.PLUS + "( userId:" + id + ")");
}
Hits hits = SearchEngineUtil.search(sc, StringQueryFactoryUtil.create(sbQuery.toString()));
UserVO user = new UserVO();
if (hits.getLength() > 0) {
//fazer o parse dos resultados
Document doc = hits.getDocs()[0];
user.setUserId(GetterUtil.getLong(doc.get(Field.ENTRY_CLASS_PK)));
user.setFullName(doc.get("fullName"));
}
return user;
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search.indexer;
import java.util.Locale;
import javax.portlet.PortletURL;
import br.mp.mprj.portal.portlet.gestaomensagens.search.ConstantesSearch;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Agendamento;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AgendamentoLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.persistence.AgendamentoActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.BaseIndexer;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.Summary;
import com.liferay.portal.kernel.util.GetterUtil;
/**
*
* @author Henrique Simoes
*
*/
public class AgendamentoIndexer extends BaseIndexer {
private static final String ENTRY_CLASS_NAME = Agendamento.class.getName();
public static final String[] CLASS_NAMES = {ENTRY_CLASS_NAME};
@Override
public String[] getClassNames() {
return CLASS_NAMES;
}
@Override
public String getPortletId() {
return ConstantesSearch.PORTLET_ID_AGENDAMENTO;
}
@Override
protected void doDelete(Object obj) throws Exception {
Agendamento agendamento = (Agendamento) obj;
deleteDocument(agendamento.getCompanyId(), agendamento.getAgendamentoId());
}
@Override
protected Document doGetDocument(Object obj) throws Exception {
Agendamento entry = (Agendamento) obj;
Document document = getBaseModelDocument(getPortletId(), entry);
document.addKeyword(Field.COMPANY_ID, entry.getCompanyId());
document.addDate(Field.MODIFIED_DATE, entry.getDataAtualizacao());
document.addKeyword("mensagemId", entry.getMensagemId());
document.addKeyword("tipoAgendamento", entry.getTipoAgendamento());
document.addKeyword("padraoRecorrencia", entry.getPadraoRecorrencia());
document.addKeyword("frequencia", entry.getFrequencia());
document.addKeyword("situacaoEnvio", entry.getSituacaoEnvio());
document.addDate("dataInicio", entry.getDataInicio());
document.addDate("dataFim", entry.getDataInicio());
document.addDate("dataCalendario", entry.getDataInicio());
return document;
}
@Override
protected Summary doGetSummary(Document document, Locale locale,
String snippet, PortletURL portletURL) throws Exception {
return null;
}
@Override
protected void doReindex(Object obj) throws Exception {
Agendamento agendamento = (Agendamento) obj;
SearchEngineUtil.updateDocument(getSearchEngineId(),
agendamento.getCompanyId(),
doGetDocument(agendamento),
false);
}
@Override
protected void doReindex(String className, long classPK) throws Exception {
if (className.equals(ENTRY_CLASS_NAME)) {
doReindex(AgendamentoLocalServiceUtil.getAgendamento(classPK));
}
}
@Override
protected void doReindex(String[] ids) throws Exception {
final long companyId = GetterUtil.getLong(ids[0]);
//define uma actionableQuery customizada para a entidade, gerado pelo ServiceBuilder.
//possui metodo onde eh possivel definir condicoes p/ query: addCriteria.
ActionableDynamicQuery actionableQuery = new AgendamentoActionableDynamicQuery() {
@Override
protected void performAction(Object object) throws PortalException,
SystemException {
Agendamento entry = (Agendamento) object;
Document document = getDocument(entry);
addDocument(document);
}
@Override
protected void addCriteria(DynamicQuery dynamicQuery) {
Property property = PropertyFactoryUtil.forName("companyId");
dynamicQuery.add(property.eq(companyId));
}
};
actionableQuery.setSearchEngineId(getSearchEngineId());
actionableQuery.performActions();
}
@Override
protected String getPortletId(SearchContext searchContext) {
return getPortletId();
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search.indexer;
import java.util.Locale;
import javax.portlet.PortletURL;
import br.mp.mprj.portal.portlet.gestaomensagens.search.ConstantesSearch;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.GrupoDestinatario;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.GrupoDestinatarioLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.persistence.GrupoDestinatarioActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.BaseIndexer;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.Summary;
import com.liferay.portal.kernel.util.GetterUtil;
public class GrupoDestinatarioIndexer extends BaseIndexer {
private static final String ENTRY_CLASS_NAME = GrupoDestinatario.class.getName();
public static final String[] CLASS_NAMES = {ENTRY_CLASS_NAME};
@Override
public String[] getClassNames() {
return CLASS_NAMES;
}
@Override
public String getPortletId() {
return ConstantesSearch.PORTLET_ID_GRUPO_DESTINATARIO;
}
@Override
protected void doDelete(Object obj) throws Exception {
GrupoDestinatario grupoDestinatario = (GrupoDestinatario) obj;
deleteDocument(grupoDestinatario.getCompanyId(), grupoDestinatario.getGrupoDestinatarioId());
}
@Override
protected Document doGetDocument(Object obj) throws Exception {
GrupoDestinatario entry = (GrupoDestinatario) obj;
Document document = getBaseModelDocument(getPortletId(), entry);
document.addKeyword(Field.COMPANY_ID, entry.getCompanyId());
document.addKeyword(Field.GROUP_ID, entry.getGroupId());
document.addDate(Field.MODIFIED_DATE, entry.getDataAtualizacao());
document.addDate(Field.CREATE_DATE, entry.getDataCriacao());
document.addDate("dataFinalListaTemporaria", entry.getDataFinalListaTemporaria());
document.addKeyword("listaTemporaria", entry.getListaTemporaria());
document.addKeyword("ativo", entry.getAtivo());
document.addKeyword("nome", entry.getNome());
document.addKeyword("nome_sortable", entry.getNome());
document.addKeyword("grupoDestinatarioId", entry.getGrupoDestinatarioId());
document.addText("finalidade", entry.getFinalidade());
document.addKeyword("tipoLista", entry.getTipoLista());
return document;
}
@Override
protected Summary doGetSummary(Document document, Locale locale,
String snippet, PortletURL portletURL) throws Exception {
return null;
}
@Override
protected void doReindex(Object obj) throws Exception {
GrupoDestinatario grupoDestinatario = (GrupoDestinatario) obj;
SearchEngineUtil.updateDocument(getSearchEngineId(),
grupoDestinatario.getCompanyId(),
doGetDocument(grupoDestinatario),
false);
}
@Override
protected void doReindex(String className, long classPK) throws Exception {
if (className.equals(ENTRY_CLASS_NAME)) {
doReindex(GrupoDestinatarioLocalServiceUtil.getGrupoDestinatario(classPK));
}
}
@Override
protected void doReindex(String[] ids) throws Exception {
long companyId = GetterUtil.getLong(ids[0]);
//define uma actionableQuery customizada para a entidade, gerado pelo ServiceBuilder.
//possui metodo onde eh possivel definir condicoes p/ query: addCriteria.
ActionableDynamicQuery actionableQuery = new GrupoDestinatarioActionableDynamicQuery() {
@Override
protected void performAction(Object object) throws PortalException,
SystemException {
GrupoDestinatario entry = (GrupoDestinatario) object;
Document document = getDocument(entry);
addDocument(document);
}
};
actionableQuery.setCompanyId(companyId);
actionableQuery.setSearchEngineId(getSearchEngineId());
actionableQuery.performActions();
}
@Override
protected String getPortletId(SearchContext searchContext) {
return getPortletId();
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search.indexer;
import java.text.DateFormat;
import java.util.List;
import java.util.Locale;
import javax.portlet.PortletURL;
import br.mp.mprj.portal.portlet.gestaomensagens.enums.TipoAgendamentoEnum;
import br.mp.mprj.portal.portlet.gestaomensagens.search.ConstantesSearch;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Agendamento;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Mensagem;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.AgendamentoLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.MensagemLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.persistence.MensagemActionableDynamicQuery;
import br.mp.mprj.portal.portlet.gestaomensagens.util.SearchUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.workflow.StatusWorkflowEnum;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.BaseIndexer;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.Summary;
import com.liferay.portal.kernel.util.GetterUtil;
public class MensagemIndexer extends BaseIndexer {
private static final String ENTRY_CLASS_NAME = Mensagem.class.getName();
public static final String[] CLASS_NAMES = {ENTRY_CLASS_NAME};
private static final int[] TIPO_AGENDAMENTO_INDEXAVEL = {TipoAgendamentoEnum.CALENDARIO.ordinal(),
TipoAgendamentoEnum.RECORRENCIA_GERADA.ordinal()};
@Override
public String[] getClassNames() {
return CLASS_NAMES;
}
@Override
public String getPortletId() {
return ConstantesSearch.PORTLET_ID_MENSAGEM;
}
@Override
protected void doDelete(Object obj) throws Exception {
Mensagem mensagem = (Mensagem) obj;
deleteDocument(mensagem.getCompanyId(), mensagem.getMensagemId());
}
@Override
protected Document doGetDocument(Object obj) throws Exception {
Mensagem entry = (Mensagem) obj;
Document document = getBaseModelDocument(getPortletId(), entry);
document.addKeyword(Field.COMPANY_ID, entry.getCompanyId());
document.addKeyword(Field.GROUP_ID, entry.getGroupId());
document.addDate(Field.MODIFIED_DATE, entry.getDataAlteracao());
document.addDate(Field.CREATE_DATE, entry.getDataSolicitacao());
document.addKeyword("nomeSolicitante", entry.getNomeSolicitante());
document.addKeyword("assunto", entry.getAssunto());
document.addKeyword("assunto_sortable", entry.getAssunto());
document.addKeyword("statusWorkflow", entry.getStatusWorkflow());
document.addKeyword("status_workflow_sortable", StatusWorkflowEnum.getDescricao(entry.getStatusWorkflow()));
//document.addText("assuntoDescricao", entry.getAssunto());
document.addText("conteudo", entry.getConteudo());
document.addKeyword("prioridade", entry.getPrioridade());
document.addKeyword("ativo", entry.getAtivo());
document.addKeyword("tipoEnvio", entry.getTipoEnvio());
document.addKeyword("situacaoEnvio", entry.getSituacaoEnvio());
document.addKeyword("userIdCriador", entry.getUserIdCriador());
document.addKeyword("contaSaidaId", entry.getContaSaidaId());
document.addKeyword("codigoMensagem", entry.getCodigoMensagem());
document.addKeyword("rascunho", entry.getRascunho());
document.addDate("dataUltimoEnvio", entry.getDataUltimoEnvio());
document.addKeyword("templateId", entry.getTemplateId());
//indexar o agendamento, buscando apenas os tipos que serao indexados
List<Agendamento> agendamentos = AgendamentoLocalServiceUtil
.findByMensagemTipoAgendamentoMultiplos(
entry.getMensagemId(),
TIPO_AGENDAMENTO_INDEXAVEL);
if (agendamentos.size() > 0) {
DateFormat dfData = SearchUtil.getDateFormat();
String[] datas = new String[agendamentos.size()];
for (int i = 0; i < agendamentos.size(); i++) {
Agendamento ag = agendamentos.get(i);
datas[i] = dfData.format(ag.getDataInicio());
}
document.addKeyword("agendamento", datas);
}
else {
document.remove("agendamento");
}
return document;
}
@Override
protected Summary doGetSummary(Document document, Locale locale,
String snippet, PortletURL portletURL) throws Exception {
return null;
}
@Override
protected void doReindex(Object obj) throws Exception {
Mensagem mensagem = (Mensagem) obj;
SearchEngineUtil.updateDocument(getSearchEngineId(),
mensagem.getCompanyId(),
doGetDocument(mensagem),
false);
}
@Override
protected void doReindex(String className, long classPK) throws Exception {
if (className.equals(ENTRY_CLASS_NAME)) {
doReindex(MensagemLocalServiceUtil.getMensagem(classPK));
}
}
@Override
protected void doReindex(String[] ids) throws Exception {
long companyId = GetterUtil.getLong(ids[0]);
//define uma actionableQuery customizada para a entidade, gerado pelo ServiceBuilder.
//possui metodo onde eh possivel definir condicoes p/ query: addCriteria.
ActionableDynamicQuery actionableQuery = new MensagemActionableDynamicQuery() {
@Override
protected void performAction(Object object) throws PortalException,
SystemException {
Mensagem entry = (Mensagem) object;
Document document = getDocument(entry);
addDocument(document);
}
};
actionableQuery.setCompanyId(companyId);
actionableQuery.setSearchEngineId(getSearchEngineId());
actionableQuery.performActions();
}
@Override
protected String getPortletId(SearchContext searchContext) {
return getPortletId();
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search.indexer;
import java.util.Locale;
import javax.portlet.PortletURL;
import br.mp.mprj.portal.portlet.gestaomensagens.search.ConstantesSearch;
import br.mp.mprj.portal.portlet.gestaomensagens.service.model.Template;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.TemplateLocalServiceUtil;
import br.mp.mprj.portal.portlet.gestaomensagens.service.service.persistence.TemplateActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.BaseIndexer;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.Summary;
import com.liferay.portal.kernel.util.GetterUtil;
public class TemplateIndexer extends BaseIndexer {
private static final String ENTRY_CLASS_NAME = Template.class.getName();
public static final String[] CLASS_NAMES = {ENTRY_CLASS_NAME};
@Override
public String[] getClassNames() {
return CLASS_NAMES;
}
@Override
public String getPortletId() {
return ConstantesSearch.PORTLET_ID_TEMPLATE;
}
@Override
protected void doDelete(Object obj) throws Exception {
Template template = (Template) obj;
deleteDocument(template.getCompanyId(), template.getTemplateId());
}
@Override
protected Document doGetDocument(Object obj) throws Exception {
Template entry = (Template) obj;
Document document = getBaseModelDocument(getPortletId(), entry);
document.addKeyword(Field.COMPANY_ID, entry.getCompanyId());
document.addKeyword(Field.GROUP_ID, entry.getGroupId());
document.addDate(Field.MODIFIED_DATE, entry.getDataAtualizacao());
document.addDate(Field.CREATE_DATE, entry.getDataCriacao());
document.addKeyword("nome", entry.getNome());
document.addKeyword("ativo", entry.getAtivo());
document.addKeyword("nome_sortable", entry.getNome());
document.addText("cabecalho", entry.getCabecalho());
document.addText("rodape", entry.getRodape());
document.addText("corpo", entry.getCorpo());
document.addKeyword("estilo", entry.getEstilo());
document.addKeyword("thumbnailFileEntryId", entry.getThumbnailFileEntryId());
document.addText("thumbnailURL", entry.getThumbnailURL());
return document;
}
@Override
protected Summary doGetSummary(Document document, Locale locale,
String snippet, PortletURL portletURL) throws Exception {
return null;
}
@Override
protected void doReindex(Object obj) throws Exception {
Template template = (Template) obj;
SearchEngineUtil.updateDocument(getSearchEngineId(),
template.getCompanyId(),
doGetDocument(template),
false);
}
@Override
protected void doReindex(String className, long classPK) throws Exception {
if (className.equals(ENTRY_CLASS_NAME)) {
doReindex(TemplateLocalServiceUtil.getTemplate(classPK));
}
}
@Override
protected void doReindex(String[] ids) throws Exception {
long companyId = GetterUtil.getLong(ids[0]);
//define uma actionableQuery customizada para a entidade, gerado pelo ServiceBuilder.
//possui metodo onde eh possivel definir condicoes p/ query: addCriteria.
ActionableDynamicQuery actionableQuery = new TemplateActionableDynamicQuery() {
@Override
protected void performAction(Object object) throws PortalException,
SystemException {
Template entry = (Template) object;
Document document = getDocument(entry);
addDocument(document);
}
};
actionableQuery.setCompanyId(companyId);
actionableQuery.setSearchEngineId(getSearchEngineId());
actionableQuery.performActions();
}
@Override
protected String getPortletId(SearchContext searchContext) {
return getPortletId();
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search.indexer;
import java.util.Locale;
import javax.portlet.PortletURL;
import br.mp.mprj.portal.portlet.gestaomensagens.search.ConstantesSearch;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.BaseIndexer;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.search.SearchEngineUtil;
import com.liferay.portal.kernel.search.Summary;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.model.User;
import com.liferay.portal.service.UserLocalServiceUtil;
import com.liferay.portal.service.persistence.UserActionableDynamicQuery;
public class UserIndexer extends BaseIndexer {
private static final String ENTRY_CLASS_NAME = User.class.getName();
public static final String[] CLASS_NAMES = {ENTRY_CLASS_NAME};
@Override
public String[] getClassNames() {
return CLASS_NAMES;
}
@Override
public String getPortletId() {
return ConstantesSearch.PORTLET_ID_USER;
}
@Override
protected void doDelete(Object obj) throws Exception {
User user = (User) obj;
deleteDocument(user.getCompanyId(), user.getUserId());
}
@Override
protected Document doGetDocument(Object obj) throws Exception {
User entry = (User) obj;
Document document = getBaseModelDocument(getPortletId(), entry);
document.addKeyword(Field.USER_ID, entry.getUserId());
document.addKeyword(Field.COMPANY_ID, entry.getCompanyId());
document.addKeyword("fullName", entry.getFullName());
document.addKeyword("fullName_sortable", entry.getFullName());
document.addText("emailAddress", entry.getEmailAddress());
return document;
}
@Override
protected Summary doGetSummary(Document document, Locale locale,
String snippet, PortletURL portletURL) throws Exception {
return null;
}
@Override
protected void doReindex(Object obj) throws Exception {
User user = (User) obj;
SearchEngineUtil.updateDocument(getSearchEngineId(),
user.getCompanyId(),
doGetDocument(user),
false);
}
@Override
protected void doReindex(String className, long classPK) throws Exception {
if (className.equals(ENTRY_CLASS_NAME)) {
doReindex(UserLocalServiceUtil.getUser(classPK));
}
}
@Override
protected void doReindex(String[] ids) throws Exception {
long companyId = GetterUtil.getLong(ids[0]);
//define uma actionableQuery customizada para a entidade, gerado pelo ServiceBuilder.
//possui metodo onde eh possivel definir condicoes p/ query: addCriteria.
ActionableDynamicQuery actionableQuery = new UserActionableDynamicQuery() {
@Override
protected void performAction(Object object) throws PortalException,
SystemException {
User entry = (User) object;
Document document = getDocument(entry);
addDocument(document);
}
};
actionableQuery.setCompanyId(companyId);
actionableQuery.setSearchEngineId(getSearchEngineId());
actionableQuery.performActions();
}
@Override
protected String getPortletId(SearchContext searchContext) {
return getPortletId();
}
}
package br.mp.mprj.portal.portlet.gestaomensagens.search.vo;
public class DenunciaVO {
private String datainclusao;
private String tipodecisao;
private String processo;
private String iddecisoes;
private String decisao;
private String reu;
public String getDatainclusao() {
return datainclusao;
}
public void setDatainclusao(String datainclusao) {
this.datainclusao = datainclusao;
}
public String getTipodecisao() {
return tipodecisao;
}
public void setTipodecisao(String tipodecisao) {
this.tipodecisao = tipodecisao;
}
public String getProcesso() {
return processo;
}
public void setProcesso(String processo) {
this.processo = processo;
}
public String getIddecisoes() {
return iddecisoes;
}
public void setIddecisoes(String iddecisoes) {
this.iddecisoes = iddecisoes;
}
public String getDecisao() {
return decisao;
}
public void setDecisao(String decisao) {
this.decisao = decisao;
}
public String getReu() {
return reu;
}
public void setReu(String reu) {
this.reu = reu;
}
public String getAssunto() {
return assunto;
}
public void setAssunto(String assunto) {
this.assunto = assunto;
}
private String assunto;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment