Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
 Tue Oct  4 04:03:01 2016
@@ -25,25 +25,36 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
 import static org.apache.openmeetings.web.util.CalendarWebHelper.getZoneId;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
+import org.apache.commons.httpclient.HttpClient;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
+import org.apache.openmeetings.db.entity.calendar.OmCalendar;
+import org.apache.openmeetings.service.calendar.caldav.AppointmentManager;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.UserPanel;
 import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.json.JSONArray;
 import org.apache.wicket.ajax.json.JSONException;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.util.time.Duration;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -54,6 +65,8 @@ import org.threeten.bp.temporal.ChronoUn
 import com.googlecode.wicket.jquery.core.Options;
 import com.googlecode.wicket.jquery.ui.calendar.Calendar;
 import com.googlecode.wicket.jquery.ui.calendar.CalendarView;
+import com.googlecode.wicket.jquery.ui.calendar.EventSource.GoogleCalendar;
+import com.googlecode.wicket.jquery.ui.form.button.Button;
 
 public class CalendarPanel extends UserPanel {
        private static final Logger log = 
Red5LoggerFactory.getLogger(CalendarPanel.class, webAppRootKey);
@@ -69,11 +82,29 @@ public class CalendarPanel extends UserP
                        refresh(target);
                }
        };
+       private AbstractAjaxTimerBehavior syncTimer = new 
AbstractAjaxTimerBehavior(Duration.minutes(4)) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               protected void onTimer(AjaxRequestTarget target) {
+                       log.debug("CalDAV Syncing has begun");
+                       syncCalendar(target);
+               }
+       };
        private Calendar calendar;
+       private final CalendarDialog calendarDialog;
+       private AppointmentDialog dialog;
+       private final WebMarkupContainer calendarListContainer;
+       private transient HttpClient client = null; // Non-Serializable 
HttpClient.
 
        @Override
        public void cleanup(IPartialPageRequestHandler handler) {
                refreshTimer.stop(handler);
+               syncTimer.stop(handler);
+               if (client != null) {
+                       getAppointmentManager().cleanupIdleConnections();
+                       client.getState().clear();
+               }
        }
 
        private static AppointmentDao getDao() {
@@ -84,10 +115,15 @@ public class CalendarPanel extends UserP
                calendar.refresh(handler);
        }
 
+       //Reloads the Calendar List on Appointment Dialog and the list of 
Calendars
+       public void refreshCalendars(IPartialPageRequestHandler handler) {
+               handler.add(dialog, calendarListContainer);
+       }
+
        Calendar getCalendar() {
                return calendar;
        }
