org.exoplatform.contact.CalendarUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.exoplatform.contact.CalendarUtils.java

Source

/*
 * Copyright (C) 2003-2007 eXo Platform SAS.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see<http://www.gnu.org/licenses/>.
 */
package org.exoplatform.contact;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;

import org.apache.commons.lang.StringUtils;
import org.exoplatform.calendar.service.Attachment;
import org.exoplatform.calendar.service.CalendarEvent;
import org.exoplatform.calendar.service.CalendarService;
import org.exoplatform.calendar.service.GroupCalendarData;
import org.exoplatform.calendar.service.Utils;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.download.DownloadService;
import org.exoplatform.download.InputStreamDownloadResource;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.Membership;
import org.exoplatform.services.organization.OrganizationService;
import org.exoplatform.webui.core.model.SelectItemOption;

/**
 * Created by The eXo Platform SARL
 * Author : Hung Nguyen Quang
 *          hung.nguyen@exoplatform.com
 * Jul 11, 2007  
 */
public class CalendarUtils {
    final public static String PRIVATE_CALENDARS = "privateCalendar".intern();
    final public static String SHARED_CALENDARS = "sharedCalendar".intern();
    final public static String PUBLIC_CALENDARS = "publicCalendar".intern();

    public static final String PRIVATE_TYPE = "0".intern();
    public static final String SHARED_TYPE = "1".intern();
    public static final String PUBLIC_TYPE = "2".intern();
    public static final String ANY = "*.*".intern();
    public static final String ANY_OF = "*.".intern();
    public static final String DOT = ".".intern();
    final public static String SEMICOLON = ";".intern();
    final public static String COLON = ",".intern();
    final public static String COMMA = ",".intern();
    public static final String COLON_SLASH = ":/".intern();
    public static final String SLASH_COLON = "/:".intern();
    final public static String STAR = "*".intern();
    final public static String UNDERSCORE = "_".intern();
    final public static String DOUBLESCORE = "--".intern();
    public static final int DENY = 0;
    public static final int ACCEPT = 1;
    public static final int NOTSURE = 2;

    final public static String TIMEFORMAT = "HH:mm".intern();
    final public static String DATEFORMAT = "MM/dd/yyyy".intern();
    final public static String DATETIMEFORMAT = DATEFORMAT + " " + TIMEFORMAT;
    final public static int DEFAULT_TIMEITERVAL = 15;
    final public static long MILISECONS_OF_DAY = 24 * 60 * 60 * 1000;
    public static final String SLASH = "/".intern();
    public static final String BACKSLASH = "\\".intern();
    public static final String GREATER_THAN = ">".intern();
    public static final String SMALLER_THAN = "<".intern();
    public static final String EXTENDEDCHARACTER[] = { SEMICOLON, COMMA, SLASH, BACKSLASH, "'", "|", GREATER_THAN,
            SMALLER_THAN, "\"", "?", "!", "@", "#", "$", "%", "^", "&", "*", "+", "]", "[" };
    public static final String SIMPLECHARACTER[] = { GREATER_THAN, SMALLER_THAN };

    static public String[] getUserGroups(String username) throws Exception {
        OrganizationService organization = (OrganizationService) PortalContainer
                .getComponent(OrganizationService.class);
        Object[] objs = organization.getGroupHandler().findGroupsOfUser(username).toArray();
        String[] groups = new String[objs.length];
        for (int i = 0; i < objs.length; i++) {
            groups[i] = ((Group) objs[i]).getId();
        }
        return groups;
    }

    static public String[] getAllGroups() throws Exception {
        OrganizationService organization = (OrganizationService) PortalContainer
                .getComponent(OrganizationService.class);
        Object[] objs = organization.getGroupHandler().getAllGroups().toArray();
        String[] groups = new String[objs.length];
        for (int i = 0; i < objs.length; i++) {
            groups[i] = ((Group) objs[i]).getId();
        }
        return groups;
    }

    public static boolean isEmpty(String value) {
        return (value == null || value.trim().length() == 0);
    }

    static public CalendarService getCalendarService() throws Exception {
        return (CalendarService) PortalContainer.getComponent(CalendarService.class);
    }

    static public OrganizationService getOrganizationService() throws Exception {
        return (OrganizationService) PortalContainer.getComponent(OrganizationService.class);
    }

