/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/calendar/trunk/calendar-summary-tool/tool/src/java/org/sakaiproject/tool/summarycalendar/ui/EventSummary.java $ * $Id: EventSummary.java 105078 2012-02-24 23:00:38Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.tool.summarycalendar.ui; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.TimeZone; import javax.faces.convert.DateTimeConverter; import javax.print.attribute.standard.DateTimeAtCompleted; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; import org.joda.time.DateTimeComparator; import org.joda.time.DateTimeZone; import org.sakaiproject.component.cover.ComponentManager; import org.sakaiproject.entity.api.Reference; import org.sakaiproject.entity.api.ResourceProperties; import org.sakaiproject.time.api.Time; import org.sakaiproject.time.api.TimeRange; import org.sakaiproject.time.cover.TimeService; import org.sakaiproject.user.api.Preferences; import org.sakaiproject.user.api.PreferencesService; import org.sakaiproject.user.cover.UserDirectoryService; import org.sakaiproject.util.ResourceLoader; public class EventSummary implements Serializable { private static final long serialVersionUID = 4943854683550852507L; /** Resource bundle */ private transient ResourceLoader msgs = new ResourceLoader("calendar"); private final int MAX_TEXT_SIZE = 30; private String displayName = ""; private String type = ""; private String typeLocalized = ""; private String description = ""; private String date = ""; private String location = ""; private String site = ""; private String url = ""; private String calendarRef = ""; private String eventRef = ""; private String groups = ""; private boolean hasAttachments = false; private List attachments = new ArrayList(); private List attachmentsWrp = new ArrayList(); private static Log LOG = LogFactory.getLog(EventSummary.class); public String getDisplayName() { return displayName; } public String getTruncatedDisplayName() { return getTruncated(displayName); } public void setDisplayName(String displayName) { this.displayName = displayName; } public String getDate() { return date; } public void setDate(TimeRange range) { StringBuilder tmp = new StringBuilder(); Time firstTime = range.firstTime(); Time lastTime = range.lastTime(0); if(isSameDay(firstTime.getTime(), lastTime.getTime())) { tmp.append(getDateStr(firstTime)); tmp.append(" "); tmp.append(getTimeStr(firstTime)); if(!firstTime.equals(lastTime)) { tmp.append(" - "); tmp.append(getTimeStr(lastTime)); } } else { tmp.append(getDateStr(firstTime)); tmp.append(" "); tmp.append(getTimeStr(firstTime)); tmp.append(" - "); tmp.append(getDateStr(lastTime)); tmp.append(" "); tmp.append(getTimeStr(lastTime)); } this.date = tmp.toString(); } public String getDescription() { return description; } public String getTruncatedDescription() { return getTruncated(description); } public void setDescription(String description) { if(description != null) { this.description = description.trim(); }else{ this.description = null; } } public boolean getHasLocation() { return !location.equals(""); } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getSite() { return site; } public String getTruncatedSite() { return getTruncated(site); } public void setSite(String site) { this.site = site; } public String getType() { return type; } public void setType(String type) { this.type = type; } public void setTypeLocalized(String localizedEventType) { this.typeLocalized = localizedEventType; } public String getTypeLocalized() { return typeLocalized; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getGroups() { return groups; } public void setGroups(String groups) { this.groups = groups; } public boolean getShowGroups() { return !groups.equals(""); } private String getTruncated(String str) { if(str == null) return ""; if(str.length() < MAX_TEXT_SIZE) return str; return str.substring(0, MAX_TEXT_SIZE).concat("..."); } public String getCalendarRef() { return calendarRef; } public void setCalendarRef(String calendarRef) { this.calendarRef = calendarRef; } public String getEventRef() { return eventRef; } public void setEventRef(String eventRef) { this.eventRef = eventRef; } public List getAttachments() { return attachments; } public void setAttachments(List attachments) { setHasAttachments(attachments != null && attachments.size() > 0); this.attachmentsWrp = new ArrayList(); if(attachments == null){ this.attachments = new ArrayList(); return; } this.attachments = attachments; Iterator it = attachments.iterator(); while(it.hasNext()){ Reference ref = (Reference) it.next(); if(ref != null){ ResourceProperties resProp = ref.getProperties(); if(resProp != null) { String displayName = resProp.getProperty(ResourceProperties.PROP_DISPLAY_NAME); AttachmentWrapper aw = new AttachmentWrapper(); aw.setUrl(ref.getUrl()); aw.setDisplayName(displayName); attachmentsWrp.add(aw); } } } } public boolean getHasAttachments(){ return this.hasAttachments; } public void setHasAttachments(boolean hasAttachments){ this.hasAttachments = hasAttachments; } public List getAttachmentsWrapper() { return this.attachmentsWrp; } private boolean isSameDay(long startMs, long endMs) { Calendar s = Calendar.getInstance(); Calendar e = (Calendar) s.clone(); s.setTimeInMillis(startMs); e.setTimeInMillis(endMs); return (s.get(Calendar.ERA) == e.get(Calendar.ERA) && s.get(Calendar.YEAR) == e.get(Calendar.YEAR) && s.get(Calendar.DAY_OF_YEAR) == e.get(Calendar.DAY_OF_YEAR)); } private boolean isToday(long dateMs) { TimeZone timeZone = getCurrentUserTimezone(); DateTime thisDate = new DateTime(dateMs).withZone(DateTimeZone.forTimeZone(timeZone)); //Start of day at this local DateTime today = new DateTime().withTime(0, 0, 0, 0).withZone(DateTimeZone.forTimeZone(timeZone)); DateTimeComparator dtComp = DateTimeComparator.getDateOnlyInstance(); return (dtComp.compare(thisDate, today) == 0); } /** * Get the TimeZone for the current user * @return */ private TimeZone getCurrentUserTimezone() { TimeZone tz = TimeService.getLocalTimeZone(); LOG.debug("got tz " + tz.getDisplayName()); return tz; } private String getDateStr(Time time) { if(isToday(time.getTime())) return msgs.getString("today") + ","; else return time.toStringLocalDate(); } private String getTimeStr(Time time) { return time.toStringLocalTimeZ(); } }