-       
+
        @Override
        public void renderHead(IHeaderResponse response) {
                super.renderHead(response);
@@ -103,14 +139,14 @@ public class CalendarPanel extends UserP
 
        public CalendarPanel(String id) {
                super(id);
-               
+
                final Form<Date> form = new Form<Date>("form");
                add(form);
-               
-               final AppointmentDialog dialog = new 
AppointmentDialog("appointment", Application.getString(815)
+
+               dialog = new AppointmentDialog("appointment", 
Application.getString(815)
                                , this, new 
CompoundPropertyModel<Appointment>(getDefault()));
                add(dialog);
-               
+
                boolean isRtl = isRtl();
                javaScriptAddDatepicker = String.format("addCalButton(%s, 
'datepicker');", isRtl);
                Options options = new Options();
@@ -152,43 +188,42 @@ public class CalendarPanel extends UserP
                options.set("dayNames", days.toString());
                options.set("dayNamesShort", shortDays.toString());
                options.set("firstDay", 
getBean(ConfigurationDao.class).getConfValue(CONFIG_CALENDAR_FIRST_DAY, 
String.class, "0"));
-               
+
                calendar = new Calendar("calendar", new AppointmentModel(), 
options) {
                        private static final long serialVersionUID = 1L;
-                       
+
                        @Override
                        protected void onInitialize() {
                                super.onInitialize();
                                add(new 
CalendarFunctionsBehavior(getMarkupId()));
                        }
-                       
+
                        @Override
                        public boolean isSelectable() {
                                return true;
                        }
-                       
+
                        @Override
                        public boolean isDayClickEnabled() {
                                return true;
                        }
-                       
+
                        @Override
                        public boolean isEventClickEnabled() {
                                return true;
                        }
-                       
+
                        @Override
                        public boolean isEventDropEnabled() {
                                return true;
                        }
-                       
+
                        @Override
                        public boolean isEventResizeEnabled() {
                                return true;
                        }
-                       
+
                        //no need to override onDayClick
-                       
                        @Override
                        public void onSelect(AjaxRequestTarget target, 
CalendarView view, LocalDateTime start, LocalDateTime end, boolean allDay) {
                                Appointment a = getDefault();
@@ -201,18 +236,18 @@ public class CalendarPanel extends UserP
                                a.setStart(getDate(s));
                                a.setEnd(getDate(e));
                                dialog.setModelObjectWithAjaxTarget(a, target);
-                               
+
                                dialog.open(target);
                        }
-                       
+
                        @Override
                        public void onEventClick(AjaxRequestTarget target, 
CalendarView view, int eventId) {
                                Appointment a = getDao().get((long)eventId);
                                dialog.setModelObjectWithAjaxTarget(a, target);
-                               
+
                                dialog.open(target);
                        }
-                       
+
                        @Override
                        public void onEventDrop(AjaxRequestTarget target, int 
eventId, long delta, boolean allDay) {
                                AppointmentDao dao = getDao();
@@ -225,12 +260,16 @@ public class CalendarPanel extends UserP
                                cal.setTime(a.getStart());
                                cal.add(java.util.Calendar.MILLISECOND, 
(int)delta); //FIXME?
                                a.setStart(cal.getTime());
-                               
+
                                cal.setTime(a.getEnd());
                                cal.add(java.util.Calendar.MILLISECOND, 
(int)delta); //FIXME?
                                a.setEnd(cal.getTime());
-                               
+
                                dao.update(a, getUserId());
+
+                               if (a.getCalendar() != null) {
+                                       updatedeleteAppointment(target, 
CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
+                               }
                                //FIXME add feedback info
                        }
 
@@ -245,16 +284,128 @@ public class CalendarPanel extends UserP
                                cal.setTime(a.getEnd());
                                cal.add(java.util.Calendar.MILLISECOND, 
(int)delta); //FIXME?
                                a.setEnd(cal.getTime());
-                               
+
                                dao.update(a, getUserId());
+
+                               if (a.getCalendar() != null) {
+                                       updatedeleteAppointment(target, 
CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
+                               }
                                //FIXME add feedback info
                        }
                };
-               
+
                form.add(calendar);
+
+               populateGoogleCalendars();
+
                add(refreshTimer);
+               add(syncTimer);
+
+               calendarDialog = new CalendarDialog("calendarDialog", 
Application.getString("calendar.dialogTitle"),
+                               this, new 
CompoundPropertyModel<OmCalendar>(getDefaultCalendar()));
+
+               add(calendarDialog);
+
+               calendarListContainer = new 
WebMarkupContainer("calendarListContainer");
+               calendarListContainer.setOutputMarkupId(true);
+               calendarListContainer.add(new ListView<OmCalendar>("items", new 
LoadableDetachableModel<List<OmCalendar>>() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected List<OmCalendar> load() {
+                               // TODO: better way to do this?
+                               AppointmentManager manager = 
getAppointmentManager();
+                               List<OmCalendar> cals = new 
ArrayList<OmCalendar>(manager.getCalendars(getUserId()));
+                               
cals.addAll(manager.getGoogleCalendars(getUserId()));
+                               return cals;
+                       }
+               }) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void populateItem(final ListItem<OmCalendar> 
item) {
+                               item.setOutputMarkupId(true);
+                               final OmCalendar calendar = 
item.getModelObject();
+                               item.add(new Button("item", new 
PropertyModel<String>(calendar, "title")).add(new AjaxEventBehavior("click") {
+                                       private static final long 
serialVersionUID = 1L;
+
+                                       @Override
+                                       protected void 
onEvent(AjaxRequestTarget target) {
+                                               calendarDialog.open(target, 
CalendarDialog.DIALOG_TYPE.UPDATE_CALENDAR, calendar);
+                                               target.add(calendarDialog);
+                                       }
+                               }));
+                       }
+               });
+
+               add(new Button("syncCalendarButton").add(new 
AjaxEventBehavior("click") {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onEvent(AjaxRequestTarget target) {
+                               syncCalendar(target);
+                       }
+               }));
+
+               add(new Button("submitCalendar").add(new 
AjaxEventBehavior("click") {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onEvent(AjaxRequestTarget target) {
+                               calendarDialog.open(target, 
CalendarDialog.DIALOG_TYPE.UPDATE_CALENDAR, getDefaultCalendar());
+                               target.add(calendarDialog);
+                       }
+               }));
+
+               add(calendarListContainer);
+       }
+
+       // Client creation here, because the client is not created until 
necessary
+       public HttpClient getHttpClient() {
+               if (client == null) {
+                       //Ensure there's always a client
+                       client = getAppointmentManager().createHttpClient();
+               }
+
+               return client;
+       }
+
+       //Adds a new Event Source to the Calendar
+       //TODO: The Ajax Refresh does not work.
+       public void populateGoogleCalendar(OmCalendar gcal, 
IPartialPageRequestHandler target) {
+               calendar.addSource(new GoogleCalendar(gcal.getHref(), 
gcal.getToken()));
+               refresh(target);
        }
-       
+
+       // Function which populates the already existing Google Calendars.
+       private void populateGoogleCalendars() {
+               AppointmentManager appointmentManager = getAppointmentManager();
+               List<OmCalendar> gcals = 
appointmentManager.getGoogleCalendars(getUserId());
+               for (OmCalendar gcal : gcals) {
+
+                       //Href has the Calendar ID and Token has the API Key.
+                       calendar.addSource(new GoogleCalendar(gcal.getHref(), 
gcal.getToken()));
+               }
+       }
+
+       private static OmCalendar getDefaultCalendar() {
+               OmCalendar calendar = new OmCalendar();
+               calendar.setDeleted(false);
+               calendar.setOwner(getBean(UserDao.class).get(getUserId()));
+               
calendar.setTitle(Application.getString("calendar.defaultTitle"));
+               return calendar;
+       }
+
+       //Function which delegates the syncing of the Calendar to CalendarDialog
+       public void syncCalendar(AjaxRequestTarget target) {
+               calendarDialog.open(target, 
CalendarDialog.DIALOG_TYPE.SYNC_CALENDAR, (OmCalendar) null);
+       }
+
+       //Function which delegates the update / deletion of appointment on the 
Calendar to CalendarDialog
+       public void updatedeleteAppointment(IPartialPageRequestHandler target, 
CalendarDialog.DIALOG_TYPE type, Appointment a) {
+               calendarDialog.open(target, type, a);
+       }
+
        private static Appointment getDefault() {
                Appointment a = new Appointment();
                a.setReminder(Reminder.ical); //TODO: Make configurable
@@ -263,4 +414,8 @@ public class CalendarPanel extends UserP
                log.debug(" -- getDefault -- Current model " + a);
                return a;
        }
+
+       public AppointmentManager getAppointmentManager() {
+               return getBean(AppointmentManager.class);
+       }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
 Tue Oct  4 04:03:01 2016
@@ -35,6 +35,7 @@
                <class>org.apache.openmeetings.db.entity.server.Server</class>
                
<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
                
<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+               
<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
                
<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
                <class>org.apache.openmeetings.db.entity.user.Group</class>
                <class>org.apache.openmeetings.db.entity.user.GroupUser</class>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
 Tue Oct  4 04:03:01 2016
@@ -35,6 +35,7 @@
                <class>org.apache.openmeetings.db.entity.server.Server</class>
                
<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
                
<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+               
<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
                
<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
                <class>org.apache.openmeetings.db.entity.user.Group</class>
                <class>org.apache.openmeetings.db.entity.user.GroupUser</class>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
 Tue Oct  4 04:03:01 2016
@@ -34,6 +34,7 @@
                <class>org.apache.openmeetings.db.entity.server.Server</class>
                
<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
                
<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+               
<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
                
<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
                <class>org.apache.openmeetings.db.entity.user.Group</class>
                <class>org.apache.openmeetings.db.entity.user.GroupUser</class>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
 Tue Oct  4 04:03:01 2016
@@ -35,6 +35,7 @@
                <class>org.apache.openmeetings.db.entity.server.Server</class>
                
<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
                
<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+               
<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
                
<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
                <class>org.apache.openmeetings.db.entity.user.Group</class>
                <class>org.apache.openmeetings.db.entity.user.GroupUser</class>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
 Tue Oct  4 04:03:01 2016
@@ -35,6 +35,7 @@
                <class>org.apache.openmeetings.db.entity.server.Server</class>
                
<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
                
<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+               
<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
                
<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
                <class>org.apache.openmeetings.db.entity.user.Group</class>
                <class>org.apache.openmeetings.db.entity.user.GroupUser</class>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
 Tue Oct  4 04:03:01 2016
@@ -35,6 +35,7 @@
                <class>org.apache.openmeetings.db.entity.server.Server</class>
                
<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
                
<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+               
<class>org.apache.openmeetings.db.entity.calendar.OmCalendar</class>
                
<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
                <class>org.apache.openmeetings.db.entity.user.Group</class>
                <class>org.apache.openmeetings.db.entity.user.GroupUser</class>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 Tue Oct  4 04:03:01 2016
@@ -230,6 +230,7 @@
        <bean id="clientDao" 
class="org.apache.openmeetings.db.dao.room.ClientDao" />
        <bean id="mailMessageDao" 
class="org.apache.openmeetings.db.dao.basic.MailMessageDao" />
        <bean id="oauth2Dao" 
class="org.apache.openmeetings.db.dao.server.OAuth2Dao" />
+       <bean id="omCalendarDao" 
class="org.apache.openmeetings.db.dao.calendar.OmCalendarDao" />
 
        <!-- No Interface -->
        <bean id="generateImage" 
class="org.apache.openmeetings.core.converter.GenerateImage" />
@@ -243,6 +244,8 @@
        <bean id="whiteboardManagement" 
class="org.apache.openmeetings.core.data.whiteboard.WhiteboardManager" />
        <bean id="backupExport" 
class="org.apache.openmeetings.backup.BackupExport" />
        <bean id="backupImport" 
class="org.apache.openmeetings.backup.BackupImport" />
+       <bean id="appointmentManager" 
class="org.apache.openmeetings.service.calendar.caldav.AppointmentManager" 
destroy-method="destroy"/>
+       <bean id="iCalUtils" 
class="org.apache.openmeetings.service.calendar.caldav.iCalUtils"/>
 
        <!-- Thread Executor -->
        <bean id="taskExecutor" 
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/calendar.css
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/calendar.css?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/calendar.css
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/calendar.css
 Tue Oct  4 04:03:01 2016
@@ -20,7 +20,7 @@
        vertical-align: top;
 }
 
