Author: solomax
Date: Fri Jan 20 03:01:21 2017
New Revision: 1779552

URL: http://svn.apache.org/viewvc?rev=1779552&view=rev
Log:
[OPENMEETINGS-1533] appointment can be created

Added:
    
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
    
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
Modified:
    
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
    
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
    
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
    
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
    
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
    
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
    
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
    
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
    
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
    
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
    
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
    
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
    
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
    
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
    
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
    
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
    
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
    
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
 Fri Jan 20 03:01:21 2017
@@ -100,7 +100,7 @@ public class AppointmentDTO implements S
                a.setStart(start.getTime());
                a.setEnd(end.getTime());
                a.setDescription(description);
-               a.setOwner(owner.get(userDao));
+               a.setOwner(owner == null ? null : owner.get(userDao));
                a.setInserted(inserted);
                a.setUpdated(updated);
                a.setDeleted(deleted);

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
 Fri Jan 20 03:01:21 2017
@@ -68,7 +68,8 @@ public class MeetingMemberDTO implements
 
        public static MeetingMemberDTO get(JSONObject o) {
                MeetingMemberDTO m = new MeetingMemberDTO();
-               m.id = o.optLong("id");
+               long id = o.optLong("id");
+               m.id = id == 0 ? null : id;
                m.user = UserDTO.get(o.optJSONObject("user"));
                return m;
        }

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 Fri Jan 20 03:01:21 2017
@@ -19,7 +19,6 @@
 package org.apache.openmeetings.db.dto.room;
 
 import static org.apache.openmeetings.db.dto.room.RoomOptionsDTO.optInt;
-import static org.apache.openmeetings.db.dto.room.RoomOptionsDTO.optLong;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -346,8 +345,12 @@ public class RoomDTO implements Serializ
        }
 
        public static RoomDTO get(JSONObject o) {
+               if (o == null) {
+                       return null;
+               }
                RoomDTO r = new RoomDTO();
-               r.id = optLong(o, "id");
+               long id = o.optLong("id");
+               r.id = id == 0 ? null : id;
                r.name = o.optString("name");
                r.comment = o.optString("comment");
                r.type = Room.Type.valueOf(o.getString("type"));

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
 Fri Jan 20 03:01:21 2017
@@ -187,8 +187,12 @@ public class UserDTO implements Serializ
        }
 
        public static UserDTO get(JSONObject o) {
+               if (o == null) {
+                       return null;
+               }
                UserDTO u = new UserDTO();
-               u.id = o.optLong("id");
+               long id = o.optLong("id");
+               u.id = id == 0 ? null : id;
                u.login = o.optString("login");
                u.password = o.optString("password");
                u.firstname = o.optString("firstname");

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
 Fri Jan 20 03:01:21 2017
@@ -18,8 +18,11 @@
  */
 package org.apache.openmeetings.test.webservice;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.Date;
 import java.util.UUID;
 
@@ -31,6 +34,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.webservice.util.DateParamConverter;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -65,4 +69,12 @@ public class TestCalendarService extends
        public void testGetByPublicRoom() throws Exception {
                actualTest(roomDao.get(5L)); //default public restricted room
        }
+
+       @Test
+       public void testDateConverter() throws Exception {
+               assertEquals("Null date should be parsed", null, 
DateParamConverter.get(null));
+               assertEquals("Date should be parsed"
+                               , Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant())
+                               , DateParamConverter.get("2017-01-15"));
+       }
 }

Added: 
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java?rev=1779552&view=auto
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
 (added)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
 Fri Jan 20 03:01:21 2017
