You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2014/12/22 13:19:39 UTC

svn commit: r1647298 - in /openmeetings/branches/3.0.x: ./ src/db/java/org/apache/openmeetings/db/dao/calendar/ src/main/webapp/css/ src/web/java/org/apache/openmeetings/web/pages/ src/web/java/org/apache/openmeetings/web/user/calendar/ src/web/java/or...

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();
+	}
+}