Author: solomax Date: Mon Dec 22 12:19:39 2014 New Revision: 1647298 URL: http://svn.apache.org/r1647298 Log: [OPENMEETINGS-1126, OPENMEETINGS-1131, OPENMEETINGS-1139] LocalDateTime is used to create/update/display appointments, timezone issues should be fixed
Added: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/CalendarHelper.java Modified: openmeetings/branches/3.0.x/ivy.xml openmeetings/branches/3.0.x/ivysettings.xml openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java openmeetings/branches/3.0.x/src/main/webapp/css/theme.css openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java Modified: openmeetings/branches/3.0.x/ivy.xml URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/ivy.xml?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/ivy.xml (original) +++ openmeetings/branches/3.0.x/ivy.xml Mon Dec 22 12:19:39 2014 @@ -259,12 +259,13 @@ <dependency org="org.apache.wicket" name="wicket-native-websocket-tomcat" rev="6.18.0" conf="openmeetings->*" transitive="false"> <include type="jar" /> </dependency> - <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-core" rev="6.18.0" conf="openmeetings->*" transitive="false"/> - <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui" rev="6.18.0" conf="openmeetings->*" transitive="false"/> - <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-calendar" rev="6.18.0" conf="openmeetings->*" transitive="false"/> - <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-plugins" rev="6.18.0" conf="openmeetings->*" transitive="false"/> - <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui" rev="6.18.0" conf="openmeetings->*" transitive="false"/> - <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-theme-default" rev="6.18.0" conf="openmeetings->*" transitive="false"/> + <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-core" rev="6.18.1-20141222.092315-2" conf="openmeetings->*" transitive="false"/> + <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui" rev="6.18.1-20141222.092324-2" conf="openmeetings->*" transitive="false"/> + <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-calendar" rev="6.18.1-20141222.092622-2" conf="openmeetings->*" transitive="false"/> + <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-plugins" rev="6.18.1-20141222.092613-2" conf="openmeetings->*" transitive="false"/> + <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui" rev="6.18.1-20141222.092631-2" conf="openmeetings->*" transitive="false"/> + <dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-theme-default" rev="6.18.1-20141222.092718-2" conf="openmeetings->*" transitive="false"/> + <dependency org="org.threeten" name="threetenbp" rev="1.2" conf="openmeetings->*" transitive="false"/> <dependency org="ro.fortsoft.wicket.dashboard" name="wicket-dashboard-core" rev="0.12.0" conf="openmeetings->*" transitive="false"> <include type="jar" /> </dependency> Modified: openmeetings/branches/3.0.x/ivysettings.xml URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/ivysettings.xml?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/ivysettings.xml (original) +++ openmeetings/branches/3.0.x/ivysettings.xml Mon Dec 22 12:19:39 2014 @@ -38,9 +38,9 @@ <url name="smslib" m2compatible="true"> <artifact pattern="http://smslib.org/maven2/v3/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]" /> </url> - <!--url name="wicket-jquery-ui" m2compatible="true"> - <artifact pattern="https://oss.sonatype.org/content/repositories/snapshots/[organisation]/[artifact]/6.13.1-SNAPSHOT/[artifact]-[revision].[ext]" /> - </url--> + <url name="wicket-jquery-ui" m2compatible="true"> + <artifact pattern="https://oss.sonatype.org/content/repositories/snapshots/[organisation]/[artifact]/6.18.1-SNAPSHOT/[artifact]-[revision].[ext]" /> + </url> </chain> </resolvers> <triggers> Modified: openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java (original) +++ openmeetings/branches/3.0.x/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java Mon Dec 22 12:19:39 2014 @@ -237,26 +237,17 @@ public class AppointmentDao { } public List<Appointment> getAppointmentsByRange(Long userId, Date start, Date end) { - Calendar calstart = Calendar.getInstance(); - calstart.setTime(start); - calstart.set(Calendar.HOUR, 0); - - Calendar calend = Calendar.getInstance(); - calend.setTime(end); - calend.set(Calendar.HOUR, 23); - calend.set(Calendar.MINUTE, 59); - - log.debug("Start " + calstart.getTime() + " End " + calend.getTime()); + log.debug("Start " + start + " End " + end); TypedQuery<Appointment> query = em.createNamedQuery("appointmentsInRange", Appointment.class); - query.setParameter("starttime", calstart.getTime()); - query.setParameter("endtime", calend.getTime()); + query.setParameter("starttime", start); + query.setParameter("endtime", end); query.setParameter("userId", userId); List<Appointment> listAppoints = new ArrayList<Appointment>(query.getResultList()); TypedQuery<Appointment> q1 = em.createNamedQuery("joinedAppointmentsInRange", Appointment.class); - q1.setParameter("starttime", calstart.getTime()); - q1.setParameter("endtime", calend.getTime()); + q1.setParameter("starttime", start); + q1.setParameter("endtime", end); q1.setParameter("userId", userId); for (Appointment a : q1.getResultList()) { a.setConnectedEvent(true); //TODO need to be reviewed Modified: openmeetings/branches/3.0.x/src/main/webapp/css/theme.css URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/webapp/css/theme.css?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/main/webapp/css/theme.css (original) +++ openmeetings/branches/3.0.x/src/main/webapp/css/theme.css Mon Dec 22 12:19:39 2014 @@ -594,3 +594,6 @@ select.messages.selector { .user.info.panel fieldset table, .user.info.panel fieldset table textarea { width: 100%; } +.date.time.picker { + font-size: 12px; +} Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java (original) +++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java Mon Dec 22 12:19:39 2014 @@ -38,6 +38,7 @@ import org.apache.openmeetings.web.util. import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.AbstractAjaxTimerBehavior; +import org.apache.wicket.ajax.AjaxClientInfoBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; @@ -66,6 +67,7 @@ public class MainPage extends BaseInited public MainPage(PageParameters pp) { super(); + add(new AjaxClientInfoBehavior()); contents = new WebMarkupContainer("contents"); add(contents.add(new WebMarkupContainer(CHILD_ID)).setOutputMarkupId(true).setMarkupId("contents")); menu = new MenuPanel("menu"); Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html (original) +++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html Mon Dec 22 12:19:39 2014 @@ -29,11 +29,11 @@ </tr> <tr> <td><wicket:ommessage key="570" /></td> - <td><span wicket:id="start"></span></td> + <td><span class="date time picker" wicket:id="start"></span></td> </tr> <tr> <td><wicket:ommessage key="571" /></td> - <td><span wicket:id="end"></span></td> + <td><span class="date time picker" wicket:id="end"></span></td> </tr> <tr> <td><wicket:ommessage key="565" /></td> Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java (original) +++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java Mon Dec 22 12:19:39 2014 @@ -46,13 +46,13 @@ import org.apache.openmeetings.db.entity import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.pages.MainPage; import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior; +import org.apache.openmeetings.web.util.CalendarHelper; import org.apache.openmeetings.web.util.FormatHelper; import org.apache.openmeetings.web.util.RoomTypeDropDown; import org.apache.openmeetings.web.util.UserMultiChoice; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; import org.apache.wicket.behavior.AttributeAppender; -import org.apache.wicket.extensions.yui.calendar.DateTimeField; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; @@ -61,12 +61,14 @@ import org.apache.wicket.markup.html.for import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.FeedbackPanel; +import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.util.CollectionModel; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; +import org.threeten.bp.LocalDateTime; import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor; import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar; @@ -76,6 +78,7 @@ import com.googlecode.wicket.jquery.ui.w import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons; import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon; import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog; +import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker; public class AppointmentDialog extends AbstractFormDialog<Appointment> { private static final long serialVersionUID = 1L; @@ -98,22 +101,24 @@ public class AppointmentDialog extends A return 650; } - public void setModelObjectWithAjaxTarget(Appointment object, AjaxRequestTarget target) { - form.setModelObject(object); - form.setEnabled(isOwner(object)); - log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + object); - if (object.getId() != null) { - delete.setVisible(isOwner(object), target); - enterRoom.setVisible(object.getRoom() != null, target); + public void setModelObjectWithAjaxTarget(Appointment a, AjaxRequestTarget target) { + form.setModelObject(a); + form.start.setModelObject(CalendarHelper.getDate(a.getStart())); + form.end.setModelObject(CalendarHelper.getDate(a.getEnd())); + form.setEnabled(isOwner(a)); + log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + a); + if (a.getId() != null) { + delete.setVisible(isOwner(a), target); + enterRoom.setVisible(a.getRoom() != null, target); } else { delete.setVisible(false, target); enterRoom.setVisible(false, target); } - save.setVisible(isOwner(object), target); - super.setModelObject(object); + save.setVisible(isOwner(a), target); + super.setModelObject(a); } - public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, IModel<Appointment> model) { + public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, CompoundPropertyModel<Appointment> model) { super(id, title, model, true); log.debug(" -- AppointmentDialog -- Current model " + getModel().getObject()); this.calendarPanel = calendarPanel; @@ -207,6 +212,8 @@ public class AppointmentDialog extends A } } a.setMeetingMembers(attendees); + a.setStart(CalendarHelper.getDate(form.start.getModelObject())); + a.setEnd(CalendarHelper.getDate(form.end.getModelObject())); getBean(AppointmentDao.class).update(a, getUserId()); target.add(feedback); calendarPanel.refresh(target); @@ -219,8 +226,8 @@ public class AppointmentDialog extends A private class AppointmentForm extends Form<Appointment> { private static final long serialVersionUID = 1L; private boolean createRoom = true; - private final DateTimeField start; - private final DateTimeField end; + private DateTimePicker start = new DateTimePicker("start", Model.of(LocalDateTime.now()), "yyyy/MM/dd", "HH:mm:ss"); //FIXME use user locale + private DateTimePicker end = new DateTimePicker("end", Model.of(LocalDateTime.now()), "yyyy/MM/dd", "HH:mm:ss"); //FIXME use user locale private final PasswordTextField pwd = new PasswordTextField("password"); private final Label owner = new Label("aowner", Model.of("")); private final DropDownChoice<RoomType> roomType = new RoomTypeDropDown("room.roomtype"); @@ -274,7 +281,7 @@ public class AppointmentDialog extends A owner.setVisible(!isOwner(a)); } - public AppointmentForm(String id, IModel<Appointment> model) { + public AppointmentForm(String id, CompoundPropertyModel<Appointment> model) { super(id, model); setOutputMarkupId(true); add(new AttributeAppender("class", new Model<String>("appointmentPopUp"), " ")); @@ -285,8 +292,8 @@ public class AppointmentDialog extends A add(toolbar); add(new WysiwygEditor("description", toolbar)); add(new TextField<String>("location")); - add(start = new DateTimeField("start")); - add(end = new DateTimeField("end")); + add(start); + add(end); pwd.setEnabled(getModelObject().isPasswordProtected()); pwd.setOutputMarkupId(true); add(pwd); @@ -348,7 +355,7 @@ public class AppointmentDialog extends A @Override protected void onValidate() { - if (end.getConvertedInput().before(start.getConvertedInput())) { + if (end.getConvertedInput().isBefore(start.getConvertedInput())) { error(WebSession.getString(1592)); } } Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java (original) +++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java Mon Dec 22 12:19:39 2014 @@ -18,13 +18,15 @@ */ package org.apache.openmeetings.web.user.calendar; +import static org.apache.openmeetings.web.app.WebSession.getUserId; + import java.util.ArrayList; import java.util.List; import org.apache.openmeetings.db.dao.calendar.AppointmentDao; import org.apache.openmeetings.db.entity.calendar.Appointment; import org.apache.openmeetings.web.app.Application; -import org.apache.openmeetings.web.app.WebSession; +import org.apache.openmeetings.web.util.CalendarHelper; import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent; import com.googlecode.wicket.jquery.ui.calendar.CalendarModel; @@ -40,9 +42,8 @@ public class AppointmentModel extends Ca @Override protected List<? extends CalendarEvent> load() { List<CalendarEvent> list = new ArrayList<CalendarEvent>(); - for (Appointment a : Application.getBean(AppointmentDao.class).getAppointmentsByRange(WebSession.getUserId(), this.getStart(), this.getEnd())) { - CalendarEvent c = new OmCalendarEvent(a); - list.add(c); + for (Appointment a : Application.getBean(AppointmentDao.class).getAppointmentsByRange(getUserId(), CalendarHelper.getDate(getStart()), CalendarHelper.getDate(getEnd()))) { + list.add(new OmCalendarEvent(a)); } return list; } Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java (original) +++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java Mon Dec 22 12:19:39 2014 @@ -21,7 +21,6 @@ package org.apache.openmeetings.web.user import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CALENDAR_FIRST_DAY; import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.getBean; -import static org.apache.openmeetings.web.app.WebSession.getClientTimeZone; import static org.apache.openmeetings.web.app.WebSession.getUserId; import java.util.Date; @@ -33,6 +32,7 @@ import org.apache.openmeetings.db.dao.us import org.apache.openmeetings.db.entity.calendar.Appointment; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.UserPanel; +import org.apache.openmeetings.web.util.CalendarHelper; import org.apache.wicket.ajax.AbstractAjaxTimerBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.json.JSONArray; @@ -44,6 +44,9 @@ import org.apache.wicket.model.CompoundP import org.apache.wicket.util.time.Duration; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; +import org.threeten.bp.LocalDateTime; +import org.threeten.bp.ZonedDateTime; +import org.threeten.bp.temporal.ChronoUnit; import com.googlecode.wicket.jquery.core.Options; import com.googlecode.wicket.jquery.ui.calendar.Calendar; @@ -116,9 +119,9 @@ public class CalendarPanel extends UserP Options options = new Options(); options.set("header", "{left: 'prevYear,prev,next,nextYear today', center: 'title', right: 'month,agendaWeek,agendaDay'}"); options.set("allDaySlot", false); - options.set("axisFormat", "'HH(:mm)'"); + options.set("axisFormat", Options.asString("H(:mm)")); options.set("defaultEventMinutes", 60); - options.set("timeFormat", "{agenda: 'HH:mm{ - HH:mm}', '': 'HH(:mm)'}"); + options.set("timeFormat", Options.asString("H(:mm)")); options.set("buttonText", "{month: '" + WebSession.getString(801) + "', week: '" + WebSession.getString(800) + @@ -188,24 +191,16 @@ public class CalendarPanel extends UserP //no need to override onDayClick @Override - public void onSelect(AjaxRequestTarget target, CalendarView view, Date start, Date end, boolean allDay) { - java.util.Calendar cStart = java.util.Calendar.getInstance(getClientTimeZone()); - cStart.setTime(start); - target.appendJavaScript(String.format("setDatepickerDate('datepicker', new Date(%s,%s,%s));", cStart.get(java.util.Calendar.YEAR), cStart.get(java.util.Calendar.MONTH), cStart.get(java.util.Calendar.DATE))); + public void onSelect(AjaxRequestTarget target, CalendarView view, LocalDateTime start, LocalDateTime end, boolean allDay) { Appointment a = getDefault(); - if (CalendarView.month == view && start.equals(end)) { - java.util.Calendar cNow = java.util.Calendar.getInstance(getClientTimeZone()); - cStart.set(java.util.Calendar.HOUR_OF_DAY, cNow.get(java.util.Calendar.HOUR_OF_DAY)); - cStart.set(java.util.Calendar.MINUTE, cNow.get(java.util.Calendar.MINUTE)); - cStart.set(java.util.Calendar.SECOND, 0); - cStart.set(java.util.Calendar.MILLISECOND, 0); - a.setStart(cStart.getTime()); - cStart.add(java.util.Calendar.HOUR_OF_DAY, 1); - a.setEnd(cStart.getTime()); - } else { - a.setStart(start); - a.setEnd(end); + LocalDateTime s = start, e = end; + if (CalendarView.month == view) { + LocalDateTime now = ZonedDateTime.now(CalendarHelper.getZoneId()).toLocalDateTime(); + s = start.withHour(now.getHour()).withMinute(now.getMinute()); + e = s.plus(1, ChronoUnit.HOURS); } + a.setStart(CalendarHelper.getDate(s)); + a.setEnd(CalendarHelper.getDate(e)); dialog.setModelObjectWithAjaxTarget(a, target); dialog.open(target); Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java?rev=1647298&r1=1647297&r2=1647298&view=diff ============================================================================== --- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java (original) +++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java Mon Dec 22 12:19:39 2014 @@ -18,40 +18,19 @@ */ package org.apache.openmeetings.web.user.calendar; -import static org.apache.openmeetings.web.app.WebSession.ISO8601_FORMAT_STRING; -import static org.apache.openmeetings.web.app.WebSession.getCalendar; -import static org.apache.openmeetings.web.app.WebSession.getUserTimeZone; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; - import org.apache.openmeetings.db.entity.calendar.Appointment; +import org.apache.openmeetings.web.util.CalendarHelper; -import com.googlecode.wicket.jquery.core.Options; import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent; public class OmCalendarEvent extends CalendarEvent { private static final long serialVersionUID = 1L; - private final DateFormat ISO8601; public OmCalendarEvent(Appointment a) { - super(a.getId().intValue(), a.getTitle(), a.getStart(), a.getEnd()); + super(a.getId().intValue(), a.getTitle(), null); + setStart(CalendarHelper.getDate(a.getStart())); + setEnd(CalendarHelper.getDate(a.getEnd())); setEditable(AppointmentDialog.isOwner(a)); setAllDay(false); - ISO8601 = new SimpleDateFormat(ISO8601_FORMAT_STRING); - ISO8601.setCalendar(getCalendar()); - ISO8601.setTimeZone(getUserTimeZone()); - } - - @Override - protected Options createOptions() { - Options o = super.createOptions(); - if (getStart() != null) { - o.set("start", "\"" + ISO8601.format(getStart()) + "\""); - } - if (getEnd() != null) { - o.set("end", "\"" + ISO8601.format(getEnd()) + "\""); - } - return o; } } Added: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/CalendarHelper.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/CalendarHelper.java?rev=1647298&view=auto ============================================================================== --- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/CalendarHelper.java (added) +++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/CalendarHelper.java Mon Dec 22 12:19:39 2014 @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache 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.apache.org/licenses/LICENSE-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.apache.openmeetings.web.util; + +import static org.apache.openmeetings.web.app.WebSession.getUserTimeZone; + +import java.util.Date; + +import org.threeten.bp.Instant; +import org.threeten.bp.LocalDate; +import org.threeten.bp.LocalDateTime; +import org.threeten.bp.ZoneId; + +public class CalendarHelper { + public static ZoneId getZoneId() { + return ZoneId.of(getUserTimeZone().getID()); + } + + public static Date getDate(LocalDate d) { + return getDate(d.atStartOfDay()); + } + + public static Date getDate(LocalDateTime d) { + return new Date(d.atZone(getZoneId()).toInstant().toEpochMilli()); + } + + public static LocalDateTime getDate(Date d) { + return Instant.ofEpochMilli(d.getTime()).atZone(ZoneId.of(getUserTimeZone().getID())).toLocalDateTime(); + } +}