diff --git a/src/main/java/org/olat/modules/gotomeeting/GoToMeetingManager.java b/src/main/java/org/olat/modules/gotomeeting/GoToMeetingManager.java index 7acf42ccb3f9ef194ee4f31ea8d02cd117a2e398..d8224c00a6b4713cb828e601cbd8de3e9f81023b 100644 --- a/src/main/java/org/olat/modules/gotomeeting/GoToMeetingManager.java +++ b/src/main/java/org/olat/modules/gotomeeting/GoToMeetingManager.java @@ -77,6 +77,16 @@ public interface GoToMeetingManager { */ public boolean removeOrganizer(GoToOrganizer organizer); + /** + * Check if the organizer is available between the 2 specified dates. + * + * @param organizer + * @param start + * @param end + * @return + */ + public boolean checkOrganizerAvailability(GoToOrganizer organizer, Date start, Date end); + public GoToMeeting scheduleTraining(GoToOrganizer organizer, String name, String externalId, String description, Date start, Date end, RepositoryEntry resourceOwner, String subIdentifier, BusinessGroup businessGroup, GoToError error); diff --git a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAO.java b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAO.java index 5b2f24a275c51d9f14f7f2d1f2dc4633c452224f..2ae03bc376633aa8f15c0a006da46953b40bdf81 100644 --- a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAO.java +++ b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAO.java @@ -22,6 +22,7 @@ package org.olat.modules.gotomeeting.manager; import java.util.Date; import java.util.List; +import javax.persistence.TemporalType; import javax.persistence.TypedQuery; import org.olat.core.commons.persistence.DB; @@ -143,6 +144,25 @@ public class GoToMeetingDAO { return query.getResultList(); } + public List<GoToMeeting> getMeetingsOverlapp(GoToType type, GoToOrganizer organizer, Date start, Date end) { + StringBuilder sb = new StringBuilder(); + sb.append("select meeting from gotomeeting meeting") + .append(" inner join meeting.organizer organizer on organizer.key=:organizerKey") + .append(" where meeting.type=:type") + .append(" and ((meeting.startDate<:start and meeting.endDate>:start)") + .append(" or (meeting.startDate<:end and meeting.endDate>:end)") + .append(" or (meeting.startDate>:start and meeting.endDate<:end))"); + + List<GoToMeeting> meetings = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), GoToMeeting.class) + .setParameter("organizerKey", organizer.getKey()) + .setParameter("type", type.name()) + .setParameter("start", start, TemporalType.TIMESTAMP) + .setParameter("end", end, TemporalType.TIMESTAMP) + .getResultList(); + return meetings; + } + public GoToMeeting update(GoToMeeting meeting) { ((GoToMeetingImpl)meeting).setLastModified(new Date()); return dbInstance.getCurrentEntityManager().merge(meeting); diff --git a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java index edb07dfee08937d97036e265ecba9e6de731d601..b1689b3c3fbdf1347a9291cf788a95e2706e09e5 100644 --- a/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java +++ b/src/main/java/org/olat/modules/gotomeeting/manager/GoToMeetingManagerImpl.java @@ -123,6 +123,11 @@ public class GoToMeetingManagerImpl implements GoToMeetingManager { } return false; } + + public boolean checkOrganizerAvailability(GoToOrganizer organizer, Date start, Date end) { + List<GoToMeeting> meetings = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start, end); + return meetings.isEmpty(); + } @Override public GoToMeeting scheduleTraining(GoToOrganizer organizer, String name, String externalId, String description, Date start, Date end, diff --git a/src/main/java/org/olat/modules/gotomeeting/model/GoToErrors.java b/src/main/java/org/olat/modules/gotomeeting/model/GoToErrors.java index fce88bb85d6eb849c39c99b6a49855438ed443b5..d11c78fd63c4ee20573ef1cc50c5255312a95737 100644 --- a/src/main/java/org/olat/modules/gotomeeting/model/GoToErrors.java +++ b/src/main/java/org/olat/modules/gotomeeting/model/GoToErrors.java @@ -28,6 +28,7 @@ package org.olat.modules.gotomeeting.model; public enum GoToErrors { Unkown(""), DuplicateRegistrant(""), + OrganizerOverlap("error.organizer.overbooked"), TrainingOver("error.code.TrainingOver"), InvalidRequest(""), NoSuchTraining("error.code.NoSuchTraining"); diff --git a/src/main/java/org/olat/modules/gotomeeting/restapi/GoToTrainingWebService.java b/src/main/java/org/olat/modules/gotomeeting/restapi/GoToTrainingWebService.java index 8e4ea91fd743b1fa2cdef0b6856d3923cf0f20bb..3ded23b8826a69a7215fe7115568019377d03184 100644 --- a/src/main/java/org/olat/modules/gotomeeting/restapi/GoToTrainingWebService.java +++ b/src/main/java/org/olat/modules/gotomeeting/restapi/GoToTrainingWebService.java @@ -134,14 +134,25 @@ public class GoToTrainingWebService { GoToMeeting meeting = null; GoToError error = new GoToError(); if(training.getKey() == null) { + boolean organizerFound = false; List<GoToOrganizer> organizers = meetingManager.getSystemOrganizers(); for(GoToOrganizer organizer:organizers) { - meeting = meetingManager.scheduleTraining(organizer, training.getName(), training.getExternalId(), "-", - training.getStart(), training.getEnd(), entry, subIdentifier, null, error); - if(!error.hasError()) { - break; + boolean available = meetingManager.checkOrganizerAvailability(organizer, training.getStart(), training.getEnd()); + if(available) { + meeting = meetingManager.scheduleTraining(organizer, training.getName(), training.getExternalId(), "-", + training.getStart(), training.getEnd(), entry, subIdentifier, null, error); + organizerFound = true; + if(!error.hasError()) { + break; + } + } else { + System.out.println(""); } } + + if(!organizerFound) { + error.setError(GoToErrors.OrganizerOverlap); + } } else { meeting = meetingManager.getMeetingByExternalId(training.getExternalId()); if(meeting == null) { diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java b/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java index 601aa159ae173072a53e85a661a3cb05bf8b00e0..1d846ebd75681ce61c72d2360eeb935c03081699 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java +++ b/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java @@ -160,6 +160,19 @@ public class EditTrainingController extends FormBasicController { if(!organizersEl.isOneSelected()) { organizersEl.setErrorKey("form.mandatory.hover", null); allOk &= false; + } else { + Date start = startDateEl.getDate(); + Date end = endDateEl.getDate(); + + String selectedKeyStr = organizersEl.getSelectedKey(); + int selectedIndex = Integer.parseInt(selectedKeyStr); + GoToOrganizer organizer = availablesOrganizers.get(selectedIndex); + if(start != null && end != null && organizer != null) { + if(!meetingManager.checkOrganizerAvailability(organizer, start, end)) { + organizersEl.setErrorKey("error.organizer.overbooked", null); + allOk &= false; + } + } } } diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingTableModel.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingTableModel.java index 703ade868f266564cf51a9e2c5f7fb45ef609995..2fa8645a0424496244cc3c028012b773a9b936c7 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingTableModel.java +++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingTableModel.java @@ -27,8 +27,10 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFle import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate; +import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; import org.olat.modules.gotomeeting.GoToMeeting; +import org.olat.modules.gotomeeting.GoToOrganizer; import org.olat.repository.RepositoryEntry; /** @@ -63,6 +65,23 @@ public class GoToMeetingTableModel extends DefaultFlexiTableDataModel<GoToMeetin case name: return meeting.getName(); case start: return meeting.getStartDate(); case end: return meeting.getEndDate(); + case organizer: { + GoToOrganizer organizer = meeting.getOrganizer(); + String name = ""; + if(organizer != null) { + if(StringHelper.containsNonWhitespace(organizer.getName())) { + name = organizer.getName(); + } else if(StringHelper.containsNonWhitespace(organizer.getLastName())) { + if(StringHelper.containsNonWhitespace(organizer.getFirstName())) { + name += organizer.getFirstName() + " "; + } + name += organizer.getLastName(); + } else if(StringHelper.containsNonWhitespace(organizer.getUsername())) { + name = organizer.getUsername(); + } + } + return name; + } case resource: { RepositoryEntry entry = meeting.getEntry(); if(entry != null) { @@ -89,6 +108,7 @@ public class GoToMeetingTableModel extends DefaultFlexiTableDataModel<GoToMeetin name("meeting.name"), start("meeting.start"), end("meeting.end"), + organizer("meeting.organizer"), resource("meeting.resource"); private final String i18nHeaderKey; diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsAdminController.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsAdminController.java index 57c63bbf74aeeb38c9882185a71e4588903e9e7c..1376921853f2f34bcb3bef35681af02342ae007c 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsAdminController.java +++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsAdminController.java @@ -80,6 +80,7 @@ public class GoToMeetingsAdminController extends FormBasicController { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.name.i18nHeaderKey(), MeetingsCols.name.ordinal(), true, MeetingsCols.name.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.start.i18nHeaderKey(), MeetingsCols.start.ordinal(), true, MeetingsCols.start.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.end.i18nHeaderKey(), MeetingsCols.end.ordinal(), true, MeetingsCols.end.name())); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.organizer.i18nHeaderKey(), MeetingsCols.organizer.ordinal(), true, MeetingsCols.organizer.name())); FlexiCellRenderer renderer = new StaticFlexiCellRenderer("resource", new TextFlexiCellRenderer()); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel(MeetingsCols.resource.i18nHeaderKey(), MeetingsCols.resource.ordinal(), "resource", true, MeetingsCols.resource.name(), renderer)); diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsController.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsController.java index 41eea5e33b192d21ae787267562275a370817412..cd7e3cc69111bce35d6fa30f5805e168789b9ed1 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsController.java +++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsController.java @@ -19,6 +19,8 @@ */ package org.olat.modules.gotomeeting.ui; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.olat.core.commons.persistence.SortKey; @@ -56,8 +58,8 @@ public class GoToMeetingsController extends FormBasicController { private final RepositoryEntry entry; private final BusinessGroup businessGroup; - private FlexiTableElement tableEl; - private GoToMeetingTableModel tableModel; + private FlexiTableElement upcomingTableEl, pastTableEl; + private GoToMeetingTableModel upcomingTableModel, pastTableModel; @Autowired private GoToMeetingManager meetingMgr; @@ -82,21 +84,48 @@ public class GoToMeetingsController extends FormBasicController { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.end.i18nHeaderKey(), MeetingsCols.end.ordinal(), true, MeetingsCols.end.name())); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("select", translate("select"), "select")); - tableModel = new GoToMeetingTableModel(columnsModel); - tableEl = uifactory.addTableElement(getWindowControl(), "meetings", tableModel, getTranslator(), formLayout); - tableEl.setEmtpyTableMessageKey("table.empty"); + upcomingTableModel = new GoToMeetingTableModel(columnsModel); + upcomingTableEl = uifactory.addTableElement(getWindowControl(), "upcomingmeetings", upcomingTableModel, getTranslator(), formLayout); + upcomingTableEl.setEmtpyTableMessageKey("table.empty"); FlexiTableSortOptions sortOptions = new FlexiTableSortOptions(); - sortOptions.setDefaultOrderBy(new SortKey(MeetingsCols.start.name(), false)); - tableEl.setSortSettings(sortOptions); + sortOptions.setDefaultOrderBy(new SortKey(MeetingsCols.start.name(), true)); + upcomingTableEl.setSortSettings(sortOptions); + + pastTableModel = new GoToMeetingTableModel(columnsModel); + pastTableEl = uifactory.addTableElement(getWindowControl(), "pastmeetings", pastTableModel, getTranslator(), formLayout); + + FlexiTableSortOptions pastSortOptions = new FlexiTableSortOptions(); + pastSortOptions.setDefaultOrderBy(new SortKey(MeetingsCols.start.name(), false)); + pastTableEl.setSortSettings(sortOptions); + updateModel(); } protected void updateModel() { List<GoToMeeting> meetings = meetingMgr.getMeetings(GoToType.training, entry, subIdent, businessGroup); - tableModel.setObjects(meetings); - tableEl.reloadData(); - tableEl.reset(); + + List<GoToMeeting> upcomingMeetings = new ArrayList<>(); + List<GoToMeeting> pastMeetings = new ArrayList<>(); + + Date now = new Date(); + for(GoToMeeting meeting:meetings) { + Date endDate = meeting.getEndDate(); + if(now.after(endDate)) { + pastMeetings.add(meeting); + } else { + upcomingMeetings.add(meeting); + } + } + + upcomingTableModel.setObjects(upcomingMeetings); + upcomingTableEl.reloadData(); + upcomingTableEl.reset(); + + pastTableModel.setObjects(pastMeetings); + pastTableEl.reloadData(); + pastTableEl.reset(); + pastTableEl.setVisible(pastMeetings.size() > 0); } @Override @@ -106,11 +135,19 @@ public class GoToMeetingsController extends FormBasicController { @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { - if(tableEl == source) { + if(upcomingTableEl == source) { + if(event instanceof SelectionEvent) { + SelectionEvent se = (SelectionEvent)event; + if("select".equals(se.getCommand())) { + GoToMeeting meeting = upcomingTableModel.getObject(se.getIndex()); + fireEvent(ureq, new SelectGoToMeetingEvent(meeting)); + } + } + } else if(pastTableEl == source) { if(event instanceof SelectionEvent) { SelectionEvent se = (SelectionEvent)event; if("select".equals(se.getCommand())) { - GoToMeeting meeting = tableModel.getObject(se.getIndex()); + GoToMeeting meeting = pastTableModel.getObject(se.getIndex()); fireEvent(ureq, new SelectGoToMeetingEvent(meeting)); } } diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java index fae78fe6355f3a2252fd5c7c02e5e3c47aac9c83..9892b4762e040aab16ea047cad495d792ffd814d 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java +++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java @@ -95,6 +95,7 @@ public class GoToMeetingsEditController extends FormBasicController { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.name.i18nHeaderKey(), MeetingsCols.name.ordinal(), true, MeetingsCols.name.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.start.i18nHeaderKey(), MeetingsCols.start.ordinal(), true, MeetingsCols.start.name())); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.end.i18nHeaderKey(), MeetingsCols.end.ordinal(), true, MeetingsCols.end.name())); + columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(MeetingsCols.organizer.i18nHeaderKey(), MeetingsCols.organizer.ordinal(), true, MeetingsCols.organizer.name())); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("edit", translate("edit"), "edit")); columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("delete", translate("delete"), "delete")); diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/_content/meetings.html b/src/main/java/org/olat/modules/gotomeeting/ui/_content/meetings.html index 1fd075f25d793c97613509f37f8dba371df55595..dd90dc46c01566aefc699792befbcd551732c72c 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/_content/meetings.html +++ b/src/main/java/org/olat/modules/gotomeeting/ui/_content/meetings.html @@ -1 +1,6 @@ -$r.render("meetings") \ No newline at end of file +<h3>$r.translate("meetings.upcoming")</h3> +$r.render("upcomingmeetings") +#if($r.visible("pastmeetings")) + <h3>$r.translate("meetings.past")</h3> + $r.render("pastmeetings") +#end \ No newline at end of file diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_de.properties index 7718940a877ae8c35687e807d9870184c5cd332e..3f86d474bab03a8153802fe6b6d8e180d330e537 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_de.properties @@ -11,6 +11,7 @@ enabled= error.code.NoSuchTraining=Die Schulung konnte nicht gefunden werden. error.code.TrainingOver=Schulung is abgeschlossen error.code.unkown=Eine unerwartete Fehler ist auf dem GoToTraining server passiert. +error.organizer.overbooked=Der Organizer hat schon ein Termin in diesem Zeitraum. error.start.after.end=Das Datum f\u00FCr das Ende der Schulung darf nicht vor dem Beginn Datum sein. error.training.schedule.failed=Die Schulung konnte nicht geplant werden. goto.configuration=Konfiguration @@ -18,10 +19,13 @@ goto.module.enabled=Module "GoTo Training" join=Join meeting.end=End meeting.name=Name +meeting.organizer=Organizer meeting.resource=Kurs meeting.start=Beginn meetings.admin.title=Konfiguration meetings.title=Schulungen +meetings.upcoming=Zukünftige Schulungen +meetings.past=Alte Schulungen organizer.email=E-Mail organizer.firsName=Vorname organizer.key=Organizer Key diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_en.properties index 08f7ed47e68be01eeb6d14f00ea8e89cbc6b9d1f..515c4c22ee8e1aeb5c292e0935e5bd7da7c7f121 100644 --- a/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/gotomeeting/ui/_i18n/LocalStrings_en.properties @@ -11,6 +11,7 @@ enabled= error.code.NoSuchTraining=The training cannot be found. error.code.TrainingOver=Training is closed. error.code.unkown=An unexpected error happens on the GoToTraining server. +error.organizer.overbooked=The organizer has already a training planned in this period. error.start.after.end=The end date of the meeting must not be before the start date. error.training.schedule.failed=The training cannot be planned. goto.configuration=Configuration @@ -18,10 +19,13 @@ goto.module.enabled=Module "GoTo Training" join=Join meeting.end=End meeting.name=Name +meeting.organizer=Organizer meeting.resource=Ressource meeting.start=Start meetings.admin.title=Configuration meetings.title=Trainings +meetings.upcoming=Upcoming meetings +meetings.past=Past meetings organizer.email=E-Mail organizer.firsName=First name organizer.key=Organizer key diff --git a/src/test/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAOTest.java b/src/test/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAOTest.java index 6d49acbefaeac7f1c1da25b8cbe6ddd45a4b89e1..9a51ad5a0e58198c0dcc45094cd924dc3deaf000 100644 --- a/src/test/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAOTest.java +++ b/src/test/java/org/olat/modules/gotomeeting/manager/GoToMeetingDAOTest.java @@ -19,6 +19,7 @@ */ package org.olat.modules.gotomeeting.manager; +import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.UUID; @@ -101,4 +102,84 @@ public class GoToMeetingDAOTest extends OlatTestCase { Assert.assertEquals(1, meetings.size()); Assert.assertTrue(meetings.contains(training)); } + + + @Test + public void getMeetingsOverlapp() { + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + + String username = UUID.randomUUID().toString(); + String accessToken = UUID.randomUUID().toString(); + String organizerKey = UUID.randomUUID().toString(); + + GoToOrganizer organizer = organizerDao + .createOrganizer(null, username, accessToken, organizerKey, "Michael", "Wolgemut", null, null, 10l, null); + Assert.assertNotNull(organizer); + + Calendar cal = Calendar.getInstance(); + cal.set(2016, 8, 12, 12, 0, 0); + Date start = cal.getTime(); + cal.set(2016, 8, 12, 18, 0, 0); + Date end = cal.getTime(); + String trainingKey = Long.toString(CodeHelper.getForeverUniqueID()); + GoToMeeting training = meetingDao.createTraining("New training", null, "Very interessant", trainingKey, start, end, + organizer, entry, "d9914", null); + dbInstance.commit(); + Assert.assertNotNull(training); + + //check organizer availability (same date) + List<GoToMeeting> overlaps = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start, end); + Assert.assertNotNull(overlaps); + Assert.assertEquals(1, overlaps.size()); + + //check organizer availability (end overlap) + cal.set(2016, 8, 12, 10, 0, 0); + Date start_1 = cal.getTime(); + cal.set(2016, 8, 12, 14, 0, 0); + Date end_1 = cal.getTime(); + List<GoToMeeting> overlaps_1 = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start_1, end_1); + Assert.assertEquals(1, overlaps_1.size()); + + //check organizer availability (start overlap) + cal.set(2016, 8, 12, 14, 0, 0); + Date start_2 = cal.getTime(); + cal.set(2016, 8, 12, 20, 0, 0); + Date end_2 = cal.getTime(); + List<GoToMeeting> overlaps_2 = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start_2, end_2); + Assert.assertEquals(1, overlaps_2.size()); + + //check organizer availability (within) + cal.set(2016, 8, 12, 14, 0, 0); + Date start_3 = cal.getTime(); + cal.set(2016, 8, 12, 15, 0, 0); + Date end_3 = cal.getTime(); + List<GoToMeeting> overlaps_3 = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start_3, end_3); + Assert.assertNotNull(overlaps_3); + Assert.assertEquals(1, overlaps_3.size()); + + //check organizer availability (start before, end after) + cal.set(2016, 8, 12, 10, 0, 0); + Date start_4 = cal.getTime(); + cal.set(2016, 8, 12, 22, 0, 0); + Date end_4 = cal.getTime(); + List<GoToMeeting> overlaps_4 = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start_4, end_4); + Assert.assertNotNull(overlaps_4); + Assert.assertEquals(1, overlaps_4.size()); + + //check organizer availability (in past) + cal.set(2016, 8, 12, 9, 0, 0); + Date start_5 = cal.getTime(); + cal.set(2016, 8, 12, 11, 0, 0); + Date end_5 = cal.getTime(); + List<GoToMeeting> overlaps_5 = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start_5, end_5); + Assert.assertEquals(0, overlaps_5.size()); + + //check organizer availability (in future) + cal.set(2016, 8, 12, 20, 0, 0); + Date start_6= cal.getTime(); + cal.set(2016, 8, 12, 21, 0, 0); + Date end_6 = cal.getTime(); + List<GoToMeeting> overlaps_6 = meetingDao.getMeetingsOverlapp(GoToType.training, organizer, start_6, end_6); + Assert.assertEquals(0, overlaps_6.size()); + } }