    public static List<SelectItemOption<String>> getTimesSelectBoxOptions(String timeFormat) {
        List<SelectItemOption<String>> options = new ArrayList<SelectItemOption<String>>();
        Calendar cal = getBeginDay(GregorianCalendar.getInstance());
        DateFormat df = new SimpleDateFormat(timeFormat);
        DateFormat df2 = new SimpleDateFormat(TIMEFORMAT);
        int time = 0;
        while (time++ < 24 * 60 / (15)) {
            options.add(new SelectItemOption<String>(df.format(cal.getTime()), df2.format(cal.getTime())));
            cal.add(java.util.Calendar.MINUTE, 15);
        }
        return options;
    }

    public static List<SelectItemOption<String>> getTimesSelectBoxOptions(String timeFormat, int timeInteval) {
        List<SelectItemOption<String>> options = new ArrayList<SelectItemOption<String>>();
        Calendar cal = getBeginDay(GregorianCalendar.getInstance());
        DateFormat df = new SimpleDateFormat(timeFormat);
        DateFormat df2 = new SimpleDateFormat(TIMEFORMAT);
        int time = 0;
        while (time++ < 24 * 60 / (timeInteval)) {
            options.add(new SelectItemOption<String>(df.format(cal.getTime()), df2.format(cal.getTime())));
            cal.add(java.util.Calendar.MINUTE, timeInteval);
        }
        return options;
    }

    public static String parse(Date date, String timeFormat) throws Exception {
        DateFormat df = new SimpleDateFormat(timeFormat);
        return df.format(date);
    }

    static public String getCurrentUser() throws Exception {
        return Util.getPortalRequestContext().getRemoteUser();
    }

    public static boolean isAllDayEvent(CalendarEvent eventCalendar) {
        Calendar cal1 = new GregorianCalendar();
        Calendar cal2 = new GregorianCalendar();
        cal1.setTime(eventCalendar.getFromDateTime());
        cal2.setTime(eventCalendar.getToDateTime());
        return (cal1.get(Calendar.HOUR_OF_DAY) == 0 && cal1.get(Calendar.MINUTE) == 0
                && cal2.get(Calendar.HOUR_OF_DAY) == 0 && cal2.get(Calendar.MINUTE) == 0);
    }

    public static boolean isSameDate(java.util.Calendar date1, java.util.Calendar date2) {
        return (date1.get(java.util.Calendar.DATE) == date2.get(java.util.Calendar.DATE)
                && date1.get(java.util.Calendar.MONTH) == date2.get(java.util.Calendar.MONTH)
                && date1.get(java.util.Calendar.YEAR) == date2.get(java.util.Calendar.YEAR));
    }

    public static boolean isSameDate(Date value1, Date value2) {
        Calendar date1 = GregorianCalendar.getInstance();
        date1.setTime(value1);
        Calendar date2 = GregorianCalendar.getInstance();
        date2.setTime(value2);
        return isSameDate(date1, date2);
    }

    public static Calendar getBeginDay(Calendar cal) {
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal;
    }

    public static Calendar getEndDay(Calendar cal) {
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        cal.add(Calendar.HOUR_OF_DAY, 24);
        return cal;
    }

    public static Calendar getBeginDay(Date date) {
        Calendar cal = GregorianCalendar.getInstance();
        cal.setTime(date);
        return getBeginDay(cal);
    }

    public static Calendar getEndDay(Date date) {
        Calendar cal = getInstanceTempCalendar();
        cal.setTime(date);
        return getEndDay(cal);
    }

    public static String getImageSource(Attachment attach, DownloadService dservice) throws Exception {
        if (attach != null) {
            InputStream input = attach.getInputStream();
            byte[] imageBytes = null;
            if (input != null) {
                imageBytes = new byte[input.available()];
                input.read(imageBytes);
                ByteArrayInputStream byteImage = new ByteArrayInputStream(imageBytes);
                InputStreamDownloadResource dresource = new InputStreamDownloadResource(byteImage, "image");
                dresource.setDownloadName(attach.getName());
                return dservice.getDownloadLink(dservice.addDownloadResource(dresource));
            }
        }
        return null;
    }