@@ -0,0 +1,60 @@
+/*
+ * 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.test.webservice;
+
+import static org.junit.Assert.assertEquals;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.webservice.util.CalendarParamConverter;
+import org.apache.openmeetings.webservice.util.DateParamConverter;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.junit.Test;
+
+public class TestWebConverters {
+       @Test
+       public void testDateConverter() throws Exception {
+               assertEquals("Null date should be parsed", null, 
DateParamConverter.get(null));
+               assertEquals("Date should be parsed"
+                               , Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant())
+                               , DateParamConverter.get("2017-01-15"));
+               assertEquals("Date should be parsed"
+                               , Date.from(ZonedDateTime.of(2017, 01, 20, 20, 
30, 03, 0, ZoneId.of("Europe/Moscow")).toInstant())
+                               , 
DateParamConverter.get("2017-01-20T20:30:03+0300"));
+       }
+
+       @Test
+       public void testCalendarConverter() throws Exception {
+               CalendarParamConverter c = new CalendarParamConverter();
+               assertEquals("Null calendar should be parsed", null, 
c.fromString(null));
+               Calendar cal = Calendar.getInstance();
+               cal.setTime(Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant()));
+               assertEquals("Calendar should be parsed", cal, 
c.fromString("2017-01-15"));
+       }
+
+       @Test
+       public void testUserConverter() throws Exception {
+               assertEquals("Null UserDTO should be parsed", null, 
UserDTO.get((JSONObject)null));
+       }
+}

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -35,15 +35,17 @@ public class AppointmentParamConverter i
        public AppointmentDTO fromString(String val) {
                JSONObject o = new JSONObject(val);
                AppointmentDTO a = new AppointmentDTO();
-               a.setId(o.optLong("id"));
+               long id = o.optLong("id");
+               a.setId(id == 0 ? null : id);
                a.setTitle(o.optString("title"));
                a.setLocation(o.optString("location"));
                a.setOwner(UserDTO.get(o.optJSONObject("owner")));
-               a.setStart(CalendarParamConverter.get(o.optString("start"), 
a.getOwner().getTimeZoneId()));
-               a.setEnd(CalendarParamConverter.get(o.optString("end"), 
a.getOwner().getTimeZoneId()));
+               String tzId = a.getOwner() == null ? null : 
a.getOwner().getTimeZoneId();
+               a.setStart(CalendarParamConverter.get(o.optString("start"), 
tzId));
+               a.setEnd(CalendarParamConverter.get(o.optString("end"), tzId));
                a.setDescription(o.optString("description"));
                a.setInserted(DateParamConverter.get(o.optString("inserted")));
-               a.setInserted(DateParamConverter.get(o.optString("updated")));
+               a.setUpdated(DateParamConverter.get(o.optString("updated")));
                a.setDeleted(o.optBoolean("inserted"));
                a.setReminder(Reminder.valueOf(o.optString("reminder")));
                a.setRoom(RoomDTO.get(o.optJSONObject("room")));

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -25,15 +25,20 @@ import java.util.TimeZone;
 
 import javax.ws.rs.ext.ParamConverter;
 
+import org.apache.wicket.util.string.Strings;
+
 public class CalendarParamConverter implements ParamConverter<Calendar> {
        public static Calendar get(String val, String tzId) {
-               Calendar c = Calendar.getInstance(TimeZone.getTimeZone(tzId));
+               Calendar c = Strings.isEmpty(tzId) ? Calendar.getInstance() : 
Calendar.getInstance(TimeZone.getTimeZone(tzId));
                c.setTime(DateParamConverter.get(val));
                return c;
        }
 
        @Override
        public Calendar fromString(String val) {
+               if (Strings.isEmpty(val)) {
+                       return null;
+               }
                Calendar c = Calendar.getInstance();
                c.setTime(DateParamConverter.get(val));
                return c;

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -28,11 +28,15 @@ import java.util.Date;
 import javax.ws.rs.ext.ParamConverter;
 
 import org.apache.commons.lang3.time.FastDateFormat;
+import org.apache.wicket.util.string.Strings;
 
 public class DateParamConverter implements ParamConverter<Date> {
        private final static FastDateFormat[] formats = new FastDateFormat[] { 
ISO8601_FULL_FORMAT, ISO8601_DATETIME_FORMAT, ISO8601_DATE_FORMAT };
 
-       static Date get(String val) {
+       public static Date get(String val) {
+               if (Strings.isEmpty(val)) {
+                       return null;
+               }
                for (FastDateFormat df : formats) {
                        try {
                                return df.parse(val);
@@ -40,7 +44,7 @@ public class DateParamConverter implemen
                                // no-op
                        }
                }
-               throw new IllegalArgumentException("Unparsable format");
+               throw new IllegalArgumentException("Unparsable format: " + val);
        }
 
        @Override

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
 Fri Jan 20 03:01:21 2017
@@ -38,7 +38,7 @@ public class OmParamConverterProvider im
                } else if (Date.class.isAssignableFrom(rawType)) {
                        return (ParamConverter<T>)new DateParamConverter();
                } else if (AppointmentDTO.class.isAssignableFrom(rawType)) {
-                       return (ParamConverter<T>)new DateParamConverter();
+                       return (ParamConverter<T>)new 
AppointmentParamConverter();
                }
                return null;
        }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
 Fri Jan 20 03:01:21 2017
@@ -100,7 +100,7 @@ public class AppointmentDTO implements S
                a.setStart(start.getTime());
                a.setEnd(end.getTime());
                a.setDescription(description);
-               a.setOwner(owner.get(userDao));
+               a.setOwner(owner == null ? null : owner.get(userDao));
                a.setInserted(inserted);
                a.setUpdated(updated);
                a.setDeleted(deleted);

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
 Fri Jan 20 03:01:21 2017
@@ -68,7 +68,8 @@ public class MeetingMemberDTO implements
 
        public static MeetingMemberDTO get(JSONObject o) {
                MeetingMemberDTO m = new MeetingMemberDTO();
-               m.id = o.optLong("id");
+               long id = o.optLong("id");
+               m.id = id == 0 ? null : id;
                m.user = UserDTO.get(o.optJSONObject("user"));
                return m;
        }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 Fri Jan 20 03:01:21 2017
@@ -284,8 +284,12 @@ public class RoomDTO implements Serializ
        }
 
        public static RoomDTO get(JSONObject o) {
+               if (o == null) {
+                       return null;
+               }
                RoomDTO r = new RoomDTO();
-               r.id = optLong(o, "id");
+               long id = o.optLong("id");
+               r.id = id == 0 ? null : id;
                r.name = o.optString("name");
                r.comment = o.optString("comment");
                r.type = Room.Type.valueOf(o.getString("type"));

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
 Fri Jan 20 03:01:21 2017
@@ -187,8 +187,12 @@ public class UserDTO implements Serializ
        }
 
        public static UserDTO get(JSONObject o) {
+               if (o == null) {
+                       return null;
+               }
                UserDTO u = new UserDTO();
-               u.id = o.optLong("id");
+               long id = o.optLong("id");
+               u.id = id == 0 ? null : id;
                u.login = o.optString("login");
                u.password = o.optString("password");
                u.firstname = o.optString("firstname");

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
 Fri Jan 20 03:01:21 2017
@@ -18,8 +18,11 @@
  */
 package org.apache.openmeetings.test.webservice;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.Date;
 import java.util.UUID;
 
