From a92a993e559df3dc0c903b753d85ef10f077da31 Mon Sep 17 00:00:00 2001 From: Salvatore La Manna Date: Mon, 20 Sep 2021 11:50:06 +0200 Subject: [PATCH] =?UTF-8?q?Assegnazione=20a=20istruttori=20di=20unit=C3=A0?= =?UTF-8?q?=20operativa=20zero?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liferay-plugins-sdk-6.2/build.ture.properties | 2 - .../lib/portos-kaleo-portlet-service.jar | Bin 104682 -> 104682 bytes .../it/mwg/sismica/bo/util/MappeUtil.java | 3 +- .../portos/bo/util/AsseverazioniUtil.java | 12 +- .../liferay/portos/bo/util/AvvisoUtil.java | 20 +- .../liferay/portos/bo/util/DelegheUtil.java | 30 +- .../liferay/portos/bo/util/WorkflowUtil.java | 4 +- .../it/mwg/sismica/bo/util/SismicaUtil.java | 5 +- .../PaesaggisticaAdministrationPortlet.java | 8 +- .../ControlloPraticaLocalServiceImpl.java | 42 +- .../docroot/WEB-INF/src/service.properties | 4 +- .../actions/action_cambio_istruttore.jsp | 19 +- .../html/gestionefirme/avvisi_da_firmare.jsp | 91 ++-- .../docroot/html/gestionefirme/init.jsp | 6 +- .../docroot/html/homebo/init.jsp | 2 +- .../docroot/html/homebo/view.jsp | 229 ++++------ .../docroot/html/pagamenti/view.jsp | 281 ++++++------ .../impl/DisponibilitaLocalServiceImpl.java | 94 +++-- .../impl/PrenotazioneLocalServiceImpl.java | 15 +- .../portos/cookies/action/StartUpAction.java | 2 +- .../NoSuchNotificationLogException.java | 40 ++ .../NoSuchNotificationMailException.java | 40 ++ .../deployalert/action/DeployAction.java | 43 +- .../deployalert/constants/MailConstants.java | 9 +- .../control/DeployAlertControl.java | 5 +- .../model/impl/NotificationLogImpl.java | 35 +- .../model/impl/NotificationMailImpl.java | 41 +- .../portlet/NotificatorPortlet.java | 100 ++--- .../impl/NotificationLogLocalServiceImpl.java | 45 +- .../impl/NotificationLogServiceImpl.java | 32 +- .../NotificationMailLocalServiceImpl.java | 86 ++-- .../impl/NotificationMailServiceImpl.java | 39 +- .../deployalert/util/DeployAlertUtil.java | 32 +- .../docroot/WEB-INF/src/service.properties | 4 +- .../fe/portlet/RicercaPratichePortlet.java | 4 +- .../portos/fe/util/ReportFascicoloUtil.java | 2 +- .../fascicolofe/view_fascicolo_dettagli.jsp | 9 - .../fascicolofe/view_fascicolo_riepilogo.jsp | 370 +++++++++------- .../portlets/portos-kaleo-portlet/.classpath | 1 + .../portlets/portos-kaleo-portlet/.project | 1 + .../portlets/portos-kaleo-portlet/build.xml | 3 +- .../lib/portos-kaleo-portlet-service.jar | Bin 104682 -> 104682 bytes .../docroot/WEB-INF/lib/util-java.jar | Bin 0 -> 213058 bytes .../NoSuchFormDefinitionLinkException.java | 40 ++ .../portos/kaleo/NoSuchFormLogException.java | 40 ++ .../NoSuchFormTemplateLinkException.java | 40 ++ .../portlet/WorkflowFormAdminPortlet.java | 2 +- .../docroot/WEB-INF/src/service.properties | 4 +- .../liferay/log/constants/LogConstants.java | 18 +- .../log/constants/LogDestinationNames.java | 11 +- .../liferay/log/constants/LogFormat.java | 51 ++- .../portos-mail-manager-portlet/.classpath | 1 + .../org.eclipse.wst.common.component | 1 + .../mailmanager/model/EmailConstants.java | 3 +- .../hook/events/StartupAction.java | 102 ++--- .../impl/EmailAttachmentLocalServiceImpl.java | 183 ++++---- .../service/impl/EmailLocalServiceImpl.java | 284 ++++++------- .../impl/EmailTemplateLocalServiceImpl.java | 399 ++++++++---------- .../NoSuchMaintenanceScheduleException.java | 40 ++ .../portlet/AdminMaintenancePortlet.java | 175 ++++---- .../docroot/WEB-INF/src/service.properties | 4 +- .../notification/action/StartUpAction.java | 2 +- ...KaleoTaskAssignmentInstanceFinderImpl.java | 123 +++--- .../messaging/ProtocolloMessageListener.java | 39 +- .../messaging/ReportMessageListener.java | 3 +- .../portos/report/portlet/TestPdf.java | 2 +- .../impl/ReportTaskLocalServiceImpl.java | 9 +- .../impl/ReportTaskManagerServiceImpl.java | 2 +- .../docroot/WEB-INF/src/service.properties | 4 +- .../core/ModelListenerInvocationHandler.java | 2 +- .../shared/core/ModelListenerPool.java | 23 +- .../shared/core/ModelListenerUtil.java | 2 +- .../bo/shared/util/PagamentoConstants.java | 22 +- .../portos/bo/shared/util/PortletKeys.java | 10 +- .../portos/bo/shared/util/SezioniUtil.java | 10 +- .../bo/shared/util/StatoPraticaConstants.java | 28 +- .../portos/kaleo/shared/util/PortletKeys.java | 4 +- .../messaging/util/MailManagerUtil.java | 2 +- .../shared/constants/ReportConstants.java | 32 +- .../constants/ReportDestinationNames.java | 6 +- .../portos/report/shared/util/PdfUtil.java | 27 +- .../webs/portos-kaleo-web/.classpath | 8 +- .../org.eclipse.wst.common.component | 4 + .../lib/portos-kaleo-portlet-service.jar | Bin 104682 -> 104682 bytes .../WEB-INF/liferay-plugin-package.properties | 5 +- .../kaleo/WorkflowTaskManagerImpl.java | 14 +- .../kaleo/runtime/DefaultTaskManagerImpl.java | 241 ++++------- .../runtime/node/ConditionNodeExecutor.java | 95 ++--- .../kaleo/runtime/node/ForkNodeExecutor.java | 96 ++--- .../kaleo/runtime/node/JoinNodeExecutor.java | 97 ++--- .../runtime/node/JoinXorNodeExecutor.java | 123 ++---- .../kaleo/runtime/node/NodeExecutor.java | 45 +- .../runtime/node/NodeExecutorFactory.java | 29 +- .../kaleo/runtime/node/StateNodeExecutor.java | 165 ++++---- .../kaleo/runtime/node/TaskNodeExecutor.java | 260 ++++-------- .../hook/struts/EditWorkflowTaskAction.java | 33 +- .../struts/RenderFormTaskPortletAction.java | 4 + .../portos/kaleo/util/WorkflowUtil.java | 17 +- .../docroot/WEB-INF/src/service.properties | 4 +- 99 files changed, 2231 insertions(+), 2569 deletions(-) create mode 100644 liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationLogException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationMailException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/lib/util-java.jar create mode 100644 liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/kaleo/NoSuchFormDefinitionLinkException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/kaleo/NoSuchFormLogException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/kaleo/NoSuchFormTemplateLinkException.java create mode 100644 liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/maintenance/NoSuchMaintenanceScheduleException.java diff --git a/liferay-plugins-sdk-6.2/build.ture.properties b/liferay-plugins-sdk-6.2/build.ture.properties index f4c5d948..301d707f 100644 --- a/liferay-plugins-sdk-6.2/build.ture.properties +++ b/liferay-plugins-sdk-6.2/build.ture.properties @@ -1,5 +1,3 @@ -# Managed by Liferay IDE (remove this comment to prevent future updates) - app.server.tomcat.lib.global.dir = /home/ture/liferay/portali/paesaggistica/tomcat-7.0.62/lib/ext app.server.tomcat.deploy.dir = /home/ture/liferay/portali/paesaggistica/tomcat-7.0.62/webapps app.server.parent.dir = /home/ture/liferay/portali/paesaggistica diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/lib/portos-kaleo-portlet-service.jar b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/lib/portos-kaleo-portlet-service.jar index 36c9b92032fb9f7e38e8b1416d4b4856d4a0094d..21159b20b02443d58aef93f0b220c6cb9f54b6b9 100644 GIT binary patch delta 1503 zcmYk5e@s54L zmwOSoaJe4Rt!$+=+a$Vw999!$ICK49YTeV*_8 zo^x)E*l&&4(<&=$YKjm^LTnA@zt*4jq*|YN7Ir<6c#8jBHiLJy<^R`U3U4ei8zQNA zny?bj5Sp=qa1N^oGbko_lrq8rrNV^RH%gX5x}nao=&s#C`XX7eN_NM6xD&bAOJ1t_ z5JJ3eOjV|hD|j?k;G6_49OJ=HrCK^qwOlNU2D~o zea#~GBY%)0DT^L5AZ76j3rK60Put9>r}kG*-I*iA`b;5;8C6%fFo`OE=|!ih8awmg z_mjps-Zbt4Qx)0c)hSw5Ih0BIdix|zE86m2zHOKu$PnUrDR;)cZ-8a|L+d`L*%R65 zzsKh4jwu(Zcp%3{YK)fINu#GGQb@kD@6RJW_GL&V4UaWg`&#r}Q!;D4*RCg-v%{sN z|70BGuc<;5C5CxXJ0FHUcIoDAD`w=E*^IQr+j;Q!#Lkb6Ps*DeaXB8>PG=!i`yh;T z{h@+Uj;@b7;I+^(AKO$jL+d-+Ib&?LWt9-+iHuxr)`Kklau)u{Fz3;)c;Mn_dVB?1 zEsM$$I5~x0zZzqF{o(28c+8l1*eyg=!YxPpd=QJZO;Nb@z#3ezI$kM9ES2uF)%cWO zh5lI$`gtyTNiAyA%mE8Z>%FTLA-+|G*i6goHE?M~L&g>_YFMbJH({OSP}hvBRz&Vz zeBw|OznC_8$oes~xjqz`v09Z6d8AGso+W+d!%EV9A4*9@eyk-0{a8ne`{5cA$_bO-#Tro(uf^z&h~leQf}D=B^iZ;{H6VlQd@DE5$+cVa&&)`=EU&M~x+P9MW= z(%b;vAhidi-*f|M~+cwA|&|(LIklwnRlpo za0uLSoDbSoHh;C+BDy~wRtsaea{XUySDRMDJjkZ4mZn9|^SqyDb=&QE?fZFuKA-pJ z^E}_#G5hS8J-xERCZ`JF5Ms7r`-_qEN93gbEbMvsJMAg{_p@odyM5Jv3A!M1ZMm#J zqiJ}IuojOKTCm2b75xC~2y-ZA$Sai*4oVe9DE_sSEs?It3rxCYcalCyk<25z^A0?^ z!JOsKR=o!yUeR2YDU%W&h!?n~!4l34Su#|k!)1wcnyOV(RZ>;r`O#FZSR|WOy_r_a z!o|1Ds5j?|NuK-vAVpJ`-eZH*Wlt|AZCIVOdGrN5dZ2pd<^myJ$`YcOt?CMwIE*pl zfzpdE!_dUJyT6~(_IO?U7Z|GOUZ2WRD=SB`NMG%kX3>iF{O4|HMGs~Q@suTZ#lLTa zS@?&x{VpRXx;b#0$<NvxxNIry-d%I?-s(we;KO z6lM%ux#}>y!!2d}q%HE-G$D#~GtVd=g<+3>as7sk>0`glXQu0K=kDKAyUuE#lrJah zc0Qz>&PJN@ZWtNrJqhEqu8uq5a~OH5^FB1lMh|81eD|C-Z0kB9%Jm+3%DflZ>ZNS_ zlS%QHUbtyZO{_tiS*@}JE)J{Kug8RBypwP;HW}9(k9vft(yQev9}i=hvLyzO8r*=- z&5Rey5l=IwRp+bmzC`@61`(N9Qj6Mjqhvv8y>GoF#5b}KTUqjI4cto6h&JLy1xwV7 zW^6Po)V1KU*&=TrE;wcViYe2F%!{Ec^rOgVpj7#hPwMvL3DReNtR>y?qm)z>!1Kl$ zl->X~k`e*<7|riO4Jp)xEsQ3+5Fj-l#v7!c52J(Ba0G3n#1XtsDnE*Sq{*Y$OIqEH z1EhF2T1mOb&`vsi40}imgV;{$2wL@$LA=JZO+DB}n&?3zo#ypoH|b=rm5~y{X6kl^ zu$6Q_aW7zYq0{{?=#ptvQYzJexYMb2bBlNpIYYx0-FmitR#G%@$di00YoaVCNmo@EVL8|oXfHe`!pKXsi^yhXYl u)pSN~^Dufze+}ahsWWCd_%mjmb)3+g8W}fFSbggh1bH^6pp(=z0{_1`wlmuR diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/mwg/sismica/bo/util/MappeUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/mwg/sismica/bo/util/MappeUtil.java index d21cb199..4ee0ce78 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/mwg/sismica/bo/util/MappeUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/mwg/sismica/bo/util/MappeUtil.java @@ -30,7 +30,8 @@ import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.theme.ThemeDisplay; public class MappeUtil { - private final static Log _log = LogFactoryUtil.getLog(MappeUtil.class); + + private static final Log _log = LogFactoryUtil.getLog(MappeUtil.class); public static String getUrlFe(HttpServletRequest request, DettPratica dettPratica, Comune comune, boolean readOnly) throws UnsupportedEncodingException, PortalException, SystemException { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AsseverazioniUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AsseverazioniUtil.java index 217dc010..e7d1ec31 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AsseverazioniUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AsseverazioniUtil.java @@ -38,13 +38,13 @@ import com.liferay.portal.service.UserLocalServiceUtil; public class AsseverazioniUtil { - public final static String STATO_ASSEGNATA = "AS"; - public final static String STATO_ESEGUITA = "ES"; - public final static String STATO_ANNULLATA = "AN"; - public final static String STATO_EXPIRED = "EX"; + public static final String STATO_ASSEGNATA = "AS"; + public static final String STATO_ESEGUITA = "ES"; + public static final String STATO_ANNULLATA = "AN"; + public static final String STATO_EXPIRED = "EX"; - public final static String ASSEVERAZIONE_DA_APPLICATIVO = "AP"; - public final static String ASSEVERAZIONE_DA_ALLEGATO = "AL"; + public static final String ASSEVERAZIONE_DA_APPLICATIVO = "AP"; + public static final String ASSEVERAZIONE_DA_ALLEGATO = "AL"; public static boolean hasAsseverazioniAttive(long dettPraticaId) throws SystemException { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AvvisoUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AvvisoUtil.java index dd625aa0..699037dc 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AvvisoUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/AvvisoUtil.java @@ -23,17 +23,17 @@ public class AvvisoUtil { private static Log _log = LogFactoryUtil.getLog(AvvisoUtil.class); // Ogni volta che leggo queste due righe mi sale la cattiveria - public final static String DOCUMENTO_INVIATO = "S"; - public final static String DOCUMENTO_NON_INVIATO = "N"; + public static final String DOCUMENTO_INVIATO = "S"; + public static final String DOCUMENTO_NON_INVIATO = "N"; - public final static String TIPO_AVVISO_DIRETTO = "D"; - public final static String TIPO_AVVISO_FIRMA = "S"; + public static final String TIPO_AVVISO_DIRETTO = "D"; + public static final String TIPO_AVVISO_FIRMA = "S"; - public final static String TIPO_REPORT_CONTROLLO_OBBLIGATORIO = "CO"; - public final static String TIPO_REPORT_AUTORIZZAZIONE = "AU"; + public static final String TIPO_REPORT_CONTROLLO_OBBLIGATORIO = "CO"; + public static final String TIPO_REPORT_AUTORIZZAZIONE = "AU"; @SuppressWarnings("serial") - private final static Map allTipoAvviso = new LinkedHashMap() { + private static final Map allTipoAvviso = new LinkedHashMap() { { put(TIPO_AVVISO_DIRETTO, "label.admingeniocivile.avviso.tipoAvviso.diretto"); put(TIPO_AVVISO_FIRMA, "label.admingeniocivile.avviso.tipoAvviso.firma"); @@ -41,7 +41,7 @@ public class AvvisoUtil { }; @SuppressWarnings("serial") - private final static Map ALL_TIPO_DOCUMENTO = new LinkedHashMap() { + private static final Map ALL_TIPO_DOCUMENTO = new LinkedHashMap() { { put(StatoPraticaConstants.CONFORME, "label.admingeniocivile.avviso.tipoDocumento.conforme"); put(StatoPraticaConstants.NON_CONFORME, "label.admingeniocivile.avviso.tipoDocumento.nonconforme"); @@ -68,7 +68,7 @@ public class AvvisoUtil { }; @SuppressWarnings("serial") - private final static Map allTipoDocumentoFolderTemplateProps = new LinkedHashMap() { + private static final Map allTipoDocumentoFolderTemplateProps = new LinkedHashMap() { { put(StatoPraticaConstants.VIDIMATA, "conf.geniocivile.avviso.folder.id.vidimata"); put(StatoPraticaConstants.CONFORME, "conf.geniocivile.avviso.folder.id.conforme"); @@ -94,7 +94,7 @@ public class AvvisoUtil { }; @SuppressWarnings("serial") - private final static Map allTipoDocumentoFileTemplateProps = new LinkedHashMap() { + private static final Map allTipoDocumentoFileTemplateProps = new LinkedHashMap() { { put(StatoPraticaConstants.VARIAZIONE_SOGGETTI, "conf.geniocivile.avviso.template.id.variazionesoggetti"); put(StatoPraticaConstants.FINE_LAVORI, "conf.geniocivile.avviso.template.id.vidimata.finelavori"); diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/DelegheUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/DelegheUtil.java index 89e0c2ee..a17f6ad4 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/DelegheUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/DelegheUtil.java @@ -31,21 +31,21 @@ import com.liferay.portal.service.UserLocalServiceUtil; public class DelegheUtil { - public final static String STATO_ASSEGNATA = "AS"; - public final static String STATO_ESEGUITA = "ES"; - public final static String STATO_ANNULLATA = "AN"; - public final static String STATO_RIFIUTATA = "RI"; - - public final static String TIPO_TOTALE = "TT"; - public final static String TIPO_COMPILAZIONE = "CO"; - public final static String TIPO_GEOLOGO = "GE"; - public final static String TIPO_FIRMA_INSERIMENTO_ALLEGATI = "FI"; - public final static String TIPO_PAGAMENTO = "PG"; - public final static String TIPO_VISUALIZZAZIONE = "VI"; - public final static String TIPO_FINE_LAVORI = "FL"; - public final static String TIPO_COLLAUDO = "CL"; - - private final static Log _log = LogFactoryUtil.getLog(DelegheUtil.class); + public static final String STATO_ASSEGNATA = "AS"; + public static final String STATO_ESEGUITA = "ES"; + public static final String STATO_ANNULLATA = "AN"; + public static final String STATO_RIFIUTATA = "RI"; + + public static final String TIPO_TOTALE = "TT"; + public static final String TIPO_COMPILAZIONE = "CO"; + public static final String TIPO_GEOLOGO = "GE"; + public static final String TIPO_FIRMA_INSERIMENTO_ALLEGATI = "FI"; + public static final String TIPO_PAGAMENTO = "PG"; + public static final String TIPO_VISUALIZZAZIONE = "VI"; + public static final String TIPO_FINE_LAVORI = "FL"; + public static final String TIPO_COLLAUDO = "CL"; + + private static final Log _log = LogFactoryUtil.getLog(DelegheUtil.class); public static boolean hasDelegaFirma(long userId, long docPraticaId, boolean sezioneGeologica) throws PortalException, SystemException { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/WorkflowUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/WorkflowUtil.java index 4f54020a..2d417b2b 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/WorkflowUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/bo/util/WorkflowUtil.java @@ -225,7 +225,7 @@ public class WorkflowUtil { // Verificare corretta corrispondenza con AvvisoUtil.getAllTipoDocumento() @SuppressWarnings("serial") - private final static Map tipoDocumentoToSignal = new HashMap() { + private static final Map TIPO_DOCUMENTO_TO_SIGNAL = new HashMap() { { put(StatoPraticaConstants.SOTTOPOSTA_A_PARERE, WorkflowConstants.WORKFLOW_SIGNAL_ASSEGNAZIONE); put(StatoPraticaConstants.CONFORME, WorkflowConstants.WORKFLOW_SIGNAL_INVIO); @@ -240,7 +240,7 @@ public class WorkflowUtil { }; public static String getSignalByTipoDocumento(String tipoDocumento) { - return tipoDocumentoToSignal.get(tipoDocumento); + return TIPO_DOCUMENTO_TO_SIGNAL.get(tipoDocumento); } public static void assegnaUltimoTask(long companyId, long groupId, long istruttoreId, long assegnatoreUserId, diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/mwg/sismica/bo/util/SismicaUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/mwg/sismica/bo/util/SismicaUtil.java index 288ea293..bb346182 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/mwg/sismica/bo/util/SismicaUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/mwg/sismica/bo/util/SismicaUtil.java @@ -84,11 +84,12 @@ import com.liferay.portal.workflow.kaleo.service.KaleoTaskInstanceTokenLocalServ import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil; public class SismicaUtil { - private final static Log _log = LogFactoryUtil.getLog(SismicaUtil.class); + + private static final Log _log = LogFactoryUtil.getLog(SismicaUtil.class); private static final SimpleDateFormat dfmt = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); public static final SimpleDateFormat sdfGiornoDB = new SimpleDateFormat("yyyy-MM-dd"); - private final static int SLICE = 200; + private static final int SLICE = 200; public static Date[] getWeekInterval(int dow) { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/portlet/PaesaggisticaAdministrationPortlet.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/portlet/PaesaggisticaAdministrationPortlet.java index 81b55666..ec05f0ca 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/portlet/PaesaggisticaAdministrationPortlet.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/portlet/PaesaggisticaAdministrationPortlet.java @@ -27,17 +27,16 @@ import com.liferay.portal.theme.ThemeDisplay; import com.liferay.util.bridges.mvc.MVCPortlet; public class PaesaggisticaAdministrationPortlet extends MVCPortlet { - private final static Log _log = LogFactoryUtil.getLog(PaesaggisticaAdministrationPortlet.class); + + private static final Log _log = LogFactoryUtil.getLog(PaesaggisticaAdministrationPortlet.class); public void impostazioniMappe(ActionRequest actionRequest, ActionResponse actionResponse) throws PortalException, SystemException { + String urlIframeFE = ParamUtil.getString(actionRequest, "urlIframeFE"); String urlIframeBO = ParamUtil.getString(actionRequest, "urlIframeBO"); String urlIframeRicerca = ParamUtil.getString(actionRequest, "urlIframeRicerca"); String sharedSecret = ParamUtil.getString(actionRequest, "sharedSecret"); - - // ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); - // Company company = themeDisplay.getCompany(); ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); ConfigurazioneLocalServiceUtil.storeConfig(ConfigurazioneConstants.MAPPE_URL_IFRAME_FE, urlIframeFE, serviceContext); @@ -50,6 +49,7 @@ public class PaesaggisticaAdministrationPortlet extends MVCPortlet { } public void mostraConfigurazione(ActionRequest actionRequest, ActionResponse actionResponse) throws SystemException { + List esito = new ArrayList(); esito.add("

Env:

"); for (Map.Entry entry : System.getenv().entrySet()) { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/service/impl/ControlloPraticaLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/service/impl/ControlloPraticaLocalServiceImpl.java index c3da17d7..d7ea1916 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/service/impl/ControlloPraticaLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/bo/service/impl/ControlloPraticaLocalServiceImpl.java @@ -30,15 +30,16 @@ import it.tref.liferay.portos.kaleo.service.FormLogLocalServiceUtil; import it.tref.liferay.portos.kaleo.shared.util.WorkflowConstants; import java.io.Serializable; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import java.util.TreeSet; import com.liferay.portal.NoSuchWorkflowInstanceLinkException; import com.liferay.portal.kernel.bean.PortletBeanLocatorUtil; @@ -411,15 +412,13 @@ public class ControlloPraticaLocalServiceImpl extends ControlloPraticaLocalServi ControlloPratica controlloPratica = getControlloPratica(controlloPraticaId); int unitaOperativa = intPraticaLocalService.getIntPratica(controlloPratica.getIntPraticaId()) .getUnitaOperativa(); - boolean preassegnazione = (0 == unitaOperativa); long companyId = controlloPratica.getCompanyId(); - long roleId = RoleLocalServiceUtil.getRole(companyId, - preassegnazione ? "portos_assegnatore" : "portos_istruttore").getRoleId(); + long roleId = RoleLocalServiceUtil.getRole(companyId, Constants.ROLE_NAME_ISTRUTTORE).getRoleId(); List userGroupRoles = UserGroupRoleLocalServiceUtil.getUserGroupRolesByGroupAndRole( controlloPratica.getGroupId(), roleId); - Map sorted = new TreeMap<>(); - if (preassegnazione) { - Set unitaOperative = new HashSet<>(); + List istruttori = new ArrayList<>(); + if (unitaOperativa == 0) { + Set unitaOperative = new TreeSet<>(); for (UserGroupRole userGroupRole : userGroupRoles) { User user = userGroupRole.getUser(); unitaOperative.addAll(UnitaOperativeUtil.getUnitaOperative(user)); @@ -427,28 +426,29 @@ public class ControlloPraticaLocalServiceImpl extends ControlloPraticaLocalServi for (Integer uo : unitaOperative) { if (0 != uo) { JSONObject unita = JSONFactoryUtil.createJSONObject(); - unita.put("label", "Unità operativa " + uo); + unita.put("label", " > Unità operativa " + uo); unita.put("value", "--UO--" + uo); unita.put("default", false); - sorted.put(String.format("%6d", uo), unita); + istruttori.add(unita); } } - } else { - for (UserGroupRole userGroupRole : userGroupRoles) { - User user = userGroupRole.getUser(); - if (UnitaOperativeUtil.getUnitaOperative(user).contains(unitaOperativa)) { - JSONObject istruttore = JSONFactoryUtil.createJSONObject(); - istruttore.put("label", user.getFullName().toUpperCase()); - istruttore.put("value", user.getUserId()); - istruttore.put("default", false); - sorted.put((user.getLastName() + user.getFirstName()).toUpperCase(), istruttore); - } + } + Map ordinati = new TreeMap<>(); + for (UserGroupRole userGroupRole : userGroupRoles) { + User user = userGroupRole.getUser(); + if (UnitaOperativeUtil.getUnitaOperative(user).contains(unitaOperativa)) { + JSONObject istruttore = JSONFactoryUtil.createJSONObject(); + istruttore.put("label", user.getFullName().toUpperCase()); + istruttore.put("value", user.getUserId()); + istruttore.put("default", false); + ordinati.put((user.getLastName() + user.getFirstName()).toUpperCase(), istruttore); } } + istruttori.addAll(ordinati.values()); JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); JSONArray jsonArray = JSONFactoryUtil.createJSONArray(); jsonObject.put("istruttore", jsonArray); - for (JSONObject istruttore : sorted.values()) { + for (JSONObject istruttore : istruttori) { jsonArray.put(istruttore); } return jsonObject.toString(); @@ -484,7 +484,7 @@ public class ControlloPraticaLocalServiceImpl extends ControlloPraticaLocalServi esito.put(etichettaEsito(StatoPraticaConstants.NO_PARERE)); JSONObject json = JSONFactoryUtil.createJSONObject(); json.put("esito", esito); - jsonAutorizzazione = esito.toString(); + jsonAutorizzazione = json.toString(); } return jsonAutorizzazione; } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/service.properties b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/service.properties index 76cf04c0..57725be6 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/service.properties +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/WEB-INF/src/service.properties @@ -13,8 +13,8 @@ ## build.namespace=portos_bo - build.number=3360 - build.date=1631698031653 + build.number=3361 + build.date=1631701936996 build.auto.upgrade=true ## diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestioneattivita/actions/action_cambio_istruttore.jsp b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestioneattivita/actions/action_cambio_istruttore.jsp index af86a325..2933dcac 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestioneattivita/actions/action_cambio_istruttore.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestioneattivita/actions/action_cambio_istruttore.jsp @@ -13,13 +13,10 @@ long controlloPraticaId = ParamUtil.getLong(request, "controlloPraticaId"); IntPratica intPratica = IntPraticaLocalServiceUtil.getIntPratica(intPraticaId); ControlloPratica controlloPratica = ControlloPraticaLocalServiceUtil.getControlloPratica(controlloPraticaId); String buttonIdCambioIstruttore = ParamUtil.getString(request, "buttonIdCambioIstruttore"); -PortletURL iteratorURL = liferayPortletResponse.createRenderURL(); -String orderByType = ParamUtil.getString(request, "orderByType", "asc"); -String orderByCol = ParamUtil.getString(request, "orderByCol", "nome"); String randomId = StringUtil.randomId(); String formNameSelezionaCambioIstruttore = "formNameSelezionaCambioIstruttore_" + randomId; String divIdSelezionaCambioIstruttore = "divIdSelezionaCambioIstruttore_" + randomId; -User istruttore = UserLocalServiceUtil.getUser(intPratica.getStatusByUserId()); +User istruttoreAttuale = UserLocalServiceUtil.getUser(intPratica.getStatusByUserId()); Role role = RoleLocalServiceUtil.getRole(company.getCompanyId(), Constants.ROLE_NAME_ISTRUTTORE); List userGroupRoles = UserGroupRoleLocalServiceUtil.getUserGroupRolesByGroupAndRole( controlloPratica.getGroupId(), role.getRoleId()); @@ -32,22 +29,22 @@ List userGroupRoles = UserGroupRoleLocalServiceUtil.getUserGroupR
- <%= istruttore.getFullName() %> + <%= istruttoreAttuale.getFullName() %>
<% List uoUser = UnitaOperativeUtil.getUnitaOperative(user); for (UserGroupRole userGroupRole: userGroupRoles) { - if (userGroupRole.getUserId() != istruttore.getUserId()) { - User istruttoreTmp = UserLocalServiceUtil.getUser(userGroupRole.getUserId()); - List uoIstruttore = UnitaOperativeUtil.getUnitaOperative(istruttoreTmp); + if (userGroupRole.getUserId() != istruttoreAttuale.getUserId()) { + User istruttore = UserLocalServiceUtil.getUser(userGroupRole.getUserId()); + List uoIstruttore = UnitaOperativeUtil.getUnitaOperative(istruttore); if (CollectionUtils.containsAny(uoUser, uoIstruttore)) { - String nominativo = istruttoreTmp.getFullName() + " - U.O. " + String nominativo = istruttore.getFullName() + " - U.O. " + StringUtils.join(uoIstruttore, StringPool.COMMA_AND_SPACE) + " - " - + istruttoreTmp.getScreenName(); + + istruttore.getScreenName(); %> - + <% } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/avvisi_da_firmare.jsp b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/avvisi_da_firmare.jsp index 7b612e0c..df4f6c32 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/avvisi_da_firmare.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/avvisi_da_firmare.jsp @@ -1,26 +1,17 @@ <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@page import="com.liferay.portal.service.GroupLocalServiceUtil"%> -<%@page import="com.liferay.portal.util.comparator.GroupIdComparator"%> +<%@page import="com.liferay.portal.kernel.exception.PortalException"%> +<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> +<%@page import="com.liferay.portal.kernel.repository.model.FileEntry"%> <%@page import="com.liferay.portal.kernel.util.ArrayUtil"%> <%@page import="com.liferay.portal.model.Organization"%> +<%@page import="com.liferay.portal.model.User"%> <%@page import="com.liferay.portal.service.OrganizationLocalServiceUtil"%> <%@page import="com.liferay.portal.service.UserGroupRoleLocalServiceUtil"%> <%@page import="com.liferay.portal.service.UserLocalServiceUtil"%> -<%@page import="com.liferay.portal.model.User"%> -<%@page import="com.liferay.portal.security.permission.ActionKeys"%> -<%@page import="it.tref.liferay.portos.bo.util.GenioCivileBaseUtil"%> -<%@page import="it.tref.liferay.portos.bo.util.Constants"%> -<%@page import="it.tref.liferay.portos.bo.util.AvvisoUtil"%> -<%@page import="com.liferay.portal.kernel.util.HttpUtil"%> -<%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%> -<%@page import="com.liferay.portal.kernel.exception.PortalException"%> -<%@page import="com.liferay.portlet.documentlibrary.util.DLUtil"%> -<%@page import="com.liferay.portal.kernel.util.Validator"%> <%@page import="com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil"%> -<%@page import="com.liferay.portal.kernel.repository.model.FileEntry"%> -<%@page import="com.liferay.portal.kernel.language.LanguageUtil"%> -<%@page import="com.liferay.portal.kernel.util.StringPool"%> -<%@page import="java.util.List"%> +<%@page import="com.liferay.portlet.documentlibrary.util.DLUtil"%> +<%@page import="it.tref.liferay.portos.bo.shared.util.Constants"%> +<%@page import="it.tref.liferay.portos.bo.util.GenioCivileBaseUtil"%> <%@page import="javax.portlet.PortletURL"%> <%@include file="/html/gestionefirme/init.jsp"%> <% @@ -29,19 +20,18 @@ String mvcPath = ParamUtil.getString(request, "mvcPath"); long[] groupIds = new long[0]; List organizations = OrganizationLocalServiceUtil.getUserOrganizations(user.getUserId()); for (Organization organization:organizations) { - if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(user.getUserId(), organization.getGroupId(), Constants.ROLE_NAME_FIRMA, true)) { + if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(user.getUserId(), organization.getGroupId(), + Constants.ROLE_NAME_FIRMA, true)) { groupIds = ArrayUtil.append(groupIds, organization.getGroupId()); } } +PortletURL primaFirmaURL = renderResponse.createRenderURL(); +primaFirmaURL.setParameter("tabs1", tabs1); +if (Validator.isNotNull(mvcPath)) { + primaFirmaURL.setParameter("mvcPath", mvcPath); +} %>
- <% - PortletURL primaFirmaURL = renderResponse.createRenderURL(); - primaFirmaURL.setParameter("tabs1", tabs1); - if (Validator.isNotNull(mvcPath)) { - primaFirmaURL.setParameter("mvcPath", mvcPath); - } - %>
@@ -52,14 +42,15 @@ for (Organization organization:organizations) { + total="<%= AvvisoLocalServiceUtil.countAvvisiDaFirmarePrimaFirmaByCF( + company.getCompanyId(), user.getScreenName()) %>" /> <% - DettPratica dettPratica = DettPraticaLocalServiceUtil.fetchDettPratica(avviso.getClassPk()); + DettPratica dettPratica = DettPraticaLocalServiceUtil.fetchDettPratica(avviso + .getClassPk()); IntPratica intPratica = null; - if (dettPratica != null) { + if (Validator.isNotNull(dettPratica)) { intPratica = IntPraticaLocalServiceUtil.getIntPratica(dettPratica.getIntPraticaId()); String urlDettaglioPratica = StringPool.BLANK; if (fromPopUp) { @@ -77,17 +68,20 @@ for (Organization organization:organizations) { String tipoProcedura = StringPool.BLANK; if (Validator.isNotNull(intPratica)) { tipoProcedura = LanguageUtil.get(pageContext, "label_procedura_" - + intPratica.getTipoProcedura()) + ") " + + intPratica.getTipoProcedura()) + + ") " + LanguageUtil.get(pageContext, "tipo_procedura_" + intPratica.getTipoProcedura()); } %> + value="<%= Validator.isNull(intPratica) ? StringPool.MINUS + : intPratica.getNumeroProgetto() %>" + cssClass="text-center" /> + value="<%= Validator.isNull(dettPratica) ? StringPool.MINUS + : dettPratica.getProtocollo() %>" + cssClass="text-center" /> @@ -105,16 +99,18 @@ for (Organization organization:organizations) { try { FileEntry fileEntryBase = DLAppLocalServiceUtil.getFileEntry(avviso .getFileEntryIdBase()); - urlFileEntryBase = DLUtil.getPreviewURL(fileEntryBase, fileEntryBase.getFileVersion(), - themeDisplay, StringPool.BLANK, false, true); + urlFileEntryBase = DLUtil.getPreviewURL(fileEntryBase, + fileEntryBase.getFileVersion(), themeDisplay, StringPool.BLANK, false, + true); } catch (PortalException e) {} %> - + <% - String link = "javascript:window.open('" + urlFileEntryBase - + "', '_blank')"; + String link = "javascript:window.open('" + urlFileEntryBase + + "', '_blank')"; %> + value="<%= Validator.isNull(intPratica) ? StringPool.MINUS + : intPratica.getNumeroProgetto() %>" + cssClass="text-center" /> + value="<%= Validator.isNull(dettPratica) ? StringPool.MINUS + : dettPratica.getProtocollo() %>" + cssClass="text-center" /> @@ -214,8 +212,9 @@ for (Organization organization:organizations) { try { FileEntry fileEntryBase = DLAppLocalServiceUtil.getFileEntry(avviso .getFileEntryIdBase()); - urlFileEntryBase = DLUtil.getPreviewURL(fileEntryBase, fileEntryBase.getFileVersion(), - themeDisplay, StringPool.BLANK, false, true); + urlFileEntryBase = DLUtil.getPreviewURL(fileEntryBase, + fileEntryBase.getFileVersion(), themeDisplay, StringPool.BLANK, false, + true); } catch (PortalException e) {} %> diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/init.jsp b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/init.jsp index 3bdea40f..30b4dfda 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/init.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/gestionefirme/init.jsp @@ -1,8 +1,6 @@ <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ include file="/html/init.jsp" %> +<%@include file="/html/init.jsp"%> <% String tabNames = "Tab_AvvisiDaFirmare,Tab_AvvisiAltri,Tab_AvvisiFirme"; - String tabs1 = ParamUtil.getString(request, "tabs1", StringUtil.split(tabNames)[0]); - -%> \ No newline at end of file +%> diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/init.jsp b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/init.jsp index 505d90c5..87f4525a 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/init.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/init.jsp @@ -1,2 +1,2 @@ <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ include file="/html/init.jsp" %> \ No newline at end of file +<%@include file="/html/init.jsp"%> diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/view.jsp b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/view.jsp index de5b328b..1af74773 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/view.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/homebo/view.jsp @@ -1,195 +1,118 @@ <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="/html/homebo/init.jsp" %> - - - <% - -int countPraticheScaduteAutorizzazione = GetterUtil.getInteger(renderRequest.getAttribute("countPraticheScaduteAutorizzazione")); -int countPraticheScaduteSorteggiate = GetterUtil.getInteger(renderRequest.getAttribute("countPraticheScaduteSorteggiate")); -int countPraticheScaduteControlloObbligatorio = GetterUtil.getInteger(renderRequest.getAttribute("countPraticheScaduteControlloObbligatorio")); - -int countPraticheScaduteTotali = countPraticheScaduteAutorizzazione + countPraticheScaduteSorteggiate + countPraticheScaduteControlloObbligatorio; - -int countPraticheInScadenzaAutorizzazioni = GetterUtil.getInteger(renderRequest.getAttribute("countPraticheInScadenzaAutorizzazioni")); -int countPraticheInScadenzaSorteggiate = GetterUtil.getInteger(renderRequest.getAttribute("countPraticheInScadenzaSorteggiate")); -int countPraticheInScadenzaControlloObbligatorio = GetterUtil.getInteger(renderRequest.getAttribute("countPraticheInScadenzaControlloObbligatorio")); - -int countPraticheInScadenzaTotali = countPraticheInScadenzaAutorizzazioni + countPraticheInScadenzaSorteggiate + countPraticheInScadenzaControlloObbligatorio; - -int countAutorizzazioniDaAssegnare = GetterUtil.getInteger(renderRequest.getAttribute("countAutorizzazioniDaAssegnare")); -int countSorteggiateDaAssegnare = GetterUtil.getInteger(renderRequest.getAttribute("countSorteggiateDaAssegnare")); -int countControlloObbligatorioDaAssegnare = GetterUtil.getInteger(renderRequest.getAttribute("countControlloObbligatorioDaAssegnare")); - -int countPraticheDaAssegnareTotali = countAutorizzazioniDaAssegnare + countSorteggiateDaAssegnare + countControlloObbligatorioDaAssegnare; - - -int countAutorizzazioniOrdinarie = GetterUtil.getInteger(renderRequest.getAttribute("countAutorizzazioniOrdinarie")); -int countSorteggiateOrdinarie = GetterUtil.getInteger(renderRequest.getAttribute("countSorteggiateOrdinarie")); -int countControlloObbligatorioOrdinarie = GetterUtil.getInteger(renderRequest.getAttribute("countControlloObbligatorioOrdinarie")); - -int countPraticheOrdinarieTotali = countAutorizzazioniOrdinarie + countSorteggiateOrdinarie + countControlloObbligatorioOrdinarie; - - -int countTotaleAutorizzazioni = countPraticheScaduteAutorizzazione + countPraticheInScadenzaAutorizzazioni + countAutorizzazioniDaAssegnare + countAutorizzazioniOrdinarie; -int countTotaleSorteggiate = countPraticheScaduteSorteggiate + countPraticheInScadenzaSorteggiate + countSorteggiateDaAssegnare + countSorteggiateOrdinarie; -int countTotaleControlloObbligatorio = countPraticheScaduteControlloObbligatorio + countPraticheInScadenzaControlloObbligatorio + countControlloObbligatorioDaAssegnare + countControlloObbligatorioOrdinarie; - +int countPraticheScaduteAutorizzazione = GetterUtil.getInteger(renderRequest.getAttribute( + "countPraticheScaduteAutorizzazione")); +int countPraticheScaduteSorteggiate = GetterUtil.getInteger(renderRequest.getAttribute( + "countPraticheScaduteSorteggiate")); +int countPraticheScaduteControlloObbligatorio = GetterUtil.getInteger(renderRequest.getAttribute( + "countPraticheScaduteControlloObbligatorio")); +int countPraticheScaduteTotali = countPraticheScaduteAutorizzazione + countPraticheScaduteSorteggiate + + countPraticheScaduteControlloObbligatorio; +int countPraticheInScadenzaAutorizzazioni = GetterUtil.getInteger(renderRequest.getAttribute( + "countPraticheInScadenzaAutorizzazioni")); +int countPraticheInScadenzaSorteggiate = GetterUtil.getInteger(renderRequest.getAttribute( + "countPraticheInScadenzaSorteggiate")); +int countPraticheInScadenzaControlloObbligatorio = GetterUtil.getInteger(renderRequest.getAttribute( + "countPraticheInScadenzaControlloObbligatorio")); +int countPraticheInScadenzaTotali = countPraticheInScadenzaAutorizzazioni + countPraticheInScadenzaSorteggiate + + countPraticheInScadenzaControlloObbligatorio; +int countAutorizzazioniDaAssegnare = GetterUtil.getInteger(renderRequest.getAttribute( + "countAutorizzazioniDaAssegnare")); +int countSorteggiateDaAssegnare = GetterUtil.getInteger(renderRequest.getAttribute( + "countSorteggiateDaAssegnare")); +int countControlloObbligatorioDaAssegnare = GetterUtil.getInteger(renderRequest.getAttribute( + "countControlloObbligatorioDaAssegnare")); +int countPraticheDaAssegnareTotali = countAutorizzazioniDaAssegnare + countSorteggiateDaAssegnare + + countControlloObbligatorioDaAssegnare; +int countAutorizzazioniOrdinarie = GetterUtil.getInteger(renderRequest.getAttribute( + "countAutorizzazioniOrdinarie")); +int countSorteggiateOrdinarie = GetterUtil.getInteger(renderRequest.getAttribute( + "countSorteggiateOrdinarie")); +int countControlloObbligatorioOrdinarie = GetterUtil.getInteger(renderRequest.getAttribute( + "countControlloObbligatorioOrdinarie")); +int countPraticheOrdinarieTotali = countAutorizzazioniOrdinarie + countSorteggiateOrdinarie + + countControlloObbligatorioOrdinarie; +int countTotaleAutorizzazioni = countPraticheScaduteAutorizzazione + countPraticheInScadenzaAutorizzazioni + + countAutorizzazioniDaAssegnare + countAutorizzazioniOrdinarie; +int countTotaleSorteggiate = countPraticheScaduteSorteggiate + countPraticheInScadenzaSorteggiate + + countSorteggiateDaAssegnare + countSorteggiateOrdinarie; +int countTotaleControlloObbligatorio = countPraticheScaduteControlloObbligatorio + + countPraticheInScadenzaControlloObbligatorio + countControlloObbligatorioDaAssegnare + + countControlloObbligatorioOrdinarie; int totaleDeiTotali = countTotaleAutorizzazioni + countTotaleSorteggiate + countTotaleControlloObbligatorio; %> - - - -
-
-

PRATICHE IN ISTRUTTORIA

-
-
- +} +
-
- TIPOLOGIA -
- -
+
TOTALI
-
+
PRATICHE DA ASSEGNARE
- -
- <%=countPraticheDaAssegnareTotali %> +
+ <%= countPraticheDaAssegnareTotali %>
-
-
- PRATICHE ORDINARIE -
- -
- <%=countPraticheOrdinarieTotali %> +
+ <%= countPraticheOrdinarieTotali %>
-
-
+
PRATICHE IN SCADENZA
- -
- <%=countPraticheInScadenzaTotali %> +
+ <%= countPraticheInScadenzaTotali %>
-
-
+
PRATICHE SCADUTE
- -
- <%=countPraticheScaduteTotali %> +
+ <%= countPraticheScaduteTotali %>
-
-
+
TOTALI
- -
- <%=totaleDeiTotali %> +
+ <%= totaleDeiTotali %>
- diff --git a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/pagamenti/view.jsp b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/pagamenti/view.jsp index e9d699a3..5ead0b50 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/pagamenti/view.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-bo-portlet/docroot/html/pagamenti/view.jsp @@ -7,166 +7,153 @@ <%@page import="java.text.NumberFormat"%> <%@page import="java.math.BigDecimal"%> <%@ include file="/html/pagamenti/init.jsp" %> - <% - long intPraticaId = ParamUtil.getLong(request, "intPraticaId"); +long intPraticaId = ParamUtil.getLong(request, "intPraticaId"); %> - - - - + - - - - - - - <% - DettPratica dettPratica = DettPraticaLocalServiceUtil.getDettPratica(pagamento.getClassPk()); - %> - - - - - - - - - + total="<%=PagamentoLocalServiceUtil.countByIntPratica_Visible(intPraticaId)%>" /> + + <% - String result = ""; - if(dettPratica.isNormEsenteSpese()){ - result = "Esente"; - } else { - BigDecimal importoSpeseVal; - if( Validator.isNotNull(pagamento.getImporto()) ){ - importoSpeseVal = new BigDecimal(pagamento.getImporto()); - } else{ - importoSpeseVal = new BigDecimal(0.00); - } - result = NumberFormat.getCurrencyInstance(Locale.ITALY).format(importoSpeseVal); - } - out.print(result); + DettPratica dettPratica = DettPraticaLocalServiceUtil.getDettPratica(pagamento.getClassPk()); %> - - - - - <% - String result = ""; - if(dettPratica.isNormEsenteBollo()){ - result = "Esente"; - } else { - BigDecimal importoBolliVal; - if( Validator.isNotNull(pagamento.getImporto())){ - importoBolliVal = new BigDecimal(pagamento.getImporto()); - } else{ - importoBolliVal = new BigDecimal(0.00); - } - result = NumberFormat.getCurrencyInstance(Locale.ITALY).format(importoBolliVal); - } - out.print(result); - %> - - - - - <% - String[] notAllowed = new String[]{PagamentoConstants.UTILIZZATA_SOSTITUITA, PagamentoConstants.UTILIZZATA_RIFIUTATA, PagamentoConstants.UTILIZZATA_NON_PAGABILE}; - %> - - <% - String buttonFormId = "pagamentoFormButton_"+index; - String contentFormId = "pagamentoFormContent_"+index; - String formNameBollettino = "fmPagamenti_"+index; - %> - - - -
- - - - - -
- - - - - - - - - -
-
- - <% - String[] notAllowed = new String[]{PagamentoConstants.UTILIZZATA_SOSTITUITA, PagamentoConstants.UTILIZZATA_RIFIUTATA, PagamentoConstants.UTILIZZATA_NON_PAGABILE}; - %> - - <% - String buttonId = "pagamentoButton_"+index; - String contentId = "pagamentoContent_"+index; - %> - - - -
- - - - + + + + + + + + <% + String result; + if (dettPratica.isNormEsenteSpese()) { + result = "Esente"; + } else { + BigDecimal importoSpeseVal; + if (Validator.isNotNull(pagamento.getImporto())) { + importoSpeseVal = new BigDecimal(pagamento.getImporto()); + } else { + importoSpeseVal = new BigDecimal(0.00); + } + result = NumberFormat.getCurrencyInstance(Locale.ITALY).format(importoSpeseVal); + } + out.print(result); + %> + + - - + <% + String result; + if (dettPratica.isNormEsenteBollo()) { + result = "Esente"; + } else { + BigDecimal importoBolliVal; + if (Validator.isNotNull(pagamento.getImporto())) { + importoBolliVal = new BigDecimal(pagamento.getImporto()); + } else { + importoBolliVal = new BigDecimal(0.00); + } + result = NumberFormat.getCurrencyInstance(Locale.ITALY).format(importoBolliVal); + } + out.print(result); + %> + + + + <% + String[] notAllowed = new String[]{PagamentoConstants.UTILIZZATA_SOSTITUITA, + PagamentoConstants.UTILIZZATA_RIFIUTATA, PagamentoConstants.UTILIZZATA_NON_PAGABILE}; + %> + + <% + String buttonFormId = "pagamentoFormButton_" + index; + String contentFormId = "pagamentoFormContent_" + index; + String formNameBollettino = "fmPagamenti_" + index; + %> + + + +
+ + + + + +
+ + + + + + +
- - - +
+ + <% + String[] notAllowed = new String[]{PagamentoConstants.UTILIZZATA_SOSTITUITA, + PagamentoConstants.UTILIZZATA_RIFIUTATA, PagamentoConstants.UTILIZZATA_NON_PAGABILE}; + %> + + <% + String buttonId = "pagamentoButton_" + index; + String contentId = "pagamentoContent_" + index; + %> + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
-
- - - - - - - - +
- - - -
-
- diff --git a/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/DisponibilitaLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/DisponibilitaLocalServiceImpl.java index d713bae6..36dbee16 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/DisponibilitaLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/DisponibilitaLocalServiceImpl.java @@ -108,8 +108,8 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase Organization organization = OrganizationLocalServiceUtil.fetchOrganization(presidio); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - Disponibilita disponibilita = disponibilitaPersistence.create(counterLocalService.increment(Disponibilita.class - .getName())); + Disponibilita disponibilita = + disponibilitaPersistence.create(counterLocalService.increment(Disponibilita.class.getName())); User user = userPersistence.findByPrimaryKey(userId); Date now = new Date(); disponibilita.setCompanyId(serviceContext.getCompanyId()); @@ -124,7 +124,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase disponibilita.setPresidio(presidio); disponibilita.setExactDate(sdf.format(startDate)); disponibilita.setDisponibile(true); - disponibilita = disponibilitaLocalService.updateDisponibilita(disponibilita); + disponibilita = updateDisponibilita(disponibilita); return disponibilita; } @@ -134,8 +134,8 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase Organization organization = OrganizationLocalServiceUtil.fetchOrganization(presidio); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - Disponibilita disponibilita = disponibilitaPersistence.create(counterLocalService.increment(Disponibilita.class - .getName())); + Disponibilita disponibilita = + disponibilitaPersistence.create(counterLocalService.increment(Disponibilita.class.getName())); User user = userPersistence.findByPrimaryKey(userId); Date now = new Date(); disponibilita.setCompanyId(serviceContext.getCompanyId()); @@ -150,7 +150,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase disponibilita.setPresidio(presidio); disponibilita.setExactDate(sdf.format(startDate)); disponibilita.setDisponibile(false); - disponibilita = disponibilitaLocalService.updateDisponibilita(disponibilita); + disponibilita = updateDisponibilita(disponibilita); return disponibilita; } @@ -166,11 +166,12 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List users = userLocalService.getOrganizationUsers(presidioId); for (User user : users) { Role portosSupporto = RoleLocalServiceUtil.getRole(organization.getCompanyId(), "portos_supporto"); - Role portosIstruttore = RoleLocalServiceUtil.getRole(organization.getCompanyId(), - "portos_calendario"); + Role portosIstruttore = + RoleLocalServiceUtil.getRole(organization.getCompanyId(), "portos_calendario"); if (!userLocalService.hasRoleUser(portosSupporto.getRoleId(), user.getUserId())) { - boolean isIstruttore = UserGroupRoleLocalServiceUtil.hasUserGroupRole(user.getUserId(), - organization.getGroupId(), portosIstruttore.getRoleId()); + boolean isIstruttore = + UserGroupRoleLocalServiceUtil.hasUserGroupRole(user.getUserId(), + organization.getGroupId(), portosIstruttore.getRoleId()); if (isIstruttore) { userDefinitivo.add(user); } @@ -204,7 +205,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase for (Iterator iterator = results.iterator(); iterator.hasNext();) { Disponibilita disponibilita = iterator.next(); disponibilita.setDisponibile(true); - disponibilitaLocalService.updateDisponibilita(disponibilita); + updateDisponibilita(disponibilita); } } } @@ -242,7 +243,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase for (Iterator iterator = results.iterator(); iterator.hasNext();) { Disponibilita disponibilita = iterator.next(); disponibilita.setDisponibile(true); - disponibilitaLocalService.updateDisponibilita(disponibilita); + updateDisponibilita(disponibilita); } } } @@ -269,8 +270,9 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase Calendar cal2 = Calendar.getInstance(); cal1.setTime(date1); cal2.setTime(date2); - boolean sameDay = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) - && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR); + boolean sameDay = + cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) + && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR); return sameDay; } @@ -328,7 +330,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase dynamicQuery.add(RestrictionsFactoryUtil.ge("startDate", start)); Order defaultOrder = OrderFactoryUtil.asc("startDate"); dynamicQuery.addOrder(defaultOrder); - return disponibilitaLocalService.dynamicQuery(dynamicQuery, startRow, endRow); + return dynamicQuery(dynamicQuery, startRow, endRow); } @Override @@ -340,7 +342,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase dynamicQuery.add(RestrictionsFactoryUtil.ge("startDate", start)); Order defaultOrder = OrderFactoryUtil.asc("startDate"); dynamicQuery.addOrder(defaultOrder); - return disponibilitaLocalService.dynamicQuery(dynamicQuery, QueryUtil.ALL_POS, QueryUtil.ALL_POS).size(); + return dynamicQuery(dynamicQuery, QueryUtil.ALL_POS, QueryUtil.ALL_POS).size(); } @SuppressWarnings("unchecked") @@ -352,11 +354,11 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgIds = new ArrayList(); try { Role dirigenteGenerale = RoleLocalServiceUtil.getRole(user.getCompanyId(), "dirigente_generale"); - boolean isDirigenteGenerale = RoleLocalServiceUtil.hasUserRole(user.getUserId(), - dirigenteGenerale.getRoleId()); + boolean isDirigenteGenerale = + RoleLocalServiceUtil.hasUserRole(user.getUserId(), dirigenteGenerale.getRoleId()); if (isDirigenteGenerale) { - List orgs = OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, - QueryUtil.ALL_POS); + List orgs = + OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, QueryUtil.ALL_POS); for (Organization organization : orgs) { if (organization.getParentOrganization() != null) { orgIds.add(organization.getOrganizationId()); @@ -366,8 +368,9 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgs = OrganizationLocalServiceUtil.getUserOrganizations(funzionarioId); for (Organization organization : orgs) { Role portosPO = RoleLocalServiceUtil.getRole(organization.getCompanyId(), "portos_po"); - boolean isPO = UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, - organization.getGroupId(), portosPO.getRoleId()); + boolean isPO = + UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, organization.getGroupId(), + portosPO.getRoleId()); if (isPO) { orgIds.add(organization.getOrganizationId()); } @@ -391,7 +394,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase dynamicQuery.add(RestrictionsFactoryUtil.ge("startDate", start)); Order defaultOrder = OrderFactoryUtil.asc("startDate"); dynamicQuery.addOrder(defaultOrder); - return disponibilitaLocalService.dynamicQuery(dynamicQuery, startRow, endRow); + return dynamicQuery(dynamicQuery, startRow, endRow); } @Override @@ -402,11 +405,11 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgIds = new ArrayList(); try { Role dirigenteGenerale = RoleLocalServiceUtil.getRole(user.getCompanyId(), "dirigente_generale"); - boolean isDirigenteGenerale = RoleLocalServiceUtil.hasUserRole(user.getUserId(), - dirigenteGenerale.getRoleId()); + boolean isDirigenteGenerale = + RoleLocalServiceUtil.hasUserRole(user.getUserId(), dirigenteGenerale.getRoleId()); if (isDirigenteGenerale) { - List orgs = OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, - QueryUtil.ALL_POS); + List orgs = + OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, QueryUtil.ALL_POS); for (Organization organization : orgs) { if (organization.getParentOrganization() != null) { orgIds.add(organization.getOrganizationId()); @@ -416,8 +419,9 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgs = OrganizationLocalServiceUtil.getUserOrganizations(funzionarioId); for (Organization organization : orgs) { Role portosPO = RoleLocalServiceUtil.getRole(organization.getCompanyId(), "portos_po"); - boolean isPO = UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, - organization.getGroupId(), portosPO.getRoleId()); + boolean isPO = + UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, organization.getGroupId(), + portosPO.getRoleId()); if (isPO) { orgIds.add(organization.getOrganizationId()); } @@ -441,7 +445,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase dynamicQuery.add(RestrictionsFactoryUtil.ge("startDate", start)); Order defaultOrder = OrderFactoryUtil.asc("startDate"); dynamicQuery.addOrder(defaultOrder); - return disponibilitaLocalService.dynamicQuery(dynamicQuery, QueryUtil.ALL_POS, QueryUtil.ALL_POS).size(); + return dynamicQuery(dynamicQuery, QueryUtil.ALL_POS, QueryUtil.ALL_POS).size(); } @SuppressWarnings("unchecked") @@ -453,11 +457,11 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgIds = new ArrayList(); try { Role dirigenteGenerale = RoleLocalServiceUtil.getRole(user.getCompanyId(), "dirigente_generale"); - boolean isDirigenteGenerale = RoleLocalServiceUtil.hasUserRole(user.getUserId(), - dirigenteGenerale.getRoleId()); + boolean isDirigenteGenerale = + RoleLocalServiceUtil.hasUserRole(user.getUserId(), dirigenteGenerale.getRoleId()); if (isDirigenteGenerale) { - List orgs = OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, - QueryUtil.ALL_POS); + List orgs = + OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, QueryUtil.ALL_POS); for (Organization organization : orgs) { if (organization.getParentOrganization() != null) { orgIds.add(organization.getOrganizationId()); @@ -467,8 +471,9 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgs = OrganizationLocalServiceUtil.getUserOrganizations(funzionarioId); for (Organization organization : orgs) { Role portosPO = RoleLocalServiceUtil.getRole(organization.getCompanyId(), "portos_po"); - boolean isPO = UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, - organization.getGroupId(), portosPO.getRoleId()); + boolean isPO = + UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, organization.getGroupId(), + portosPO.getRoleId()); if (isPO) { orgIds.add(organization.getOrganizationId()); } @@ -484,7 +489,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase dynamicQuery.add(RestrictionsFactoryUtil.ge("startDate", start)); Order defaultOrder = OrderFactoryUtil.asc("startDate"); dynamicQuery.addOrder(defaultOrder); - return disponibilitaLocalService.dynamicQuery(dynamicQuery, startRow, endRow); + return dynamicQuery(dynamicQuery, startRow, endRow); } @Override @@ -494,11 +499,11 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgIds = new ArrayList(); try { Role dirigenteGenerale = RoleLocalServiceUtil.getRole(user.getCompanyId(), "dirigente_generale"); - boolean isDirigenteGenerale = RoleLocalServiceUtil.hasUserRole(user.getUserId(), - dirigenteGenerale.getRoleId()); + boolean isDirigenteGenerale = + RoleLocalServiceUtil.hasUserRole(user.getUserId(), dirigenteGenerale.getRoleId()); if (isDirigenteGenerale) { - List orgs = OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, - QueryUtil.ALL_POS); + List orgs = + OrganizationLocalServiceUtil.getOrganizations(QueryUtil.ALL_POS, QueryUtil.ALL_POS); for (Organization organization : orgs) { if (organization.getParentOrganization() != null) { orgIds.add(organization.getOrganizationId()); @@ -508,8 +513,9 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase List orgs = OrganizationLocalServiceUtil.getUserOrganizations(funzionarioId); for (Organization organization : orgs) { Role portosPO = RoleLocalServiceUtil.getRole(organization.getCompanyId(), "portos_po"); - boolean isPO = UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, - organization.getGroupId(), portosPO.getRoleId()); + boolean isPO = + UserGroupRoleLocalServiceUtil.hasUserGroupRole(funzionarioId, organization.getGroupId(), + portosPO.getRoleId()); if (isPO) { orgIds.add(organization.getOrganizationId()); } @@ -525,7 +531,7 @@ public class DisponibilitaLocalServiceImpl extends DisponibilitaLocalServiceBase dynamicQuery.add(RestrictionsFactoryUtil.ge("startDate", start)); Order defaultOrder = OrderFactoryUtil.asc("startDate"); dynamicQuery.addOrder(defaultOrder); - return disponibilitaLocalService.dynamicQuery(dynamicQuery, QueryUtil.ALL_POS, QueryUtil.ALL_POS).size(); + return dynamicQuery(dynamicQuery, QueryUtil.ALL_POS, QueryUtil.ALL_POS).size(); } private Date formatDateTime(String orario, Date day) throws ParseException { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/PrenotazioneLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/PrenotazioneLocalServiceImpl.java index 284d7f62..b0bb7950 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/PrenotazioneLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-calendar-appointments-portlet/docroot/WEB-INF/src/it/tref/portos/calendar/appointments/service/impl/PrenotazioneLocalServiceImpl.java @@ -60,8 +60,8 @@ public class PrenotazioneLocalServiceImpl extends PrenotazioneLocalServiceBaseIm Date endDate, String descrizione, String telefono, String email, long presidio, ServiceContext serviceContext) throws SystemException, PortalException { - Prenotazione prenotazione = prenotazionePersistence.create(counterLocalService.increment(Prenotazione.class - .getName())); + Prenotazione prenotazione = + prenotazionePersistence.create(counterLocalService.increment(Prenotazione.class.getName())); User user = userPersistence.findByPrimaryKey(userId); Date now = new Date(); prenotazione.setCompanyId(serviceContext.getCompanyId()); @@ -77,7 +77,7 @@ public class PrenotazioneLocalServiceImpl extends PrenotazioneLocalServiceBaseIm prenotazione.setDescLong(descrizione); prenotazione.setTelefono(telefono); prenotazione.setEmail(email); - prenotazione = prenotazioneLocalService.updatePrenotazione(prenotazione); + prenotazione = updatePrenotazione(prenotazione); return prenotazione; } @@ -91,7 +91,7 @@ public class PrenotazioneLocalServiceImpl extends PrenotazioneLocalServiceBaseIm prenotazione.setStartDate(startDate); prenotazione.setEndDate(endDate); prenotazione.setDescLong(descrizione); - prenotazione = prenotazioneLocalService.updatePrenotazione(prenotazione); + prenotazione = updatePrenotazione(prenotazione); return prenotazione; } @@ -185,10 +185,11 @@ public class PrenotazioneLocalServiceImpl extends PrenotazioneLocalServiceBaseIm if (org != null) { List users = userLocalService.getOrganizationUsers(presidioId); for (User user : users) { - boolean isCalendario = UserGroupRoleLocalServiceUtil.hasUserGroupRole(user.getUserId(), - org.getGroupId(), portosCalendario.getRoleId()); + boolean isCalendario = + UserGroupRoleLocalServiceUtil.hasUserGroupRole(user.getUserId(), org.getGroupId(), + portosCalendario.getRoleId()); if (isCalendario) { - DynamicQuery dynamicQuery = dynamicQuery(); + DynamicQuery dynamicQuery = dynamicQuery(); dynamicQuery.add(RestrictionsFactoryUtil.eq("funzionarioId", user.getUserId())); dynamicQuery.add(RestrictionsFactoryUtil.between("startDate", fromCal.getTime(), toCal.getTime())); dynamicQuery.add(RestrictionsFactoryUtil.eq("groupId", org.getGroupId())); diff --git a/liferay-plugins-sdk-6.2/portlets/portos-cookies-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/cookies/action/StartUpAction.java b/liferay-plugins-sdk-6.2/portlets/portos-cookies-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/cookies/action/StartUpAction.java index 0297c7e4..2e85f9bd 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-cookies-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/cookies/action/StartUpAction.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-cookies-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/cookies/action/StartUpAction.java @@ -25,7 +25,7 @@ import com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil; public class StartUpAction extends SimpleAction { - private final static Log _log = LogFactoryUtil.getLog(StartUpAction.class); + private static final Log _log = LogFactoryUtil.getLog(StartUpAction.class); @Override public void run(String[] companyIds) throws ActionException { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationLogException.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationLogException.java new file mode 100644 index 00000000..ec4c309e --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationLogException.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + */ + +package it.tref.liferay.portos.deployalert; + +import com.liferay.portal.NoSuchModelException; + +/** + * @author Matteo + */ +public class NoSuchNotificationLogException extends NoSuchModelException { + + public NoSuchNotificationLogException() { + super(); + } + + public NoSuchNotificationLogException(String msg) { + super(msg); + } + + public NoSuchNotificationLogException(String msg, Throwable cause) { + super(msg, cause); + } + + public NoSuchNotificationLogException(Throwable cause) { + super(cause); + } + +} \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationMailException.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationMailException.java new file mode 100644 index 00000000..f9d94c11 --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/deployalert/NoSuchNotificationMailException.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + */ + +package it.tref.liferay.portos.deployalert; + +import com.liferay.portal.NoSuchModelException; + +/** + * @author Matteo + */ +public class NoSuchNotificationMailException extends NoSuchModelException { + + public NoSuchNotificationMailException() { + super(); + } + + public NoSuchNotificationMailException(String msg) { + super(msg); + } + + public NoSuchNotificationMailException(String msg, Throwable cause) { + super(msg, cause); + } + + public NoSuchNotificationMailException(Throwable cause) { + super(cause); + } + +} \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/action/DeployAction.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/action/DeployAction.java index 027b1b69..5297156b 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/action/DeployAction.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/action/DeployAction.java @@ -1,5 +1,14 @@ package it.tref.liferay.portos.deployalert.action; +import it.tref.liferay.portos.deployalert.constants.MailConstants; +import it.tref.liferay.portos.deployalert.model.NotificationMail; +import it.tref.liferay.portos.deployalert.service.NotificationLogLocalServiceUtil; +import it.tref.liferay.portos.deployalert.service.NotificationMailLocalServiceUtil; +import it.tref.liferay.portos.deployalert.util.DeployAlertUtil; +import it.tref.liferay.portos.mailmanager.shared.messaging.util.MailManagerUtil; + +import java.util.List; + import com.liferay.portal.kernel.events.ActionException; import com.liferay.portal.kernel.events.SimpleAction; import com.liferay.portal.kernel.exception.PortalException; @@ -16,30 +25,12 @@ import com.liferay.portal.model.Company; import com.liferay.portal.service.ServiceContext; import com.liferay.portal.util.PortalUtil; -import it.tref.liferay.portos.deployalert.constants.MailConstants; -import it.tref.liferay.portos.deployalert.model.NotificationMail; -import it.tref.liferay.portos.deployalert.service.NotificationLogLocalServiceUtil; -import it.tref.liferay.portos.deployalert.service.NotificationMailLocalServiceUtil; -import it.tref.liferay.portos.deployalert.util.DeployAlertUtil; -import it.tref.liferay.portos.mailmanager.shared.messaging.util.MailManagerUtil; - -import java.util.List; - public class DeployAction extends SimpleAction { - private final static Log _log = LogFactoryUtil.getLog(DeployAction.class); + private static final Log _log = LogFactoryUtil.getLog(DeployAction.class); @Override public void run(final String[] ids) throws ActionException { - /* - * ServiceContext serviceContext = DeployAlertUtil.getServiceContext(); - * try { PermissionThreadLocal - * .setPermissionChecker(PermissionCheckerFactoryUtil - * .create(UserLocalServiceUtil .getUser(serviceContext.getUserId()))); - * } catch (Exception e) { _log.error(e, e); } - * DeployAlertUtil.addDefaultDeployMailTemplate(serviceContext); - * DeployAlertUtil.addDefaultUndeployMailTemplate(serviceContext); - */ MessageBusUtil.registerMessageListener(DestinationNames.HOT_DEPLOY, new MessageListener() { @@ -48,7 +39,6 @@ public class DeployAction extends SimpleAction { String evento = message.getString("command"); String nomePlugin = message.getString("servletContextName"); - if (evento.equals("undeploy") && nomePlugin.equals("portos-deploy-alert-portlet")) { try { NotificationLogLocalServiceUtil.addNotification(nomePlugin, evento); @@ -59,16 +49,12 @@ public class DeployAction extends SimpleAction { } else if (evento.equals("deploy") || evento.equals("undeploy")) { try { List notifications; - NotificationLogLocalServiceUtil.addNotification(nomePlugin, evento); - - notifications = NotificationMailLocalServiceUtil.findNotifications( - PortalUtil.getDefaultCompanyId(), nomePlugin); - + notifications = + NotificationMailLocalServiceUtil.findNotifications(PortalUtil.getDefaultCompanyId(), + nomePlugin); for (int i = 0; i < notifications.size(); i++) { - String templateName = notifications.get(i).getNomeTemplate(); - if (templateName.equals(MailConstants.DEFAULT_TEMPLATE)) { if (evento.equals("deploy")) { templateName = MailConstants.DEFAULT_DEPLOY_TEMPLATE; @@ -76,14 +62,11 @@ public class DeployAction extends SimpleAction { templateName = MailConstants.DEFAULT_UNDEPLOY_TEMPLATE; } } - JSONObject parametri = DeployAlertUtil.getParametri(nomePlugin, evento); - ServiceContext serviceContext = DeployAlertUtil.getServiceContext(); MailManagerUtil.sendMailByTemplateName(Company.class.toString(), serviceContext.getCompanyId(), templateName, parametri, serviceContext); } - } catch (Exception e) { _log.error(e, e); } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/constants/MailConstants.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/constants/MailConstants.java index fbff52dc..da04b75a 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/constants/MailConstants.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/constants/MailConstants.java @@ -2,10 +2,7 @@ package it.tref.liferay.portos.deployalert.constants; public class MailConstants { - public static final String DEFAULT_TEMPLATE = "default"; - - public static final String DEFAULT_DEPLOY_TEMPLATE = "default-deploy"; - - public static final String DEFAULT_UNDEPLOY_TEMPLATE = "default-undeploy"; - + public static final String DEFAULT_TEMPLATE = "default"; + public static final String DEFAULT_DEPLOY_TEMPLATE = "default-deploy"; + public static final String DEFAULT_UNDEPLOY_TEMPLATE = "default-undeploy"; } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/control/DeployAlertControl.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/control/DeployAlertControl.java index daa35ae1..185ccbd7 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/control/DeployAlertControl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/control/DeployAlertControl.java @@ -8,17 +8,14 @@ import com.liferay.portlet.BaseControlPanelEntry; public class DeployAlertControl extends BaseControlPanelEntry { + @Override public boolean hasAccessPermission(PermissionChecker permissionChecker, Group group, Portlet portlet) throws Exception { long companyId = PortalUtil.getDefaultCompanyId(); - if (companyId == permissionChecker.getCompanyId()) { return true; } - return false; - } - } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationLogImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationLogImpl.java index 351c895b..7ca93a29 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationLogImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationLogImpl.java @@ -1,34 +1,29 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package it.tref.liferay.portos.deployalert.model.impl; /** - * The extended model implementation for the NotificationLog service. Represents a row in the "NO_NotificationLog" database table, with each column mapped to a property of this class. - * + * The extended model implementation for the NotificationLog service. Represents a row in the + * "NO_NotificationLog" database table, with each column mapped to a property of this class. *

- * Helper methods and all application logic should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy their definitions into the {@link it.tref.liferay.portos.deployalert.model.NotificationLog} interface. + * Helper methods and all application logic should be put in this class. Whenever methods are added, rerun + * ServiceBuilder to copy their definitions into the {@link it.tref.liferay.portos.deployalert.model.NotificationLog} + * interface. *

* * @author Matteo */ +@SuppressWarnings("serial") public class NotificationLogImpl extends NotificationLogBaseImpl { /* - * NOTE FOR DEVELOPERS: - * - * Never reference this class directly. All methods that expect a notification log model instance should use the {@link it.tref.liferay.portos.deployalert.model.NotificationLog} interface instead. + * NOTE FOR DEVELOPERS: Never reference this class directly. All methods that expect a notification log model + * instance should use the {@link it.tref.liferay.portos.deployalert.model.NotificationLog} interface instead. */ - public NotificationLogImpl() { - } -} \ No newline at end of file + public NotificationLogImpl() {} +} diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationMailImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationMailImpl.java index 49c30b14..d033b281 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationMailImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/model/impl/NotificationMailImpl.java @@ -1,41 +1,30 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package it.tref.liferay.portos.deployalert.model.impl; - /** * The extended model implementation for the NotificationMail service. Represents a row in the - * "NO_NotificationMail" database table, with each column mapped to a property of this - * class. + * "NO_NotificationMail" database table, with each column mapped to a property of this class. *

- * Helper methods and all application logic should be put in this class. Whenever methods are added, - * rerun ServiceBuilder to copy their definitions into the - * {@link it.tref.liferay.portos.deployalert.model.NotificationMail} interface. + * Helper methods and all application logic should be put in this class. Whenever methods are added, rerun + * ServiceBuilder to copy their definitions into the {@link it.tref.liferay.portos.deployalert.model.NotificationMail} + * interface. *

* * @author Matteo */ +@SuppressWarnings("serial") public class NotificationMailImpl extends NotificationMailBaseImpl { - /* - * NOTE FOR DEVELOPERS: Never reference this class directly. All methods that expect a - * notification mail model instance should use the {@link - * it.tref.liferay.portos.deployalert.model.NotificationMail} interface instead. - */ - public NotificationMailImpl() { - - } - + /* + * NOTE FOR DEVELOPERS: Never reference this class directly. All methods that expect a notification mail model + * instance should use the {@link it.tref.liferay.portos.deployalert.model.NotificationMail} interface instead. + */ + public NotificationMailImpl() {} } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/portlet/NotificatorPortlet.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/portlet/NotificatorPortlet.java index 62003a74..79fcadd2 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/portlet/NotificatorPortlet.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/portlet/NotificatorPortlet.java @@ -1,5 +1,11 @@ package it.tref.liferay.portos.deployalert.portlet; +import it.tref.liferay.portos.deployalert.model.NotificationMail; +import it.tref.liferay.portos.deployalert.service.NotificationMailLocalServiceUtil; + +import javax.portlet.ActionRequest; +import javax.portlet.ActionResponse; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.servlet.SessionErrors; @@ -8,61 +14,45 @@ import com.liferay.portal.service.ServiceContext; import com.liferay.portal.service.ServiceContextFactory; import com.liferay.util.bridges.mvc.MVCPortlet; -import it.tref.liferay.portos.deployalert.model.NotificationMail; -import it.tref.liferay.portos.deployalert.service.NotificationMailLocalServiceUtil; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; - -/** - * Portlet implementation class AdminDeployNotificatorPortlet - */ public class NotificatorPortlet extends MVCPortlet { - public void addNotification(ActionRequest request, ActionResponse response) throws PortalException, SystemException { - - ServiceContext serviceContext = ServiceContextFactory.getInstance(NotificationMail.class.getName(), request); - - String nomePlugin = ParamUtil.getString(request, "nomePlugin"); - String nomeTemplate = ParamUtil.getString(request, "nomeTemplate"); - - try { - NotificationMailLocalServiceUtil.addNotification(nomePlugin, nomeTemplate, serviceContext); - } catch (PortalException e) { - SessionErrors.add(request, e.getClass()); - - response.setRenderParameter("mvcPath", "/html/notificator/edit_notification.jsp"); - } - } - - public void deleteNotification(ActionRequest request, ActionResponse response) throws PortalException, - SystemException { - - long notificationId = ParamUtil.getLong(request, "notificationId"); - - try { - NotificationMailLocalServiceUtil.deleteNotificationMail(notificationId); - - } catch (PortalException pe) { - SessionErrors.add(request, pe.getClass().getName()); - } - } - - public void updateNotification(ActionRequest request, ActionResponse response) throws PortalException, - SystemException { - - ServiceContext serviceContext = ServiceContextFactory.getInstance(NotificationMail.class.getName(), request); - - String nomePlugin = ParamUtil.getString(request, "nomePlugin"); - String nomeTemplate = ParamUtil.getString(request, "nomeTemplate"); - long notificationId = ParamUtil.getLong(request, "notificationId"); - - try { - NotificationMailLocalServiceUtil.updateNotification(nomePlugin, nomeTemplate, serviceContext, notificationId); - } catch (PortalException pe) { - SessionErrors.add(request, pe.getClass()); - - response.setRenderParameter("mvcPath", "/html/notificator/edit_notification.jsp"); - } - } + public void addNotification(ActionRequest request, ActionResponse response) throws PortalException, SystemException { + + ServiceContext serviceContext = ServiceContextFactory.getInstance(NotificationMail.class.getName(), request); + String nomePlugin = ParamUtil.getString(request, "nomePlugin"); + String nomeTemplate = ParamUtil.getString(request, "nomeTemplate"); + try { + NotificationMailLocalServiceUtil.addNotification(nomePlugin, nomeTemplate, serviceContext); + } catch (PortalException e) { + SessionErrors.add(request, e.getClass()); + response.setRenderParameter("mvcPath", "/html/notificator/edit_notification.jsp"); + } + } + + public void deleteNotification(ActionRequest request, ActionResponse response) throws PortalException, + SystemException { + + long notificationId = ParamUtil.getLong(request, "notificationId"); + try { + NotificationMailLocalServiceUtil.deleteNotificationMail(notificationId); + } catch (PortalException pe) { + SessionErrors.add(request, pe.getClass().getName()); + } + } + + public void updateNotification(ActionRequest request, ActionResponse response) throws PortalException, + SystemException { + + ServiceContext serviceContext = ServiceContextFactory.getInstance(NotificationMail.class.getName(), request); + String nomePlugin = ParamUtil.getString(request, "nomePlugin"); + String nomeTemplate = ParamUtil.getString(request, "nomeTemplate"); + long notificationId = ParamUtil.getLong(request, "notificationId"); + try { + NotificationMailLocalServiceUtil.updateNotification(nomePlugin, nomeTemplate, serviceContext, + notificationId); + } catch (PortalException pe) { + SessionErrors.add(request, pe.getClass()); + response.setRenderParameter("mvcPath", "/html/notificator/edit_notification.jsp"); + } + } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogLocalServiceImpl.java index 92f0414f..f581bdc7 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogLocalServiceImpl.java @@ -1,23 +1,13 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package it.tref.liferay.portos.deployalert.service.impl; -import com.liferay.portal.kernel.exception.PortalException; -import com.liferay.portal.kernel.exception.SystemException; -import com.liferay.portal.kernel.util.Validator; - import it.tref.liferay.portos.deployalert.NotificationNomePluginException; import it.tref.liferay.portos.deployalert.NotificationTipoException; import it.tref.liferay.portos.deployalert.model.NotificationLog; @@ -25,17 +15,18 @@ import it.tref.liferay.portos.deployalert.service.base.NotificationLogLocalServi import java.util.Date; +import com.liferay.portal.kernel.exception.PortalException; +import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.util.Validator; + /** * The implementation of the notification log local service. *

- * All custom service methods should be put in this class. Whenever methods are - * added, rerun ServiceBuilder to copy their definitions into the - * {@link it.tref.liferay.portos.deployalert.service.NotificationLogLocalService} - * interface. + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.tref.liferay.portos.deployalert.service.NotificationLogLocalService} interface. *

- * This is a local service. Methods of this service will not have security - * checks based on the propagated JAAS credentials because this service can only - * be accessed from within the same VM. + * This is a local service. Methods of this service will not have security checks based on the propagated JAAS + * credentials because this service can only be accessed from within the same VM. *

* * @author Matteo @@ -44,22 +35,17 @@ import java.util.Date; */ public class NotificationLogLocalServiceImpl extends NotificationLogLocalServiceBaseImpl { - public NotificationLog addNotification(String nomePlugin, String tipo) throws SystemException, - PortalException { + @Override + public NotificationLog addNotification(String nomePlugin, String tipo) throws SystemException, PortalException { Date now = new Date(); - validate(nomePlugin, tipo); - long notificationId = counterLocalService.increment(NotificationLog.class.getName()); - NotificationLog notification = notificationLogPersistence.create(notificationId); - notification.setTipo(tipo); notification.setNomePlugin(nomePlugin); notification.setData(now); notificationLogPersistence.update(notification); - return notification; } @@ -72,6 +58,5 @@ public class NotificationLogLocalServiceImpl extends NotificationLogLocalService if (Validator.isNull(tipo)) { throw new NotificationTipoException(); } - } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogServiceImpl.java index 1b74b122..a8b75ab9 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationLogServiceImpl.java @@ -1,15 +1,9 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package it.tref.liferay.portos.deployalert.service.impl; @@ -18,12 +12,12 @@ import it.tref.liferay.portos.deployalert.service.base.NotificationLogServiceBas /** * The implementation of the notification log remote service. - * *

- * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy their definitions into the {@link it.tref.liferay.portos.deployalert.service.NotificationLogService} interface. - * + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.tref.liferay.portos.deployalert.service.NotificationLogService} interface. *

- * This is a remote service. Methods of this service are expected to have security checks based on the propagated JAAS credentials because this service can be accessed remotely. + * This is a remote service. Methods of this service are expected to have security checks based on the propagated JAAS + * credentials because this service can be accessed remotely. *

* * @author Matteo @@ -32,8 +26,8 @@ import it.tref.liferay.portos.deployalert.service.base.NotificationLogServiceBas */ public class NotificationLogServiceImpl extends NotificationLogServiceBaseImpl { /* - * NOTE FOR DEVELOPERS: - * - * Never reference this interface directly. Always use {@link it.tref.liferay.portos.deployalert.service.NotificationLogServiceUtil} to access the notification log remote service. + * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link + * it.tref.liferay.portos.deployalert.service.NotificationLogServiceUtil} to access the notification log remote + * service. */ -} \ No newline at end of file +} diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailLocalServiceImpl.java index 3a82f2ad..1b8d384a 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailLocalServiceImpl.java @@ -1,19 +1,22 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package it.tref.liferay.portos.deployalert.service.impl; +import it.tref.liferay.portos.deployalert.NotificationNomePluginException; +import it.tref.liferay.portos.deployalert.NotificationNomeTemplateException; +import it.tref.liferay.portos.deployalert.model.NotificationMail; +import it.tref.liferay.portos.deployalert.service.NotificationMailLocalServiceUtil; +import it.tref.liferay.portos.deployalert.service.base.NotificationMailLocalServiceBaseImpl; + +import java.util.Date; +import java.util.List; + import com.liferay.portal.kernel.dao.orm.Disjunction; import com.liferay.portal.kernel.dao.orm.DynamicQuery; import com.liferay.portal.kernel.dao.orm.OrderFactoryUtil; @@ -25,26 +28,14 @@ import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.model.User; import com.liferay.portal.service.ServiceContext; -import it.tref.liferay.portos.deployalert.NotificationNomePluginException; -import it.tref.liferay.portos.deployalert.NotificationNomeTemplateException; -import it.tref.liferay.portos.deployalert.model.NotificationMail; -import it.tref.liferay.portos.deployalert.service.NotificationMailLocalServiceUtil; -import it.tref.liferay.portos.deployalert.service.base.NotificationMailLocalServiceBaseImpl; - -import java.util.Date; -import java.util.List; - /** * The implementation of the notification mail local service. *

- * All custom service methods should be put in this class. Whenever methods are - * added, rerun ServiceBuilder to copy their definitions into the - * {@link it.tref.liferay.portos.deployalert.service.NotificationMailLocalService} - * interface. + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.tref.liferay.portos.deployalert.service.NotificationMailLocalService} interface. *

- * This is a local service. Methods of this service will not have security - * checks based on the propagated JAAS credentials because this service can only - * be accessed from within the same VM. + * This is a local service. Methods of this service will not have security checks based on the propagated JAAS + * credentials because this service can only be accessed from within the same VM. *

* * @author Matteo @@ -53,19 +44,15 @@ import java.util.List; */ public class NotificationMailLocalServiceImpl extends NotificationMailLocalServiceBaseImpl { - public NotificationMail addNotification(String nomePlugin, String nomeTemplate, - ServiceContext serviceContext) throws PortalException, SystemException { + @Override + public NotificationMail addNotification(String nomePlugin, String nomeTemplate, ServiceContext serviceContext) + throws PortalException, SystemException { User user = userPersistence.findByPrimaryKey(serviceContext.getUserId()); - Date now = new Date(); - validate(nomePlugin, nomeTemplate); - long notificationId = counterLocalService.increment(NotificationMail.class.getName()); - NotificationMail notification = notificationMailPersistence.create(notificationId); - notification.setUserId(user.getUserId()); notification.setCompanyId(user.getCompanyId()); notification.setUserName(user.getFullName()); @@ -74,9 +61,7 @@ public class NotificationMailLocalServiceImpl extends NotificationMailLocalServi notification.setExpandoBridgeAttributes(serviceContext); notification.setNomePlugin(nomePlugin); notification.setNomeTemplate(nomeTemplate); - notificationMailPersistence.update(notification); - return notification; } @@ -91,31 +76,25 @@ public class NotificationMailLocalServiceImpl extends NotificationMailLocalServi } } - public NotificationMail updateNotification(String nomePlugin, String nomeTemplate, - ServiceContext serviceContext, long notificationId) throws SystemException, PortalException { + @Override + public NotificationMail updateNotification(String nomePlugin, String nomeTemplate, ServiceContext serviceContext, + long notificationId) throws SystemException, PortalException { Date now = new Date(); - NotificationMail notification = getNotificationMail(notificationId); - validate(nomePlugin, nomeTemplate); - notification.setModifiedDate(serviceContext.getModifiedDate(now)); notification.setNomePlugin(nomePlugin); notification.setNomeTemplate(nomeTemplate); notification.setExpandoBridgeAttributes(serviceContext); - notificationMailPersistence.update(notification); - return notification; } - public List findNotifications(long companyId, int start, int end) - throws SystemException { + @Override + public List findNotifications(long companyId, int start, int end) throws SystemException { - // return notificationMailPersistence.findBycompanyId(companyId, start, - // end); - DynamicQuery query = notificationMailLocalService.dynamicQuery(); + DynamicQuery query = dynamicQuery(); query.addOrder(OrderFactoryUtil.asc("nomePlugin")); List notifications = null; try { @@ -126,31 +105,30 @@ public class NotificationMailLocalServiceImpl extends NotificationMailLocalServi return notifications; } + @Override public List findNotifications(long companyId) throws SystemException { return notificationMailPersistence.findBycompanyId(companyId); } + @Override public int getNotificationCount(long companyId) throws SystemException { return notificationMailPersistence.countBycompanyId(companyId); } - public List findNotifications(long companyId, String servletContextName) - throws SystemException { - - DynamicQuery dynamicQuery = notificationMailLocalService.dynamicQuery(); + @Override + public List findNotifications(long companyId, String servletContextName) throws SystemException { + DynamicQuery dynamicQuery = dynamicQuery(); if (Validator.isNull(servletContextName)) { Disjunction or = RestrictionsFactoryUtil.disjunction(); or.add(RestrictionsFactoryUtil.isNull("nomePlugin")); or.add(RestrictionsFactoryUtil.eq("nomePlugin", StringPool.BLANK)); - dynamicQuery.add(or); } else { dynamicQuery.add(RestrictionsFactoryUtil.eq("nomePlugin", servletContextName)); } - return notificationMailPersistence.findWithDynamicQuery(dynamicQuery); } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailServiceImpl.java index 69809bad..a26a7135 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/service/impl/NotificationMailServiceImpl.java @@ -1,15 +1,9 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package it.tref.liferay.portos.deployalert.service.impl; @@ -18,17 +12,12 @@ import it.tref.liferay.portos.deployalert.service.base.NotificationMailServiceBa /** * The implementation of the notification mail remote service. - * *

- * All custom service methods should be put in this class. Whenever methods are - * added, rerun ServiceBuilder to copy their definitions into the - * {@link it.tref.liferay.portos.deployalert.service.NotificationMailService} - * interface. - * + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.tref.liferay.portos.deployalert.service.NotificationMailService} interface. *

- * This is a remote service. Methods of this service are expected to have - * security checks based on the propagated JAAS credentials because this service - * can be accessed remotely. + * This is a remote service. Methods of this service are expected to have security checks based on the propagated JAAS + * credentials because this service can be accessed remotely. *

* * @author Matteo @@ -37,10 +26,8 @@ import it.tref.liferay.portos.deployalert.service.base.NotificationMailServiceBa */ public class NotificationMailServiceImpl extends NotificationMailServiceBaseImpl { /* - * NOTE FOR DEVELOPERS: - * - * Never reference this interface directly. Always use {@link - * it.tref.liferay.portos.deployalert.service.NotificationMailServiceUtil} - * to access the notification mail remote service. + * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link + * it.tref.liferay.portos.deployalert.service.NotificationMailServiceUtil} to access the notification mail remote + * service. */ -} \ No newline at end of file +} diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/util/DeployAlertUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/util/DeployAlertUtil.java index c78c5404..f8c8c287 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/util/DeployAlertUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/deployalert/util/DeployAlertUtil.java @@ -1,5 +1,11 @@ package it.tref.liferay.portos.deployalert.util; +import it.tref.liferay.portos.deployalert.constants.MailConstants; +import it.tref.liferay.portos.mailmanager.shared.messaging.util.MailManagerUtil; + +import java.text.SimpleDateFormat; +import java.util.Date; + import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; @@ -16,38 +22,27 @@ import com.liferay.portal.service.ServiceContext; import com.liferay.portal.service.UserLocalServiceUtil; import com.liferay.portal.util.PortalUtil; -import it.tref.liferay.portos.deployalert.constants.MailConstants; -import it.tref.liferay.portos.mailmanager.shared.messaging.util.MailManagerUtil; - -import java.text.SimpleDateFormat; -import java.util.Date; - public class DeployAlertUtil { - private final static Log _log = LogFactoryUtil.getLog(DeployAlertUtil.class); + private static final Log _log = LogFactoryUtil.getLog(DeployAlertUtil.class); public static final ServiceContext getServiceContext() { long companyId = PortalUtil.getDefaultCompanyId(); - ServiceContext serviceContext = new ServiceContext(); Company company; serviceContext.setCompanyId(companyId); - try { company = CompanyLocalServiceUtil.getCompany(companyId); Role role = RoleLocalServiceUtil.getRole(company.getCompanyId(), RoleConstants.ADMINISTRATOR); long userAdminId = UserLocalServiceUtil.getRoleUserIds(role.getRoleId())[0]; - serviceContext.setUserId(userAdminId); serviceContext.setScopeGroupId(company.getGroupId()); - - PermissionThreadLocal.setPermissionChecker(PermissionCheckerFactoryUtil - .create(UserLocalServiceUtil.getUser(userAdminId))); + PermissionThreadLocal.setPermissionChecker(PermissionCheckerFactoryUtil.create(UserLocalServiceUtil + .getUser(userAdminId))); } catch (Exception e) { _log.error(e, e); } - return serviceContext; } @@ -57,10 +52,9 @@ public class DeployAlertUtil { String subject = "Deploy Plugin"; String body = "E' stato effettuato il $evento del plugin $nomePlugin in data $data."; String[] to = { "matteoguggia97@gmail.com" }; - try { - add = MailManagerUtil.addMailTemplate(MailConstants.DEFAULT_DEPLOY_TEMPLATE, - "test@3fconsulting.it", to, null, null, subject, body, false, serviceContext); + add = MailManagerUtil.addMailTemplate(MailConstants.DEFAULT_DEPLOY_TEMPLATE, "test@3fconsulting.it", to, + null, null, subject, body, false, serviceContext); } catch (SystemException e) { _log.error(e, e); } @@ -77,8 +71,8 @@ public class DeployAlertUtil { String[] to = { "matteoguggia97@gmail.com" }; try { - add = MailManagerUtil.addMailTemplate(MailConstants.DEFAULT_UNDEPLOY_TEMPLATE, - "test@3fconsulting.it", to, null, null, subject, body, false, serviceContext); + add = MailManagerUtil.addMailTemplate(MailConstants.DEFAULT_UNDEPLOY_TEMPLATE, "test@3fconsulting.it", to, + null, null, subject, body, false, serviceContext); } catch (SystemException e) { _log.error(e, e); } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/service.properties b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/service.properties index 4cba4298..06e4866b 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/service.properties +++ b/liferay-plugins-sdk-6.2/portlets/portos-deploy-alert-portlet/docroot/WEB-INF/src/service.properties @@ -13,8 +13,8 @@ ## build.namespace=DA - build.number=10 - build.date=1612446773513 + build.number=11 + build.date=1631869742186 build.auto.upgrade=true ## diff --git a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/portlet/RicercaPratichePortlet.java b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/portlet/RicercaPratichePortlet.java index 31f64484..f104f80c 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/portlet/RicercaPratichePortlet.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/portlet/RicercaPratichePortlet.java @@ -31,7 +31,7 @@ import com.liferay.util.bridges.mvc.MVCPortlet; public class RicercaPratichePortlet extends MVCPortlet { - private final static Logger _log = Logger.getLogger(RicercaPratichePortlet.class); + private static final Logger _log = Logger.getLogger(RicercaPratichePortlet.class); public void processAvvisi(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException { @@ -112,4 +112,4 @@ public class RicercaPratichePortlet extends MVCPortlet { super.serveResource(resourceRequest, resourceResponse); } } -} \ No newline at end of file +} diff --git a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/util/ReportFascicoloUtil.java b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/util/ReportFascicoloUtil.java index 9448edde..a6f81ca1 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/util/ReportFascicoloUtil.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/fe/util/ReportFascicoloUtil.java @@ -57,7 +57,7 @@ import com.liferay.portal.service.CompanyLocalServiceUtil; public class ReportFascicoloUtil { - private final static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); public static Map generateParametersReportFascicolo(long intPraticaId, Locale locale, long companyId) throws PortalException, SystemException { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_dettagli.jsp b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_dettagli.jsp index 59b05470..c9f9ada6 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_dettagli.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_dettagli.jsp @@ -802,15 +802,6 @@
- <% - String copertura = BeanPropertiesUtil.getString(dettPratica, "dccCopertura"); - %> - -
- <%=LanguageUtil.get(pageContext, - "dcc-copertura-"+BeanPropertiesUtil.getString(dettPratica, "dccCopertura"))%> -
-
<%= LanguageUtil.get(pageContext, "dcc-copertura-c-a-acciaio") %> diff --git a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_riepilogo.jsp b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_riepilogo.jsp index a0945856..8bc76f2f 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_riepilogo.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-fe-portlet/docroot/html/fascicolofe/view_fascicolo_riepilogo.jsp @@ -1,91 +1,76 @@ <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -<%@page import="it.tref.liferay.portos.bo.util.PraticaUtil"%> +<%@page import="com.liferay.portal.kernel.bean.BeanPropertiesUtil"%> +<%@page import="com.liferay.portal.kernel.servlet.ServletContextPool"%> +<%@page import="com.liferay.portal.service.UserLocalServiceUtil"%> +<%@page import="it.tref.liferay.portos.bo.model.DettPratica"%> <%@page import="it.tref.liferay.portos.bo.service.CollaudoLocalServiceUtil"%> -<%@page import="it.tref.liferay.portos.bo.service.FineLavoriLocalServiceUtil"%> -<%@page import="it.tref.liferay.portos.bo.shared.util.TipoIntegrazioneUtil"%> +<%@page import="it.tref.liferay.portos.bo.service.ComuneLocalServiceUtil"%> <%@page import="it.tref.liferay.portos.bo.service.DettPraticaLocalServiceUtil"%> -<%@page import="it.tref.liferay.portos.bo.service.DettPraticaLocalService"%> -<%@page import="it.tref.liferay.portos.bo.shared.util.StatoPraticaConstants"%> -<%@page import="com.liferay.portal.service.UserLocalServiceUtil"%> -<%@page import="it.tref.liferay.portos.bo.service.SoggettoServiceUtil"%> -<%@page import="com.liferay.portal.kernel.servlet.ServletContextPool"%> -<%@page import="it.tref.liferay.portos.bo.model.Pagamento"%> -<%@page import="it.tref.liferay.portos.bo.shared.util.PagamentoConstants"%> -<%@page import="it.tref.liferay.portos.bo.util.PagamentiCommonUtil"%> -<%@page import="java.math.BigDecimal"%> -<%@page import="java.text.NumberFormat"%> -<%@page import="it.tref.liferay.portos.bo.model.Soggetto"%> -<%@page import="it.tref.liferay.portos.bo.shared.util.TipoSoggettoUtil"%> -<%@page import="it.tref.liferay.portos.bo.service.SoggettoLocalServiceUtil"%> -<%@page import="it.tref.liferay.portos.bo.shared.util.PortletKeys"%> -<%@page import="java.util.Date"%> -<%@page import="it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil"%> <%@page import="it.tref.liferay.portos.bo.service.DettPraticaServiceUtil"%> -<%@page import="com.liferay.portal.kernel.util.KeyValuePair"%> +<%@page import="it.tref.liferay.portos.bo.service.FineLavoriLocalServiceUtil"%> +<%@page import="it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil"%> <%@page import="it.tref.liferay.portos.bo.service.ProvinciaLocalServiceUtil"%> -<%@page import="it.tref.liferay.portos.bo.service.ComuneLocalServiceUtil"%> +<%@page import="it.tref.liferay.portos.bo.service.SoggettoLocalServiceUtil"%> +<%@page import="it.tref.liferay.portos.bo.service.SoggettoServiceUtil"%> <%@page import="it.tref.liferay.portos.bo.service.TerritorioLocalServiceUtil"%> -<%@page import="it.tref.liferay.portos.bo.model.Provincia"%> -<%@page import="it.tref.liferay.portos.bo.model.Comune"%> -<%@page import="it.tref.liferay.portos.bo.model.Territorio"%> -<%@page import="it.tref.liferay.portos.bo.model.IntPratica"%> -<%@page import="it.tref.liferay.portos.bo.model.DettPratica"%> -<%@page import="java.util.ArrayList"%> -<%@page import="java.util.regex.Pattern"%> -<%@page import="com.liferay.portal.kernel.bean.BeanPropertiesUtil"%> -<%@ include file="/html/fascicolofe/init.jsp" %> - +<%@page import="it.tref.liferay.portos.bo.shared.util.TipoIntegrazioneUtil"%> +<%@page import="it.tref.liferay.portos.bo.shared.util.TipoSoggettoUtil"%> +<%@page import="it.tref.liferay.portos.bo.util.PraticaUtil"%> +<%@include file="/html/fascicolofe/init.jsp"%> <% - long intPraticaId = ParamUtil.getLong(request, "intPraticaId",0l); - long dettPraticaId = ParamUtil.getLong(request, "dettPraticaId",0l); - - DettPratica dettPratica = null; - IntPratica intPratica = null; - if(intPraticaId!=0l){ - intPratica = IntPraticaLocalServiceUtil.getIntPratica(intPraticaId); - dettPratica = DettPraticaServiceUtil.getLastEditableByIntPratica(intPraticaId); - if(dettPratica==null){ - dettPratica = DettPraticaServiceUtil.getLastCompletedByIntPratica(intPraticaId); - } - dettPraticaId = dettPratica.getDettPraticaId(); - } - - Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(intPratica.getTerritorioId()); - Comune comune = ComuneLocalServiceUtil.getComune(territorio.getComuneId()); - Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(territorio.getCompanyId(), territorio.getCodiceProvincia()); - String name = StringPool.MINUS; - if(intPratica.getStatusByUserId() != 0) { - name = UserLocalServiceUtil.getUser(intPratica.getStatusByUserId()).getFullName(); +long intPraticaId = ParamUtil.getLong(request, "intPraticaId", 0); +long dettPraticaId = ParamUtil.getLong(request, "dettPraticaId", 0); +DettPratica dettPratica = null; +IntPratica intPratica = null; +if (intPraticaId != 0) { + intPratica = IntPraticaLocalServiceUtil.getIntPratica(intPraticaId); + dettPratica = DettPraticaServiceUtil.getLastEditableByIntPratica(intPraticaId); + if (dettPratica == null) { + dettPratica = DettPraticaServiceUtil.getLastCompletedByIntPratica(intPraticaId); } - - int nVarianti = DettPraticaLocalServiceUtil.countCompletedByIntPraticaAndTipoPratica(intPraticaId, Arrays.asList(new String[]{TipoIntegrazioneUtil.VARIANTE})); - int nCambioSoggetti = DettPraticaLocalServiceUtil.countCompletedByIntPraticaAndTipoPratica(intPraticaId, Arrays.asList(new String[]{TipoIntegrazioneUtil.VARIAZIONE_SOGGETTO})); - int nFineLavori = FineLavoriLocalServiceUtil.countByIntPraticaId_Completata(intPraticaId, true); - int nCollaudo = CollaudoLocalServiceUtil.countByIntPraticaId_Completata(intPraticaId, true); - - String hide1 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q1) || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P1) ? "hideSection" : ""); - String hide3 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q3) || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P3) ? "hideSection" : ""); - String hide8 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q8) || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P8) ? "hideSection" : ""); - String hide9 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q9) || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P9) ? "hideSection" : ""); - String hide10 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q10) || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P10) ? "hideSection" : ""); + dettPraticaId = dettPratica.getDettPraticaId(); +} +Territorio territorio = TerritorioLocalServiceUtil.getTerritorio(intPratica.getTerritorioId()); +Comune comune = ComuneLocalServiceUtil.getComune(territorio.getComuneId()); +Provincia provincia = ProvinciaLocalServiceUtil.fetchByC_C(territorio.getCompanyId(), territorio.getCodiceProvincia()); +String name = StringPool.MINUS; +if (intPratica.getStatusByUserId() != 0) { + name = UserLocalServiceUtil.getUser(intPratica.getStatusByUserId()).getFullName(); +} +int nVarianti = DettPraticaLocalServiceUtil.countCompletedByIntPraticaAndTipoPratica(intPraticaId, + Arrays.asList(new String[]{ TipoIntegrazioneUtil.VARIANTE })); +int nCambioSoggetti = DettPraticaLocalServiceUtil.countCompletedByIntPraticaAndTipoPratica(intPraticaId, + Arrays.asList(new String[]{ TipoIntegrazioneUtil.VARIAZIONE_SOGGETTO })); +int nFineLavori = FineLavoriLocalServiceUtil.countByIntPraticaId_Completata(intPraticaId, true); +int nCollaudo = CollaudoLocalServiceUtil.countByIntPraticaId_Completata(intPraticaId, true); +String hide1 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q1) + || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P1) ? "hideSection" : StringPool.BLANK); +String hide3 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q3) + || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P3) ? "hideSection" : StringPool.BLANK); +String hide8 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q8) + || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P8) ? "hideSection" : StringPool.BLANK); +String hide9 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q9) + || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P9) ? "hideSection" : StringPool.BLANK); +String hide10 = (intPratica.getTipoProcedura().equals(Constants.PROCEDURA_Q10) + || intPratica.getTipoProcedura().equals(Constants.PROCEDURA_P10) ? "hideSection" : StringPool.BLANK); %> -
- - + + A - + D
- +
@@ -93,18 +78,24 @@
- <% if(intPratica.getValidata()) { %> - - <% }else { %> - - <% } %> + <% + if (intPratica.getValidata()) { + %> + + <% + } else { + %> + + <% + } + %>
Istruttore:
- <%=name %> + <%= name %>
@@ -112,13 +103,18 @@ Tipologia:
- <%= LanguageUtil.get(pageContext, "tipo-pratica-"+intPratica.getTipoPratica()) %> + + <%= LanguageUtil.get(pageContext, "tipo-pratica-" + intPratica.getTipoPratica()) %> +
Stato:
- <%= LanguageUtil.get(pageContext, PraticaUtil.getStatoPraticaLabel(intPratica.getStatoPratica(), intPratica.getTipoProcedura())) %> + + <%= LanguageUtil.get(pageContext, PraticaUtil.getStatoPraticaLabel( + intPratica.getStatoPratica(), intPratica.getTipoProcedura())) %> +
@@ -129,110 +125,180 @@
- +
- <% if(nVarianti == 0 ) { %> - Varianti Non presentate - <% } else if(nVarianti == 1 ) { %> - Variante Presentata <%=nVarianti %> volta - <% } else { %> - Varianti Presentate <%=nVarianti %> volte + <% + if (nVarianti == 0) { + %> + Varianti + non presentate + <% + } else if (nVarianti == 1) { %> + Variante + presentata 1 volta + <% + } else { + %> + Varianti + + presentate <%= nVarianti %> volte + <% } %>
-
- <% if(nCambioSoggetti == 0 ) { %> - Cambio soggetti Non presentata - <% } else if(nCambioSoggetti == 1 ) { %> - Cambio soggetti Presentata <%=nCambioSoggetti %> volta - <% } else { %> - Cambio soggetti Presentata <%=nCambioSoggetti %> volte - <% } %> + Cambio soggetti + <% + if (nCambioSoggetti == 0) { + %> + non presentato + <% + } else if (nCambioSoggetti == 1) { + %> + presentato 1 volta + <% + } else { + %> + + + presentato <%= nCambioSoggetti %> volte + + <% + } + %>
- <% if(nFineLavori == 0 ) { %> - Fine Lavori Non presentata - <% } else if(nVarianti == 1 ) { %> - Fine Lavori Presentata <%=nFineLavori %> volta - <% } else { %> - Fine Lavori Presentata <%=nFineLavori %> volte + Fine Lavori + <% + if (nFineLavori == 0) { + %> + non presentata + <% + } else if (nFineLavori == 1 ) { + %> + presentata 1 volta + <% + } else { + %> + + presentata <%= nFineLavori %> volte + <% } %>
- <% if(nCollaudo == 0 ) { %> - Collaudo Non presentato - <% } else if(nCollaudo == 1 ) { %> - Collaudo Presentato <%=nFineLavori %> volta - <% } else { %> - Collaudo Presentato <%=nFineLavori %> volte - <% } %> + Collaudo + <% + if (nCollaudo == 0 ) { + %> + non presentato + <% + } else if (nCollaudo == 1 ) { + %> + presentato 1 volta + <% + } else { + %> + + Presentato <%= nCollaudo %> volte + + <% + } + %>
- -
- +
+
- <%=BeanPropertiesUtil.getString(dettPratica, "descLongIntervento") %> + <%= BeanPropertiesUtil.getString(dettPratica, "descLongIntervento") %>
-
- +
- - <%=LanguageUtil.get(pageContext, "tc-nuova-costruzione") %> + + + + <%= LanguageUtil.get(pageContext, "tc-nuova-costruzione") %>
- - <%=LanguageUtil.get(pageContext, "tc-nuova-costruzione-pertinenza") %> + + + + <%= LanguageUtil.get(pageContext, "tc-nuova-costruzione-pertinenza") %>
- - <%=LanguageUtil.get(pageContext, "tc-costruzioni-esistenti") %> + + + + <%= LanguageUtil.get(pageContext, "tc-costruzioni-esistenti") %>
- - <%=LanguageUtil.get(pageContext, "tc-manut-ord-straord") %> + + + + <%= LanguageUtil.get(pageContext, "tc-manut-ord-straord") %>
- - <%=LanguageUtil.get(pageContext, "tc-intervento-opere-escavazione") %> + + + + <%= LanguageUtil.get(pageContext, "tc-intervento-opere-escavazione") %>
- - <%=LanguageUtil.get(pageContext, "tc-no-opere-escavazione") %> + + + + <%= LanguageUtil.get(pageContext, "tc-no-opere-escavazione") %>
- - <%=LanguageUtil.get(pageContext, "tc-altri-interventi") %> + + + + <%= LanguageUtil.get(pageContext, "tc-altri-interventi") %>
- <%=BeanPropertiesUtil.getString(dettPratica, "tcAltriInterventiDesc") %> + <%= BeanPropertiesUtil.getString(dettPratica, "tcAltriInterventiDesc") %>
-
-
- +
<% - List committenti = SoggettoLocalServiceUtil.getValidByIntPratica_TipologiaSoggetto(intPraticaId, TipoSoggettoUtil.COMMITTENTE); + List committenti = SoggettoLocalServiceUtil.getValidByIntPratica_TipologiaSoggetto( + intPraticaId, TipoSoggettoUtil.COMMITTENTE); %>
-
<%=LanguageUtil.get(pageContext, "gc-soggetto-02") %>:
+
+ <%= LanguageUtil.get(pageContext, "gc-soggetto-02") %>: +
<% - Soggetto committente = committenti.get(0); + Soggetto committente = committenti.get(0); %>
@@ -263,15 +329,18 @@ <%= committente.getCodiceFiscale().toUpperCase() %>
-
+
<% - List progettisti = SoggettoLocalServiceUtil.getValidByIntPratica_TipologiaSoggetto(intPraticaId, TipoSoggettoUtil.PROGETTISTA); + List progettisti = SoggettoLocalServiceUtil.getValidByIntPratica_TipologiaSoggetto( + intPraticaId, TipoSoggettoUtil.PROGETTISTA); %>
-
<%=LanguageUtil.get(pageContext, "gc-soggetto-06") %>:
+
+ <%= LanguageUtil.get(pageContext, "gc-soggetto-06") %>: +
@@ -296,11 +365,14 @@
<% - List direttori = SoggettoServiceUtil.getValidByIntPratica_TipologiaSoggetto(intPraticaId, TipoSoggettoUtil.DIRETTORE_LAVORI); + List direttori = SoggettoServiceUtil.getValidByIntPratica_TipologiaSoggetto( + intPraticaId, TipoSoggettoUtil.DIRETTORE_LAVORI); %>
-
<%=LanguageUtil.get(pageContext, "gc-soggetto-03") %>:
+
+ <%= LanguageUtil.get(pageContext, "gc-soggetto-03") %>: +
@@ -329,16 +401,18 @@
- - - + + +
- +
@@ -370,7 +444,7 @@ <%= LanguageUtil.get(pageContext, "dp-dc-prov") %>
- <%=BeanPropertiesUtil.getString(provincia, "provincia")%> + <%= BeanPropertiesUtil.getString(provincia, "provincia")%>
@@ -378,7 +452,7 @@ <%= LanguageUtil.get(pageContext, "dp-dc-comune") %>
- <%=BeanPropertiesUtil.getString(comune, "denominazione")%> + <%= BeanPropertiesUtil.getString(comune, "denominazione")%>
@@ -386,7 +460,7 @@ <%= LanguageUtil.get(pageContext, "dp-dc-loc") %>
- <%=BeanPropertiesUtil.getString(dettPratica, "localita") %> + <%= BeanPropertiesUtil.getString(dettPratica, "localita") %>
@@ -394,7 +468,7 @@ <%= LanguageUtil.get(pageContext, "dp-dc-via") %>
- <%=BeanPropertiesUtil.getString(dettPratica, "via") %> + <%= BeanPropertiesUtil.getString(dettPratica, "via") %>

@@ -404,13 +478,12 @@
<%= BeanPropertiesUtil.getString(dettPratica, "estremiCatastali") %> -
+
<%= LanguageUtil.get(pageContext, "dc-allegato") %>
- - <%=BeanPropertiesUtil.getString(dettPratica, "dcAllegato") %> + <%= BeanPropertiesUtil.getString(dettPratica, "dcAllegato") %>
@@ -418,7 +491,7 @@ <%= LanguageUtil.get(pageContext, "estremi-prat-com") %>
- <%=BeanPropertiesUtil.getString(dettPratica, "estremiPratCom") %> + <%= BeanPropertiesUtil.getString(dettPratica, "estremiPratCom") %>
@@ -426,5 +499,4 @@
-
\ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.classpath b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.classpath index 6de1aafe..b600399e 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.classpath +++ b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.classpath @@ -19,5 +19,6 @@ + diff --git a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.project b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.project index 59a67b56..6ef6b9ff 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.project +++ b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/.project @@ -32,5 +32,6 @@ org.eclipse.wst.common.project.facet.core.nature org.eclipse.jdt.core.javanature org.eclipse.wst.jsdt.core.jsNature + org.apache.ivyde.eclipse.ivynature diff --git a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/build.xml b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/build.xml index 5d0aa042..8dfbe37e 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/build.xml +++ b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/build.xml @@ -2,7 +2,6 @@ - - + \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/lib/portos-kaleo-portlet-service.jar b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/lib/portos-kaleo-portlet-service.jar index 36c9b92032fb9f7e38e8b1416d4b4856d4a0094d..21159b20b02443d58aef93f0b220c6cb9f54b6b9 100644 GIT binary patch delta 1503 zcmYk5e@s54L zmwOSoaJe4Rt!$+=+a$Vw999!$ICK49YTeV*_8 zo^x)E*l&&4(<&=$YKjm^LTnA@zt*4jq*|YN7Ir<6c#8jBHiLJy<^R`U3U4ei8zQNA zny?bj5Sp=qa1N^oGbko_lrq8rrNV^RH%gX5x}nao=&s#C`XX7eN_NM6xD&bAOJ1t_ z5JJ3eOjV|hD|j?k;G6_49OJ=HrCK^qwOlNU2D~o zea#~GBY%)0DT^L5AZ76j3rK60Put9>r}kG*-I*iA`b;5;8C6%fFo`OE=|!ih8awmg z_mjps-Zbt4Qx)0c)hSw5Ih0BIdix|zE86m2zHOKu$PnUrDR;)cZ-8a|L+d`L*%R65 zzsKh4jwu(Zcp%3{YK)fINu#GGQb@kD@6RJW_GL&V4UaWg`&#r}Q!;D4*RCg-v%{sN z|70BGuc<;5C5CxXJ0FHUcIoDAD`w=E*^IQr+j;Q!#Lkb6Ps*DeaXB8>PG=!i`yh;T z{h@+Uj;@b7;I+^(AKO$jL+d-+Ib&?LWt9-+iHuxr)`Kklau)u{Fz3;)c;Mn_dVB?1 zEsM$$I5~x0zZzqF{o(28c+8l1*eyg=!YxPpd=QJZO;Nb@z#3ezI$kM9ES2uF)%cWO zh5lI$`gtyTNiAyA%mE8Z>%FTLA-+|G*i6goHE?M~L&g>_YFMbJH({OSP}hvBRz&Vz zeBw|OznC_8$oes~xjqz`v09Z6d8AGso+W+d!%EV9A4*9@eyk-0{a8ne`{5cA$_bO-#Tro(uf^z&h~leQf}D=B^iZ;{H6VlQd@DE5$+cVa&&)`=EU&M~x+P9MW= z(%b;vAhidi-*f|M~+cwA|&|(LIklwnRlpo za0uLSoDbSoHh;C+BDy~wRtsaea{XUySDRMDJjkZ4mZn9|^SqyDb=&QE?fZFuKA-pJ z^E}_#G5hS8J-xERCZ`JF5Ms7r`-_qEN93gbEbMvsJMAg{_p@odyM5Jv3A!M1ZMm#J zqiJ}IuojOKTCm2b75xC~2y-ZA$Sai*4oVe9DE_sSEs?It3rxCYcalCyk<25z^A0?^ z!JOsKR=o!yUeR2YDU%W&h!?n~!4l34Su#|k!)1wcnyOV(RZ>;r`O#FZSR|WOy_r_a z!o|1Ds5j?|NuK-vAVpJ`-eZH*Wlt|AZCIVOdGrN5dZ2pd<^myJ$`YcOt?CMwIE*pl zfzpdE!_dUJyT6~(_IO?U7Z|GOUZ2WRD=SB`NMG%kX3>iF{O4|HMGs~Q@suTZ#lLTa zS@?&x{VpRXx;b#0$<NvxxNIry-d%I?-s(we;KO z6lM%ux#}>y!!2d}q%HE-G$D#~GtVd=g<+3>as7sk>0`glXQu0K=kDKAyUuE#lrJah zc0Qz>&PJN@ZWtNrJqhEqu8uq5a~OH5^FB1lMh|81eD|C-Z0kB9%Jm+3%DflZ>ZNS_ zlS%QHUbtyZO{_tiS*@}JE)J{Kug8RBypwP;HW}9(k9vft(yQev9}i=hvLyzO8r*=- z&5Rey5l=IwRp+bmzC`@61`(N9Qj6Mjqhvv8y>GoF#5b}KTUqjI4cto6h&JLy1xwV7 zW^6Po)V1KU*&=TrE;wcViYe2F%!{Ec^rOgVpj7#hPwMvL3DReNtR>y?qm)z>!1Kl$ zl->X~k`e*<7|riO4Jp)xEsQ3+5Fj-l#v7!c52J(Ba0G3n#1XtsDnE*Sq{*Y$OIqEH z1EhF2T1mOb&`vsi40}imgV;{$2wL@$LA=JZO+DB}n&?3zo#ypoH|b=rm5~y{X6kl^ zu$6Q_aW7zYq0{{?=#ptvQYzJexYMb2bBlNpIYYx0-FmitR#G%@$di00YoaVCNmo@EVL8|oXfHe`!pKXsi^yhXYl u)pSN~^Dufze+}ahsWWCd_%mjmb)3+g8W}fFSbggh1bH^6pp(=z0{_1`wlmuR diff --git a/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/lib/util-java.jar b/liferay-plugins-sdk-6.2/portlets/portos-kaleo-portlet/docroot/WEB-INF/lib/util-java.jar new file mode 100644 index 0000000000000000000000000000000000000000..6b5d95f809264fc39b70a46646976290b3a243f0 GIT binary patch literal 213058 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

k8iVsVRER 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 Zd + diff --git a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/.settings/org.eclipse.wst.common.component b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/.settings/org.eclipse.wst.common.component index 04dff753..d3bd6d76 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/.settings/org.eclipse.wst.common.component +++ b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/.settings/org.eclipse.wst.common.component @@ -2,6 +2,7 @@ + diff --git a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/mailmanager/model/EmailConstants.java b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/mailmanager/model/EmailConstants.java index cb829f90..0498ee84 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/mailmanager/model/EmailConstants.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/mailmanager/model/EmailConstants.java @@ -2,6 +2,5 @@ package it.tref.liferay.portos.mailmanager.model; public class EmailConstants { - public final static String DEFAULT_ATTACHMENTS_FOLDER_NAME = "MailManager_EmailAttachments"; - + public static final String DEFAULT_ATTACHMENTS_FOLDER_NAME = "MailManager_EmailAttachments"; } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/hook/events/StartupAction.java b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/hook/events/StartupAction.java index 334e5715..640b866e 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/hook/events/StartupAction.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/hook/events/StartupAction.java @@ -22,63 +22,47 @@ import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil; public class StartupAction extends SimpleAction { - private final static Log _log = LogFactoryUtil.getLog(StartupAction.class); - - @Override - public void run(String[] ids) throws ActionException { - - for (String id : ids) { - - long companyId = GetterUtil.getLong(id); - - try { - - Company company = CompanyLocalServiceUtil.getCompany(companyId); - - Group companyGroup = company.getGroup(); - User userDefault = company.getDefaultUser(); - - // Folders - - String[] groupActions = {ActionKeys.VIEW}; - String[] guestActions = {ActionKeys.VIEW}; - - addDLFolderIfNotExists(userDefault.getUserId(), companyGroup.getGroupId(), companyGroup.getGroupId(), - DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, EmailConstants.DEFAULT_ATTACHMENTS_FOLDER_NAME, true, - groupActions, guestActions); - - } catch (Exception e) { - _log.error(e, e); - } - } - } - - private DLFolder addDLFolderIfNotExists(long userId, long groupId, long repositoryId, long parentFolderId, - String name, boolean hidden, String[] groupActions, String[] guestActions) throws PortalException, - SystemException { - - DLFolder dlFolder = null; - - try { - dlFolder = DLFolderLocalServiceUtil.getFolder(groupId, parentFolderId, name); - } catch (PortalException e) { - - ServiceContext serviceContext = new ServiceContext(); - - if (groupActions != null) { - serviceContext.setGroupPermissions(groupActions); - } - - if (guestActions != null) { - serviceContext.setGuestPermissions(guestActions); - } - - dlFolder = - DLFolderLocalServiceUtil.addFolder(userId, groupId, repositoryId, false, parentFolderId, name, - StringPool.BLANK, hidden, serviceContext); - } - - return dlFolder; - } - + private static final Log _log = LogFactoryUtil.getLog(StartupAction.class); + + @Override + public void run(String[] ids) throws ActionException { + + for (String id : ids) { + long companyId = GetterUtil.getLong(id); + try { + Company company = CompanyLocalServiceUtil.getCompany(companyId); + Group companyGroup = company.getGroup(); + User userDefault = company.getDefaultUser(); + // Folders + String[] groupActions = { ActionKeys.VIEW }; + String[] guestActions = { ActionKeys.VIEW }; + addDLFolderIfNotExists(userDefault.getUserId(), companyGroup.getGroupId(), companyGroup.getGroupId(), + DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, EmailConstants.DEFAULT_ATTACHMENTS_FOLDER_NAME, + true, groupActions, guestActions); + } catch (Exception e) { + _log.error(e, e); + } + } + } + + private DLFolder addDLFolderIfNotExists(long userId, long groupId, long repositoryId, long parentFolderId, + String name, boolean hidden, String[] groupActions, String[] guestActions) throws PortalException, + SystemException { + + DLFolder dlFolder = null; + try { + dlFolder = DLFolderLocalServiceUtil.getFolder(groupId, parentFolderId, name); + } catch (PortalException e) { + ServiceContext serviceContext = new ServiceContext(); + if (groupActions != null) { + serviceContext.setGroupPermissions(groupActions); + } + if (guestActions != null) { + serviceContext.setGuestPermissions(guestActions); + } + dlFolder = DLFolderLocalServiceUtil.addFolder(userId, groupId, repositoryId, false, parentFolderId, name, + StringPool.BLANK, hidden, serviceContext); + } + return dlFolder; + } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailAttachmentLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailAttachmentLocalServiceImpl.java index a39c4d08..dcf03919 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailAttachmentLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailAttachmentLocalServiceImpl.java @@ -1,18 +1,21 @@ /** - * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of the Liferay Enterprise Subscription License - * ("License"). You may not use this file except in compliance with the License. You can obtain a - * copy of the License by contacting Liferay, Inc. See the License for the specific language - * governing permissions and limitations under the License, including but not limited to - * distribution rights of the Software. - * - * - * + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. The contents of this file are subject to the terms of the + * Liferay Enterprise Subscription License ("License"). You may not use this file except in compliance with the License. + * You can obtain a copy of the License by contacting Liferay, Inc. See the License for the specific language governing + * permissions and limitations under the License, including but not limited to distribution rights of the Software. */ package it.tref.liferay.portos.mailmanager.service.impl; +import it.tref.liferay.portos.mailmanager.EmailAttachmentFileException; +import it.tref.liferay.portos.mailmanager.EmailAttachmentTitleException; +import it.tref.liferay.portos.mailmanager.NoSuchEmailException; +import it.tref.liferay.portos.mailmanager.model.EmailAttachment; +import it.tref.liferay.portos.mailmanager.service.base.EmailAttachmentLocalServiceBaseImpl; +import it.tref.liferay.portos.mailmanager.service.persistence.EmailAttachmentPK; + +import java.io.File; +import java.util.List; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; @@ -27,27 +30,14 @@ import com.liferay.portal.model.User; import com.liferay.portal.security.permission.ActionKeys; import com.liferay.portal.service.ServiceContext; -import it.tref.liferay.portos.mailmanager.EmailAttachmentFileException; -import it.tref.liferay.portos.mailmanager.EmailAttachmentTitleException; -import it.tref.liferay.portos.mailmanager.NoSuchEmailException; -import it.tref.liferay.portos.mailmanager.model.EmailAttachment; -import it.tref.liferay.portos.mailmanager.service.base.EmailAttachmentLocalServiceBaseImpl; -import it.tref.liferay.portos.mailmanager.service.persistence.EmailAttachmentPK; - -import java.io.File; -import java.util.List; - /** * The implementation of the email attachment local service. - * *

- * All custom service methods should be put in this class. Whenever methods are added, rerun - * ServiceBuilder to copy their definitions into the - * {@link it.noovle.azimut.icf.mailmanager.service.EmailAttachmentLocalService} interface. - * + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.noovle.azimut.icf.mailmanager.service.EmailAttachmentLocalService} interface. *

- * This is a local service. Methods of this service will not have security checks based on the - * propagated JAAS credentials because this service can only be accessed from within the same VM. + * This is a local service. Methods of this service will not have security checks based on the propagated JAAS + * credentials because this service can only be accessed from within the same VM. *

* * @author @@ -55,96 +45,99 @@ import java.util.List; * @see it.noovle.azimut.icf.mailmanager.service.EmailAttachmentLocalServiceUtil */ public class EmailAttachmentLocalServiceImpl extends EmailAttachmentLocalServiceBaseImpl { - /* - * NOTE FOR DEVELOPERS: - * - * Never reference this interface directly. Always use {@link - * it.noovle.azimut.icf.mailmanager.service.EmailAttachmentLocalServiceUtil} to access the - * email attachment local service. - */ - public EmailAttachment addEmailAttachment(long companyId, long emailId, long folderId, String fileName, File file) - throws PortalException, SystemException { + /* + * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link + * it.noovle.azimut.icf.mailmanager.service.EmailAttachmentLocalServiceUtil} to access the email attachment local + * service. + */ + @Override + public EmailAttachment addEmailAttachment(long companyId, long emailId, long folderId, String fileName, File file) + throws PortalException, SystemException { - Company company = companyLocalService.getCompany(companyId); + Company company = companyLocalService.getCompany(companyId); - User defaultUser = company.getDefaultUser(); + User defaultUser = company.getDefaultUser(); - validate(emailId, fileName, file); + validate(emailId, fileName, file); - Folder folder = dlAppLocalService.getFolder(folderId); + Folder folder = dlAppLocalService.getFolder(folderId); - String sourceFileName = file.getName(); - String mimeType = MimeTypesUtil.getContentType(sourceFileName); + String sourceFileName = file.getName(); + String mimeType = MimeTypesUtil.getContentType(sourceFileName); - String title = fileName; - if (Validator.isNull(title)) { - title = file.getName(); - } + String title = fileName; + if (Validator.isNull(title)) { + title = file.getName(); + } - ServiceContext serviceContext = new ServiceContext(); - serviceContext.setGroupPermissions(new String[] {ActionKeys.VIEW}); - serviceContext.setGuestPermissions(new String[] {ActionKeys.VIEW}); + ServiceContext serviceContext = new ServiceContext(); + serviceContext.setGroupPermissions(new String[] { ActionKeys.VIEW }); + serviceContext.setGuestPermissions(new String[] { ActionKeys.VIEW }); - FileEntry fileEntry = - dlAppLocalService.addFileEntry(defaultUser.getUserId(), folder.getRepositoryId(), folder.getFolderId(), - sourceFileName, mimeType, title, StringPool.BLANK, StringPool.BLANK, file, serviceContext); + FileEntry fileEntry = + dlAppLocalService.addFileEntry(defaultUser.getUserId(), folder.getRepositoryId(), folder.getFolderId(), + sourceFileName, mimeType, title, StringPool.BLANK, StringPool.BLANK, file, serviceContext); - EmailAttachment emailAttachment = - emailAttachmentLocalService.createEmailAttachment(new EmailAttachmentPK(emailId, fileEntry.getFileEntryId())); + EmailAttachment emailAttachment = + createEmailAttachment(new EmailAttachmentPK(emailId, fileEntry + .getFileEntryId())); - return emailAttachmentLocalService.addEmailAttachment(emailAttachment); - } + return addEmailAttachment(emailAttachment); + } - @Override - public EmailAttachment deleteEmailAttachment(EmailAttachmentPK emailAttachmentPK) throws PortalException, - SystemException { - EmailAttachment emailAttachment = emailAttachmentLocalService.getEmailAttachment(emailAttachmentPK); - return deleteEmailAttachment(emailAttachment); - } + @Override + public EmailAttachment deleteEmailAttachment(EmailAttachmentPK emailAttachmentPK) throws PortalException, + SystemException { + EmailAttachment emailAttachment = getEmailAttachment(emailAttachmentPK); + return deleteEmailAttachment(emailAttachment); + } - @Override - public EmailAttachment deleteEmailAttachment(EmailAttachment emailAttachment) throws SystemException { + @Override + public EmailAttachment deleteEmailAttachment(EmailAttachment emailAttachment) throws SystemException { - super.deleteEmailAttachment(emailAttachment); + super.deleteEmailAttachment(emailAttachment); - // File Entry + // File Entry - try { - dlAppLocalService.deleteFileEntry(emailAttachment.getFileEntryId()); - } catch (PortalException e) { - } + try { + dlAppLocalService.deleteFileEntry(emailAttachment.getFileEntryId()); + } catch (PortalException e) {} - return emailAttachment; - } + return emailAttachment; + } - public List findByEmailId(long emailId) throws SystemException { - return emailAttachmentPersistence.findByEmailId(emailId); - } + @Override + public List findByEmailId(long emailId) throws SystemException { + return emailAttachmentPersistence.findByEmailId(emailId); + } - public List findByEmailId(long emailId, int start, int end) throws SystemException { - return emailAttachmentPersistence.findByEmailId(emailId); - } + @Override + public List findByEmailId(long emailId, int start, int end) throws SystemException { + return emailAttachmentPersistence.findByEmailId(emailId); + } - public int countByEmailId(long emailId) throws SystemException { - return emailAttachmentPersistence.countByEmailId(emailId); - } + @Override + public int countByEmailId(long emailId) throws SystemException { + return emailAttachmentPersistence.countByEmailId(emailId); + } - public EmailAttachment fetchByFileEntryId(long fileEntryId) throws SystemException { - return emailAttachmentPersistence.fetchByFileEntryId(fileEntryId); - } + @Override + public EmailAttachment fetchByFileEntryId(long fileEntryId) throws SystemException { + return emailAttachmentPersistence.fetchByFileEntryId(fileEntryId); + } - private void validate(long emailId, String fileName, File file) throws PortalException, SystemException { + private void validate(long emailId, String fileName, File file) throws PortalException, SystemException { - if (Validator.isNull(emailId)) { - throw new NoSuchEmailException(); - } + if (Validator.isNull(emailId)) { + throw new NoSuchEmailException(); + } - if (Validator.isNull(fileName) && Validator.isNull(file)) { - throw new EmailAttachmentTitleException(); - } + if (Validator.isNull(fileName) && Validator.isNull(file)) { + throw new EmailAttachmentTitleException(); + } - if (Validator.isNull(file) || (Validator.isNotNull(file) && !FileUtil.exists(file))) { - throw new EmailAttachmentFileException(); - } - } + if (Validator.isNull(file) || (Validator.isNotNull(file) && !FileUtil.exists(file))) { + throw new EmailAttachmentFileException(); + } + } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailLocalServiceImpl.java index fe22d352..75c4fb19 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailLocalServiceImpl.java @@ -1,36 +1,12 @@ /** - * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of the Liferay Enterprise Subscription License - * ("License"). You may not use this file except in compliance with the License. You can obtain a - * copy of the License by contacting Liferay, Inc. See the License for the specific language - * governing permissions and limitations under the License, including but not limited to - * distribution rights of the Software. - * - * - * + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. The contents of this file are subject to the terms of the + * Liferay Enterprise Subscription License ("License"). You may not use this file except in compliance with the License. + * You can obtain a copy of the License by contacting Liferay, Inc. See the License for the specific language governing + * permissions and limitations under the License, including but not limited to distribution rights of the Software. */ package it.tref.liferay.portos.mailmanager.service.impl; -import com.liferay.mail.model.FileAttachment; -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.Folder; -import com.liferay.portal.kernel.util.FileUtil; -import com.liferay.portal.kernel.util.OrderByComparator; -import com.liferay.portal.kernel.util.StringPool; -import com.liferay.portal.kernel.util.StringUtil; -import com.liferay.portal.kernel.util.Validator; -import com.liferay.portal.model.Company; -import com.liferay.portal.model.Group; -import com.liferay.portal.model.User; -import com.liferay.portal.security.permission.ActionKeys; -import com.liferay.portal.service.ServiceContext; -import com.liferay.portlet.documentlibrary.model.DLFolderConstants; - import it.tref.liferay.portos.mailmanager.EmailBccException; import it.tref.liferay.portos.mailmanager.EmailBulkAddressesException; import it.tref.liferay.portos.mailmanager.EmailCcException; @@ -51,18 +27,30 @@ import java.util.Collections; import java.util.Date; import java.util.List; +import com.liferay.mail.model.FileAttachment; +import com.liferay.portal.kernel.exception.PortalException; +import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.repository.model.Folder; +import com.liferay.portal.kernel.util.FileUtil; +import com.liferay.portal.kernel.util.OrderByComparator; +import com.liferay.portal.kernel.util.StringPool; +import com.liferay.portal.kernel.util.StringUtil; +import com.liferay.portal.kernel.util.Validator; +import com.liferay.portal.model.Company; +import com.liferay.portal.model.Group; +import com.liferay.portal.model.User; +import com.liferay.portal.security.permission.ActionKeys; +import com.liferay.portal.service.ServiceContext; +import com.liferay.portlet.documentlibrary.model.DLFolderConstants; + /** * The implementation of the email local service. - * *

- * All custom service methods should be put in this class. Whenever methods are - * added, rerun ServiceBuilder to copy their definitions into the - * {@link it.noovle.azimut.icf.mailmanager.service.EmailLocalService} interface. - * + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.noovle.azimut.icf.mailmanager.service.EmailLocalService} interface. *

- * This is a local service. Methods of this service will not have security - * checks based on the propagated JAAS credentials because this service can only - * be accessed from within the same VM. + * This is a local service. Methods of this service will not have security checks based on the propagated JAAS + * credentials because this service can only be accessed from within the same VM. *

* * @author @@ -71,70 +59,67 @@ import java.util.List; */ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { /* - * NOTE FOR DEVELOPERS: - * - * Never reference this interface directly. Always use {@link - * it.noovle.azimut.icf.mailmanager.service.EmailLocalServiceUtil} to access - * the email local service. + * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link + * it.noovle.azimut.icf.mailmanager.service.EmailLocalServiceUtil} to access the email local service. */ - private final static Log _log = LogFactoryUtil.getLog(EmailLocalServiceImpl.class); + @Override + public Email addEmail(String className, long classPK, String from, String to[], String cc[], String bcc[], + String subject, String body, boolean htmlFormat, ServiceContext serviceContext) throws Exception { - public Email addEmail(String className, long classPK, String from, String to[], String cc[], - String bcc[], String subject, String body, boolean htmlFormat, ServiceContext serviceContext) - throws Exception { - return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, - null, null, 0, false, null, null, Collections. emptyList(), serviceContext); + return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, null, null, + 0, false, null, null, Collections. emptyList(), serviceContext); } - public Email addEmail(String className, long classPK, String from, String to[], String cc[], - String bcc[], String subject, String body, boolean htmlFormat, - List fileAttachments, ServiceContext serviceContext) throws Exception { - return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, - null, null, 0, false, null, null, fileAttachments, false, null, serviceContext); - } + @Override + public Email addEmail(String className, long classPK, String from, String to[], String cc[], String bcc[], + String subject, String body, boolean htmlFormat, List fileAttachments, + ServiceContext serviceContext) throws Exception { - public Email addEmail(String className, long classPK, String from, String to[], String cc[], - String bcc[], String[] bulkAddresses, String subject, String body, boolean htmlFormat, - String[] replyTo, String messageId, String inReplyTo, String smtpHost, int smtpPort, - boolean smtpSecure, String smtpUsername, String smtpPassword, - List fileAttachments, ServiceContext serviceContext) throws Exception { - return addEmail(className, classPK, from, to, cc, bcc, bulkAddresses, subject, body, htmlFormat, - replyTo, messageId, inReplyTo, smtpHost, smtpPort, smtpSecure, smtpUsername, smtpPassword, - fileAttachments, false, null, serviceContext); + return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, null, null, + 0, false, null, null, fileAttachments, false, null, serviceContext); } - public Email addEmail(String className, long classPK, String from, String to[], String cc[], - String bcc[], String subject, String body, boolean htmlFormat, - List fileAttachments, boolean sendSync, ServiceContext serviceContext) - throws Exception { - return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, - null, null, 0, false, null, null, fileAttachments, sendSync, null, serviceContext); + @Override + public Email addEmail(String className, long classPK, String from, String to[], String cc[], String bcc[], + String[] bulkAddresses, String subject, String body, boolean htmlFormat, String[] replyTo, + String messageId, String inReplyTo, String smtpHost, int smtpPort, boolean smtpSecure, String smtpUsername, + String smtpPassword, List fileAttachments, ServiceContext serviceContext) throws Exception { + + return addEmail(className, classPK, from, to, cc, bcc, bulkAddresses, subject, body, htmlFormat, replyTo, + messageId, inReplyTo, smtpHost, smtpPort, smtpSecure, smtpUsername, smtpPassword, fileAttachments, + false, null, serviceContext); } - public Email addEmail(String className, long classPK, String from, String to[], String cc[], - String bcc[], String subject, String body, boolean htmlFormat, - List fileAttachments, boolean sendSync, String templateName, + @Override + public Email addEmail(String className, long classPK, String from, String to[], String cc[], String bcc[], + String subject, String body, boolean htmlFormat, List fileAttachments, boolean sendSync, ServiceContext serviceContext) throws Exception { - return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, - null, null, 0, false, null, null, fileAttachments, sendSync, templateName, serviceContext); + + return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, null, null, + 0, false, null, null, fileAttachments, sendSync, null, serviceContext); } - public Email addEmail(String className, long classPK, String from, String to[], String cc[], - String bcc[], String[] bulkAddresses, String subject, String body, boolean htmlFormat, - String[] replyTo, String messageId, String inReplyTo, String smtpHost, int smtpPort, - boolean smtpSecure, String smtpUsername, String smtpPassword, - List fileAttachments, boolean sendSync, String templateName, + @Override + public Email addEmail(String className, long classPK, String from, String to[], String cc[], String bcc[], + String subject, String body, boolean htmlFormat, List fileAttachments, boolean sendSync, + String templateName, ServiceContext serviceContext) throws Exception { + + return addEmail(className, classPK, from, to, cc, bcc, null, subject, body, htmlFormat, null, null, null, null, + 0, false, null, null, fileAttachments, sendSync, templateName, serviceContext); + } + + @Override + public Email addEmail(String className, long classPK, String from, String to[], String cc[], String bcc[], + String[] bulkAddresses, String subject, String body, boolean htmlFormat, String[] replyTo, + String messageId, String inReplyTo, String smtpHost, int smtpPort, boolean smtpSecure, String smtpUsername, + String smtpPassword, List fileAttachments, boolean sendSync, String templateName, ServiceContext serviceContext) throws Exception { User user = userLocalService.getUser(serviceContext.getUserId()); - Date now = new Date(); - validate(from, to, cc, bcc, bulkAddresses, subject, body, replyTo); - - Email email = emailLocalService.createEmail(counterLocalService.increment(Email.class.getName())); - + Email email = createEmail(counterLocalService.increment(Email.class.getName())); email.setGroupId(serviceContext.getScopeGroupId()); email.setCompanyId(serviceContext.getCompanyId()); email.setCreateDate(serviceContext.getCreateDate(now)); @@ -143,7 +128,6 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { email.setClassPK(classPK); email.setUserId(user.getUserId()); email.setUserName(user.getFullName()); - email.setFrom(from); email.setTo(StringUtil.merge(to, StringPool.COMMA)); email.setCc(StringUtil.merge(cc, StringPool.COMMA)); @@ -151,12 +135,10 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { email.setBulkAddresses(StringUtil.merge(bulkAddresses, StringPool.COMMA)); email.setSubject(subject); email.setBody(body); - email.setHtmlFormat(htmlFormat); email.setReplyTo(StringUtil.merge(replyTo, StringPool.COMMA)); email.setMessageId(messageId); email.setInReplyTo(inReplyTo); - email.setSmtpHost(smtpHost); email.setSmtpPort(smtpPort); email.setSmtpSecure(smtpSecure); @@ -164,47 +146,37 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { email.setSmtpPassword(smtpPassword); email.setCancel(false); email.setTemplateName(templateName); - email = addEmail(email); - // Email Attachments - if (fileAttachments != null && !fileAttachments.isEmpty()) { Folder folder = addEmailAttachmentsFolder(serviceContext.getCompanyId(), email.getEmailId()); for (FileAttachment fileAttachment : fileAttachments) { if (fileAttachment instanceof FileAttachment) { - ((it.tref.liferay.portos.mailmanager.shared.model.FileAttachment) fileAttachment) - .generateFile(); + ((it.tref.liferay.portos.mailmanager.shared.model.FileAttachment) fileAttachment).generateFile(); } - emailAttachmentLocalService.addEmailAttachment(serviceContext.getCompanyId(), - email.getEmailId(), folder.getFolderId(), fileAttachment.getFileName(), - fileAttachment.getFile()); + emailAttachmentLocalService.addEmailAttachment(serviceContext.getCompanyId(), email.getEmailId(), + folder.getFolderId(), fileAttachment.getFileName(), fileAttachment.getFile()); FileUtil.delete(fileAttachment.getFile()); } } - // Manifattura Web Group per Regione Siciliana - // Il valore di ritorno viene ignorato da SchedulerInvioDocumenti, le - // mail impostate per l'invio asincrono si perdono nell'abisso - // dell'oblio. Siccome questo è già un task asincrono, inviamo in - // maniera sincrona e festeggiamo. + // Il valore di ritorno viene ignorato da SchedulerInvioDocumenti, le mail impostate per l'invio asincrono si + // perdono nell'abisso dell'oblio. Siccome questo è già un task asincrono, inviamo in maniera sincrona e + // festeggiamo. sendSync = true; - if (sendSync) { MailSenderUtil.sendMail(email); markAsSent(email.getEmailId(), new Date(), StringPool.BLANK); } - return email; } - public Email updateEmail(long emailId, String from, String to[], String cc[], String bcc[], - String subject, String body, ServiceContext serviceContext) throws Exception { - - Email email = emailLocalService.getEmail(emailId); + @Override + public Email updateEmail(long emailId, String from, String to[], String cc[], String bcc[], String subject, + String body, ServiceContext serviceContext) throws Exception { + Email email = getEmail(emailId); validate(from, to, cc, bcc, null, subject, body, null); - email.setModifiedDate(new Date()); email.setFrom(from); email.setTo(StringUtil.merge(to, StringPool.COMMA)); @@ -212,60 +184,54 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { email.setBcc(StringUtil.merge(bcc, StringPool.COMMA)); email.setSubject(subject); email.setBody(body); - return updateEmail(email); } - public Email markAsSent(long emailId, Date sentDate, String statusMessage) throws PortalException, - SystemException { + @Override + public Email markAsSent(long emailId, Date sentDate, String statusMessage) throws PortalException, SystemException { - Email email = emailLocalService.getEmail(emailId); + Email email = getEmail(emailId); email.setModifiedDate(new Date()); - email.setSent(true); email.setSentDate(sentDate); email.setStatusMessage(statusMessage); - return updateEmail(email); } - public Email updateStatusMessage(long emailId, String statusMessage) throws PortalException, - SystemException { + @Override + public Email updateStatusMessage(long emailId, String statusMessage) throws PortalException, SystemException { - Email email = emailLocalService.getEmail(emailId); + Email email = getEmail(emailId); email.setModifiedDate(new Date()); - email.setStatusMessage(statusMessage); - return updateEmail(email); } + @Override public Email resendEmail(long emailId) throws PortalException, SystemException { - Email email = emailLocalService.getEmail(emailId); + Email email = getEmail(emailId); email.setModifiedDate(new Date()); - email.setStatusMessage(""); email.setSent(false); email.setSentDate(null); email.setCancel(false); - return updateEmail(email); } + @Override public Email cancelEmail(long emailId) throws PortalException, SystemException { - Email email = emailLocalService.getEmail(emailId); + Email email = getEmail(emailId); email.setModifiedDate(new Date()); - email.setCancel(true); - return updateEmail(email); } @Override public Email deleteEmail(long emailId) throws PortalException, SystemException { - Email email = emailLocalService.getEmail(emailId); + + Email email = getEmail(emailId); return deleteEmail(email); } @@ -273,108 +239,126 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { public Email deleteEmail(Email email) throws SystemException { super.deleteEmail(email); - // Email Attachments - - List emailAttachments = emailAttachmentLocalService - .findByEmailId(email.getEmailId()); + List emailAttachments = emailAttachmentLocalService.findByEmailId(email.getEmailId()); for (EmailAttachment emailAttachment : emailAttachments) { emailAttachmentLocalService.deleteEmailAttachment(emailAttachment); } - return email; } + @Override public List findByCompany(long companyId) throws SystemException { + return emailPersistence.findByCompany(companyId); } + @Override public List findByCompany(long companyId, int start, int end) throws SystemException { + return emailPersistence.findByCompany(companyId, start, end); } + @Override public List findByCompany(long companyId, int start, int end, OrderByComparator orderByComparator) throws SystemException { + return emailPersistence.findByCompany(companyId, start, end, orderByComparator); } + @Override public int countByCompany(long companyId) throws SystemException { + return emailPersistence.countByCompany(companyId); } + @Override public List findByC_G(long companyId, long groupId) throws SystemException { + return emailPersistence.findByC_G(companyId, groupId); } + @Override public List findByC_G(long companyId, long groupId, int start, int end) throws SystemException { + return emailPersistence.findByC_G(companyId, groupId, start, end); } - public List findByC_G(long companyId, long groupId, int start, int end, - OrderByComparator orderByComparator) throws SystemException { + @Override + public List findByC_G(long companyId, long groupId, int start, int end, OrderByComparator orderByComparator) + throws SystemException { + return emailPersistence.findByC_G(companyId, groupId, start, end, orderByComparator); } + @Override public int countByC_G(long companyId, long groupId) throws SystemException { + return emailPersistence.countByC_G(companyId, groupId); } + @Override public List findByC_G_T(long companyId, long groupId, String templateName) throws SystemException { + return emailPersistence.findByC_G_T(companyId, groupId, templateName); } + @Override public List findByC_G_T(long companyId, long groupId, String templateName, int start, int end) throws SystemException { + return emailPersistence.findByC_G_T(companyId, groupId, templateName, start, end); } + @Override public int countByC_G_T(long companyId, long groupId, String templateName) throws SystemException { + return emailPersistence.countByC_G_T(companyId, groupId, templateName); } + @Override public List findByC_G_C_C(long companyId, long groupId, long classNameId, long classPK) throws SystemException { + return emailPersistence.findByC_G_C_C(companyId, groupId, classNameId, classPK); } - public List findByC_G_C_C(long companyId, long groupId, long classNameId, long classPK, int start, - int end) throws SystemException { + @Override + public List findByC_G_C_C(long companyId, long groupId, long classNameId, long classPK, int start, int end) + throws SystemException { + return emailPersistence.findByC_G_C_C(companyId, groupId, classNameId, classPK, start, end); } - public int countByC_G_C_C(long companyId, long groupId, long classNameId, long classPK) - throws SystemException { + @Override + public int countByC_G_C_C(long companyId, long groupId, long classNameId, long classPK) throws SystemException { + return emailPersistence.countByC_G_C_C(companyId, groupId, classNameId, classPK); } - private Folder addEmailAttachmentsFolder(long companyId, long emailId) throws PortalException, - SystemException { + private Folder addEmailAttachmentsFolder(long companyId, long emailId) throws PortalException, SystemException { Company company = companyLocalService.getCompany(companyId); - Group companyGroup = company.getGroup(); User defaultUser = company.getDefaultUser(); - - Folder folder = dlAppLocalService.getFolder(companyGroup.getGroupId(), - DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, EmailConstants.DEFAULT_ATTACHMENTS_FOLDER_NAME); - + Folder folder = + dlAppLocalService.getFolder(companyGroup.getGroupId(), DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, + EmailConstants.DEFAULT_ATTACHMENTS_FOLDER_NAME); ServiceContext serviceContext = new ServiceContext(); serviceContext.setGroupPermissions(new String[] { ActionKeys.VIEW }); serviceContext.setGuestPermissions(new String[] { ActionKeys.VIEW }); - - return dlAppLocalService.addFolder(defaultUser.getUserId(), folder.getRepositoryId(), - folder.getFolderId(), String.valueOf(emailId), StringPool.BLANK, serviceContext); + return dlAppLocalService.addFolder(defaultUser.getUserId(), folder.getRepositoryId(), folder.getFolderId(), + String.valueOf(emailId), StringPool.BLANK, serviceContext); } - private void validate(String from, String to[], String cc[], String bcc[], String[] bulkAddresses, - String subject, String body, String[] replyTo) throws PortalException { + private void validate(String from, String to[], String cc[], String bcc[], String[] bulkAddresses, String subject, + String body, String[] replyTo) throws PortalException { if (Validator.isNull(from)) { throw new RequiredEmailFromException(); } else if (!Validator.isEmailAddress(from)) { throw new EmailFromException(); } - if (to == null || (to != null && to.length == 0)) { throw new RequiredEmailToException(); } else { @@ -384,7 +368,6 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { } } } - if (cc != null && cc.length > 0) { for (String emailAddress : cc) { if (!Validator.isEmailAddress(emailAddress)) { @@ -392,7 +375,6 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { } } } - if (bcc != null && bcc.length > 0) { for (String emailAddress : bcc) { if (!Validator.isEmailAddress(emailAddress)) { @@ -400,7 +382,6 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { } } } - if (bulkAddresses != null && bulkAddresses.length > 0) { for (String emailAddress : bulkAddresses) { if (!Validator.isEmailAddress(emailAddress)) { @@ -408,15 +389,12 @@ public class EmailLocalServiceImpl extends EmailLocalServiceBaseImpl { } } } - if (Validator.isNull(subject)) { throw new RequiredEmailSubjectException(); } - if (Validator.isNull(body)) { throw new RequiredEmailBodyException(); } - if (replyTo != null && replyTo.length == 0) { for (String emailAddress : replyTo) { if (!Validator.isEmailAddress(emailAddress)) { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailTemplateLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailTemplateLocalServiceImpl.java index b5340703..f929eeef 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailTemplateLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-mail-manager-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/mailmanager/service/impl/EmailTemplateLocalServiceImpl.java @@ -1,27 +1,13 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under the terms of the - * GNU Lesser General Public License as published by the Free Software Foundation; either version - * 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package it.tref.liferay.portos.mailmanager.service.impl; -import com.liferay.portal.kernel.exception.PortalException; -import com.liferay.portal.kernel.exception.SystemException; -import com.liferay.portal.kernel.util.OrderByComparator; -import com.liferay.portal.kernel.util.StringPool; -import com.liferay.portal.kernel.util.StringUtil; -import com.liferay.portal.kernel.util.Validator; -import com.liferay.portal.model.ResourceConstants; -import com.liferay.portal.model.User; -import com.liferay.portal.service.ServiceContext; - import it.tref.liferay.portos.mailmanager.EmailTemplateCcException; import it.tref.liferay.portos.mailmanager.EmailTemplateCcnException; import it.tref.liferay.portos.mailmanager.EmailTemplateFromException; @@ -37,17 +23,24 @@ import it.tref.liferay.portos.mailmanager.service.base.EmailTemplateLocalService import java.util.Date; import java.util.List; +import com.liferay.portal.kernel.exception.PortalException; +import com.liferay.portal.kernel.exception.SystemException; +import com.liferay.portal.kernel.util.OrderByComparator; +import com.liferay.portal.kernel.util.StringPool; +import com.liferay.portal.kernel.util.StringUtil; +import com.liferay.portal.kernel.util.Validator; +import com.liferay.portal.model.ResourceConstants; +import com.liferay.portal.model.User; +import com.liferay.portal.service.ServiceContext; + /** * The implementation of the email template local service. - * *

- * All custom service methods should be put in this class. Whenever methods are added, rerun - * ServiceBuilder to copy their definitions into the - * {@link it.noovle.azimut.icf.mailmanager.service.EmailTemplateLocalService} interface. - * + * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy + * their definitions into the {@link it.noovle.azimut.icf.mailmanager.service.EmailTemplateLocalService} interface. *

- * This is a local service. Methods of this service will not have security checks based on the - * propagated JAAS credentials because this service can only be accessed from within the same VM. + * This is a local service. Methods of this service will not have security checks based on the propagated JAAS + * credentials because this service can only be accessed from within the same VM. *

* * @author @@ -55,191 +48,171 @@ import java.util.List; * @see it.noovle.azimut.icf.mailmanager.service.EmailTemplateLocalServiceUtil */ public class EmailTemplateLocalServiceImpl extends EmailTemplateLocalServiceBaseImpl { - /* - * NOTE FOR DEVELOPERS: - * - * Never reference this interface directly. Always use {@link - * it.noovle.azimut.icf.mailmanager.service.EmailTemplateLocalServiceUtil} to access the email - * template local service. - */ - - @Override - public EmailTemplate addEmailTemplate(String templateName, String from, String[] to, String[] cc, String[] ccn, - String subject, String body, boolean attachmentPermitted, ServiceContext serviceContext) throws SystemException, - PortalException { - - User user = userLocalService.getUser(serviceContext.getUserId()); - - Date now = new Date(); - - validate(templateName, from, to, cc, ccn, subject, body); - - EmailTemplate emailTemplate = - emailTemplateLocalService.createEmailTemplate(counterLocalService.increment(EmailTemplate.class.getName())); - - emailTemplate.setCompanyId(serviceContext.getCompanyId()); - emailTemplate.setUserId(user.getUserId()); - emailTemplate.setUserName(user.getFullName()); - emailTemplate.setCreateDate(serviceContext.getCreateDate(now)); - emailTemplate.setModifiedDate(serviceContext.getModifiedDate(now)); - emailTemplate.setGroupId(serviceContext.getScopeGroupId()); - - emailTemplate.setTemplateName(templateName); - - emailTemplate.setFrom(from); - emailTemplate.setTo(StringUtil.merge(to, StringPool.COMMA)); - emailTemplate.setCc(StringUtil.merge(cc, StringPool.COMMA)); - emailTemplate.setCcn(StringUtil.merge(ccn, StringPool.COMMA)); - emailTemplate.setSubject(subject); - emailTemplate.setBody(body); - - emailTemplate.setAttachmentPermitted(attachmentPermitted); - - emailTemplate = emailTemplateLocalService.addEmailTemplate(emailTemplate); - - // Resource - - resourceLocalService.addResources(emailTemplate.getCompanyId(), emailTemplate.getGroupId(), - emailTemplate.getUserId(), EmailTemplate.class.getName(), emailTemplate.getPrimaryKey(), false, true, true); - - return emailTemplate; - } - - @Override - public EmailTemplate updateEmailTemplate(long emailTemplateId, String templateName, String from, String[] to, - String[] cc, String[] ccn, String subject, String body, boolean attachmentPermitted, ServiceContext serviceContext) - throws SystemException, PortalException { - - EmailTemplate emailTemplate = emailTemplateLocalService.getEmailTemplate(emailTemplateId); - - validate(templateName, from, to, cc, ccn, subject, body); - - emailTemplate.setModifiedDate(serviceContext.getModifiedDate(new Date())); - - emailTemplate.setFrom(from); - emailTemplate.setTo(StringUtil.merge(to, StringPool.COMMA)); - emailTemplate.setCc(StringUtil.merge(cc, StringPool.COMMA)); - emailTemplate.setCcn(StringUtil.merge(ccn, StringPool.COMMA)); - emailTemplate.setSubject(subject); - emailTemplate.setBody(body); - - emailTemplate.setAttachmentPermitted(attachmentPermitted); - - emailTemplate = emailTemplateLocalService.updateEmailTemplate(emailTemplate); - - return emailTemplate; - } - - @Override - public EmailTemplate deleteEmailTemplate(long emailTemplateId) throws PortalException, SystemException { - EmailTemplate emailTemplate = emailTemplateLocalService.getEmailTemplate(emailTemplateId); - return deleteEmailTemplate(emailTemplate); - } - - @Override - public EmailTemplate deleteEmailTemplate(EmailTemplate emailTemplate) throws SystemException { - - super.deleteEmailTemplate(emailTemplate); - - // Resource - - try { - resourceLocalService.deleteResource(emailTemplate.getCompanyId(), EmailTemplate.class.getName(), - ResourceConstants.SCOPE_INDIVIDUAL, emailTemplate.getPrimaryKey()); - } catch (PortalException e) { - } - - return emailTemplate; - } - - @Override - public int countByC_GroupId(long companyId, long groupId) throws SystemException { - return emailTemplatePersistence.countByC_GroupId(companyId, groupId); - } - - @Override - public List findByC_GroupId(long companyId, long groupId, int start, int end, OrderByComparator orderBy) - throws SystemException { - return emailTemplatePersistence.findByC_GroupId(companyId, groupId, start, end, orderBy); - } - - @Override - public EmailTemplate findByC_GroupId_Name(long companyId, long groupId, String templateName) - throws NoSuchEmailTemplateException, SystemException { - return emailTemplatePersistence.findByC_GroupId_Name(companyId, groupId, templateName); - } - - @Override - public EmailTemplate fetchByC_GroupId_Name(long companyId, long groupId, String templateName) throws SystemException { - return emailTemplatePersistence.fetchByC_GroupId_Name(companyId, groupId, templateName); - } - - @Override - public int countByCompany(long companyId) throws SystemException { - return emailTemplatePersistence.countByCompany(companyId); - } - - @Override - public List findByCompany(long companyId, int start, int end, OrderByComparator orderBy) - throws SystemException { - return emailTemplatePersistence.findByCompany(companyId, start, end, orderBy); - } - - @Override - public int countByC_Name(long companyId, String name) throws SystemException { - return emailTemplatePersistence.countByC_Name(companyId, name); - } - - @Override - public EmailTemplate findByC_Name(long companyId, String templateName) throws SystemException, - NoSuchEmailTemplateException { - return emailTemplatePersistence.findByC_Name(companyId, templateName); - } - - private void validate(String templateName, String from, String[] to, String[] cc, String[] ccn, String subject, - String body) throws PortalException { - - if (Validator.isNull(templateName)) { - throw new RequiredEmailTemplateNameException(); - } - - if (Validator.isNull(from)) { - throw new RequiredEmailTemplateFromException(); - } else if (!Validator.isEmailAddress(from)) { - throw new EmailTemplateFromException(); - } - - if (to != null && to.length > 0) { - for (String emailAddress : to) { - if (!Validator.isEmailAddress(emailAddress)) { - throw new EmailTemplateToException(); - } - } - } - - if (cc != null && cc.length > 0) { - for (String emailAddress : cc) { - if (!Validator.isEmailAddress(emailAddress)) { - throw new EmailTemplateCcException(); - } - } - } - - if (ccn != null && ccn.length > 0) { - for (String emailAddress : ccn) { - if (!Validator.isEmailAddress(emailAddress)) { - throw new EmailTemplateCcnException(); - } - } - } - - if (Validator.isNull(subject)) { - throw new RequiredEmailTemplateSubjectException(); - } - - if (Validator.isNull(body)) { - throw new RequiredEmailTemplateBodyException(); - } - - } + /* + * NOTE FOR DEVELOPERS: Never reference this interface directly. Always use {@link + * it.noovle.azimut.icf.mailmanager.service.EmailTemplateLocalServiceUtil} to access the email template local + * service. + */ + + @Override + public EmailTemplate addEmailTemplate(String templateName, String from, String[] to, String[] cc, String[] ccn, + String subject, String body, boolean attachmentPermitted, ServiceContext serviceContext) + throws SystemException, PortalException { + + User user = userLocalService.getUser(serviceContext.getUserId()); + Date now = new Date(); + validate(templateName, from, to, cc, ccn, subject, body); + EmailTemplate emailTemplate = createEmailTemplate(counterLocalService.increment(EmailTemplate.class.getName())); + emailTemplate.setCompanyId(serviceContext.getCompanyId()); + emailTemplate.setUserId(user.getUserId()); + emailTemplate.setUserName(user.getFullName()); + emailTemplate.setCreateDate(serviceContext.getCreateDate(now)); + emailTemplate.setModifiedDate(serviceContext.getModifiedDate(now)); + emailTemplate.setGroupId(serviceContext.getScopeGroupId()); + emailTemplate.setTemplateName(templateName); + emailTemplate.setFrom(from); + emailTemplate.setTo(StringUtil.merge(to, StringPool.COMMA)); + emailTemplate.setCc(StringUtil.merge(cc, StringPool.COMMA)); + emailTemplate.setCcn(StringUtil.merge(ccn, StringPool.COMMA)); + emailTemplate.setSubject(subject); + emailTemplate.setBody(body); + emailTemplate.setAttachmentPermitted(attachmentPermitted); + emailTemplate = addEmailTemplate(emailTemplate); + // Resource + resourceLocalService.addResources(emailTemplate.getCompanyId(), emailTemplate.getGroupId(), + emailTemplate.getUserId(), EmailTemplate.class.getName(), emailTemplate.getPrimaryKey(), false, true, + true); + return emailTemplate; + } + + @Override + public EmailTemplate updateEmailTemplate(long emailTemplateId, String templateName, String from, String[] to, + String[] cc, String[] ccn, String subject, String body, boolean attachmentPermitted, + ServiceContext serviceContext) throws SystemException, PortalException { + + EmailTemplate emailTemplate = getEmailTemplate(emailTemplateId); + validate(templateName, from, to, cc, ccn, subject, body); + emailTemplate.setModifiedDate(serviceContext.getModifiedDate(new Date())); + emailTemplate.setFrom(from); + emailTemplate.setTo(StringUtil.merge(to, StringPool.COMMA)); + emailTemplate.setCc(StringUtil.merge(cc, StringPool.COMMA)); + emailTemplate.setCcn(StringUtil.merge(ccn, StringPool.COMMA)); + emailTemplate.setSubject(subject); + emailTemplate.setBody(body); + emailTemplate.setAttachmentPermitted(attachmentPermitted); + emailTemplate = updateEmailTemplate(emailTemplate); + return emailTemplate; + } + + @Override + public EmailTemplate deleteEmailTemplate(long emailTemplateId) throws PortalException, SystemException { + + EmailTemplate emailTemplate = getEmailTemplate(emailTemplateId); + return deleteEmailTemplate(emailTemplate); + } + + @Override + public EmailTemplate deleteEmailTemplate(EmailTemplate emailTemplate) throws SystemException { + + super.deleteEmailTemplate(emailTemplate); + // Resource + try { + resourceLocalService.deleteResource(emailTemplate.getCompanyId(), EmailTemplate.class.getName(), + ResourceConstants.SCOPE_INDIVIDUAL, emailTemplate.getPrimaryKey()); + } catch (PortalException e) {} + return emailTemplate; + } + + @Override + public int countByC_GroupId(long companyId, long groupId) throws SystemException { + + return emailTemplatePersistence.countByC_GroupId(companyId, groupId); + } + + @Override + public List findByC_GroupId(long companyId, long groupId, int start, int end, + OrderByComparator orderBy) throws SystemException { + + return emailTemplatePersistence.findByC_GroupId(companyId, groupId, start, end, orderBy); + } + + @Override + public EmailTemplate findByC_GroupId_Name(long companyId, long groupId, String templateName) + throws NoSuchEmailTemplateException, SystemException { + + return emailTemplatePersistence.findByC_GroupId_Name(companyId, groupId, templateName); + } + + @Override + public EmailTemplate fetchByC_GroupId_Name(long companyId, long groupId, String templateName) + throws SystemException { + + return emailTemplatePersistence.fetchByC_GroupId_Name(companyId, groupId, templateName); + } + + @Override + public int countByCompany(long companyId) throws SystemException { + + return emailTemplatePersistence.countByCompany(companyId); + } + + @Override + public List findByCompany(long companyId, int start, int end, OrderByComparator orderBy) + throws SystemException { + + return emailTemplatePersistence.findByCompany(companyId, start, end, orderBy); + } + + @Override + public int countByC_Name(long companyId, String name) throws SystemException { + + return emailTemplatePersistence.countByC_Name(companyId, name); + } + + @Override + public EmailTemplate findByC_Name(long companyId, String templateName) throws SystemException, + NoSuchEmailTemplateException { + + return emailTemplatePersistence.findByC_Name(companyId, templateName); + } + + private void validate(String templateName, String from, String[] to, String[] cc, String[] ccn, String subject, + String body) throws PortalException { + + if (Validator.isNull(templateName)) { + throw new RequiredEmailTemplateNameException(); + } + if (Validator.isNull(from)) { + throw new RequiredEmailTemplateFromException(); + } else if (!Validator.isEmailAddress(from)) { + throw new EmailTemplateFromException(); + } + if (to != null && to.length > 0) { + for (String emailAddress : to) { + if (!Validator.isEmailAddress(emailAddress)) { + throw new EmailTemplateToException(); + } + } + } + if (cc != null && cc.length > 0) { + for (String emailAddress : cc) { + if (!Validator.isEmailAddress(emailAddress)) { + throw new EmailTemplateCcException(); + } + } + } + if (ccn != null && ccn.length > 0) { + for (String emailAddress : ccn) { + if (!Validator.isEmailAddress(emailAddress)) { + throw new EmailTemplateCcnException(); + } + } + } + if (Validator.isNull(subject)) { + throw new RequiredEmailTemplateSubjectException(); + } + if (Validator.isNull(body)) { + throw new RequiredEmailTemplateBodyException(); + } + } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/maintenance/NoSuchMaintenanceScheduleException.java b/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/maintenance/NoSuchMaintenanceScheduleException.java new file mode 100644 index 00000000..1f658b9f --- /dev/null +++ b/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/service/it/tref/liferay/portos/maintenance/NoSuchMaintenanceScheduleException.java @@ -0,0 +1,40 @@ +/** + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + */ + +package it.tref.liferay.portos.maintenance; + +import com.liferay.portal.NoSuchModelException; + +/** + * @author + */ +public class NoSuchMaintenanceScheduleException extends NoSuchModelException { + + public NoSuchMaintenanceScheduleException() { + super(); + } + + public NoSuchMaintenanceScheduleException(String msg) { + super(msg); + } + + public NoSuchMaintenanceScheduleException(String msg, Throwable cause) { + super(msg, cause); + } + + public NoSuchMaintenanceScheduleException(Throwable cause) { + super(cause); + } + +} \ No newline at end of file diff --git a/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/maintenance/portlet/AdminMaintenancePortlet.java b/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/maintenance/portlet/AdminMaintenancePortlet.java index 18d61763..56360468 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/maintenance/portlet/AdminMaintenancePortlet.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/maintenance/portlet/AdminMaintenancePortlet.java @@ -1,5 +1,14 @@ package it.tref.liferay.portos.maintenance.portlet; +import it.tref.liferay.portos.maintenance.model.MaintenanceSchedule; +import it.tref.liferay.portos.maintenance.service.MaintenanceScheduleServiceUtil; + +import java.util.Calendar; + +import javax.portlet.ActionRequest; +import javax.portlet.ActionResponse; +import javax.portlet.PortletSession; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.log.Log; @@ -17,105 +26,73 @@ import com.liferay.portal.service.ServiceContextFactory; import com.liferay.portal.util.PortalUtil; import com.liferay.util.bridges.mvc.MVCPortlet; -import it.tref.liferay.portos.maintenance.model.MaintenanceSchedule; -import it.tref.liferay.portos.maintenance.service.MaintenanceScheduleServiceUtil; - -import java.util.Calendar; - -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; -import javax.portlet.PortletSession; - -/** - * Portlet implementation class AdminMaintenancePortlet - */ public class AdminMaintenancePortlet extends MVCPortlet { - private final static Log _log = LogFactoryUtil.getLog(AdminMaintenancePortlet.class); - - public void maintain(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { - - PortletSession portletSession = actionRequest.getPortletSession(); - - String message = ParamUtil.getString(actionRequest, "message"); - - String className = - LanguageUtil - .get(LocaleUtil.getDefault(), - "the-sign-in-process-is-temporarily-disabled-because-the-portal-is-undergoing-a-routine-maintenance-upgrade"); - - if (Validator.isNotNull(message)) { - className = message; - } - - Class clazz = - ClassResolverUtil.resolve("com.liferay.portal.util.MaintenanceUtil", PortalClassLoaderUtil.getClassLoader()); - ReflectionUtil.getDeclaredMethod(clazz, "maintain", String.class, String.class).invoke(null, - portletSession.getId(), className); - - _log.info("Maintenance session id: " + portletSession.getId()); - - - } - - public void deleteMaintenanceSchedule(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { - _log.info("deleteMaintenanceSchedule - Inizio metodo"); - - ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); - long maintenanceScheduleId = ParamUtil.getLong(actionRequest, "maintenanceScheduleId"); - - MaintenanceScheduleServiceUtil.deleteMaintenanceSchedule(maintenanceScheduleId, serviceContext); - - } - - public void editMaintenanceSchedule(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { - _log.info("editMaintenanceSchedule - Inizio metodo"); - - String cmd = ParamUtil.getString(actionRequest, Constants.CMD); - - ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); - - long maintenanceScheduleId = ParamUtil.getLong(actionRequest, "maintenanceScheduleId"); - String type = ParamUtil.getString(actionRequest, "type"); - String reason = ParamUtil.getString(actionRequest, "reason"); - String portalMessage = ParamUtil.getString(actionRequest, "portalMessage"); - long after = ParamUtil.getLong(actionRequest, "after"); - String onreboot = ParamUtil.getString(actionRequest, "onreboot"); - String status = ParamUtil.getString(actionRequest, "status"); - String statusMessage = ParamUtil.getString(actionRequest, "statusMessage"); - - Calendar calendarEnd = Calendar.getInstance(); - calendarEnd.set(ParamUtil.getInteger(actionRequest, "endYear"), - ParamUtil.getInteger(actionRequest, "endMonth") + 1, ParamUtil.getInteger(actionRequest, "endDay"), - ParamUtil.getInteger(actionRequest, "endHour"), ParamUtil.getInteger(actionRequest, "endMinute")); - - MaintenanceSchedule maintenanceSchedule = null; - - try { - - if (cmd.equals(Constants.ADD)) { - maintenanceSchedule = - MaintenanceScheduleServiceUtil.addMaintenanceSchedule(type, reason, portalMessage, after, - calendarEnd.getTime(), onreboot, serviceContext); - } else if (cmd.equals(Constants.UPDATE)) { - maintenanceSchedule = - MaintenanceScheduleServiceUtil.updateMaintenanceSchedule(maintenanceScheduleId, type, reason, - portalMessage, after, calendarEnd.getTime(), onreboot, status, statusMessage, serviceContext); - } - - } catch (PortalException e) { - _log.error(e); - SessionErrors.add(actionRequest, e.getClass()); - } - - if (SessionErrors.isEmpty(actionRequest)) { - actionResponse.setRenderParameter("maintenanceScheduleId", - String.valueOf(maintenanceSchedule.getMaintenanceScheduleId())); - actionResponse.setRenderParameter("mvcPath", "/html/admin_maintenance/edit.jsp"); - } else { - actionResponse.setRenderParameter("mvcPath", "/html/admin_maintenance/edit.jsp"); - PortalUtil.copyRequestParameters(actionRequest, actionResponse); - } - - } + private static final Log _log = LogFactoryUtil.getLog(AdminMaintenancePortlet.class); + + public void maintain(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { + + PortletSession portletSession = actionRequest.getPortletSession(); + String message = ParamUtil.getString(actionRequest, "message"); + String className = LanguageUtil + .get(LocaleUtil.getDefault(), + "the-sign-in-process-is-temporarily-disabled-because-the-portal-is-undergoing-a-routine-maintenance-upgrade"); + if (Validator.isNotNull(message)) { + className = message; + } + Class clazz = ClassResolverUtil.resolve("com.liferay.portal.util.MaintenanceUtil", + PortalClassLoaderUtil.getClassLoader()); + ReflectionUtil.getDeclaredMethod(clazz, "maintain", String.class, String.class).invoke(null, + portletSession.getId(), className); + _log.info("Maintenance session id: " + portletSession.getId()); + } + + public void deleteMaintenanceSchedule(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { + + _log.info("deleteMaintenanceSchedule - Inizio metodo"); + ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); + long maintenanceScheduleId = ParamUtil.getLong(actionRequest, "maintenanceScheduleId"); + MaintenanceScheduleServiceUtil.deleteMaintenanceSchedule(maintenanceScheduleId, serviceContext); + } + + public void editMaintenanceSchedule(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { + + _log.info("editMaintenanceSchedule - Inizio metodo"); + String cmd = ParamUtil.getString(actionRequest, Constants.CMD); + ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequest); + long maintenanceScheduleId = ParamUtil.getLong(actionRequest, "maintenanceScheduleId"); + String type = ParamUtil.getString(actionRequest, "type"); + String reason = ParamUtil.getString(actionRequest, "reason"); + String portalMessage = ParamUtil.getString(actionRequest, "portalMessage"); + long after = ParamUtil.getLong(actionRequest, "after"); + String onreboot = ParamUtil.getString(actionRequest, "onreboot"); + String status = ParamUtil.getString(actionRequest, "status"); + String statusMessage = ParamUtil.getString(actionRequest, "statusMessage"); + Calendar calendarEnd = Calendar.getInstance(); + calendarEnd.set(ParamUtil.getInteger(actionRequest, "endYear"), + ParamUtil.getInteger(actionRequest, "endMonth") + 1, ParamUtil.getInteger(actionRequest, "endDay"), + ParamUtil.getInteger(actionRequest, "endHour"), ParamUtil.getInteger(actionRequest, "endMinute")); + MaintenanceSchedule maintenanceSchedule = null; + try { + if (cmd.equals(Constants.ADD)) { + maintenanceSchedule = MaintenanceScheduleServiceUtil.addMaintenanceSchedule(type, reason, + portalMessage, after, calendarEnd.getTime(), onreboot, serviceContext); + } else if (cmd.equals(Constants.UPDATE)) { + maintenanceSchedule = MaintenanceScheduleServiceUtil.updateMaintenanceSchedule(maintenanceScheduleId, + type, reason, portalMessage, after, calendarEnd.getTime(), onreboot, status, statusMessage, + serviceContext); + } + } catch (PortalException e) { + _log.error(e); + SessionErrors.add(actionRequest, e.getClass()); + } + if (SessionErrors.isEmpty(actionRequest)) { + actionResponse.setRenderParameter("maintenanceScheduleId", + String.valueOf(maintenanceSchedule.getMaintenanceScheduleId())); + actionResponse.setRenderParameter("mvcPath", "/html/admin_maintenance/edit.jsp"); + } else { + actionResponse.setRenderParameter("mvcPath", "/html/admin_maintenance/edit.jsp"); + PortalUtil.copyRequestParameters(actionRequest, actionResponse); + } + } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/service.properties b/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/service.properties index 5f3c460f..63cc7323 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/service.properties +++ b/liferay-plugins-sdk-6.2/portlets/portos-maintenance-portlet/docroot/WEB-INF/src/service.properties @@ -13,8 +13,8 @@ ## build.namespace=portos_maintenance - build.number=42 - build.date=1569596970763 + build.number=43 + build.date=1631870287519 build.auto.upgrade=true ## diff --git a/liferay-plugins-sdk-6.2/portlets/portos-notification-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/notification/action/StartUpAction.java b/liferay-plugins-sdk-6.2/portlets/portos-notification-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/notification/action/StartUpAction.java index 574459b6..1ba15acf 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-notification-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/notification/action/StartUpAction.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-notification-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/notification/action/StartUpAction.java @@ -25,7 +25,7 @@ import com.liferay.portlet.expando.service.ExpandoTableLocalServiceUtil; public class StartUpAction extends SimpleAction { - private final static Log _log = LogFactoryUtil.getLog(StartUpAction.class); + private static final Log _log = LogFactoryUtil.getLog(StartUpAction.class); @Override public void run(String[] companyIds) throws ActionException { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-report-engine-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/persistence/KaleoTaskAssignmentInstanceFinderImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-report-engine-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/persistence/KaleoTaskAssignmentInstanceFinderImpl.java index a478789a..c4b09bab 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-report-engine-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/persistence/KaleoTaskAssignmentInstanceFinderImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-report-engine-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/persistence/KaleoTaskAssignmentInstanceFinderImpl.java @@ -16,76 +16,55 @@ import com.liferay.portal.service.persistence.impl.BasePersistenceImpl; import com.liferay.util.dao.orm.CustomSQLUtil; public class KaleoTaskAssignmentInstanceFinderImpl extends BasePersistenceImpl implements - KaleoTaskAssignmentInstanceFinder { - - private final static Log _log = LogFactoryUtil.getLog(KaleoTaskAssignmentInstanceFinderImpl.class); - - private final String DISTINCT_ASSIGNEE_USER = "Report.distinctKaleoAssigneeUser"; - private final String DISTINCT_ASSIGNEE_ID = "Report.distinctKaleoAssigneeId"; - - public List distinctKaleoAssignee() throws SystemException { - - Session session = null; - - try { - - session = openSession(); - - String sql = CustomSQLUtil.get(DISTINCT_ASSIGNEE_USER); - // sql = StringUtil.replace(sql, "[$GROUP_ID$]", "" + groupId); - // sql = StringUtil.replace(sql, "[$GROUP_ID$]", StringUtil.merge(territorioIds)); - // sql = StringUtil.replace(sql, "[$TIPOPRATICA$]", "02"); - - SQLQuery query = session.createSQLQuery(sql); - query.setCacheable(false); - - QueryPos qPos = QueryPos.getInstance(query); - - List list = query.list(); - - return list; - - } catch (ORMException e) { - _log.error("Errore", e); - throw new SystemException(e); - } finally { - if (session != null) { - closeSession(session); - } - } - } - - public List distinctKaleoAssigneeId(long userId) throws SystemException { - - Session session = null; - - try { - - session = openSession(); - - String sql = CustomSQLUtil.get(DISTINCT_ASSIGNEE_ID); - // sql = StringUtil.replace(sql, "[$GROUP_ID$]", "" + groupId); - // sql = StringUtil.replace(sql, "[$GROUP_ID$]", StringUtil.merge(territorioIds)); - // sql = StringUtil.replace(sql, "[$TIPOPRATICA$]", "02"); - - SQLQuery query = session.createSQLQuery(sql); - query.setCacheable(false); - - QueryPos qPos = QueryPos.getInstance(query); - qPos.add(userId); - - List list = query.list(); - - return list; - - } catch (ORMException e) { - _log.error("Errore", e); - throw new SystemException(e); - } finally { - if (session != null) { - closeSession(session); - } - } - } - + KaleoTaskAssignmentInstanceFinder { + + private static final Log _log = LogFactoryUtil.getLog(KaleoTaskAssignmentInstanceFinderImpl.class); + + private static final String DISTINCT_ASSIGNEE_USER = "Report.distinctKaleoAssigneeUser"; + private static final String DISTINCT_ASSIGNEE_ID = "Report.distinctKaleoAssigneeId"; + + @Override + public List distinctKaleoAssignee() throws SystemException { + + Session session = null; + try { + session = openSession(); + String sql = CustomSQLUtil.get(DISTINCT_ASSIGNEE_USER); + SQLQuery query = session.createSQLQuery(sql); + query.setCacheable(false); + QueryPos qPos = QueryPos.getInstance(query); + List list = query.list(); + return list; + } catch (ORMException e) { + _log.error("Errore", e); + throw new SystemException(e); + } finally { + if (session != null) { + closeSession(session); + } + } + } + + @Override + public List distinctKaleoAssigneeId(long userId) throws SystemException { + + Session session = null; + try { + session = openSession(); + String sql = CustomSQLUtil.get(DISTINCT_ASSIGNEE_ID); + SQLQuery query = session.createSQLQuery(sql); + query.setCacheable(false); + QueryPos qPos = QueryPos.getInstance(query); + qPos.add(userId); + List list = query.list(); + return list; + } catch (ORMException e) { + _log.error("Errore", e); + throw new SystemException(e); + } finally { + if (session != null) { + closeSession(session); + } + } + } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ProtocolloMessageListener.java b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ProtocolloMessageListener.java index 797c2483..69e16e5a 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ProtocolloMessageListener.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ProtocolloMessageListener.java @@ -64,16 +64,17 @@ public class ProtocolloMessageListener extends BaseMessageListener { long userId = message.getLong(ReportConstants.USER_ID); @SuppressWarnings("unchecked") Map taskContextMap = (Map) message.get(ReportConstants.PARAMATERS); - User user = UserLocalServiceUtil.getRoleUsers( - RoleLocalServiceUtil.getRole(companyId, RoleConstants.ADMINISTRATOR).getRoleId()).get(0); + User user = + UserLocalServiceUtil.getRoleUsers( + RoleLocalServiceUtil.getRole(companyId, RoleConstants.ADMINISTRATOR).getRoleId()).get(0); try { PermissionThreadLocal.setPermissionChecker(PermissionCheckerFactoryUtil.create(user)); } catch (Exception e) { throw new SystemException(e); } try { - JSONArray jsonArray = JSONFactoryUtil.createJSONArray(MapUtil.getString(taskContextMap, - ReportConstants.PARAM_REPORTS)); + JSONArray jsonArray = + JSONFactoryUtil.createJSONArray(MapUtil.getString(taskContextMap, ReportConstants.PARAM_REPORTS)); JSONObject jsonObject = jsonArray.getJSONObject(0); ReportDto reportDto = JSONFactoryUtil.looseDeserialize(jsonObject.toString(), ReportDto.class); String protocolloToAttach = StringPool.BLANK; @@ -130,22 +131,32 @@ public class ProtocolloMessageListener extends BaseMessageListener { ServiceContext serviceContext = new ServiceContext(); serviceContext.setUserId(userId); serviceContext.setCompanyId(companyId); - FileEntry newFileEntry = null; + long repositoryId = fileEntry.getRepositoryId(); + long folderId = fileEntry.getFolderId(); + String sourceFileName = reportDto.getFileName() + ".pdf"; + String mimeType = ContentTypes.APPLICATION_PDF; + String title = reportDto.getFileName(); + String description = StringPool.BLANK; + String changeLog = StringPool.BLANK; + FileEntry newFileEntry; try { - newFileEntry = DLAppLocalServiceUtil.addFileEntry(userId, fileEntry.getRepositoryId(), - fileEntry.getFolderId(), reportDto.getFileName() + ".pdf", ContentTypes.APPLICATION_PDF, - reportDto.getFileName(), StringPool.BLANK, StringPool.BLANK, outputBytes, serviceContext); + newFileEntry = + DLAppLocalServiceUtil.addFileEntry(userId, repositoryId, folderId, sourceFileName, + mimeType, title, description, changeLog, outputBytes, serviceContext); } catch (DuplicateFileException e) { - FileEntry fe = DLAppServiceUtil.getFileEntry(fileEntry.getGroupId(), fileEntry.getFolderId(), - reportDto.getFileName()); - _log.info("File duplicato : " + fe.getFileEntryId()); - return; + FileEntry fe = + DLAppServiceUtil.getFileEntry(fileEntry.getGroupId(), fileEntry.getFolderId(), + reportDto.getFileName()); + DLAppLocalServiceUtil.deleteFileEntry(fe.getFileEntryId()); + newFileEntry = + DLAppLocalServiceUtil.addFileEntry(userId, repositoryId, folderId, sourceFileName, + mimeType, title, description, changeLog, outputBytes, serviceContext); } if (Validator.isNotNull(newFileEntry)) { long[] fileEntryIds = new long[0]; fileEntryIds = ArrayUtil.append(fileEntryIds, newFileEntry.getFileEntryId()); - ReportResultDto dto = new ReportResultDto(0L, fileEntryIds, ReportResult.SUCCESSFUL.toString(), - null); + ReportResultDto dto = + new ReportResultDto(0L, fileEntryIds, ReportResult.SUCCESSFUL.toString(), null); Message responseMessage = MessageBusUtil.createResponseMessage(message); responseMessage.setPayload(JSONFactoryUtil.looseSerializeDeep(dto)); MessageBusUtil.sendMessage(responseMessage.getDestinationName(), responseMessage); diff --git a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ReportMessageListener.java b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ReportMessageListener.java index 08a2dc0b..a126a417 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ReportMessageListener.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/messaging/ReportMessageListener.java @@ -29,7 +29,8 @@ import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.service.ServiceContext; public class ReportMessageListener extends BaseMessageListener { - private final static Log _log = LogFactoryUtil.getLog(ReportTaskMessageListener.class); + + private static final Log _log = LogFactoryUtil.getLog(ReportTaskMessageListener.class); @Override protected void doReceive(Message message) throws Exception { diff --git a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/portlet/TestPdf.java b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/portlet/TestPdf.java index 48655c7c..1a1e3b2e 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/portlet/TestPdf.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/portlet/TestPdf.java @@ -46,7 +46,7 @@ import com.liferay.util.bridges.mvc.MVCPortlet; public class TestPdf extends MVCPortlet { - private final static Log _log = LogFactoryUtil.getLog(TestPdf.class); + private static final Log _log = LogFactoryUtil.getLog(TestPdf.class); @Override public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws IOException, diff --git a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskLocalServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskLocalServiceImpl.java index 3c6baec9..f5a8f1ae 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskLocalServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskLocalServiceImpl.java @@ -46,8 +46,7 @@ public class ReportTaskLocalServiceImpl extends ReportTaskLocalServiceBaseImpl { User user = userLocalService.getUser(serviceContext.getUserId()); Date now = new Date(); - ReportTask reportTask = reportTaskLocalService.createReportTask(counterLocalService.increment(ReportTask.class - .getName())); + ReportTask reportTask = createReportTask(counterLocalService.increment(ReportTask.class.getName())); reportTask.setCompanyId(serviceContext.getCompanyId()); reportTask.setUserId(user.getUserId()); reportTask.setUserName(user.getFullName()); @@ -57,16 +56,16 @@ public class ReportTaskLocalServiceImpl extends ReportTaskLocalServiceBaseImpl { String taskContext = JSONFactoryUtil.looseSerializeDeep(taskContextMap); reportTask.setTaskContext(taskContext); } - return reportTaskLocalService.addReportTask(reportTask); + return addReportTask(reportTask); } @Override public ReportTask markAsCompleted(long reportTaskId, Date completionDate) throws PortalException, SystemException { - ReportTask reportTask = reportTaskLocalService.getReportTask(reportTaskId); + ReportTask reportTask = getReportTask(reportTaskId); reportTask.setModifiedDate(new Date()); reportTask.setCompleted(true); reportTask.setCompletionDate(completionDate); - return reportTaskLocalService.updateReportTask(reportTask); + return updateReportTask(reportTask); } } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskManagerServiceImpl.java b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskManagerServiceImpl.java index d42a2c0e..4fb530c6 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskManagerServiceImpl.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/it/tref/liferay/portos/report/service/impl/ReportTaskManagerServiceImpl.java @@ -63,7 +63,7 @@ import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil; */ public class ReportTaskManagerServiceImpl extends ReportTaskManagerServiceBaseImpl { - private final static Log _log = LogFactoryUtil.getLog(ReportTaskManagerServiceImpl.class); + private static final Log _log = LogFactoryUtil.getLog(ReportTaskManagerServiceImpl.class); @Override public long[] doReport(long companyId, long userId, Map taskContextMap, Object dataSource) diff --git a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/service.properties b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/service.properties index 50edeb59..d91f8d93 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/service.properties +++ b/liferay-plugins-sdk-6.2/portlets/portos-report-portlet/docroot/WEB-INF/src/service.properties @@ -13,8 +13,8 @@ ## build.namespace=portos_rep - build.number=33 - build.date=1630406182776 + build.number=34 + build.date=1631888828391 build.auto.upgrade=true ## diff --git a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerInvocationHandler.java b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerInvocationHandler.java index c6a58719..c82bdeb5 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerInvocationHandler.java +++ b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerInvocationHandler.java @@ -136,6 +136,6 @@ public class ModelListenerInvocationHandler implements InvocationHandler { return false; } - private final static String[] MODEL_METHOD_NAMES = { "onAfterCreate", "onAfterRemove", "onAfterUpdate", + private static final String[] MODEL_METHOD_NAMES = { "onAfterCreate", "onAfterRemove", "onAfterUpdate", "onBeforeCreate", "onBeforeRemove", "onBeforeUpdate" }; } diff --git a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerPool.java b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerPool.java index 8e1e316a..7f0430ae 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerPool.java +++ b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerPool.java @@ -14,35 +14,34 @@ public class ModelListenerPool { protected static void register(String servletContextName, String modelClassName, ModelListener> modelListener) { - _servletContextNameMap.put(modelClassName, servletContextName); - if (!_modelListenersMap.containsKey(modelClassName)) { - _modelListenersMap.put(modelClassName, new ArrayList>>()); + SERVLET_CONTEXT_NAME_MAP.put(modelClassName, servletContextName); + if (!MODEL_LISTENERS_MAP.containsKey(modelClassName)) { + MODEL_LISTENERS_MAP.put(modelClassName, new ArrayList>>()); } - _modelListenersMap.get(modelClassName).add(modelListener); + MODEL_LISTENERS_MAP.get(modelClassName).add(modelListener); } protected static void unregister(String modelClassName) { - _servletContextNameMap.remove(modelClassName); - _modelListenersMap.remove(modelClassName); + SERVLET_CONTEXT_NAME_MAP.remove(modelClassName); + MODEL_LISTENERS_MAP.remove(modelClassName); } protected static Set getModelClassNames() { - return _modelListenersMap.keySet(); + return MODEL_LISTENERS_MAP.keySet(); } protected static List>> getModelListeners(String modelClassName) { - return _modelListenersMap.get(modelClassName); + return MODEL_LISTENERS_MAP.get(modelClassName); } protected static String getServletContextName(String modelClassName) { - return _servletContextNameMap.get(modelClassName); + return SERVLET_CONTEXT_NAME_MAP.get(modelClassName); } - private final static Map>>> _modelListenersMap = new ConcurrentHashMap>>>(); - - private final static Map _servletContextNameMap = new ConcurrentHashMap(); + private static final Map>>> MODEL_LISTENERS_MAP = new ConcurrentHashMap>>>(); + private static final Map SERVLET_CONTEXT_NAME_MAP = new ConcurrentHashMap(); } diff --git a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerUtil.java b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerUtil.java index c7fe8fd2..b03919e9 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerUtil.java +++ b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/modellistener/shared/core/ModelListenerUtil.java @@ -73,5 +73,5 @@ public class ModelListenerUtil { return (BasePersistence) PortletBeanLocatorUtil.locate(servletContextName, beanName); } - private final static Log _log = LogFactoryUtil.getLog(ModelListenerUtil.class); + private static final Log _log = LogFactoryUtil.getLog(ModelListenerUtil.class); } diff --git a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PagamentoConstants.java b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PagamentoConstants.java index 617dfa8e..cc5fb3c0 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PagamentoConstants.java +++ b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PagamentoConstants.java @@ -9,17 +9,17 @@ public class PagamentoConstants { public static final String PAGAMENTO_BOLLI = "02"; public static final String PAGAMENTO_ONERI_BOLLI = "03"; - public final static String MEZZO_ZERO = "00"; - public final static String MEZZO_MANUALE = "01"; - - public final static String UTILIZZATA_NO = "01"; // Da Portos 1 - serve solo per import - public final static String UTILIZZATA_SI = "02"; // Da Portos 1 - serve solo per import - public final static String UTILIZZATA_IN_CORSO = "03"; - public final static String UTILIZZATA_PAGATA = "04"; - public final static String UTILIZZATA_RIFIUTATA = "05"; - public final static String UTILIZZATA_NON_PAGABILE = "06"; - public final static String UTILIZZATA_SOSTITUITA = "07"; - public final static String UTILIZZATA_ANNULLATO = "08"; + public static final String MEZZO_ZERO = "00"; + public static final String MEZZO_MANUALE = "01"; + + public static final String UTILIZZATA_NO = "01"; // Da Portos 1 - serve solo per import + public static final String UTILIZZATA_SI = "02"; // Da Portos 1 - serve solo per import + public static final String UTILIZZATA_IN_CORSO = "03"; + public static final String UTILIZZATA_PAGATA = "04"; + public static final String UTILIZZATA_RIFIUTATA = "05"; + public static final String UTILIZZATA_NON_PAGABILE = "06"; + public static final String UTILIZZATA_SOSTITUITA = "07"; + public static final String UTILIZZATA_ANNULLATO = "08"; @SuppressWarnings("serial") private static Map mezzoToLabel = new HashMap() { diff --git a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PortletKeys.java b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PortletKeys.java index e75104ce..5f44fd49 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PortletKeys.java +++ b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/PortletKeys.java @@ -10,9 +10,9 @@ public class PortletKeys extends com.liferay.portal.util.PortletKeys { public static final String CARICHI_LAVORO = "9_WAR_portosboportlet"; public static final String TEMPISTICHE = "10_WAR_portosboportlet"; public static final String PAGAMENTI_PENDING = "12_WAR_portosboportlet"; - public final static String FASCICOLOFE = "1_WAR_portosfeportlet"; - public final static String SOGGETTI = "3_WAR_portosfeportlet"; - public final static String ALLEGATI = "4_WAR_portosfeportlet"; - public final static String COMUNICAZIONI = "1_WAR_portoscomunicazioniportlet"; - public final static String MAPIT = "5_WAR_trefmapitmapportlet"; + public static final String FASCICOLOFE = "1_WAR_portosfeportlet"; + public static final String SOGGETTI = "3_WAR_portosfeportlet"; + public static final String ALLEGATI = "4_WAR_portosfeportlet"; + public static final String COMUNICAZIONI = "1_WAR_portoscomunicazioniportlet"; + public static final String MAPIT = "5_WAR_trefmapitmapportlet"; } diff --git a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/SezioniUtil.java b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/SezioniUtil.java index 1bfbfdf3..d4f68b5c 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/SezioniUtil.java +++ b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/SezioniUtil.java @@ -2,9 +2,9 @@ package it.tref.liferay.portos.bo.shared.util; public class SezioniUtil { - public final static String SEZIONE_DETTAGLI_PRINCIPALI = "01"; - public final static String SEZIONE_ANAGRAFE_SOGGETTI = "02"; - public final static String SEZIONE_DESCRIZIONE_EDIFICIO = "03"; - public final static String SEZIONE_GEOLOGICA = "04"; - public final static String SEZIONE_ALLEGATI = "05"; + public static final String SEZIONE_DETTAGLI_PRINCIPALI = "01"; + public static final String SEZIONE_ANAGRAFE_SOGGETTI = "02"; + public static final String SEZIONE_DESCRIZIONE_EDIFICIO = "03"; + public static final String SEZIONE_GEOLOGICA = "04"; + public static final String SEZIONE_ALLEGATI = "05"; } diff --git a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/StatoPraticaConstants.java b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/StatoPraticaConstants.java index bcd65194..5dc59121 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/StatoPraticaConstants.java +++ b/liferay-plugins-sdk-6.2/shared/portos-bo-shared/src/it/tref/liferay/portos/bo/shared/util/StatoPraticaConstants.java @@ -45,7 +45,7 @@ public class StatoPraticaConstants { public static final String INVIO_AVVISO_MANUALE = "MA"; @SuppressWarnings("serial") - private static final Map statusLabel = new HashMap() { + private static final Map STATUS_LABEL = new HashMap() { { put(ANNULLATA, "label.admingeniocivile.statopratica.annullata"); put(CAMBIO_ISTRUTTORE, "label.admingeniocivile.statopratica.cambiIstruttore"); @@ -73,7 +73,7 @@ public class StatoPraticaConstants { }; @SuppressWarnings("serial") - private final static Map esitoAutorizzazione = new HashMap() { + private static final Map ESITO_AUTORIZZAZIONE = new HashMap() { { put(ANNULLATA, getLabel(ANNULLATA)); put(AUTORIZZATA, getLabel(AUTORIZZATA)); @@ -85,34 +85,34 @@ public class StatoPraticaConstants { } }; - private final static Map esitoDeposito; + private static final Map ESITO_DEPOSITO; static { - esitoDeposito = new HashMap<>(); - esitoDeposito.putAll(esitoAutorizzazione); - esitoAutorizzazione.put(CONFORME, getLabel(AUTORIZZATA)); - esitoAutorizzazione.put(NON_CONFORME, getLabel(NON_AUTORIZZATA)); - esitoDeposito.put(CONFORME, getLabel(CONFORME)); - esitoDeposito.put(NON_CONFORME, getLabel(NON_CONFORME)); + ESITO_DEPOSITO = new HashMap<>(); + ESITO_DEPOSITO.putAll(ESITO_AUTORIZZAZIONE); + ESITO_AUTORIZZAZIONE.put(CONFORME, getLabel(AUTORIZZATA)); + ESITO_AUTORIZZAZIONE.put(NON_CONFORME, getLabel(NON_AUTORIZZATA)); + ESITO_DEPOSITO.put(CONFORME, getLabel(CONFORME)); + ESITO_DEPOSITO.put(NON_CONFORME, getLabel(NON_CONFORME)); } public static String getStatusLabel(String statoPratica) { - return statusLabel.get(statoPratica); + return STATUS_LABEL.get(statoPratica); } public static String getEsitoAutorizzazione(String esito) { - if (esitoAutorizzazione.containsKey(esito)) { - return esitoAutorizzazione.get(esito); + if (ESITO_AUTORIZZAZIONE.containsKey(esito)) { + return ESITO_AUTORIZZAZIONE.get(esito); } return StringPool.BLANK; } public static String getEsitoDeposito(String esito) { - if (esitoDeposito.containsKey(esito)) { - return esitoDeposito.get(esito); + if (ESITO_DEPOSITO.containsKey(esito)) { + return ESITO_DEPOSITO.get(esito); } return StringPool.BLANK; } diff --git a/liferay-plugins-sdk-6.2/shared/portos-kaleo-shared/src/it/tref/liferay/portos/kaleo/shared/util/PortletKeys.java b/liferay-plugins-sdk-6.2/shared/portos-kaleo-shared/src/it/tref/liferay/portos/kaleo/shared/util/PortletKeys.java index 1ee44577..bde4792a 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-kaleo-shared/src/it/tref/liferay/portos/kaleo/shared/util/PortletKeys.java +++ b/liferay-plugins-sdk-6.2/shared/portos-kaleo-shared/src/it/tref/liferay/portos/kaleo/shared/util/PortletKeys.java @@ -2,5 +2,5 @@ package it.tref.liferay.portos.kaleo.shared.util; public class PortletKeys extends com.liferay.portal.util.PortletKeys { - public final static String WORKFLOW_FORM_ADMIN = "1_WAR_portoskaleoportlet"; -} \ No newline at end of file + public static final String WORKFLOW_FORM_ADMIN = "1_WAR_portoskaleoportlet"; +} diff --git a/liferay-plugins-sdk-6.2/shared/portos-mail-manager-shared/src/it/tref/liferay/portos/mailmanager/shared/messaging/util/MailManagerUtil.java b/liferay-plugins-sdk-6.2/shared/portos-mail-manager-shared/src/it/tref/liferay/portos/mailmanager/shared/messaging/util/MailManagerUtil.java index e53992dc..7ee67bfa 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-mail-manager-shared/src/it/tref/liferay/portos/mailmanager/shared/messaging/util/MailManagerUtil.java +++ b/liferay-plugins-sdk-6.2/shared/portos-mail-manager-shared/src/it/tref/liferay/portos/mailmanager/shared/messaging/util/MailManagerUtil.java @@ -29,7 +29,7 @@ import com.liferay.portal.service.ServiceContext; public class MailManagerUtil { - private final static Log _log = LogFactoryUtil.getLog(MailManagerUtil.class); + private static final Log _log = LogFactoryUtil.getLog(MailManagerUtil.class); public static boolean sendMail(String messageId, String inReplyTo, String from, String[] to, String[] cc, String[] bcc, String subject, String body, boolean htmlFormat, boolean async, boolean checkPermission, diff --git a/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportConstants.java b/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportConstants.java index f2727c4e..957cd6bc 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportConstants.java +++ b/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportConstants.java @@ -14,26 +14,26 @@ public class ReportConstants { HTML_TO_PDF, JRXML_TO_PDF, VELOCITY_TO_PDF, ODT_TO_PDF } - public final static String COMPANY_ID = "companyId"; - public final static String USER_ID = "userId"; - public final static String PARAMATERS = "paramaters"; + public static final String COMPANY_ID = "companyId"; + public static final String USER_ID = "userId"; + public static final String PARAMATERS = "paramaters"; - public final static String PARAM_REPORTS = "reports"; - public final static String PARAM_PROCESS_MODE = "processMode"; - public final static String PARAM_RESPONSE_DESTINATION_NAME = "responseDestinationName"; + public static final String PARAM_REPORTS = "reports"; + public static final String PARAM_PROCESS_MODE = "processMode"; + public static final String PARAM_RESPONSE_DESTINATION_NAME = "responseDestinationName"; - public final static String SERVICE_CONTEXT = "serviceContext"; - public final static String FILE_ENTRY_ID_TEMPLATE = "fileEntryIdTemplate"; - public final static String REPORT_PARAMETERS = "reportParameters"; - public final static String REPORT_DATASOURCE = "reportDataSource"; - public final static String REPORT_NAME = "reportName"; - public final static String FOLDER_ID_REPORT = "folderIdReport"; + public static final String SERVICE_CONTEXT = "serviceContext"; + public static final String FILE_ENTRY_ID_TEMPLATE = "fileEntryIdTemplate"; + public static final String REPORT_PARAMETERS = "reportParameters"; + public static final String REPORT_DATASOURCE = "reportDataSource"; + public static final String REPORT_NAME = "reportName"; + public static final String FOLDER_ID_REPORT = "folderIdReport"; /* * Genio Civile */ - public final static String LOGO_REGIONE = "LOGO_REGIONE"; - public final static String LOGO_DIPARTIMENTO = "LOGO_DIPARTIMENTO"; - public final static String PATH_LOGO_REGIONE = "/resource/report/LOGO_REGIONE.png"; - public final static String PATH_LOGO_DIPARTIMENTO = "/resource/report/LOGO_DIPARTIMENTO.png"; + public static final String LOGO_REGIONE = "LOGO_REGIONE"; + public static final String LOGO_DIPARTIMENTO = "LOGO_DIPARTIMENTO"; + public static final String PATH_LOGO_REGIONE = "/resource/report/LOGO_REGIONE.png"; + public static final String PATH_LOGO_DIPARTIMENTO = "/resource/report/LOGO_DIPARTIMENTO.png"; } diff --git a/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportDestinationNames.java b/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportDestinationNames.java index 2df35ab8..3aa3ad63 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportDestinationNames.java +++ b/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/constants/ReportDestinationNames.java @@ -2,7 +2,7 @@ package it.tref.liferay.portos.report.shared.constants; public class ReportDestinationNames { - public final static String SERIAL = "liferay/tref/portos/report_serial"; - public final static String SYNC = "liferay/tref/portos/report_sync"; - public final static String SYNC_PROTOCOLLO = "liferay/tref/portos/protocollo_sync"; + public static final String SERIAL = "liferay/tref/portos/report_serial"; + public static final String SYNC = "liferay/tref/portos/report_sync"; + public static final String SYNC_PROTOCOLLO = "liferay/tref/portos/protocollo_sync"; } diff --git a/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/util/PdfUtil.java b/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/util/PdfUtil.java index 7680eea0..15900223 100644 --- a/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/util/PdfUtil.java +++ b/liferay-plugins-sdk-6.2/shared/portos-report-shared/src/it/tref/liferay/portos/report/shared/util/PdfUtil.java @@ -1,5 +1,13 @@ package it.tref.liferay.portos.report.shared.util; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; @@ -20,17 +28,9 @@ import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.Validator; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - public class PdfUtil { - private final static Log _log = LogFactoryUtil.getLog(PdfUtil.class); + private static final Log _log = LogFactoryUtil.getLog(PdfUtil.class); public static byte[] merge(InputStream pdf1, InputStream pdf2) { @@ -77,8 +77,7 @@ public class PdfUtil { } iteratorPDFReader = readers.iterator(); // Loop through the PDF files and add to the output. - while (iteratorPDFReader.hasNext()) { - } + while (iteratorPDFReader.hasNext()) {} outputStream.flush(); document.close(); @@ -131,9 +130,9 @@ public class PdfUtil { if (showNumberOfPage) { // add page numbers - ColumnText.showTextAligned(stamp.getUnderContent(), Element.ALIGN_CENTER, new Phrase( - String.format("%d / %d", curentPageNumber, totalPage)), pdfImportedPage - .getHeight() / 2, 20, 0); + ColumnText.showTextAligned(stamp.getUnderContent(), Element.ALIGN_CENTER, + new Phrase(String.format("%d / %d", curentPageNumber, totalPage)), + pdfImportedPage.getHeight() / 2, 20, 0); } stamp.alterContents(); diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.classpath b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.classpath index 2f1b9a21..491f947b 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.classpath +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.classpath @@ -1,6 +1,7 @@ + @@ -12,18 +13,11 @@ - - - - - - - diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.settings/org.eclipse.wst.common.component b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.settings/org.eclipse.wst.common.component index 6c0f797a..cfa57ce4 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.settings/org.eclipse.wst.common.component +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/.settings/org.eclipse.wst.common.component @@ -2,9 +2,13 @@ + uses + + uses + diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/lib/portos-kaleo-portlet-service.jar b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/lib/portos-kaleo-portlet-service.jar index 36c9b92032fb9f7e38e8b1416d4b4856d4a0094d..21159b20b02443d58aef93f0b220c6cb9f54b6b9 100644 GIT binary patch delta 1503 zcmYk5e@s54L zmwOSoaJe4Rt!$+=+a$Vw999!$ICK49YTeV*_8 zo^x)E*l&&4(<&=$YKjm^LTnA@zt*4jq*|YN7Ir<6c#8jBHiLJy<^R`U3U4ei8zQNA zny?bj5Sp=qa1N^oGbko_lrq8rrNV^RH%gX5x}nao=&s#C`XX7eN_NM6xD&bAOJ1t_ z5JJ3eOjV|hD|j?k;G6_49OJ=HrCK^qwOlNU2D~o zea#~GBY%)0DT^L5AZ76j3rK60Put9>r}kG*-I*iA`b;5;8C6%fFo`OE=|!ih8awmg z_mjps-Zbt4Qx)0c)hSw5Ih0BIdix|zE86m2zHOKu$PnUrDR;)cZ-8a|L+d`L*%R65 zzsKh4jwu(Zcp%3{YK)fINu#GGQb@kD@6RJW_GL&V4UaWg`&#r}Q!;D4*RCg-v%{sN z|70BGuc<;5C5CxXJ0FHUcIoDAD`w=E*^IQr+j;Q!#Lkb6Ps*DeaXB8>PG=!i`yh;T z{h@+Uj;@b7;I+^(AKO$jL+d-+Ib&?LWt9-+iHuxr)`Kklau)u{Fz3;)c;Mn_dVB?1 zEsM$$I5~x0zZzqF{o(28c+8l1*eyg=!YxPpd=QJZO;Nb@z#3ezI$kM9ES2uF)%cWO zh5lI$`gtyTNiAyA%mE8Z>%FTLA-+|G*i6goHE?M~L&g>_YFMbJH({OSP}hvBRz&Vz zeBw|OznC_8$oes~xjqz`v09Z6d8AGso+W+d!%EV9A4*9@eyk-0{a8ne`{5cA$_bO-#Tro(uf^z&h~leQf}D=B^iZ;{H6VlQd@DE5$+cVa&&)`=EU&M~x+P9MW= z(%b;vAhidi-*f|M~+cwA|&|(LIklwnRlpo za0uLSoDbSoHh;C+BDy~wRtsaea{XUySDRMDJjkZ4mZn9|^SqyDb=&QE?fZFuKA-pJ z^E}_#G5hS8J-xERCZ`JF5Ms7r`-_qEN93gbEbMvsJMAg{_p@odyM5Jv3A!M1ZMm#J zqiJ}IuojOKTCm2b75xC~2y-ZA$Sai*4oVe9DE_sSEs?It3rxCYcalCyk<25z^A0?^ z!JOsKR=o!yUeR2YDU%W&h!?n~!4l34Su#|k!)1wcnyOV(RZ>;r`O#FZSR|WOy_r_a z!o|1Ds5j?|NuK-vAVpJ`-eZH*Wlt|AZCIVOdGrN5dZ2pd<^myJ$`YcOt?CMwIE*pl zfzpdE!_dUJyT6~(_IO?U7Z|GOUZ2WRD=SB`NMG%kX3>iF{O4|HMGs~Q@suTZ#lLTa zS@?&x{VpRXx;b#0$<NvxxNIry-d%I?-s(we;KO z6lM%ux#}>y!!2d}q%HE-G$D#~GtVd=g<+3>as7sk>0`glXQu0K=kDKAyUuE#lrJah zc0Qz>&PJN@ZWtNrJqhEqu8uq5a~OH5^FB1lMh|81eD|C-Z0kB9%Jm+3%DflZ>ZNS_ zlS%QHUbtyZO{_tiS*@}JE)J{Kug8RBypwP;HW}9(k9vft(yQev9}i=hvLyzO8r*=- z&5Rey5l=IwRp+bmzC`@61`(N9Qj6Mjqhvv8y>GoF#5b}KTUqjI4cto6h&JLy1xwV7 zW^6Po)V1KU*&=TrE;wcViYe2F%!{Ec^rOgVpj7#hPwMvL3DReNtR>y?qm)z>!1Kl$ zl->X~k`e*<7|riO4Jp)xEsQ3+5Fj-l#v7!c52J(Ba0G3n#1XtsDnE*Sq{*Y$OIqEH z1EhF2T1mOb&`vsi40}imgV;{$2wL@$LA=JZO+DB}n&?3zo#ypoH|b=rm5~y{X6kl^ zu$6Q_aW7zYq0{{?=#ptvQYzJexYMb2bBlNpIYYx0-FmitR#G%@$di00YoaVCNmo@EVL8|oXfHe`!pKXsi^yhXYl u)pSN~^Dufze+}ahsWWCd_%mjmb)3+g8W}fFSbggh1bH^6pp(=z0{_1`wlmuR diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/liferay-plugin-package.properties b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/liferay-plugin-package.properties index 0ec58156..68fef372 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/liferay-plugin-package.properties +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/liferay-plugin-package.properties @@ -8,12 +8,13 @@ page-url=http://www.liferay.com author=Liferay, Inc. licenses=LGPL portal-dependency-jars=\ + commons-codec.jar,\ commons-collections.jar,\ + commons-lang.jar,\ jabsorb.jar,\ json-java.jar,\ slf4j-api.jar,\ - util-slf4j.jar,\ - commons-codec.jar + util-slf4j.jar required-deployment-contexts=\ portos-kaleo-portlet,\ portos-bo-portlet diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/WorkflowTaskManagerImpl.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/WorkflowTaskManagerImpl.java index c0ab5dea..d8a003e4 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/WorkflowTaskManagerImpl.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/WorkflowTaskManagerImpl.java @@ -1,13 +1,9 @@ /** - * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General - * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo; diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/DefaultTaskManagerImpl.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/DefaultTaskManagerImpl.java index 1d6221fd..a2cf8a52 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/DefaultTaskManagerImpl.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/DefaultTaskManagerImpl.java @@ -1,19 +1,18 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime; +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Map; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.transaction.Isolation; @@ -38,176 +37,126 @@ import com.liferay.portal.workflow.kaleo.runtime.notification.NotificationUtil; import com.liferay.portal.workflow.kaleo.util.WorkflowContextUtil; import com.liferay.portal.workflow.kaleo.util.WorkflowModelUtil; -import java.io.Serializable; - -import java.util.Date; -import java.util.List; -import java.util.Map; - /** * @author Michael C. Han */ -@Transactional( - isolation = Isolation.PORTAL, propagation = Propagation.REQUIRED, - rollbackFor = {Exception.class}) -public class DefaultTaskManagerImpl - extends BaseKaleoBean implements TaskManager { +@Transactional(isolation = Isolation.PORTAL, propagation = Propagation.REQUIRED, rollbackFor = { Exception.class }) +public class DefaultTaskManagerImpl extends BaseKaleoBean implements TaskManager { - - public WorkflowTask assignWorkflowTaskToRole( - long workflowTaskInstanceId, long roleId, String comment, - Date dueDate, Map workflowContext, - ServiceContext serviceContext) - throws WorkflowException { + @Override + public WorkflowTask assignWorkflowTaskToRole(long workflowTaskInstanceId, long roleId, String comment, + Date dueDate, Map workflowContext, ServiceContext serviceContext) + throws WorkflowException { try { - return assignWorkflowTask( - workflowTaskInstanceId, Role.class.getName(), roleId, comment, - dueDate, workflowContext, serviceContext); - } - catch (Exception e) { + return assignWorkflowTask(workflowTaskInstanceId, Role.class.getName(), roleId, comment, dueDate, + workflowContext, serviceContext); + } catch (Exception e) { throw new WorkflowException(e); } } - - public WorkflowTask assignWorkflowTaskToUser( - long workflowTaskInstanceId, long assigneeUserId, String comment, - Date dueDate, Map workflowContext, - ServiceContext serviceContext) - throws WorkflowException { + @Override + public WorkflowTask assignWorkflowTaskToUser(long workflowTaskInstanceId, long assigneeUserId, String comment, + Date dueDate, Map workflowContext, ServiceContext serviceContext) + throws WorkflowException { try { - return assignWorkflowTask( - workflowTaskInstanceId, User.class.getName(), assigneeUserId, - comment, dueDate, workflowContext, serviceContext); - } - catch (Exception e) { + return assignWorkflowTask(workflowTaskInstanceId, User.class.getName(), assigneeUserId, comment, dueDate, + workflowContext, serviceContext); + } catch (Exception e) { throw new WorkflowException(e); } } - - public WorkflowTask completeWorkflowTask( - long workflowTaskInstanceId, String transitionName, String comment, - Map workflowContext, - ServiceContext serviceContext) - throws WorkflowException { + @Override + public WorkflowTask completeWorkflowTask(long workflowTaskInstanceId, String transitionName, String comment, + Map workflowContext, ServiceContext serviceContext) throws WorkflowException { try { - return doCompleteWorkflowTask( - workflowTaskInstanceId, transitionName, comment, - workflowContext, serviceContext); - } - catch (Exception e) { + return doCompleteWorkflowTask(workflowTaskInstanceId, transitionName, comment, workflowContext, + serviceContext); + } catch (Exception e) { throw new WorkflowException(e); } } - - public WorkflowTask updateDueDate( - long workflowTaskInstanceId, String comment, Date dueDate, - ServiceContext serviceContext) - throws WorkflowException { + @Override + public WorkflowTask updateDueDate(long workflowTaskInstanceId, String comment, Date dueDate, + ServiceContext serviceContext) throws WorkflowException { try { - KaleoTaskInstanceToken kaleoTaskInstanceToken = - kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken( - workflowTaskInstanceId); + KaleoTaskInstanceToken kaleoTaskInstanceToken = kaleoTaskInstanceTokenLocalService + .getKaleoTaskInstanceToken(workflowTaskInstanceId); if (kaleoTaskInstanceToken.isCompleted()) { - throw new WorkflowException( - "Cannot update due date for completed task " + - workflowTaskInstanceId); + throw new WorkflowException("Cannot update due date for completed task " + workflowTaskInstanceId); } if (dueDate != null) { - kaleoTaskInstanceTokenLocalService.updateDueDate( - workflowTaskInstanceId, dueDate, serviceContext); + kaleoTaskInstanceTokenLocalService.updateDueDate(workflowTaskInstanceId, dueDate, serviceContext); } - Map workflowContext = - WorkflowContextUtil.convert( - kaleoTaskInstanceToken.getWorkflowContext()); + Map workflowContext = WorkflowContextUtil.convert(kaleoTaskInstanceToken + .getWorkflowContext()); - kaleoLogLocalService.addTaskUpdateKaleoLog( - kaleoTaskInstanceToken, comment, workflowContext, - serviceContext); + kaleoLogLocalService + .addTaskUpdateKaleoLog(kaleoTaskInstanceToken, comment, workflowContext, serviceContext); - return WorkflowModelUtil.toWorkflowTask( - kaleoTaskInstanceToken, workflowContext); - } - catch (Exception e) { + return WorkflowModelUtil.toWorkflowTask(kaleoTaskInstanceToken, workflowContext); + } catch (Exception e) { throw new WorkflowException(e); } } - protected WorkflowTask assignWorkflowTask( - long workflowTaskInstanceId, String assigneeClassName, - long assigneeClassPK, String comment, Date dueDate, - Map workflowContext, - ServiceContext serviceContext) - throws Exception { + protected WorkflowTask assignWorkflowTask(long workflowTaskInstanceId, String assigneeClassName, + long assigneeClassPK, String comment, Date dueDate, Map workflowContext, + ServiceContext serviceContext) throws Exception { - KaleoTaskInstanceToken kaleoTaskInstanceToken = - kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken( - workflowTaskInstanceId); + KaleoTaskInstanceToken kaleoTaskInstanceToken = kaleoTaskInstanceTokenLocalService + .getKaleoTaskInstanceToken(workflowTaskInstanceId); - List previousTaskAssignmentInstances = - kaleoTaskInstanceToken.getKaleoTaskAssignmentInstances(); + List previousTaskAssignmentInstances = kaleoTaskInstanceToken + .getKaleoTaskAssignmentInstances(); - workflowContext = updateWorkflowContext( - workflowContext, kaleoTaskInstanceToken); + workflowContext = updateWorkflowContext(workflowContext, kaleoTaskInstanceToken); if (kaleoTaskInstanceToken.isCompleted()) { - throw new WorkflowException( - "Cannot reassign a completed task " + workflowTaskInstanceId); + throw new WorkflowException("Cannot reassign a completed task " + workflowTaskInstanceId); } if (dueDate != null) { - kaleoTaskInstanceTokenLocalService.updateDueDate( - workflowTaskInstanceId, dueDate, serviceContext); + kaleoTaskInstanceTokenLocalService.updateDueDate(workflowTaskInstanceId, dueDate, serviceContext); } - kaleoTaskInstanceToken = - kaleoTaskInstanceTokenLocalService.assignKaleoTaskInstanceToken( - kaleoTaskInstanceToken.getKaleoTaskInstanceTokenId(), - assigneeClassName, assigneeClassPK, workflowContext, - serviceContext); + kaleoTaskInstanceToken = kaleoTaskInstanceTokenLocalService.assignKaleoTaskInstanceToken( + kaleoTaskInstanceToken.getKaleoTaskInstanceTokenId(), assigneeClassName, assigneeClassPK, + workflowContext, serviceContext); workflowContext.put(WorkflowConstants.CONTEXT_TASK_COMMENTS, comment); - ExecutionContext executionContext = new ExecutionContext( - kaleoTaskInstanceToken.getKaleoInstanceToken(), - kaleoTaskInstanceToken, workflowContext, serviceContext); + ExecutionContext executionContext = new ExecutionContext(kaleoTaskInstanceToken.getKaleoInstanceToken(), + kaleoTaskInstanceToken, workflowContext, serviceContext); KaleoTask kaleoTask = kaleoTaskInstanceToken.getKaleoTask(); - ActionExecutorUtil.executeKaleoActions( - KaleoNode.class.getName(), kaleoTask.getKaleoNodeId(), - ExecutionType.ON_ASSIGNMENT, executionContext); + ActionExecutorUtil.executeKaleoActions(KaleoNode.class.getName(), kaleoTask.getKaleoNodeId(), + ExecutionType.ON_ASSIGNMENT, executionContext); - NotificationUtil.sendKaleoNotifications( - KaleoNode.class.getName(), kaleoTask.getKaleoNodeId(), - ExecutionType.ON_ASSIGNMENT, executionContext); + NotificationUtil.sendKaleoNotifications(KaleoNode.class.getName(), kaleoTask.getKaleoNodeId(), + ExecutionType.ON_ASSIGNMENT, executionContext); - kaleoLogLocalService.addTaskAssignmentKaleoLog( - previousTaskAssignmentInstances, kaleoTaskInstanceToken, comment, - workflowContext, serviceContext); + kaleoLogLocalService.addTaskAssignmentKaleoLog(previousTaskAssignmentInstances, kaleoTaskInstanceToken, + comment, workflowContext, serviceContext); - return WorkflowModelUtil.toWorkflowTask( - kaleoTaskInstanceToken, workflowContext); + return WorkflowModelUtil.toWorkflowTask(kaleoTaskInstanceToken, workflowContext); } - protected WorkflowTask doCompleteWorkflowTask( - long workflowTaskInstanceId, String transitionName, String comment, - Map workflowContext, - ServiceContext serviceContext) - throws Exception { + protected WorkflowTask doCompleteWorkflowTask(long workflowTaskInstanceId, String transitionName, String comment, + Map workflowContext, ServiceContext serviceContext) throws Exception { - KaleoTaskInstanceToken kaleoTaskInstanceToken = - kaleoTaskInstanceTokenLocalService.getKaleoTaskInstanceToken( - workflowTaskInstanceId); + KaleoTaskInstanceToken kaleoTaskInstanceToken = kaleoTaskInstanceTokenLocalService + .getKaleoTaskInstanceToken(workflowTaskInstanceId); if (Validator.isNotNull(transitionName)) { @@ -221,49 +170,37 @@ public class DefaultTaskManagerImpl currentKaleoNode.getKaleoTransition(transitionName); } - workflowContext = updateWorkflowContext( - workflowContext, kaleoTaskInstanceToken); + workflowContext = updateWorkflowContext(workflowContext, kaleoTaskInstanceToken); if (kaleoTaskInstanceToken.isCompleted()) { - throw new WorkflowException( - "Cannot complete an already completed task " + - workflowTaskInstanceId + " for user " + - serviceContext.getUserId()); + throw new WorkflowException("Cannot complete an already completed task " + workflowTaskInstanceId + + " for user " + serviceContext.getUserId()); } serviceContext.setScopeGroupId(kaleoTaskInstanceToken.getGroupId()); - kaleoTaskInstanceToken = - kaleoTaskInstanceTokenLocalService.completeKaleoTaskInstanceToken( - kaleoTaskInstanceToken.getKaleoTaskInstanceTokenId(), - serviceContext); + kaleoTaskInstanceToken = kaleoTaskInstanceTokenLocalService.completeKaleoTaskInstanceToken( + kaleoTaskInstanceToken.getKaleoTaskInstanceTokenId(), serviceContext); - kaleoLogLocalService.addTaskCompletionKaleoLog( - kaleoTaskInstanceToken, comment, workflowContext, serviceContext); + kaleoLogLocalService + .addTaskCompletionKaleoLog(kaleoTaskInstanceToken, comment, workflowContext, serviceContext); - return WorkflowModelUtil.toWorkflowTask( - kaleoTaskInstanceToken, workflowContext); + return WorkflowModelUtil.toWorkflowTask(kaleoTaskInstanceToken, workflowContext); } - protected Map updateWorkflowContext( - Map workflowContext, - KaleoTaskInstanceToken kaleoTaskInstanceToken) - throws PortalException, SystemException { + protected Map updateWorkflowContext(Map workflowContext, + KaleoTaskInstanceToken kaleoTaskInstanceToken) throws PortalException, SystemException { - KaleoInstance kaleoInstance = - kaleoInstanceLocalService.getKaleoInstance( - kaleoTaskInstanceToken.getKaleoInstanceId()); + KaleoInstance kaleoInstance = kaleoInstanceLocalService.getKaleoInstance(kaleoTaskInstanceToken + .getKaleoInstanceId()); if (workflowContext == null) { - workflowContext = WorkflowContextUtil.convert( - kaleoInstance.getWorkflowContext()); - } - else { - Map storedWorkflowContext = - WorkflowContextUtil.convert(kaleoInstance.getWorkflowContext()); + workflowContext = WorkflowContextUtil.convert(kaleoInstance.getWorkflowContext()); + } else { + Map storedWorkflowContext = WorkflowContextUtil.convert(kaleoInstance + .getWorkflowContext()); - for (Map.Entry entry : - storedWorkflowContext.entrySet()) { + for (Map.Entry entry : storedWorkflowContext.entrySet()) { String key = entry.getKey(); @@ -276,4 +213,4 @@ public class DefaultTaskManagerImpl return workflowContext; } -} \ No newline at end of file +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ConditionNodeExecutor.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ConditionNodeExecutor.java index 4dfa3280..fbe1315c 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ConditionNodeExecutor.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ConditionNodeExecutor.java @@ -1,19 +1,15 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; +import java.util.List; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.util.StringUtil; @@ -27,8 +23,6 @@ import com.liferay.portal.workflow.kaleo.runtime.condition.ConditionEvaluator; import com.liferay.portal.workflow.kaleo.runtime.graph.PathElement; import com.liferay.portal.workflow.kaleo.runtime.util.ClassLoaderUtil; -import java.util.List; - /** * @author Michael C. Han */ @@ -38,66 +32,39 @@ public class ConditionNodeExecutor extends BaseNodeExecutor { _conditionEvaluator = conditionEvaluator; } - - protected boolean doEnter( - KaleoNode currentKaleoNode, ExecutionContext executionContext) { + @Override + protected boolean doEnter(KaleoNode currentKaleoNode, ExecutionContext executionContext) { return true; } + @Override + protected void doExecute(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException { - protected void doExecute( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) - throws PortalException, SystemException { - - KaleoInstanceToken kaleoInstanceToken = - executionContext.getKaleoInstanceToken(); - + KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); KaleoCondition kaleoCondition = - kaleoConditionLocalService.getKaleoNodeKaleoCondition( - currentKaleoNode.getKaleoNodeId()); - - String[] scriptRequiredContexts = StringUtil.split( - kaleoCondition.getScriptRequiredContexts()); - - ClassLoader[] classloaders = ClassLoaderUtil.getClassLoaders( - scriptRequiredContexts); - - String transitionName = _conditionEvaluator.evaluate( - kaleoCondition, executionContext, classloaders); - - kaleoInstanceLocalService.updateKaleoInstance( - kaleoInstanceToken.getKaleoInstanceId(), - executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - KaleoTransition kaleoTransition = currentKaleoNode.getKaleoTransition( - transitionName); - - ExecutionContext newExecutionContext = new ExecutionContext( - kaleoInstanceToken, executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - PathElement pathElement = new PathElement( - currentKaleoNode, kaleoTransition.getTargetKaleoNode(), - newExecutionContext); - + kaleoConditionLocalService.getKaleoNodeKaleoCondition(currentKaleoNode.getKaleoNodeId()); + String[] scriptRequiredContexts = StringUtil.split(kaleoCondition.getScriptRequiredContexts()); + ClassLoader[] classloaders = ClassLoaderUtil.getClassLoaders(scriptRequiredContexts); + String transitionName = _conditionEvaluator.evaluate(kaleoCondition, executionContext, classloaders); + kaleoInstanceLocalService.updateKaleoInstance(kaleoInstanceToken.getKaleoInstanceId(), + executionContext.getWorkflowContext(), executionContext.getServiceContext()); + KaleoTransition kaleoTransition = currentKaleoNode.getKaleoTransition(transitionName); + ExecutionContext newExecutionContext = + new ExecutionContext(kaleoInstanceToken, executionContext.getWorkflowContext(), + executionContext.getServiceContext()); + PathElement pathElement = + new PathElement(currentKaleoNode, kaleoTransition.getTargetKaleoNode(), newExecutionContext); remainingPathElements.add(pathElement); } + @Override + protected void doExecuteTimer(KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, ExecutionContext executionContext) {} - protected void doExecuteTimer( - KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, - ExecutionContext executionContext) { - } - - - protected void doExit( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) { - } + @Override + protected void doExit(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) {} private ConditionEvaluator _conditionEvaluator; - -} \ No newline at end of file +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ForkNodeExecutor.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ForkNodeExecutor.java index 576e82fc..d1a52a84 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ForkNodeExecutor.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/ForkNodeExecutor.java @@ -1,19 +1,17 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.workflow.kaleo.model.KaleoInstanceToken; @@ -23,74 +21,46 @@ import com.liferay.portal.workflow.kaleo.model.KaleoTransition; import com.liferay.portal.workflow.kaleo.runtime.ExecutionContext; import com.liferay.portal.workflow.kaleo.runtime.graph.PathElement; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * @author Michael C. Han */ public class ForkNodeExecutor extends BaseNodeExecutor { - - protected boolean doEnter( - KaleoNode currentKaleoNode, ExecutionContext executionContext) { + @Override + protected boolean doEnter(KaleoNode currentKaleoNode, ExecutionContext executionContext) { return true; } + @Override + protected void doExecute(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException { - protected void doExecute( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) - throws PortalException, SystemException { - - List kaleoTransitions = - currentKaleoNode.getKaleoTransitions(); - - Map childKaleoInstanceTokens = - new HashMap(); - + List kaleoTransitions = currentKaleoNode.getKaleoTransitions(); + Map childKaleoInstanceTokens = new HashMap(); for (KaleoTransition kaleoTransition : kaleoTransitions) { - KaleoInstanceToken parentKaleoInstanceToken = - executionContext.getKaleoInstanceToken(); - + KaleoInstanceToken parentKaleoInstanceToken = executionContext.getKaleoInstanceToken(); KaleoInstanceToken childKaleoInstanceToken = - kaleoInstanceTokenLocalService.addKaleoInstanceToken( - parentKaleoInstanceToken.getKaleoInstanceTokenId(), - executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - childKaleoInstanceTokens.put( - kaleoTransition.getName(), childKaleoInstanceToken); + kaleoInstanceTokenLocalService.addKaleoInstanceToken( + parentKaleoInstanceToken.getKaleoInstanceTokenId(), executionContext.getWorkflowContext(), + executionContext.getServiceContext()); + childKaleoInstanceTokens.put(kaleoTransition.getName(), childKaleoInstanceToken); } - for (KaleoTransition kaleoTransition : kaleoTransitions) { - KaleoInstanceToken childKaleoInstanceToken = - childKaleoInstanceTokens.get(kaleoTransition.getName()); - - ExecutionContext forkedExecutionContext = new ExecutionContext( - childKaleoInstanceToken, executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - PathElement pathElement = new PathElement( - currentKaleoNode, kaleoTransition.getTargetKaleoNode(), - forkedExecutionContext); - + KaleoInstanceToken childKaleoInstanceToken = childKaleoInstanceTokens.get(kaleoTransition.getName()); + ExecutionContext forkedExecutionContext = + new ExecutionContext(childKaleoInstanceToken, executionContext.getWorkflowContext(), + executionContext.getServiceContext()); + PathElement pathElement = + new PathElement(currentKaleoNode, kaleoTransition.getTargetKaleoNode(), forkedExecutionContext); remainingPathElements.add(pathElement); } } + @Override + protected void doExecuteTimer(KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, ExecutionContext executionContext) {} - protected void doExecuteTimer( - KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, - ExecutionContext executionContext) { - } - - - protected void doExit( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) { - } - -} \ No newline at end of file + @Override + protected void doExit(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) {} +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinNodeExecutor.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinNodeExecutor.java index b87cc9dd..64b7a4a8 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinNodeExecutor.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinNodeExecutor.java @@ -1,19 +1,15 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; +import java.util.List; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.workflow.kaleo.model.KaleoInstanceToken; @@ -23,74 +19,45 @@ import com.liferay.portal.workflow.kaleo.model.KaleoTransition; import com.liferay.portal.workflow.kaleo.runtime.ExecutionContext; import com.liferay.portal.workflow.kaleo.runtime.graph.PathElement; -import java.util.List; - /** * @author Michael C. Han */ public class JoinNodeExecutor extends BaseNodeExecutor { + @Override + protected boolean doEnter(KaleoNode currentKaleoNode, ExecutionContext executionContext) throws PortalException, + SystemException { - protected boolean doEnter( - KaleoNode currentKaleoNode, ExecutionContext executionContext) - throws PortalException, SystemException { - - KaleoInstanceToken kaleoInstanceToken = - executionContext.getKaleoInstanceToken(); - - kaleoInstanceTokenLocalService.completeKaleoInstanceToken( - kaleoInstanceToken.getKaleoInstanceTokenId()); - + KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); + kaleoInstanceTokenLocalService.completeKaleoInstanceToken(kaleoInstanceToken.getKaleoInstanceTokenId()); return true; } + @Override + protected void doExecute(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException { - protected void doExecute( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) - throws PortalException, SystemException { - - KaleoInstanceToken kaleoInstanceToken = - executionContext.getKaleoInstanceToken(); - - KaleoInstanceToken parentKaleoInstanceToken = - kaleoInstanceToken.getParentKaleoInstanceToken(); - - if (parentKaleoInstanceToken. - hasIncompleteChildrenKaleoInstanceToken()) { - + KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); + KaleoInstanceToken parentKaleoInstanceToken = kaleoInstanceToken.getParentKaleoInstanceToken(); + if (parentKaleoInstanceToken.hasIncompleteChildrenKaleoInstanceToken()) { return; } - parentKaleoInstanceToken = - kaleoInstanceTokenLocalService.updateKaleoInstanceToken( - parentKaleoInstanceToken.getKaleoInstanceTokenId(), - currentKaleoNode.getKaleoNodeId()); - - KaleoTransition kaleoTransition = - currentKaleoNode.getDefaultKaleoTransition(); - - ExecutionContext newExecutionContext = new ExecutionContext( - parentKaleoInstanceToken, executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - PathElement pathElement = new PathElement( - currentKaleoNode, kaleoTransition.getTargetKaleoNode(), - newExecutionContext); - + kaleoInstanceTokenLocalService.updateKaleoInstanceToken( + parentKaleoInstanceToken.getKaleoInstanceTokenId(), currentKaleoNode.getKaleoNodeId()); + KaleoTransition kaleoTransition = currentKaleoNode.getDefaultKaleoTransition(); + ExecutionContext newExecutionContext = + new ExecutionContext(parentKaleoInstanceToken, executionContext.getWorkflowContext(), + executionContext.getServiceContext()); + PathElement pathElement = + new PathElement(currentKaleoNode, kaleoTransition.getTargetKaleoNode(), newExecutionContext); remainingPathElements.add(pathElement); } + @Override + protected void doExecuteTimer(KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, ExecutionContext executionContext) {} - protected void doExecuteTimer( - KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, - ExecutionContext executionContext) { - } - - - protected void doExit( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) { - } - -} \ No newline at end of file + @Override + protected void doExit(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) {} +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinXorNodeExecutor.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinXorNodeExecutor.java index 8bd045b4..23d3adba 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinXorNodeExecutor.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/JoinXorNodeExecutor.java @@ -1,19 +1,15 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; +import java.util.List; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.workflow.kaleo.model.KaleoInstanceToken; @@ -23,102 +19,61 @@ import com.liferay.portal.workflow.kaleo.model.KaleoTransition; import com.liferay.portal.workflow.kaleo.runtime.ExecutionContext; import com.liferay.portal.workflow.kaleo.runtime.graph.PathElement; -import java.util.List; - /** * @author Michael C. Han */ public class JoinXorNodeExecutor extends BaseNodeExecutor { + @Override + protected boolean doEnter(KaleoNode currentKaleoNode, ExecutionContext executionContext) throws PortalException, + SystemException { - protected boolean doEnter( - KaleoNode currentKaleoNode, ExecutionContext executionContext) - throws PortalException, SystemException { - - KaleoInstanceToken kaleoInstanceToken = - executionContext.getKaleoInstanceToken(); - + KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); kaleoInstanceToken = - kaleoInstanceTokenLocalService.getKaleoInstanceToken( - kaleoInstanceToken.getKaleoInstanceTokenId()); - + kaleoInstanceTokenLocalService.getKaleoInstanceToken(kaleoInstanceToken.getKaleoInstanceTokenId()); if (kaleoInstanceToken.isCompleted()) { return false; } - kaleoInstanceToken = - kaleoInstanceTokenLocalService.completeKaleoInstanceToken( - kaleoInstanceToken.getKaleoInstanceTokenId()); - - KaleoInstanceToken parentKaleoInstanceToken = - kaleoInstanceToken.getParentKaleoInstanceToken(); - - if (!parentKaleoInstanceToken. - hasIncompleteChildrenKaleoInstanceToken()) { - + kaleoInstanceTokenLocalService.completeKaleoInstanceToken(kaleoInstanceToken.getKaleoInstanceTokenId()); + KaleoInstanceToken parentKaleoInstanceToken = kaleoInstanceToken.getParentKaleoInstanceToken(); + if (!parentKaleoInstanceToken.hasIncompleteChildrenKaleoInstanceToken()) { return false; } - List childrenKaleoInstanceTokens = - parentKaleoInstanceToken.getChildrenKaleoInstanceTokens(); - - for (KaleoInstanceToken childrenKaleoInstanceToken : - childrenKaleoInstanceTokens) { - - kaleoInstanceTokenLocalService.completeKaleoInstanceToken( - childrenKaleoInstanceToken.getKaleoInstanceTokenId()); + parentKaleoInstanceToken.getChildrenKaleoInstanceTokens(); + for (KaleoInstanceToken childrenKaleoInstanceToken : childrenKaleoInstanceTokens) { + kaleoInstanceTokenLocalService.completeKaleoInstanceToken(childrenKaleoInstanceToken + .getKaleoInstanceTokenId()); } - return true; } + @Override + protected void doExecute(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException { - protected void doExecute( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) - throws PortalException, SystemException { - - KaleoInstanceToken kaleoInstanceToken = - executionContext.getKaleoInstanceToken(); - - KaleoInstanceToken parentKaleoInstanceToken = - kaleoInstanceToken.getParentKaleoInstanceToken(); - - if (parentKaleoInstanceToken.getCurrentKaleoNodeId() == - currentKaleoNode.getKaleoNodeId()) { - + KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); + KaleoInstanceToken parentKaleoInstanceToken = kaleoInstanceToken.getParentKaleoInstanceToken(); + if (parentKaleoInstanceToken.getCurrentKaleoNodeId() == currentKaleoNode.getKaleoNodeId()) { return; } - parentKaleoInstanceToken = - kaleoInstanceTokenLocalService.updateKaleoInstanceToken( - parentKaleoInstanceToken.getKaleoInstanceTokenId(), - currentKaleoNode.getKaleoNodeId()); - - KaleoTransition kaleoTransition = - currentKaleoNode.getDefaultKaleoTransition(); - - ExecutionContext newExecutionContext = new ExecutionContext( - parentKaleoInstanceToken, executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - PathElement pathElement = new PathElement( - currentKaleoNode, kaleoTransition.getTargetKaleoNode(), - newExecutionContext); - + kaleoInstanceTokenLocalService.updateKaleoInstanceToken( + parentKaleoInstanceToken.getKaleoInstanceTokenId(), currentKaleoNode.getKaleoNodeId()); + KaleoTransition kaleoTransition = currentKaleoNode.getDefaultKaleoTransition(); + ExecutionContext newExecutionContext = + new ExecutionContext(parentKaleoInstanceToken, executionContext.getWorkflowContext(), + executionContext.getServiceContext()); + PathElement pathElement = + new PathElement(currentKaleoNode, kaleoTransition.getTargetKaleoNode(), newExecutionContext); remainingPathElements.add(pathElement); } + @Override + protected void doExecuteTimer(KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, ExecutionContext executionContext) {} - protected void doExecuteTimer( - KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, - ExecutionContext executionContext) { - } - - - protected void doExit( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) { - } - -} \ No newline at end of file + @Override + protected void doExit(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) {} +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutor.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutor.java index 90add746..ce22581f 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutor.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutor.java @@ -1,48 +1,35 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; +import java.util.List; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.workflow.kaleo.model.KaleoNode; import com.liferay.portal.workflow.kaleo.runtime.ExecutionContext; import com.liferay.portal.workflow.kaleo.runtime.graph.PathElement; -import java.util.List; - /** * @author Michael C. Han */ public interface NodeExecutor { - public boolean enter( - KaleoNode currentKaleoNode, ExecutionContext executionContext) - throws PortalException, SystemException; - - public void execute( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) - throws PortalException, SystemException; + public boolean enter(KaleoNode currentKaleoNode, ExecutionContext executionContext) throws PortalException, + SystemException; - public void executeTimer( - KaleoNode currentKaleoNode, ExecutionContext executionContext) - throws PortalException, SystemException; + public void execute(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException; - public void exit( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) - throws PortalException, SystemException; + public void executeTimer(KaleoNode currentKaleoNode, ExecutionContext executionContext) throws PortalException, + SystemException; -} \ No newline at end of file + public void exit(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException; +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutorFactory.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutorFactory.java index 177c2298..c19c8b34 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutorFactory.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/NodeExecutorFactory.java @@ -1,37 +1,32 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; -import com.liferay.portal.workflow.kaleo.util.NodeTypeDependentObjectRegistry; - import java.util.Map; +import com.liferay.portal.workflow.kaleo.util.NodeTypeDependentObjectRegistry; + /** * @author Michael C. Han */ public class NodeExecutorFactory { public static NodeExecutor getNodeExecutor(String nodeTypeString) { + return _nodeExecutors.getNodeTypeDependentObjects(nodeTypeString); } public void setNodeExectors(Map nodeExecutors) { + _nodeExecutors.setNodeTypeDependentObjects(nodeExecutors); } - private static NodeTypeDependentObjectRegistry - _nodeExecutors = new NodeTypeDependentObjectRegistry(); - -} \ No newline at end of file + private static NodeTypeDependentObjectRegistry _nodeExecutors = + new NodeTypeDependentObjectRegistry(); +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/StateNodeExecutor.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/StateNodeExecutor.java index 5ad36e09..15d2d230 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/StateNodeExecutor.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/StateNodeExecutor.java @@ -1,17 +1,15 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under the terms of the - * GNU Lesser General Public License as published by the Free Software Foundation; either version - * 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; +import java.util.List; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.util.Validator; @@ -23,93 +21,74 @@ import com.liferay.portal.workflow.kaleo.model.impl.KaleoInstanceTokenImpl; import com.liferay.portal.workflow.kaleo.runtime.ExecutionContext; import com.liferay.portal.workflow.kaleo.runtime.graph.PathElement; -import java.util.List; - /** * @author Michael C. Han */ public class StateNodeExecutor extends BaseNodeExecutor { - private final static String NAME_SIGNAL = "SIGNAL"; - - public static boolean isSignalNode(KaleoNode kaleoNode) { - return kaleoNode.getName().toUpperCase().startsWith(NAME_SIGNAL); - } - - protected boolean doEnter(KaleoNode currentKaleoNode, ExecutionContext executionContext) { - - return true; - } - - - protected void doExecute(KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) throws PortalException, SystemException { - - if (isSignalNode(currentKaleoNode)) { - return; - } - - KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); - - String transitionName = executionContext.getTransitionName(); - - if (!currentKaleoNode.hasKaleoTransition()) { - kaleoInstanceToken = - kaleoInstanceTokenLocalService.completeKaleoInstanceToken(kaleoInstanceToken.getKaleoInstanceTokenId()); - - if (kaleoInstanceToken.getParentKaleoInstanceTokenId() == KaleoInstanceTokenImpl.DEFAULT_PARENT_KALEO_INSTANCE_TOKEN_ID) { - - kaleoInstanceLocalService.completeKaleoInstance(kaleoInstanceToken.getKaleoInstanceId()); - } - - return; - } - - KaleoTransition kaleoTransition = null; - - if (Validator.isNull(transitionName)) { - kaleoTransition = currentKaleoNode.getDefaultKaleoTransition(); - } else { - kaleoTransition = currentKaleoNode.getKaleoTransition(transitionName); - } - - ExecutionContext newExecutionContext = - new ExecutionContext(kaleoInstanceToken, executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - PathElement pathElement = - new PathElement(currentKaleoNode, kaleoTransition.getTargetKaleoNode(), newExecutionContext); - - remainingPathElements.add(pathElement); - } - - - protected void doExecuteTimer(KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, ExecutionContext executionContext) {} - - - protected void doExit(KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) throws PortalException, SystemException { - - if (isSignalNode(currentKaleoNode)) { - - String transitionName = executionContext.getTransitionName(); - - KaleoTransition kaleoTransition = null; - - if (Validator.isNull(transitionName)) { - kaleoTransition = currentKaleoNode.getDefaultKaleoTransition(); - } else { - kaleoTransition = currentKaleoNode.getKaleoTransition(transitionName); - } - - ExecutionContext newExecutionContext = - new ExecutionContext(executionContext.getKaleoInstanceToken(), executionContext.getKaleoTaskInstanceToken(), - executionContext.getWorkflowContext(), executionContext.getServiceContext()); - - PathElement pathElement = new PathElement(null, kaleoTransition.getTargetKaleoNode(), newExecutionContext); - - remainingPathElements.add(pathElement); - } - } - + private static final String NAME_SIGNAL = "SIGNAL"; + + public static boolean isSignalNode(KaleoNode kaleoNode) { + + return kaleoNode.getName().toUpperCase().startsWith(NAME_SIGNAL); + } + + @Override + protected boolean doEnter(KaleoNode currentKaleoNode, ExecutionContext executionContext) { + + return true; + } + + @Override + protected void doExecute(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException { + + if (isSignalNode(currentKaleoNode)) { + return; + } + KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); + String transitionName = executionContext.getTransitionName(); + if (!currentKaleoNode.hasKaleoTransition()) { + kaleoInstanceToken = kaleoInstanceTokenLocalService.completeKaleoInstanceToken(kaleoInstanceToken + .getKaleoInstanceTokenId()); + if (kaleoInstanceToken.getParentKaleoInstanceTokenId() == KaleoInstanceTokenImpl.DEFAULT_PARENT_KALEO_INSTANCE_TOKEN_ID) { + kaleoInstanceLocalService.completeKaleoInstance(kaleoInstanceToken.getKaleoInstanceId()); + } + return; + } + KaleoTransition kaleoTransition = null; + if (Validator.isNull(transitionName)) { + kaleoTransition = currentKaleoNode.getDefaultKaleoTransition(); + } else { + kaleoTransition = currentKaleoNode.getKaleoTransition(transitionName); + } + ExecutionContext newExecutionContext = new ExecutionContext(kaleoInstanceToken, + executionContext.getWorkflowContext(), executionContext.getServiceContext()); + PathElement pathElement = new PathElement(currentKaleoNode, kaleoTransition.getTargetKaleoNode(), + newExecutionContext); + remainingPathElements.add(pathElement); + } + + @Override + protected void doExecuteTimer(KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, ExecutionContext executionContext) {} + + @Override + protected void doExit(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException { + + if (isSignalNode(currentKaleoNode)) { + String transitionName = executionContext.getTransitionName(); + KaleoTransition kaleoTransition = null; + if (Validator.isNull(transitionName)) { + kaleoTransition = currentKaleoNode.getDefaultKaleoTransition(); + } else { + kaleoTransition = currentKaleoNode.getKaleoTransition(transitionName); + } + ExecutionContext newExecutionContext = new ExecutionContext(executionContext.getKaleoInstanceToken(), + executionContext.getKaleoTaskInstanceToken(), executionContext.getWorkflowContext(), + executionContext.getServiceContext()); + PathElement pathElement = new PathElement(null, kaleoTransition.getTargetKaleoNode(), newExecutionContext); + remainingPathElements.add(pathElement); + } + } } diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/TaskNodeExecutor.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/TaskNodeExecutor.java index 6b83aef5..52e93a39 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/TaskNodeExecutor.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/com/liferay/portal/workflow/kaleo/runtime/node/TaskNodeExecutor.java @@ -1,19 +1,22 @@ /** - * Copyright (c) 2000-present Liferay, Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. + * Copyright (c) 2000-present Liferay, Inc. All rights reserved. This library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in + * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.liferay.portal.workflow.kaleo.runtime.node; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.TreeSet; + import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.util.StringUtil; @@ -45,247 +48,150 @@ import com.liferay.portal.workflow.kaleo.runtime.graph.PathElement; import com.liferay.portal.workflow.kaleo.runtime.notification.NotificationUtil; import com.liferay.portal.workflow.kaleo.runtime.util.ClassLoaderUtil; -import java.io.Serializable; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.TreeSet; - /** * @author Michael C. Han */ public class TaskNodeExecutor extends BaseNodeExecutor { public void setDueDateCalculator(DueDateCalculator dueDateCalculator) { + _dueDateCalculator = dueDateCalculator; } - public void setTaskAssignmentSelector( - TaskAssignmentSelector taskAssignmentSelector) { + public void setTaskAssignmentSelector(TaskAssignmentSelector taskAssignmentSelector) { _taskAssignmentSelector = taskAssignmentSelector; } - protected Date calculateDueDate(KaleoTask kaleoTask) - throws SystemException { - - List kaleoTimers = kaleoTimerLocalService.getKaleoTimers( - KaleoNode.class.getName(), kaleoTask.getKaleoNodeId()); + protected Date calculateDueDate(KaleoTask kaleoTask) throws SystemException { + List kaleoTimers = + kaleoTimerLocalService.getKaleoTimers(KaleoNode.class.getName(), kaleoTask.getKaleoNodeId()); if (kaleoTimers.isEmpty()) { return null; } - TreeSet sortedDueDates = new TreeSet(); - for (KaleoTimer kaleoTimer : kaleoTimers) { - DelayDuration delayDuration = new DelayDuration( - kaleoTimer.getDuration(), - DurationScale.parse(kaleoTimer.getScale())); - - Date dueDate = _dueDateCalculator.getDueDate( - new Date(), delayDuration); - + DelayDuration delayDuration = + new DelayDuration(kaleoTimer.getDuration(), DurationScale.parse(kaleoTimer.getScale())); + Date dueDate = _dueDateCalculator.getDueDate(new Date(), delayDuration); sortedDueDates.add(dueDate); } - return sortedDueDates.first(); } - protected KaleoTaskInstanceToken createTaskInstanceToken( - ExecutionContext executionContext, - Map workflowContext, - ServiceContext serviceContext, - KaleoInstanceToken kaleoInstanceToken, KaleoTask kaleoTask, - Date dueDate) - throws PortalException, SystemException { - - Collection configuredKaleoTaskAssignments = - kaleoTask.getKaleoTaskAssignments(); - - Collection kaleoTaskAssignments = - new ArrayList(); - - for (KaleoTaskAssignment configuredKaleoTaskAssignment : - configuredKaleoTaskAssignments) { - - String[] assigneeScriptRequiredContexts = StringUtil.split( - configuredKaleoTaskAssignment. - getAssigneeScriptRequiredContexts()); - - ClassLoader[] classLoaders = ClassLoaderUtil.getClassLoaders( - assigneeScriptRequiredContexts); - + protected KaleoTaskInstanceToken createTaskInstanceToken(ExecutionContext executionContext, + Map workflowContext, ServiceContext serviceContext, + KaleoInstanceToken kaleoInstanceToken, KaleoTask kaleoTask, Date dueDate) throws PortalException, + SystemException { + + Collection configuredKaleoTaskAssignments = kaleoTask.getKaleoTaskAssignments(); + Collection kaleoTaskAssignments = new ArrayList(); + for (KaleoTaskAssignment configuredKaleoTaskAssignment : configuredKaleoTaskAssignments) { + String[] assigneeScriptRequiredContexts = + StringUtil.split(configuredKaleoTaskAssignment.getAssigneeScriptRequiredContexts()); + ClassLoader[] classLoaders = ClassLoaderUtil.getClassLoaders(assigneeScriptRequiredContexts); Collection calculatedKaleoTaskAssignments = - _taskAssignmentSelector.calculateTaskAssignments( - configuredKaleoTaskAssignment, executionContext, - classLoaders); - + _taskAssignmentSelector.calculateTaskAssignments(configuredKaleoTaskAssignment, executionContext, + classLoaders); kaleoTaskAssignments.addAll(calculatedKaleoTaskAssignments); } - if (kaleoTaskAssignments.isEmpty()) { Collection organizationKaleoTaskAssignments = - getOrganizationKaleoTaskAssignments( - configuredKaleoTaskAssignments, executionContext); - + getOrganizationKaleoTaskAssignments(configuredKaleoTaskAssignments, executionContext); kaleoTaskAssignments.addAll(organizationKaleoTaskAssignments); } - return kaleoTaskInstanceTokenLocalService.addKaleoTaskInstanceToken( - kaleoInstanceToken.getKaleoInstanceTokenId(), - kaleoTask.getKaleoTaskId(), kaleoTask.getName(), - kaleoTaskAssignments, dueDate, workflowContext, serviceContext); + kaleoInstanceToken.getKaleoInstanceTokenId(), kaleoTask.getKaleoTaskId(), kaleoTask.getName(), + kaleoTaskAssignments, dueDate, workflowContext, serviceContext); } + @Override + protected boolean doEnter(KaleoNode currentKaleoNode, ExecutionContext executionContext) throws PortalException, + SystemException { - protected boolean doEnter( - KaleoNode currentKaleoNode, ExecutionContext executionContext) - throws PortalException, SystemException { - - Map workflowContext = - executionContext.getWorkflowContext(); + Map workflowContext = executionContext.getWorkflowContext(); ServiceContext serviceContext = executionContext.getServiceContext(); - - KaleoInstanceToken kaleoInstanceToken = - executionContext.getKaleoInstanceToken(); - - KaleoTask kaleoTask = kaleoTaskLocalService.getKaleoNodeKaleoTask( - currentKaleoNode.getKaleoNodeId()); - + KaleoInstanceToken kaleoInstanceToken = executionContext.getKaleoInstanceToken(); + KaleoTask kaleoTask = kaleoTaskLocalService.getKaleoNodeKaleoTask(currentKaleoNode.getKaleoNodeId()); Date dueDate = calculateDueDate(kaleoTask); - - KaleoTaskInstanceToken kaleoTaskInstanceToken = createTaskInstanceToken( - executionContext, workflowContext, serviceContext, - kaleoInstanceToken, kaleoTask, dueDate); - + KaleoTaskInstanceToken kaleoTaskInstanceToken = + createTaskInstanceToken(executionContext, workflowContext, serviceContext, kaleoInstanceToken, + kaleoTask, dueDate); executionContext.setKaleoTaskInstanceToken(kaleoTaskInstanceToken); - - ActionExecutorUtil.executeKaleoActions( - KaleoNode.class.getName(), currentKaleoNode.getKaleoNodeId(), - ExecutionType.ON_ASSIGNMENT, executionContext); - - NotificationUtil.sendKaleoNotifications( - KaleoNode.class.getName(), currentKaleoNode.getKaleoNodeId(), - ExecutionType.ON_ASSIGNMENT, executionContext); - - kaleoLogLocalService.addTaskAssignmentKaleoLog( - null, kaleoTaskInstanceToken, "Assigned initial task.", - workflowContext, serviceContext); - + ActionExecutorUtil.executeKaleoActions(KaleoNode.class.getName(), currentKaleoNode.getKaleoNodeId(), + ExecutionType.ON_ASSIGNMENT, executionContext); + NotificationUtil.sendKaleoNotifications(KaleoNode.class.getName(), currentKaleoNode.getKaleoNodeId(), + ExecutionType.ON_ASSIGNMENT, executionContext); + kaleoLogLocalService.addTaskAssignmentKaleoLog(null, kaleoTaskInstanceToken, "Assigned initial task.", + workflowContext, serviceContext); return true; } + @Override + protected void doExecute(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) {} - protected void doExecute( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) { - } - - - protected void doExecuteTimer( - KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, - ExecutionContext executionContext) - throws PortalException, SystemException { - - List kaleoTaskReassignments = - kaleoTimer.getKaleoTaskReassignments(); + @Override + protected void doExecuteTimer(KaleoNode currentKaleoNode, KaleoTimer kaleoTimer, ExecutionContext executionContext) + throws PortalException, SystemException { + List kaleoTaskReassignments = kaleoTimer.getKaleoTaskReassignments(); if (kaleoTaskReassignments.isEmpty()) { return; } - - TaskAssignerUtil.reassignKaleoTask( - kaleoTaskReassignments, executionContext); + TaskAssignerUtil.reassignKaleoTask(kaleoTaskReassignments, executionContext); } - - protected void doExit( - KaleoNode currentKaleoNode, ExecutionContext executionContext, - List remainingPathElements) - throws PortalException, SystemException { + @Override + protected void doExit(KaleoNode currentKaleoNode, ExecutionContext executionContext, + List remainingPathElements) throws PortalException, SystemException { String transitionName = executionContext.getTransitionName(); - KaleoTransition kaleoTransition = null; - if (Validator.isNull(transitionName)) { kaleoTransition = currentKaleoNode.getDefaultKaleoTransition(); + } else { + kaleoTransition = currentKaleoNode.getKaleoTransition(transitionName); } - else { - kaleoTransition = currentKaleoNode.getKaleoTransition( - transitionName); - } - - ExecutionContext newExecutionContext = new ExecutionContext( - executionContext.getKaleoInstanceToken(), - executionContext.getKaleoTaskInstanceToken(), - executionContext.getWorkflowContext(), - executionContext.getServiceContext()); - - PathElement pathElement = new PathElement( - null, kaleoTransition.getTargetKaleoNode(), newExecutionContext); - + ExecutionContext newExecutionContext = + new ExecutionContext(executionContext.getKaleoInstanceToken(), + executionContext.getKaleoTaskInstanceToken(), executionContext.getWorkflowContext(), + executionContext.getServiceContext()); + PathElement pathElement = new PathElement(null, kaleoTransition.getTargetKaleoNode(), newExecutionContext); remainingPathElements.add(pathElement); } - protected Collection - getOrganizationKaleoTaskAssignments( - Collection kaleoTaskAssignments, - ExecutionContext executionContext) - throws PortalException, SystemException { + protected Collection getOrganizationKaleoTaskAssignments( + Collection kaleoTaskAssignments, ExecutionContext executionContext) + throws PortalException, SystemException { long userId = executionContext.getKaleoInstanceToken().getUserId(); - User user = UserLocalServiceUtil.getUser(userId); - List organizations = user.getOrganizations(); - - Collection organizationKaleoTaskAssignments = - new HashSet(); - + Collection organizationKaleoTaskAssignments = new HashSet(); for (KaleoTaskAssignment kaleoTaskAssignment : kaleoTaskAssignments) { - String assigneeClassName = - kaleoTaskAssignment.getAssigneeClassName(); - + String assigneeClassName = kaleoTaskAssignment.getAssigneeClassName(); if (!assigneeClassName.equals(Role.class.getName())) { continue; } - long roleId = kaleoTaskAssignment.getAssigneeClassPK(); - Role role = RoleLocalServiceUtil.getRole(roleId); - if (role.getType() != RoleConstants.TYPE_ORGANIZATION) { continue; } - for (Organization organization : organizations) { - KaleoTaskAssignment organizationKaleoTaskAssignment = - new KaleoTaskAssignmentImpl(); - - organizationKaleoTaskAssignment.setGroupId( - organization.getGroup().getGroupId()); - organizationKaleoTaskAssignment.setCompanyId( - kaleoTaskAssignment.getCompanyId()); - organizationKaleoTaskAssignment.setAssigneeClassName( - kaleoTaskAssignment.getAssigneeClassName()); - organizationKaleoTaskAssignment.setAssigneeClassPK( - kaleoTaskAssignment.getAssigneeClassPK()); - - organizationKaleoTaskAssignments.add( - organizationKaleoTaskAssignment); + KaleoTaskAssignment organizationKaleoTaskAssignment = new KaleoTaskAssignmentImpl(); + organizationKaleoTaskAssignment.setGroupId(organization.getGroup().getGroupId()); + organizationKaleoTaskAssignment.setCompanyId(kaleoTaskAssignment.getCompanyId()); + organizationKaleoTaskAssignment.setAssigneeClassName(kaleoTaskAssignment.getAssigneeClassName()); + organizationKaleoTaskAssignment.setAssigneeClassPK(kaleoTaskAssignment.getAssigneeClassPK()); + organizationKaleoTaskAssignments.add(organizationKaleoTaskAssignment); } } - return organizationKaleoTaskAssignments; } private DueDateCalculator _dueDateCalculator; private TaskAssignmentSelector _taskAssignmentSelector; - -} \ No newline at end of file +} diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/EditWorkflowTaskAction.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/EditWorkflowTaskAction.java index 7b642561..6dee36df 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/EditWorkflowTaskAction.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/EditWorkflowTaskAction.java @@ -89,13 +89,20 @@ import com.liferay.portal.workflow.kaleo.service.KaleoTaskInstanceTokenLocalServ public class EditWorkflowTaskAction extends BaseStrutsPortletAction { - private final static Log _log = LogFactoryUtil.getLog(EditWorkflowTaskAction.class); + private static final Log _log = LogFactoryUtil.getLog(EditWorkflowTaskAction.class); - private final static List valoriAmmessi = Arrays.asList(StatoPraticaConstants.ANNULLATA, + private static final String PARAMETER_ESITO = WorkflowConstants.PREFIX_NAME_ELEMENT_FORM + "esito" + + WorkflowConstants.SUFFIX_NAME_ELEMENT_FORM; + private static final String PARAMETER_ISTRUTTORE = WorkflowConstants.PREFIX_NAME_ELEMENT_FORM + "istruttore" + + WorkflowConstants.SUFFIX_NAME_ELEMENT_FORM; + private static final String PARAMETER_TESTO = WorkflowConstants.PREFIX_NAME_ELEMENT_FORM + "testo_del_documento" + + WorkflowConstants.SUFFIX_NAME_ELEMENT_FORM; + + private static final List VALORI_AMMESSI = Arrays.asList(StatoPraticaConstants.ANNULLATA, StatoPraticaConstants.CONFORME, StatoPraticaConstants.INTEGRAZIONE, StatoPraticaConstants.NON_CONFORME, StatoPraticaConstants.NO_PARERE, StatoPraticaConstants.PREAVVISO_CONTRARIO); - private static final List logTypes = Arrays.asList(WorkflowLog.TASK_ASSIGN, WorkflowLog.TASK_COMPLETION, + private static final List LOG_TYPES = Arrays.asList(WorkflowLog.TASK_ASSIGN, WorkflowLog.TASK_COMPLETION, WorkflowLog.TASK_UPDATE, WorkflowLog.TRANSITION); @Override @@ -159,11 +166,15 @@ public class EditWorkflowTaskAction extends BaseStrutsPortletAction { if (transitionName.equalsIgnoreCase("registra-esito")) { HttpServletRequest httpServletRequest = PortalUtil.getOriginalServletRequest(PortalUtil .getHttpServletRequest(actionRequest)); - String esito = httpServletRequest.getParameter("kaleo--esito--") == null ? StringPool.BLANK - : httpServletRequest.getParameter("kaleo--esito--").trim(); - String testoDocumento = httpServletRequest.getParameter("kaleo--testo_del_documento--") == null ? StringPool.BLANK - : httpServletRequest.getParameter("kaleo--testo_del_documento--"); - if (!valoriAmmessi.contains(esito) + String esito = httpServletRequest.getParameter(PARAMETER_ESITO); + if (esito == null) { + esito = StringPool.BLANK; + } + String testoDocumento = httpServletRequest.getParameter(PARAMETER_TESTO); + if (testoDocumento == null) { + testoDocumento = StringPool.BLANK; + } + if (!VALORI_AMMESSI.contains(esito) || ((esito.equalsIgnoreCase(StatoPraticaConstants.INTEGRAZIONE) || esito .equalsIgnoreCase(StatoPraticaConstants.PREAVVISO_CONTRARIO)) && testoDocumento.isEmpty())) { _log.error("controllo validazione completamento task registra-esito = " + workflowTaskId @@ -175,7 +186,7 @@ public class EditWorkflowTaskAction extends BaseStrutsPortletAction { } else if (transitionName.equalsIgnoreCase("Riassegna") || transitionName.equalsIgnoreCase("assegna")) { HttpServletRequest httpServletRequest = PortalUtil.getOriginalServletRequest(PortalUtil .getHttpServletRequest(actionRequest)); - String istruttore = httpServletRequest.getParameter("kaleo--istruttore--"); + String istruttore = httpServletRequest.getParameter(PARAMETER_ISTRUTTORE); if (Validator.isNull(istruttore)) { _log.error("controllo validazione completamento task = " + transitionName + " - " + workflowTaskId + " non riuscito - istruttore non presente nel workflow"); @@ -355,7 +366,7 @@ public class EditWorkflowTaskAction extends BaseStrutsPortletAction { return portletNamespace.concat(PORTLET_STRUTS_FORWARD); } - private final static String PORTLET_STRUTS_FORWARD = "PORTLET_STRUTS_FORWARD"; + private static final String PORTLET_STRUTS_FORWARD = "PORTLET_STRUTS_FORWARD"; @Override public String render(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, @@ -442,7 +453,7 @@ public class EditWorkflowTaskAction extends BaseStrutsPortletAction { Map esitiMapByWorkflowLogID = new HashMap(); try { List workflowLogs = WorkflowLogManagerUtil.getWorkflowLogsByWorkflowInstance( - themeDisplay.getCompanyId(), workflowInstanceId, logTypes, QueryUtil.ALL_POS, QueryUtil.ALL_POS, + themeDisplay.getCompanyId(), workflowInstanceId, LOG_TYPES, QueryUtil.ALL_POS, QueryUtil.ALL_POS, WorkflowComparatorFactoryUtil.getLogCreateDateComparator(true)); for (WorkflowLog workflowLog : workflowLogs) { try { diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/RenderFormTaskPortletAction.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/RenderFormTaskPortletAction.java index 39c6a639..5cdbf00d 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/RenderFormTaskPortletAction.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/hook/struts/RenderFormTaskPortletAction.java @@ -29,6 +29,8 @@ import com.liferay.portal.kernel.json.JSONArray; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.language.LanguageUtil; +import com.liferay.portal.kernel.log.Log; +import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.servlet.ServletResponseUtil; import com.liferay.portal.kernel.struts.BaseStrutsPortletAction; import com.liferay.portal.kernel.util.ContentTypes; @@ -51,6 +53,8 @@ import com.liferay.portlet.dynamicdatamapping.util.DDMXSDUtil; public class RenderFormTaskPortletAction extends BaseStrutsPortletAction { + private static final Log _log = LogFactoryUtil.getLog(RenderFormTaskPortletAction.class); + @Override public String render(PortletConfig portletConfig, RenderRequest renderRequest, RenderResponse renderResponse) throws Exception { diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/util/WorkflowUtil.java b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/util/WorkflowUtil.java index a2dee44c..e883e299 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/util/WorkflowUtil.java +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/it/tref/liferay/portos/kaleo/util/WorkflowUtil.java @@ -19,17 +19,16 @@ import java.util.Map; import javax.portlet.PortletRequest; import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.StringUtils; + import com.liferay.portal.NoSuchWorkflowInstanceLinkException; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.json.JSONDeserializer; import com.liferay.portal.kernel.json.JSONFactoryUtil; -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.StringPool; -import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.workflow.WorkflowHandler; import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil; @@ -48,7 +47,6 @@ import com.liferay.portal.workflow.kaleo.runtime.action.ActionExecutorUtil; import com.liferay.portal.workflow.kaleo.service.KaleoTaskInstanceTokenLocalServiceUtil; public class WorkflowUtil { - private static Log _log = LogFactoryUtil.getLog(WorkflowUtil.class); public static ControlloPratica getControlloPratica(long workflowTaskId) { @@ -59,8 +57,7 @@ public class WorkflowUtil { if (taskInstanceToken.getClassName().equals(ControlloPratica.class.getName())) { controllo = ControlloPraticaLocalServiceUtil.getControlloPratica(taskInstanceToken.getClassPK()); } - } catch (PortalException | SystemException e) { - } + } catch (PortalException | SystemException e) {} return controllo; } @@ -204,11 +201,11 @@ public class WorkflowUtil { if (name.startsWith(WorkflowConstants.PREFIX_NAME_ELEMENT_FORM) && name.endsWith(WorkflowConstants.SUFFIX_NAME_ELEMENT_FORM)) { if (formParameters == null) { - formParameters = new HashMap(); + formParameters = new HashMap<>(); } String parameterName = name.substring(WorkflowConstants.PREFIX_NAME_ELEMENT_FORM.length(), name.length() - WorkflowConstants.SUFFIX_NAME_ELEMENT_FORM.length()); - String value = StringUtil.merge(ParamUtil.getParameterValues(portletRequest, name)); + String value = StringUtils.join(ParamUtil.getParameterValues(portletRequest, name), ','); formParameters.put(parameterName, value); } } @@ -221,11 +218,11 @@ public class WorkflowUtil { if (name.startsWith(WorkflowConstants.PREFIX_NAME_ELEMENT_FORM) && name.endsWith(WorkflowConstants.SUFFIX_NAME_ELEMENT_FORM)) { if (formParameters == null) { - formParameters = new HashMap(); + formParameters = new HashMap<>(); } String parameterName = name.substring(WorkflowConstants.PREFIX_NAME_ELEMENT_FORM.length(), name.length() - WorkflowConstants.SUFFIX_NAME_ELEMENT_FORM.length()); - String value = StringUtil.merge(ParamUtil.getParameterValues(httpServletRequest, name)); + String value = StringUtils.join(ParamUtil.getParameterValues(httpServletRequest, name), ','); formParameters.put(parameterName, value); } } diff --git a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/service.properties b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/service.properties index 63ecff0e..682a7f56 100644 --- a/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/service.properties +++ b/liferay-plugins-sdk-6.2/webs/portos-kaleo-web/docroot/WEB-INF/src/service.properties @@ -13,8 +13,8 @@ ## build.namespace=Kaleo - build.number=57 - build.date=1631548590240 + build.number=63 + build.date=1631785877061 build.auto.upgrade=true ##