    public static List<SelectItemOption<String>> getCalendarOption() throws Exception {
        List<SelectItemOption<String>> options = new ArrayList<SelectItemOption<String>>();
        CalendarService calendarService = CalendarUtils.getCalendarService();
        String username = Util.getPortalRequestContext().getRemoteUser();
        options.add(new SelectItemOption<String>(CalendarUtils.PRIVATE_CALENDARS, ""));
        List<org.exoplatform.calendar.service.Calendar> calendars = calendarService.getUserCalendars(username,
                true);
        for (org.exoplatform.calendar.service.Calendar c : calendars) {
            options.add(new SelectItemOption<String>(CalendarUtils.DOUBLESCORE + c.getName(),
                    CalendarUtils.PRIVATE_TYPE + CalendarUtils.COLON + c.getId()));
        }
        GroupCalendarData gcd = calendarService.getSharedCalendars(username, true);
        if (gcd != null) {
            options.add(new SelectItemOption<String>(CalendarUtils.SHARED_CALENDARS, ""));
            for (org.exoplatform.calendar.service.Calendar c : gcd.getCalendars()) {
                if (CalendarUtils.canEdit(null, Utils.getEditPerUsers(c), username)) {
                    options.add(new SelectItemOption<String>(CalendarUtils.DOUBLESCORE + c.getName(),
                            CalendarUtils.SHARED_TYPE + CalendarUtils.COLON + c.getId()));
                }
            }
        }
        List<GroupCalendarData> lgcd = calendarService.getGroupCalendars(CalendarUtils.getUserGroups(username),
                false, username);
        if (lgcd != null) {
            OrganizationService oService = (OrganizationService) PortalContainer
                    .getComponent(OrganizationService.class);
            options.add(new SelectItemOption<String>(CalendarUtils.PUBLIC_CALENDARS, ""));
            for (GroupCalendarData g : lgcd) {
                for (org.exoplatform.calendar.service.Calendar c : g.getCalendars()) {
                    // cs-4429: fix for group calendar permission
                    if (CalendarUtils.canEdit(oService, c.getEditPermission(), username)) {
                        options.add(new SelectItemOption<String>(CalendarUtils.DOUBLESCORE + c.getName(),
                                CalendarUtils.PUBLIC_TYPE + CalendarUtils.COLON + c.getId()));
                    }
                }

            }
        }
        return options;
    }

    public static boolean hasEditPermission(String[] savePerms, String[] checkPerms) {
        if (savePerms != null)
            for (String sp : savePerms) {
                for (String cp : checkPerms) {
                    if (sp.equals(cp)) {
                        return true;
                    }
                }
            }
        return false;
    }

    @SuppressWarnings("unchecked")
    public static boolean canEdit(OrganizationService oService, String[] savePerms, String username)
            throws Exception {
        StringBuffer sb = new StringBuffer(username);
        if (oService != null) {
            Collection<Membership> memberShipsType = oService.getMembershipHandler()
                    .findMembershipsByUser(username);
            Collection<Group> groups = oService.getGroupHandler().findGroupsOfUser(username);
            for (Group g : groups) {
                sb.append(CalendarUtils.COMMA).append(g.getId()).append(SLASH_COLON).append(ANY);
                sb.append(CalendarUtils.COMMA).append(g.getId()).append(SLASH_COLON).append(username);
                for (Membership mp : memberShipsType) {
                    sb.append(CalendarUtils.COMMA).append(g.getId()).append(SLASH_COLON)
                            .append(ANY_OF + mp.getMembershipType());
                }
            }
        }
        return CalendarUtils.hasEditPermission(savePerms, sb.toString().split(CalendarUtils.COMMA));
    }

    public static boolean isNameValid(String name, String[] regexpression) {
        for (String c : regexpression) {
            if (name.contains(c))
                return false;
        }
        return true;
    }

    public static boolean isValidEmailAddresses(String value) {
        if (isEmpty(value))
            return true;
        value = StringUtils.remove(value, " ");
        value = StringUtils.replace(value, SEMICOLON, COMMA);
        try {
            InternetAddress[] iAdds = InternetAddress.parse(value, true);
            String emailRegex = "[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[_A-Za-z0-9-.]+\\.[A-Za-z]{2,6}";
            for (int i = 0; i < iAdds.length; i++) {
                if (!iAdds[i].getAddress().matches(emailRegex))
                    return false;
            }
        } catch (AddressException e) {
            return false;
        }
        return true;
    }

    public static Calendar getInstanceTempCalendar() {
        Calendar calendar = GregorianCalendar.getInstance();
        calendar.setLenient(false);
        int gmtoffset = calendar.get(Calendar.DST_OFFSET) + calendar.get(Calendar.ZONE_OFFSET);
        calendar.setTimeInMillis(System.currentTimeMillis() - gmtoffset);
        return calendar;
    }

}