@@ -31,6 +34,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.webservice.util.DateParamConverter;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -65,4 +69,12 @@ public class TestCalendarService extends
        public void testGetByPublicRoom() throws Exception {
                actualTest(roomDao.get(5L)); //default public restricted room
        }
+
+       @Test
+       public void testDateConverter() throws Exception {
+               assertEquals("Null date should be parsed", null, 
DateParamConverter.get(null));
+               assertEquals("Date should be parsed"
+                               , Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant())
+                               , DateParamConverter.get("2017-01-15"));
+       }
 }

Added: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java?rev=1779552&view=auto
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
 (added)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
 Fri Jan 20 03:01:21 2017
@@ -0,0 +1,60 @@
+/*
+ * 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.test.webservice;
+
+import static org.junit.Assert.assertEquals;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.webservice.util.CalendarParamConverter;
+import org.apache.openmeetings.webservice.util.DateParamConverter;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.junit.Test;
+
+public class TestWebConverters {
+       @Test
+       public void testDateConverter() throws Exception {
+               assertEquals("Null date should be parsed", null, 
DateParamConverter.get(null));
+               assertEquals("Date should be parsed"
+                               , Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant())
+                               , DateParamConverter.get("2017-01-15"));
+               assertEquals("Date should be parsed"
+                               , Date.from(ZonedDateTime.of(2017, 01, 20, 20, 
30, 03, 0, ZoneId.of("Europe/Moscow")).toInstant())
+                               , 
DateParamConverter.get("2017-01-20T20:30:03+0300"));
+       }
+
+       @Test
+       public void testCalendarConverter() throws Exception {
+               CalendarParamConverter c = new CalendarParamConverter();
+               assertEquals("Null calendar should be parsed", null, 
c.fromString(null));
+               Calendar cal = Calendar.getInstance();
+               cal.setTime(Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant()));
+               assertEquals("Calendar should be parsed", cal, 
c.fromString("2017-01-15"));
+       }
+
+       @Test
+       public void testUserConverter() throws Exception {
+               assertEquals("Null UserDTO should be parsed", null, 
UserDTO.get((JSONObject)null));
+       }
+}

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -35,15 +35,17 @@ public class AppointmentParamConverter i
        public AppointmentDTO fromString(String val) {
                JSONObject o = new JSONObject(val);
                AppointmentDTO a = new AppointmentDTO();
-               a.setId(o.optLong("id"));
+               long id = o.optLong("id");
+               a.setId(id == 0 ? null : id);
                a.setTitle(o.optString("title"));
                a.setLocation(o.optString("location"));
                a.setOwner(UserDTO.get(o.optJSONObject("owner")));
-               a.setStart(CalendarParamConverter.get(o.optString("start"), 
a.getOwner().getTimeZoneId()));
-               a.setEnd(CalendarParamConverter.get(o.optString("end"), 
a.getOwner().getTimeZoneId()));
+               String tzId = a.getOwner() == null ? null : 
a.getOwner().getTimeZoneId();
+               a.setStart(CalendarParamConverter.get(o.optString("start"), 
tzId));
+               a.setEnd(CalendarParamConverter.get(o.optString("end"), tzId));
                a.setDescription(o.optString("description"));
                a.setInserted(DateParamConverter.get(o.optString("inserted")));
-               a.setInserted(DateParamConverter.get(o.optString("updated")));
+               a.setUpdated(DateParamConverter.get(o.optString("updated")));
                a.setDeleted(o.optBoolean("inserted"));
                a.setReminder(Reminder.valueOf(o.optString("reminder")));
                a.setRoom(RoomDTO.get(o.optJSONObject("room")));

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -25,15 +25,20 @@ import java.util.TimeZone;
 
 import javax.ws.rs.ext.ParamConverter;
 
+import org.apache.wicket.util.string.Strings;
+
 public class CalendarParamConverter implements ParamConverter<Calendar> {
        public static Calendar get(String val, String tzId) {
-               Calendar c = Calendar.getInstance(TimeZone.getTimeZone(tzId));
+               Calendar c = Strings.isEmpty(tzId) ? Calendar.getInstance() : 
Calendar.getInstance(TimeZone.getTimeZone(tzId));
                c.setTime(DateParamConverter.get(val));
                return c;
        }
 
        @Override
        public Calendar fromString(String val) {
+               if (Strings.isEmpty(val)) {
+                       return null;
+               }
                Calendar c = Calendar.getInstance();
                c.setTime(DateParamConverter.get(val));
                return c;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -28,11 +28,15 @@ import java.util.Date;
 import javax.ws.rs.ext.ParamConverter;
 
 import org.apache.commons.lang3.time.FastDateFormat;
+import org.apache.wicket.util.string.Strings;
 
 public class DateParamConverter implements ParamConverter<Date> {
        private final static FastDateFormat[] formats = new FastDateFormat[] { 
ISO8601_FULL_FORMAT, ISO8601_DATETIME_FORMAT, ISO8601_DATE_FORMAT };
 
-       static Date get(String val) {
+       public static Date get(String val) {
+               if (Strings.isEmpty(val)) {
+                       return null;
+               }
                for (FastDateFormat df : formats) {
                        try {
                                return df.parse(val);
@@ -40,7 +44,7 @@ public class DateParamConverter implemen
                                // no-op
                        }
                }
-               throw new IllegalArgumentException("Unparsable format");
+               throw new IllegalArgumentException("Unparsable format: " + val);
        }
 
        @Override

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
 Fri Jan 20 03:01:21 2017
@@ -38,7 +38,7 @@ public class OmParamConverterProvider im
                } else if (Date.class.isAssignableFrom(rawType)) {
                        return (ParamConverter<T>)new DateParamConverter();
                } else if (AppointmentDTO.class.isAssignableFrom(rawType)) {
-                       return (ParamConverter<T>)new DateParamConverter();
+                       return (ParamConverter<T>)new 
AppointmentParamConverter();
                }
                return null;
        }

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
 Fri Jan 20 03:01:21 2017
@@ -100,7 +100,7 @@ public class AppointmentDTO implements S
                a.setStart(start.getTime());
                a.setEnd(end.getTime());
                a.setDescription(description);
-               a.setOwner(owner.get(userDao));
+               a.setOwner(owner == null ? null : owner.get(userDao));
                a.setInserted(inserted);
                a.setUpdated(updated);
                a.setDeleted(deleted);

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
 Fri Jan 20 03:01:21 2017
@@ -68,7 +68,8 @@ public class MeetingMemberDTO implements
 
        public static MeetingMemberDTO get(JSONObject o) {
                MeetingMemberDTO m = new MeetingMemberDTO();
-               m.id = o.optLong("id");
+               long id = o.optLong("id");
+               m.id = id == 0 ? null : id;
                m.user = UserDTO.get(o.optJSONObject("user"));
                return m;
        }

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 Fri Jan 20 03:01:21 2017
@@ -284,8 +284,12 @@ public class RoomDTO implements Serializ
        }
 
        public static RoomDTO get(JSONObject o) {
+               if (o == null) {
+                       return null;
+               }
                RoomDTO r = new RoomDTO();
-               r.id = optLong(o, "id");
+               long id = o.optLong("id");
+               r.id = id == 0 ? null : id;
                r.name = o.optString("name");
                r.comment = o.optString("comment");
                r.type = Room.Type.valueOf(o.getString("type"));

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/user/UserDTO.java
 Fri Jan 20 03:01:21 2017
@@ -187,8 +187,12 @@ public class UserDTO implements Serializ
        }
 
        public static UserDTO get(JSONObject o) {
+               if (o == null) {
+                       return null;
+               }
                UserDTO u = new UserDTO();
-               u.id = o.optLong("id");
+               long id = o.optLong("id");
+               u.id = id == 0 ? null : id;
                u.login = o.optString("login");
                u.password = o.optString("password");
                u.firstname = o.optString("firstname");

Modified: 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestCalendarService.java
 Fri Jan 20 03:01:21 2017
@@ -18,8 +18,11 @@
  */
 package org.apache.openmeetings.test.webservice;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.Date;
 import java.util.UUID;
 