-.appointmentPopUp input[type="text"] {
+.appointmentPopUp input[type="text"], .appointmentPopUp input[type="url"] {
        width: 420px;
 }
 
@@ -56,3 +56,35 @@
 .appointment.ui-dialog .ui-dialog-content {
        padding: 0;
 }
+
+.cell input{
+       width: 47.5%;
+}
+
+.calendarlist li {
+       list-style-type: none;
+       margin: 0.3em;
+}
+
+.calendarlist li input {
+       width: 100%;
+       text-align: center;
+       vertical-align: middle;
+}
+
+.calendarlist {
+       padding: 0;
+}
+
+#calendarlistcontainer {
+       width: 20%;
+       float: left;
+       display: inline-block;
+       overflow-y: auto;
+}
+
+#wrapper-panel-frame {
+       display: inline-block;
+       width: 80%;
+       height: 100%;
+}

Added: 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestOmCalendar.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestOmCalendar.java?rev=1763226&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestOmCalendar.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestOmCalendar.java
 Tue Oct  4 04:03:01 2016
@@ -0,0 +1,58 @@
+/*
+ * 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.calendar;
+
+import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.OmCalendar;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class TestOmCalendar extends AbstractJUnitDefaults {
+       @Autowired
+       private OmCalendarDao calendarDao;
+       @Autowired
+       private UserDao userDao;
+
+       @Test
+       public void saveCalendar() throws Exception {
+               OmCalendar calendar = new OmCalendar();
+               Long userId = 1L;
+               User owner = userDao.get(userId);
+               String title = "Calendar Title", href = 
"http://caldav.example.com/principals/user";;
+
+               calendar.setOwner(owner);
+               calendar.setTitle(title);
+               calendar.setHref(href);
+               calendar.setSyncType(OmCalendar.SyncType.ETAG);
+
+               calendar = calendarDao.update(calendar);
+
+               assertTrue("Saved calendar should have valid id: " + 
calendar.getId(),
+                               calendar.getId() != null && calendar.getId() > 
0);
+
+               OmCalendar c = calendarDao.getCalendarbyId(calendar.getId());
+               assertNotNull("Failed to find Calendar by id", c);
+       }
+}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java?rev=1763226&r1=1763225&r2=1763226&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
 Tue Oct  4 04:03:01 2016
@@ -22,12 +22,12 @@ import static org.apache.openmeetings.ut
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.net.SocketException;
 import java.net.URI;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.Map;
+import java.util.UUID;
 import java.util.Vector;
 
 import javax.activation.DataHandler;
@@ -65,7 +65,6 @@ import net.fortuna.ical4j.model.property
 import net.fortuna.ical4j.model.property.ProdId;
 import net.fortuna.ical4j.model.property.Uid;
 import net.fortuna.ical4j.model.property.Version;
-import net.fortuna.ical4j.util.UidGenerator;
 
 public class TestSendIcalMessage extends AbstractJUnitDefaults {
        private static final Logger log = 
Red5LoggerFactory.getLogger(TestSendIcalMessage.class, webAppRootKey);
@@ -116,16 +115,8 @@ public class TestSendIcalMessage extends
                meeting.getProperties().add(tz.getTimeZoneId());
 
                // generate unique identifier..
-               UidGenerator ug;
-               try {
-                       ug = new UidGenerator("uidGen");
-
-                       Uid uid = ug.generateUid();
-                       meeting.getProperties().add(uid);
-               } catch (SocketException e) {
-                       // TODO Auto-generated catch block
-                       log.error("Error", e);
-               }
+               Uid uid = new Uid(UUID.randomUUID().toString());
+               meeting.getProperties().add(uid);
 
                // add attendees..
                Attendee dev1 = new 
Attendee(URI.create("mailto:[email protected]";));


Reply via email to