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]"));