@@ -31,6 +34,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.webservice.util.DateParamConverter;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -65,4 +69,12 @@ public class TestCalendarService extends
        public void testGetByPublicRoom() throws Exception {
                actualTest(roomDao.get(5L)); //default public restricted room
        }
+
+       @Test
+       public void testDateConverter() throws Exception {
+               assertEquals("Null date should be parsed", null, 
DateParamConverter.get(null));
+               assertEquals("Date should be parsed"
+                               , Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant())
+                               , DateParamConverter.get("2017-01-15"));
+       }
 }

Added: 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java?rev=1779552&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/TestWebConverters.java
 Fri Jan 20 03:01:21 2017
@@ -0,0 +1,60 @@
+/*
+ * 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.test.webservice;
+
+import static org.junit.Assert.assertEquals;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.webservice.util.CalendarParamConverter;
+import org.apache.openmeetings.webservice.util.DateParamConverter;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.junit.Test;
+
+public class TestWebConverters {
+       @Test
+       public void testDateConverter() throws Exception {
+               assertEquals("Null date should be parsed", null, 
DateParamConverter.get(null));
+               assertEquals("Date should be parsed"
+                               , Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant())
+                               , DateParamConverter.get("2017-01-15"));
+               assertEquals("Date should be parsed"
+                               , Date.from(ZonedDateTime.of(2017, 01, 20, 20, 
30, 03, 0, ZoneId.of("Europe/Moscow")).toInstant())
+                               , 
DateParamConverter.get("2017-01-20T20:30:03+0300"));
+       }
+
+       @Test
+       public void testCalendarConverter() throws Exception {
+               CalendarParamConverter c = new CalendarParamConverter();
+               assertEquals("Null calendar should be parsed", null, 
c.fromString(null));
+               Calendar cal = Calendar.getInstance();
+               cal.setTime(Date.from(LocalDate.of(2017, 01, 
15).atStartOfDay(ZoneId.systemDefault()).toInstant()));
+               assertEquals("Calendar should be parsed", cal, 
c.fromString("2017-01-15"));
+       }
+
+       @Test
+       public void testUserConverter() throws Exception {
+               assertEquals("Null UserDTO should be parsed", null, 
UserDTO.get((JSONObject)null));
+       }
+}

Modified: 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/AppointmentParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -35,15 +35,17 @@ public class AppointmentParamConverter i
        public AppointmentDTO fromString(String val) {
                JSONObject o = new JSONObject(val);
                AppointmentDTO a = new AppointmentDTO();
-               a.setId(o.optLong("id"));
+               long id = o.optLong("id");
+               a.setId(id == 0 ? null : id);
                a.setTitle(o.optString("title"));
                a.setLocation(o.optString("location"));
                a.setOwner(UserDTO.get(o.optJSONObject("owner")));
-               a.setStart(CalendarParamConverter.get(o.optString("start"), 
a.getOwner().getTimeZoneId()));
-               a.setEnd(CalendarParamConverter.get(o.optString("end"), 
a.getOwner().getTimeZoneId()));
+               String tzId = a.getOwner() == null ? null : 
a.getOwner().getTimeZoneId();
+               a.setStart(CalendarParamConverter.get(o.optString("start"), 
tzId));
+               a.setEnd(CalendarParamConverter.get(o.optString("end"), tzId));
                a.setDescription(o.optString("description"));
                a.setInserted(DateParamConverter.get(o.optString("inserted")));
-               a.setInserted(DateParamConverter.get(o.optString("updated")));
+               a.setUpdated(DateParamConverter.get(o.optString("updated")));
                a.setDeleted(o.optBoolean("inserted"));
                a.setReminder(Reminder.valueOf(o.optString("reminder")));
                a.setRoom(RoomDTO.get(o.optJSONObject("room")));

Modified: 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/CalendarParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -25,15 +25,20 @@ import java.util.TimeZone;
 
 import javax.ws.rs.ext.ParamConverter;
 
+import org.apache.wicket.util.string.Strings;
+
 public class CalendarParamConverter implements ParamConverter<Calendar> {
        public static Calendar get(String val, String tzId) {
-               Calendar c = Calendar.getInstance(TimeZone.getTimeZone(tzId));
+               Calendar c = Strings.isEmpty(tzId) ? Calendar.getInstance() : 
Calendar.getInstance(TimeZone.getTimeZone(tzId));
                c.setTime(DateParamConverter.get(val));
                return c;
        }
 
        @Override
        public Calendar fromString(String val) {
+               if (Strings.isEmpty(val)) {
+                       return null;
+               }
                Calendar c = Calendar.getInstance();
                c.setTime(DateParamConverter.get(val));
                return c;

Modified: 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/DateParamConverter.java
 Fri Jan 20 03:01:21 2017
@@ -28,11 +28,15 @@ import java.util.Date;
 import javax.ws.rs.ext.ParamConverter;
 
 import org.apache.commons.lang3.time.FastDateFormat;
+import org.apache.wicket.util.string.Strings;
 
 public class DateParamConverter implements ParamConverter<Date> {
        private final static FastDateFormat[] formats = new FastDateFormat[] { 
ISO8601_FULL_FORMAT, ISO8601_DATETIME_FORMAT, ISO8601_DATE_FORMAT };
 
-       static Date get(String val) {
+       public static Date get(String val) {
+               if (Strings.isEmpty(val)) {
+                       return null;
+               }
                for (FastDateFormat df : formats) {
                        try {
                                return df.parse(val);
@@ -40,7 +44,7 @@ public class DateParamConverter implemen
                                // no-op
                        }
                }
-               throw new IllegalArgumentException("Unparsable format");
+               throw new IllegalArgumentException("Unparsable format: " + val);
        }
 
        @Override

Modified: 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java?rev=1779552&r1=1779551&r2=1779552&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmParamConverterProvider.java
 Fri Jan 20 03:01:21 2017
@@ -38,7 +38,7 @@ public class OmParamConverterProvider im
                } else if (Date.class.isAssignableFrom(rawType)) {
                        return (ParamConverter<T>)new DateParamConverter();
                } else if (AppointmentDTO.class.isAssignableFrom(rawType)) {
-                       return (ParamConverter<T>)new DateParamConverter();
+                       return (ParamConverter<T>)new 
AppointmentParamConverter();
                }
                return null;
        }


Reply via email to