1 /*******************************************************************************
2 * Copyright � Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
3 * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Alexandre Lefevre, Marc Salvat 2014-2016
4 * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Marc Salvat, Marc Suarez, Harifetra Ramamonjy 2017
6 * This file is part of the work and learning management system Pentila Nero.
8 * Pentila Nero is free software. You can redistribute it and/or modify since
9 * you respect the terms of either (at least one of the both license) :
10 * - under the terms of the GNU Affero General Public License as
11 * published by the Free Software Foundation, either version 3 of the
12 * License, or (at your option) any later version.
13 * - the CeCILL-C as published by CeCILL-C; either version 1 of the
14 * License, or any later version
15 * - the GNU Lesser General Public License as published by the
16 * Free Software Foundation, either version 3 of the license,
17 * or (at your option) any later version.
19 * There are special exceptions to the terms and conditions of the
20 * licenses as they are applied to this software. View the full text of
21 * the exception in file LICENSE-PROJECT.txt in the directory of this software
24 * Pentila Nero is distributed in the hope that it will be useful,
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 * Licenses for more details.
29 * You should have received a copy of the GNU Affero General Public License
30 * and the CeCILL-C and the GNU Lesser General Public License along with
31 * Pentila Nero. If not, see :
32 * <http://www.gnu.org/licenses/> and
33 * <http://www.cecill.info/licences.fr.html>.
34 ******************************************************************************/
35 package com.pentila.entSavoie.cahierDeTexte.util;
37 import java.text.SimpleDateFormat;
38 import java.util.ArrayList;
39 import java.util.Collections;
40 import java.util.Comparator;
41 import java.util.Date;
42 import java.util.HashMap;
43 import java.util.HashSet;
44 import java.util.List;
46 import java.util.ResourceBundle;
49 import javax.naming.NamingException;
51 import com.liferay.portal.kernel.exception.PortalException;
52 import com.liferay.portal.kernel.exception.SystemException;
53 import com.liferay.portal.kernel.json.JSONArray;
54 import com.liferay.portal.kernel.json.JSONFactoryUtil;
55 import com.liferay.portal.kernel.json.JSONObject;
56 import com.liferay.portal.model.Group;
57 import com.liferay.portal.model.Organization;
58 import com.liferay.portal.model.Role;
59 import com.liferay.portal.model.User;
60 import com.liferay.portal.service.GroupLocalServiceUtil;
61 import com.liferay.portal.service.OrganizationLocalServiceUtil;
62 import com.liferay.portal.service.RoleLocalServiceUtil;
63 import com.liferay.portal.service.UserLocalServiceUtil;
64 import com.liferay.portal.theme.ThemeDisplay;
65 import com.pentila.entSavoie.ENTRolesConstants;
66 import com.pentila.entSavoie.cahierDeTexte.model.AnnotationCDT;
67 import com.pentila.entSavoie.cahierDeTexte.model.EventCDT;
68 import com.pentila.entSavoie.cahierDeTexte.model.LockCDT;
69 import com.pentila.entSavoie.cahierDeTexte.model.Matiere;
70 import com.pentila.entSavoie.cahierDeTexte.model.MatiereEtab;
71 import com.pentila.entSavoie.cahierDeTexte.service.AnnotationCDTLocalServiceUtil;
72 import com.pentila.entSavoie.cahierDeTexte.service.EventCDTLocalServiceUtil;
73 import com.pentila.entSavoie.cahierDeTexte.service.LockCDTLocalServiceUtil;
74 import com.pentila.entSavoie.cahierDeTexte.service.MatiereEtabLocalServiceUtil;
75 import com.pentila.entSavoie.cahierDeTexte.service.MatiereLocalServiceUtil;
76 import com.pentila.entSavoie.communityInfos.model.CommunityInfos;
77 import com.pentila.entSavoie.communityInfos.service.CommunityInfosLocalServiceUtil;
78 import com.pentila.entSavoie.directory.OrganizationFinderServiceUtil;
79 import com.pentila.entSavoie.utils.ENTCacheUtils;
82 public class CDTUtil {
84 static SimpleDateFormat classicDateFormat = new SimpleDateFormat("yyyy-MM-dd");
85 static SimpleDateFormat testDateFormat = new SimpleDateFormat("yyyyMMdd");
87 public static String listSubjectCDT(User u) throws PortalException, SystemException, NamingException, Exception {
88 return listSubjectCDT(u, new HashMap<Long, HashSet<Long>>(), new HashMap<Long, HashSet<Long>>());
91 public static String listSubjectCDT(User u, Map<Long, HashSet<Long>> subjectUserMap, Map<Long, HashSet<Long>> subjectCalendarMap) throws SystemException, PortalException, NamingException, Exception {
92 // matieres active de l etablissement de rattachement pour le user
93 long etabId = OrganizationFinderServiceUtil.getEtabRatachement(u).getOrganizationId();
95 JSONArray retJsonArray = JSONFactoryUtil.createJSONArray();
98 List<MatiereEtab> matiereEtabList = MatiereEtabLocalServiceUtil.getMatiereEtabByEtabIdState(etabId, true);
100 List<ProxyMatiere> proxyMatiereList = new ArrayList<ProxyMatiere>();
102 for (MatiereEtab matiereEtab : matiereEtabList) {
103 Matiere matiere = MatiereLocalServiceUtil.getMatiere(matiereEtab.getMatiereId());
104 ProxyMatiere pm = new ProxyMatiere(matiere.getMatiereId(), matiere.getLabelLong().toLowerCase(), matiereEtab.getColor(), subjectUserMap.get(matiere.getMatiereId()), subjectCalendarMap.get(matiere.getMatiereId()));
105 proxyMatiereList.add(pm);
108 // on tri serveur pour aleger le client
109 Collections.sort(proxyMatiereList);
112 for (ProxyMatiere pm : proxyMatiereList) {
113 retJsonArray.put(pm.getJSON());
116 return retJsonArray.toString();
119 public static JSONArray jsonSubjectCDT(User u) throws NamingException, Exception {
120 // matieres active de l etablissement de rattachement pour le user
121 long etabId = OrganizationFinderServiceUtil.getEtabRatachement(u).getOrganizationId();
123 JSONArray retJsonArray = JSONFactoryUtil.createJSONArray();
124 List<MatiereEtab> matiereEtabList = MatiereEtabLocalServiceUtil.getMatiereEtabByEtabIdState(etabId, true);
125 for (MatiereEtab matiereEtab : matiereEtabList) {
126 retJsonArray.put(matiereEtab.getMatiereId());
132 public static JSONArray jsonOwnSubjectCDT(User u) throws NamingException, Exception {
134 if (RoleLocalServiceUtil.hasUserRole(u.getUserId(), u.getCompanyId(),
135 ENTRolesConstants.NATIONAL_4, false) ) {
136 // principal --> on retourne toutes les matieres de l'etab
137 return jsonSubjectCDT(u);
140 JSONArray matieresArray = JSONFactoryUtil.createJSONArray();
142 if (!RoleLocalServiceUtil.hasUserRole(u.getUserId(), u.getCompanyId(),
143 ENTRolesConstants.NATIONAL_3, false) ) {
144 // pas un prof --> on retourne vide
145 return matieresArray;
149 List<Matiere> matieresUser = MatiereLocalServiceUtil.getMatieresByUserId(u.getUserId());
150 for (Matiere matiere: matieresUser) {
151 matieresArray.put(matiere.getMatiereId());
153 } catch (Exception e) {
157 return matieresArray;
161 public static String listOwnSubjectCDT(User u) throws PortalException, SystemException, NamingException, Exception {
162 return listOwnSubjectCDT(u, new HashMap<Long, HashSet<Long>>(), new HashMap<Long, HashSet<Long>>());
165 public static String listOwnSubjectCDT(User u, Map<Long, HashSet<Long>> subjectUserMap, Map<Long, HashSet<Long>> subjectCalendarMap) throws PortalException, SystemException, NamingException, Exception {
167 if (RoleLocalServiceUtil.hasUserRole(u.getUserId(), u.getCompanyId(),
168 ENTRolesConstants.NATIONAL_4, false) ) {
169 // principal --> on retourne toutes les matieres de l'etab
170 return listSubjectCDT(u);
173 JSONArray matieresArray = JSONFactoryUtil.createJSONArray();
175 // on enleve ce test car maintenant meme un personnel de l'étab peut donner des cours
176 //if (!RoleLocalServiceUtil.hasUserRole(u.getUserId(), u.getCompanyId(),
177 // ENTRolesConstants.NATIONAL_3, false) ) {
178 // // pas un prof --> on retourne vide
179 // return matieresArray.toString();
183 long etabId = OrganizationFinderServiceUtil.getEtabRatachement(u).getOrganizationId();
184 List<Matiere> matieresUser = MatiereLocalServiceUtil.getMatieresByUserId(u.getUserId());
185 for (Matiere matiere: matieresUser) {
186 JSONObject matiereObj = JSONFactoryUtil.createJSONObject();
187 MatiereEtab matiereEtab = MatiereEtabLocalServiceUtil.getMatiereEtabByEtabIdMatiereId(etabId, matiere.getMatiereId());
189 matiereObj.put("id", matiere.getMatiereId());
190 matiereObj.put("label", matiere.getLabelLong().toLowerCase());
191 matiereObj.put("color", matiereEtab.getColor());
193 HashSet<Long> userIds = subjectUserMap.get(matiere.getMatiereId());
194 JSONArray users = JSONFactoryUtil.createJSONArray();
196 for(Long id: userIds){
200 matiereObj.put("users", users);
202 HashSet<Long> calendarIds = subjectCalendarMap.get(matiere.getMatiereId());
203 JSONArray calendars = JSONFactoryUtil.createJSONArray();
204 if(calendarIds != null){
205 for(Long id: calendarIds){
209 matiereObj.put("calendars", calendars);
211 matieresArray.put(matiereObj);
217 } catch (Exception e) {
221 return matieresArray.toString();
224 public static JSONObject calendarEvent_listJSON(Long userId, Long doAsUser, Integer showFilter, Long calendarIdShow, String filterSubjectIds, Boolean onlyCreatorEvent, Date startDate, Date endDate, long filteredEtabOrgId, ThemeDisplay themeDisplay, ResourceBundle messages) throws PortalException, SystemException {
226 User user = UserLocalServiceUtil.getUser(userId);
228 List<EventCDT> listEvt = calendarEvent_list(doAsUser, showFilter, calendarIdShow, filterSubjectIds, onlyCreatorEvent, startDate, endDate, filteredEtabOrgId);
230 // On recupere l ensemble des locks de l utilisateur
231 // et on filtre pour ne garder uniquement que les locks valide (cf publishDay)
232 List<LockCDT> locks = new ArrayList<LockCDT>();
234 int today = Integer.parseInt(testDateFormat.format(new Date()));
235 int startEvtRequest = Integer.parseInt(testDateFormat.format(startDate).replaceAll("\"", ""));
236 int endEvtRequest = Integer.parseInt(testDateFormat.format(endDate));
237 List<LockCDT> locksCDT = LockCDTLocalServiceUtil.getLockCDTByCreator(doAsUser);
238 for (LockCDT l: locksCDT){
240 int publish = Integer.parseInt(testDateFormat.format(l.getPublishDay()));
241 int startLock = Integer.parseInt(testDateFormat.format(l.getStartDay()));
242 int endLock = Integer.parseInt(testDateFormat.format(l.getEndDay()));
244 if ( today >= publish && startEvtRequest <= endLock && endEvtRequest >= startLock ) {
248 } catch (SystemException e) {
252 //Map<Long, AnnotationCDT> mapAnnotation = new HashMap();
254 JSONArray evtList = JSONFactoryUtil.createJSONArray();
256 // pas de tri car fait dans calendarEvent_list
257 //Collections.sort(listEvt);
259 for (EventCDT evt: listEvt) {
260 AnnotationCDT annot = null;
262 annot = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorIdEvtId(userId, evt.getEvtId());
264 catch (Exception exc) {}
265 ProxyEvent evtCours = new ProxyEvent(evt, userId, annot, locks);
266 evtList.put(evtCours.getJSONEvent(true, user, themeDisplay, messages));
269 // on retourne les events cours et devoir o-pour l'organisation
270 JSONObject result = JSONFactoryUtil.createJSONObject();
271 result.put("success", true);
273 result.put("total", evtList.length());
275 result.put("results", evtList);
280 public static List<EventCDT> calendarEvent_list(Long userId, Integer showFilter, Long calendarIdShow, String filterSubjectIds, Boolean onlyCreatorEvent, Date startDate, Date endDate, long filteredEtabOrgId) throws PortalException, SystemException {
281 return calendarEvent_list(userId, showFilter, calendarIdShow, filterSubjectIds, onlyCreatorEvent, startDate, endDate, true, false, false, false, filteredEtabOrgId);
284 public static List<EventCDT> calendarEvent_list(Long userId, Integer showFilter, Long calendarIdShow, String filterSubjectIds, Boolean onlyCreatorEvent, Date startDate, Date endDate, boolean sortByDate, boolean sortByUser, boolean sortByCalendar, boolean sortBySubject, long filteredEtabOrgId) throws PortalException, SystemException {
288 user = UserLocalServiceUtil.getUser(userId);
289 } catch (Exception e) {
290 // TODO Auto-generated catch block
295 Role enseignant = RoleLocalServiceUtil.getRole(user.getCompanyId(), ENTRolesConstants.NATIONAL_3);
296 boolean isEnseignant = false;
297 List<Role> lroles = user.getRoles();
298 if(lroles.contains(enseignant)){
302 //final String filterSubjectId = actionRequest.getParameter("filterSubjectId");
304 JSONArray folderIdArray = JSONFactoryUtil.createJSONArray(filterSubjectIds);
305 Set<Long> filterSubjectSetIds = new HashSet<Long>();
306 for (int i=0; i<folderIdArray.length(); i++) {
307 filterSubjectSetIds.add(folderIdArray.getLong(i));
311 List<EventCDT> listEvt = new ArrayList<EventCDT>();
313 // Vue tous mes groupes, pas de filtre matiere, tous mes events
314 if (calendarIdShow.equals(new Long(-1)) && filterSubjectSetIds.contains(new Long(-1)) && onlyCreatorEvent) {
315 listEvt.addAll(EventCDTLocalServiceUtil.getEventCDTbyCreatorRangeDate(userId, startDate, endDate));
318 // Vue tous mes groupes, pas de filtre matiere
319 if (calendarIdShow.equals(new Long(-1)) && filterSubjectSetIds.contains(new Long(-1))) {
320 // affichage des evt qui concerne la personne
322 List<Organization> userOrgs = CDTUserSettings.getOrganizationFiltered(user);
323 for (Organization uorg: userOrgs) {
324 listEvt.addAll(EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(uorg.getGroup().getGroupId(), null, null, startDate, endDate));
327 //Ajout des Events des groupes persos
328 List<Group> groupsPerso = CDTUserSettings.getUserGroups(user);
329 for (Group group : groupsPerso) {
330 listEvt.addAll(EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(group.getGroupId(), null, null, startDate, endDate));
333 } catch (Exception e) {
334 // TODO Auto-generated catch block
338 // on recupere l'ensemble des annotations associe a la meme periode --> pour optimiser les requetes sur la BD
339 for (AnnotationCDT anno : AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorRangeDate(userId, startDate, endDate)) {
340 mapAnnotation.put(anno.getEvtId(), anno);
345 // Vue tous mes groupes, filtre matiere
346 else if (calendarIdShow.equals(new Long(-1)) && !filterSubjectSetIds.contains(new Long(-1))) {
348 List<Organization> userOrgs = CDTUserSettings.getOrganizationFiltered(user);
350 for (Organization uorg: userOrgs) {
351 List<EventCDT> lstevtCDT = EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(uorg.getGroup().getGroupId(), null, null, startDate, endDate);
352 for (EventCDT evt : lstevtCDT) {
353 Long subjectId = evt.getSubjectCDT();
354 if (filterSubjectSetIds.contains(subjectId)) {
357 List<AnnotationCDT> anno = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorRangeDate(userId, startDate, endDate);
359 mapAnnotation.put(anno.get(0).getEvtId(), anno.get(0));
366 //Ajout des Events des groupes persos
367 List<Group> groupsPerso = CDTUserSettings.getUserGroups(user);
368 for (Group group : groupsPerso) {
369 List<EventCDT> lstevtCDT = EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(group.getGroupId(), null, null, startDate, endDate);
370 for (EventCDT evt : lstevtCDT) {
371 Long subjectId = evt.getSubjectCDT();
372 if (filterSubjectSetIds.contains(subjectId)) {
375 List<AnnotationCDT> anno = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorRangeDate(userId, startDate, endDate);
377 mapAnnotation.put(anno.get(0).getEvtId(), anno.get(0));
383 } catch (Exception e) {
384 // TODO Auto-generated catch block
388 // on recupere l'ensemble des annotations associe a la meme periode --> pour optimiser les requetes sur la BD
389 for (AnnotationCDT anno : AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorRangeDate(userId, startDate, endDate)) {
390 mapAnnotation.put(anno.getEvtId(), anno);
394 // Filtre calendrier, pas de filtre matiere
395 else if (!calendarIdShow.equals(new Long(-1)) && filterSubjectSetIds.contains(new Long(-1))) {
396 // Si enseignant alors on n'affiche que les cours
397 //if (RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(), ENTRolesConstants.NATIONAL_1, false)) {
398 // listEvt.addAll(EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(calendarIdShow, new Long(1), null, startDate, endDate));
400 listEvt.addAll(EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(calendarIdShow, null, null, startDate, endDate));
403 // on recupere l'ensemble des annotations associe a la meme periode et cette classe
404 for (AnnotationCDT anno : AnnotationCDTLocalServiceUtil.getAnnotationCDTbyCreatorGroupRangeDate(userId, calendarIdShow, startDate, endDate)) {
405 mapAnnotation.put(anno.getEvtId(), anno);
409 // On ajoute maintenant les evt liee par les eleves
410 // uniquement si il ne s agit pas d un eleve ou un parent
412 if (!RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),
413 ENTRolesConstants.NATIONAL_1, false) &&
414 !RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),
415 ENTRolesConstants.NATIONAL_2, false) ) {
417 List<Long> linkedOrgs = getAllLinkedOrganizations(calendarIdShow);
418 for (Long linkedOrg: linkedOrgs) {
419 listEvt.addAll(EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(linkedOrg, null, null, startDate, endDate));
423 } catch (Exception e) {
424 // TODO Auto-generated catch block
428 } catch (Exception e) {
429 // TODO Auto-generated catch block
433 // Filtre calendrier, Filtre matiere
434 else if (!calendarIdShow.equals(new Long(-1)) && !filterSubjectSetIds.contains(new Long(-1))) {
435 // Si enseignant alors on n'affiche que les cours
436 //List<EventCDT> lstEvt = null;
437 //if (RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(), ENTRolesConstants.NATIONAL_1, false)) {
438 // lstEvt = EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(calendarIdShow, new Long(1), null, startDate, endDate);
440 List<EventCDT> lstEvt = EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(calendarIdShow, null, null, startDate, endDate);
442 for (EventCDT evt : lstEvt) {
443 Long subjectId = evt.getSubjectCDT();
444 if (filterSubjectSetIds.contains(subjectId)) {
447 List<AnnotationCDT> anno = AnnotationCDTLocalServiceUtil.getAnnotationCDTbyEvt(evt.getEvtId());
449 mapAnnotation.put(anno.get(0).getEvtId(), anno.get(0));
455 // On ajoute maintenant les evt liee par les eleves
456 // uniquement si il ne s agit pas d un eleve ou un parent
458 if (!RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),
459 ENTRolesConstants.NATIONAL_1, false) &&
460 !RoleLocalServiceUtil.hasUserRole(user.getUserId(), user.getCompanyId(),
461 ENTRolesConstants.NATIONAL_2, false) ) {
463 List<Long> linkedOrgs = getAllLinkedOrganizations(calendarIdShow);
464 for (Long linkedOrg: linkedOrgs) {
465 List<EventCDT> lstevtCDT = EventCDTLocalServiceUtil.getEventCDTbyGroupRangeDate(linkedOrg, null, null, startDate, endDate);
466 for (EventCDT evt : lstevtCDT) {
467 Long subjectId = evt.getSubjectCDT();
468 if (filterSubjectSetIds.contains(subjectId)) {
474 } catch (Exception e) {
475 // TODO Auto-generated catch block
479 } catch (Exception e) {
480 // TODO Auto-generated catch block
488 List<EventCDT> listEvtCDTEns = new ArrayList<EventCDT>();
491 for (EventCDT evt: listEvt) {
492 // on teste si on doit etre le createur
493 if (onlyCreatorEvent && (evt.getCreator() != userId)) {
497 // on teste le filtre sur l'etab
498 if (filteredEtabOrgId!=0) {
500 Group evtGrp = GroupLocalServiceUtil.getGroup(evt.getGroupId());
501 if (evtGrp.isOrganization()) {
502 Organization evtOrg = OrganizationLocalServiceUtil.getOrganization(evtGrp.getOrganizationId());
503 if (evtOrg.getParentOrganizationId()!=filteredEtabOrgId) {
508 catch(Exception exc) {}
511 // On teste ici le type des evt pour savoir si on doit les retourner
519 if ((evt.getKindEvt()==1 && showFilter==2) || (evt.getKindEvt()==2 && showFilter==1 && !isEnseignant)) { // || (evt.getKindEvt()==3 && !showNote) ) {
523 // on affiche pas si le mec est pas le createur et si il est pas braodcast!
524 // pour les cours c'est dans les infos retourne que le filtre est fait!
525 if ( !evt.getBroadcast() && (evt.getCreator() != userId) ) {
528 //Si le user est enseignant
529 //--> on lui affiche les devoirs pour les dates libres
530 //sinon il n'a aucun moyen de les voir
531 if(isEnseignant && evt.getKindEvt()==2){
532 if(evt.getToEvt() != 0){
537 //On n'affiche pas les cours dont les groupes ne sont pas visibles sur le CDT
539 CommunityInfos ci = CommunityInfosLocalServiceUtil.getCommunityInfosByGroupId(evt.getGroupId());
540 if(!ci.isViewInCDT()){
543 } catch(Exception e){}
545 listEvtCDTEns.add(evt);
548 // on fait un tri sur la date et l heure
549 // Collections.sort(listEvtCDTEns, new Comparator<EventCDT>() {
551 // public int compare(EventCDT o1, EventCDT o2) {
552 // String s1 = testDateFormat.format(o1.getStartDay()) + o1.getStartEvtTime();
553 // String s2 = testDateFormat.format(o2.getStartDay()) + o2.getStartEvtTime();
554 // return s1.compareTo(s2);
555 // //return o1.getStartDay().compareTo(o2.getStartDay());
560 Collections.sort(listEvtCDTEns);
562 // Tri par enseignant
563 else if(sortByUser) {
564 Collections.sort(listEvtCDTEns, new Comparator<EventCDT>() {
565 public int compare(EventCDT o1, EventCDT o2) {
566 Long sd1 = o1.getStartDay().getTime();
567 Long sd2 = o2.getStartDay().getTime();
568 String s1 = getUserNameCached(o1.getCreator());
569 String s2 = getUserNameCached(o2.getCreator());
570 if(s1.compareTo(s2) == 0){
571 return sd1.compareTo(sd2);
573 return s1.compareTo(s2);
578 else if(sortByCalendar){
579 Collections.sort(listEvtCDTEns, new Comparator<EventCDT>() {
580 public int compare(EventCDT o1, EventCDT o2) {
581 Long sd1 = o1.getStartDay().getTime();
582 Long sd2 = o2.getStartDay().getTime();
583 String s1 = getClasseNameCached(o1.getGroupId());
584 String s2 = getClasseNameCached(o2.getGroupId());
585 if(s1.compareTo(s2) == 0){
586 return sd1.compareTo(sd2);
588 return s1.compareTo(s2);
593 else if(sortBySubject) {
594 Collections.sort(listEvtCDTEns, new Comparator<EventCDT>() {
595 public int compare(EventCDT o1, EventCDT o2) {
596 Long sd1 = o1.getStartDay().getTime();
597 Long sd2 = o2.getStartDay().getTime();
598 String s1 = getMatiereNameCached(o1.getSubjectCDT());
599 String s2 = getMatiereNameCached(o2.getSubjectCDT());
600 if(s1.compareTo(s2) == 0){
601 return sd1.compareTo(sd2);
603 return s1.compareTo(s2);
607 Collections.sort(listEvtCDTEns);
610 return listEvtCDTEns;
614 // Methode de cache RAM sur l'export afin d'accelerer un peu le truc!!!
615 private static String getClasseNameCached(long groupId) {
616 String cacheValue = "";
617 String cacheKey="CDT_LIST_EVENT_CN_"+groupId;
618 cacheValue = (String) ENTCacheUtils.getObjectFromCache(cacheKey);
619 if(cacheValue==null){
621 Group group = GroupLocalServiceUtil.getGroup(groupId);
622 if (group.isOrganization()) {
623 Organization o = OrganizationLocalServiceUtil.getOrganization(group.getOrganizationId());
624 cacheValue = o.getName().substring(o.getName().lastIndexOf("-")+2);
627 cacheValue = group.getName();
629 } catch (Exception e) {
632 ENTCacheUtils.storeObjectIntoCache(cacheKey,cacheValue,-1);
637 private static String getMatiereNameCached(long subjectCDTId) {
638 String cacheValue = "";
639 String cacheKey="CDT_LIST_EVENT_MN_"+subjectCDTId;
640 cacheValue = (String) ENTCacheUtils.getObjectFromCache(cacheKey);
641 if(cacheValue==null){
644 matiere = MatiereLocalServiceUtil.getMatiere(subjectCDTId);
645 cacheValue = matiere.getLabelLong().toLowerCase();
646 } catch (Exception e) {
649 ENTCacheUtils.storeObjectIntoCache(cacheKey,cacheValue,-1);
654 private static String getUserNameCached(long userId) {
655 String cacheValue = "";
656 String cacheKey="CDT_LIST_EVENT_UN_"+userId;
657 cacheValue = (String) ENTCacheUtils.getObjectFromCache(cacheKey);
658 if(cacheValue==null){
661 user = UserLocalServiceUtil.getUser(userId);
662 cacheValue = user.getFullName().toLowerCase();
663 } catch (Exception e) {
667 ENTCacheUtils.storeObjectIntoCache(cacheKey,cacheValue,-1);