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

[05/23] openmeetings git commit: Normalize all the line endings

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
index e468e36..e721c0b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
@@ -1,510 +1,510 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.calendar;
-
-import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getRights;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
-import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.db.dao.user.GroupUserDao;
-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.MeetingMember;
-import org.apache.openmeetings.db.entity.calendar.OmCalendar;
-import org.apache.openmeetings.db.entity.room.Room;
-import org.apache.openmeetings.db.entity.user.Group;
-import org.apache.openmeetings.db.entity.user.GroupUser;
-import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.util.AuthLevelUtil;
-import org.apache.openmeetings.db.util.FormatHelper;
-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.GroupChoiceProvider;
-import org.apache.openmeetings.web.common.OmDateTimePicker;
-import org.apache.openmeetings.web.pages.MainPage;
-import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
-import org.apache.openmeetings.web.util.RoomTypeDropDown;
-import org.apache.openmeetings.web.util.UserMultiChoice;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
-import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.CheckBox;
-import org.apache.wicket.markup.html.form.ChoiceRenderer;
-import org.apache.wicket.markup.html.form.DropDownChoice;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.IChoiceRenderer;
-import org.apache.wicket.markup.html.form.PasswordTextField;
-import org.apache.wicket.markup.html.form.Radio;
-import org.apache.wicket.markup.html.form.RadioGroup;
-import org.apache.wicket.markup.html.form.RequiredTextField;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.util.CollectionModel;
-import org.red5.logging.Red5LoggerFactory;
-import org.slf4j.Logger;
-import org.wicketstuff.select2.Select2MultiChoice;
-
-import com.googlecode.wicket.jquery.core.JQueryBehavior;
-import com.googlecode.wicket.jquery.core.Options;
-import com.googlecode.wicket.jquery.ui.JQueryUIBehavior;
-import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
-import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
-import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
-import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
-import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
-import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
-
-public class AppointmentDialog extends AbstractFormDialog<Appointment> {
-	private static final long serialVersionUID = 1L;
-	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDialog.class, webAppRootKey);
-
-	private AppointmentForm form;
-	private DialogButton save = new DialogButton("save", Application.getString(813));
-	private DialogButton cancel = new DialogButton("cancel", Application.getString(1130));
-	private DialogButton delete = new DialogButton("delete", Application.getString(814));
-	private DialogButton enterRoom = new DialogButton("enterRoom", Application.getString(1282));
-	private final CalendarPanel calendarPanel;
-	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
-	final MessageDialog confirmDelete;
-	private final WebMarkupContainer sipContainer = new WebMarkupContainer("sip-container");
-	//FIXME TODO need to be unified with RoomInvitationForm
-	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.user));
-	private final Select2MultiChoice<Group> groups = new Select2MultiChoice<>("groups"
-			, new CollectionModel<Group>(new ArrayList<>())
-			, new GroupChoiceProvider());
-	private final UserMultiChoice attendees = new UserMultiChoice("attendees", new CollectionModel<User>(new ArrayList<>()));
-	private enum InviteeType {
-		user
-		, group
-	}
-
-	@Override
-	public int getWidth() {
-		return 650;
-	}
-
-	@Override
-	public void onConfigure(JQueryBehavior behavior) {
-		super.onConfigure(behavior);
-		behavior.setOption("classes", "{'ui-dialog': 'ui-corner-all appointment'}");
-	}
-
-	public void setModelObjectWithAjaxTarget(Appointment a, AjaxRequestTarget target) {
-		form.setModelObject(a);
-		form.start.setModelObject(getDateTime(a.getStart()));
-		form.end.setModelObject(getDateTime(a.getEnd()));
-		form.setEnabled(isOwner(a));
-		log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + a);
-		if (a.getId() != null) {
-			delete.setVisible(isOwner(a), target);
-			enterRoom.setVisible(a.getRoom() != null, target);
-		} else {
-			delete.setVisible(false, target);
-			enterRoom.setVisible(false, target);
-		}
-		if (a.getRoom() != null) {
-			target.add(sipContainer.replace(new Label("room.confno", a.getRoom().getConfno())).setVisible(a.getRoom().isSipEnabled()));
-		}
-		save.setVisible(isOwner(a), target);
-		super.setModelObject(a);
-	}
-
-	public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, CompoundPropertyModel<Appointment> model) {
-		super(id, title, model, true);
-		log.debug(" -- AppointmentDialog -- Current model " + getModel().getObject());
-		this.calendarPanel = calendarPanel;
-		setOutputMarkupId(true);
-		form = new AppointmentForm("appForm", model);
-		add(form);
-		confirmDelete = new MessageDialog("confirmDelete", Application.getString(814), Application.getString(833), DialogButtons.OK_CANCEL, DialogIcon.WARN){
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-				if (button != null && button.match(AbstractDialog.OK)){
-					deleteAppointment(handler);
-				}
-			}
-		};
-		add(confirmDelete);
-	}
-
-	protected void deleteAppointment(IPartialPageRequestHandler handler) {
-		Appointment a = getModelObject();
-		getBean(AppointmentDao.class).delete(a, getUserId());
-		calendarPanel.refresh(handler);
-		if (a.getCalendar() != null && a.getHref() != null) {
-			calendarPanel.updatedeleteAppointment(handler, CalendarDialog.DIALOG_TYPE.DELETE_APPOINTMENT, a);
-		}
-	}
-
-	@Override
-	protected List<DialogButton> getButtons() {
-		return Arrays.asList(enterRoom, save, delete, cancel);
-	}
-
-	@Override
-	public DialogButton getSubmitButton() {
-		return save;
-	}
-
-	@Override
-	public Form<?> getForm() {
-		return form;
-	}
-
-	@Override
-	protected void onOpen(IPartialPageRequestHandler handler) {
-		handler.add(form.add(new JQueryUIBehavior("#tabs", "tabs")));
-	}
-
-	@Override
-	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
-		if (delete.equals(button)) {
-			confirmDelete.open(handler);
-		} else if (enterRoom.equals(button)) {
-			RoomEnterBehavior.roomEnter((MainPage)getPage(), handler, getModelObject().getRoom().getId());
-		}
-	}
-
-	@Override
-	protected void onError(AjaxRequestTarget target) {
-		target.add(feedback);
-	}
-
-	@Override
-	protected void onSubmit(AjaxRequestTarget target) {
-		Appointment a = form.getModelObject();
-		a.setRoom(form.createRoom ? form.appRoom : form.groom.getModelObject());
-		final List<MeetingMember> mms = a.getMeetingMembers() == null ? new ArrayList<>() : a.getMeetingMembers();
-		Set<Long> currentIds = new HashSet<>();
-		List<User> users = new ArrayList<>();
-		if (InviteeType.group == rdi.getModelObject()) {
-			//lets iterate through all group users
-			for (Group g : groups.getModelObject()) {
-				for (GroupUser gu : getBean(GroupUserDao.class).get(g.getId(), 0, Integer.MAX_VALUE)) {
-					User u = gu.getUser();
-					if (!currentIds.contains(u.getId())) {
-						users.add(u);
-						currentIds.add(u.getId());
-					}
-				}
-			}
-		} else {
-			users = new ArrayList<>(attendees.getModelObject());
-			for (User u : users) {
-				if (u.getId() != null) {
-					currentIds.add(u.getId());
-				}
-			}
-		}
-
-		//remove users
-		for (Iterator<MeetingMember> i = mms.iterator(); i.hasNext();) {
-			MeetingMember m = i.next();
-			if (!currentIds.contains(m.getUser().getId())) {
-				i.remove();
-			}
-		}
-		Set<Long> originalIds = new HashSet<>();
-		for (MeetingMember m : mms) {
-			originalIds.add(m.getUser().getId());
-		}
-		//add users
-		for (User u : users) {
-			if (u.getId() == null || !originalIds.contains(u.getId())) {
-				MeetingMember mm = new MeetingMember();
-				mm.setUser(u);
-				mm.setDeleted(false);
-				mm.setInserted(a.getInserted());
-				mm.setUpdated(a.getUpdated());
-				mm.setAppointment(a);
-				mms.add(mm);
-			}
-		}
-		a.setMeetingMembers(mms);
-		a.setStart(getDate(form.start.getModelObject()));
-		a.setEnd(getDate(form.end.getModelObject()));
-		a.setCalendar(form.cals.getModelObject());
-		getBean(AppointmentDao.class).update(a, getUserId());
-		if (a.getCalendar() != null) {
-			calendarPanel.updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
-		}
-		target.add(feedback);
-		calendarPanel.refresh(target);
-	}
-
-	public static boolean isOwner(Appointment object) {
-		return object.getOwner() != null && getUserId().equals(object.getOwner().getId());
-	}
-
-	private class AppointmentForm extends Form<Appointment> {
-		private static final long serialVersionUID = 1L;
-		private boolean createRoom = true;
-		private Room appRoom = null;
-		private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));
-		private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));
-		private final PasswordTextField pwd = new PasswordTextField("password");
-		private final Label owner = new Label("aowner", Model.of(""));
-		private final WebMarkupContainer ownerPanel = new WebMarkupContainer("owner-row");
-		private final WebMarkupContainer createRoomBlock = new WebMarkupContainer("create-room-block", new CompoundPropertyModel<>(appRoom));
-		private final DropDownChoice<Room.Type> roomType = new RoomTypeDropDown("type");
-		private final DropDownChoice<Room> groom = new DropDownChoice<>(
-				"groom"
-				, Model.of(new Room())
-				, getRoomList()
-				, new ChoiceRenderer<Room>("name", "id"));
-		private DropDownChoice<OmCalendar> cals = new DropDownChoice<>(
-				"calendar",
-				new LoadableDetachableModel<List<? extends OmCalendar>>() {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected List<? extends OmCalendar> load() {
-						return getCalendarList();
-					}
-				},
-				new ChoiceRenderer<OmCalendar>("title", "id")
-		);
-		private final WebMarkupContainer groupContainer = new WebMarkupContainer("groupContainer");
-
-		private Room createAppRoom() {
-			Room r = new Room();
-			r.setAppointment(true);
-			if (r.getType() == null) {
-				r.setType(Room.Type.conference);
-			}
-			return r;
-		}
-
-		@Override
-		protected void onModelChanged() {
-			super.onModelChanged();
-
-			Appointment a = getModelObject();
-			if (a.getReminder() == null) {
-				a.setReminder(Reminder.none);
-			}
-			if (a.getRoom() == null) {
-				a.setRoom(createAppRoom());
-			}
-			createRoom = a.getRoom().isAppointment();
-			if (createRoom) {
-				appRoom = a.getRoom();
-			} else {
-				groom.setModelObject(a.getRoom());
-				appRoom = createAppRoom();
-			}
-			createRoomBlock.setDefaultModelObject(appRoom);
-			createRoomBlock.setEnabled(createRoom);
-			groom.setEnabled(!createRoom);
-			if (a.getId() == null) {
-				java.util.Calendar start = WebSession.getCalendar();
-				start.setTime(a.getStart());
-				java.util.Calendar end = WebSession.getCalendar();
-				end.setTime(a.getEnd());
-
-				if (start.equals(end)) {
-					end.add(java.util.Calendar.HOUR_OF_DAY, 1);
-					a.setEnd(end.getTime());
-				}
-				cals.setEnabled(true);
-			} else {
-				cals.setEnabled(false);
-			}
-
-			rdi.setModelObject(InviteeType.user);
-			attendees.setModelObject(new ArrayList<>());
-			if (a.getMeetingMembers() != null) {
-				for (MeetingMember mm : a.getMeetingMembers()) {
-					attendees.getModelObject().add(mm.getUser());
-				}
-			}
-			pwd.setEnabled(a.isPasswordProtected());
-			owner.setDefaultModel(Model.of(FormatHelper.formatUser(a.getOwner())));
-			ownerPanel.setVisible(!isOwner(a));
-		}
-
-		public AppointmentForm(String id, CompoundPropertyModel<Appointment> model) {
-			super(id, model);
-			setOutputMarkupId(true);
-
-			add(feedback.setOutputMarkupId(true));
-			//General
-			add(new RequiredTextField<String>("title").setLabel(Model.of(Application.getString(572))));
-			add(ownerPanel.add(owner));
-			boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights());
-			add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onUpdate(AjaxRequestTarget target) {
-					boolean groupsEnabled = InviteeType.group == rdi.getModelObject();
-					target.add(groups.setEnabled(groupsEnabled), attendees.setEnabled(!groupsEnabled));
-				}
-			}));
-			groupContainer.add(
-				groups.setLabel(Model.of(Application.getString(126))).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)
-				, new Radio<>("group", Model.of(InviteeType.group))
-			);
-			if (showGroups) {
-				groups.add(new AjaxFormComponentUpdatingBehavior("change") {
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					protected void onUpdate(AjaxRequestTarget target) {
-						// added to update model
-					}
-				}).setEnabled(false);
-			}
-			rdi.add(attendees.add(new AjaxFormComponentUpdatingBehavior("change") {
-						private static final long serialVersionUID = 1L;
-
-						@Override
-						protected void onUpdate(AjaxRequestTarget target) {
-							// added to update model
-						}
-					})
-					, groupContainer.setVisible(showGroups)
-				);
-			rdi.add(new Radio<>("user", Model.of(InviteeType.user)));
-
-			add(new TextField<String>("location"));
-			DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");
-			add(toolbar);
-			add(new WysiwygEditor("description", toolbar));
-
-			//room
-			add(new AjaxCheckBox("createRoom", new PropertyModel<Boolean>(this, "createRoom")) {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onUpdate(AjaxRequestTarget target) {
-					createRoom = getConvertedInput();
-					target.add(createRoomBlock.setEnabled(createRoom), groom.setEnabled(!createRoom));
-				}
-			});
-			add(createRoomBlock.add(roomType, new CheckBox("moderated")).setEnabled(createRoom).setOutputMarkupId(true));
-			add(groom.setRequired(true).setLabel(Model.of(Application.getString(406))).setEnabled(!createRoom).setOutputMarkupId(true));
-			add(sipContainer.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true));
-			sipContainer.add(new Label("room.confno", "")).setVisible(false);
-
-			//Advanced
-			add(new DropDownChoice<>(
-					"reminder"
-					, Arrays.asList(Reminder.values())
-					, new IChoiceRenderer<Reminder>() {
-						private static final long serialVersionUID = 1L;
-
-						@Override
-						public Object getDisplayValue(Reminder art) {
-							return getString("appointment.reminder." + art.name());
-						}
-
-						@Override
-						public String getIdValue(Reminder art, int index) {
-							return art.name();
-						}
-
-						@Override
-						public Reminder getObject(String id, IModel<? extends List<? extends Reminder>> choices) {
-							for (Reminder art : choices.getObject()) {
-								if (art.name().equals(id)) {
-									return art;
-								}
-							}
-							return null;
-						}
-					}));
-			add(new AjaxCheckBox("passwordProtected") {
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				protected void onUpdate(AjaxRequestTarget target) {
-					AppointmentForm.this.getModelObject().setPasswordProtected(getConvertedInput());
-					pwd.setEnabled(AppointmentForm.this.getModelObject().isPasswordProtected());
-					target.add(pwd);
-				}
-			});
-			pwd.setEnabled(getModelObject().isPasswordProtected());
-			pwd.setOutputMarkupId(true);
-			add(pwd);
-			add(cals.setNullValid(true).setLabel(Model.of("calendar")).setOutputMarkupId(true));
-		}
-
-		@Override
-		protected void onInitialize() {
-			super.onInitialize();
-			add(start.setLabel(Model.of(getString("570"))).setRequired(true)
-					, end.setLabel(Model.of(getString("571"))).setRequired(true));
-		}
-
-		private List<Room> getRoomList() {
-			//FIXME need to be reviewed
-			List<Room> result = new ArrayList<>();
-			RoomDao dao = getBean(RoomDao.class);
-			result.addAll(dao.getPublicRooms());
-			for (GroupUser ou : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
-				result.addAll(dao.getGroupRooms(ou.getGroup().getId()));
-			}
-			if (getModelObject().getRoom() != null && getModelObject().getRoom().isAppointment()) { //FIXME review
-				result.add(getModelObject().getRoom());
-			}
-			return result;
-		}
-
-		private List<OmCalendar> getCalendarList(){
-			return getBean(AppointmentManager.class).getCalendars(getUserId());
-		}
-
-		@Override
-		protected void onValidate() {
-			if (null != start.getConvertedInput() && null != end.getConvertedInput() && end.getConvertedInput().isBefore(start.getConvertedInput())) {
-				error(Application.getString(1592));
-			}
-		}
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRights;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.GroupUserDao;
+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.MeetingMember;
+import org.apache.openmeetings.db.entity.calendar.OmCalendar;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.Group;
+import org.apache.openmeetings.db.entity.user.GroupUser;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.AuthLevelUtil;
+import org.apache.openmeetings.db.util.FormatHelper;
+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.GroupChoiceProvider;
+import org.apache.openmeetings.web.common.OmDateTimePicker;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.openmeetings.web.util.UserMultiChoice;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.IChoiceRenderer;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.CollectionModel;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.wicketstuff.select2.Select2MultiChoice;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.JQueryUIBehavior;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class AppointmentDialog extends AbstractFormDialog<Appointment> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDialog.class, webAppRootKey);
+
+	private AppointmentForm form;
+	private DialogButton save = new DialogButton("save", Application.getString(813));
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(1130));
+	private DialogButton delete = new DialogButton("delete", Application.getString(814));
+	private DialogButton enterRoom = new DialogButton("enterRoom", Application.getString(1282));
+	private final CalendarPanel calendarPanel;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	final MessageDialog confirmDelete;
+	private final WebMarkupContainer sipContainer = new WebMarkupContainer("sip-container");
+	//FIXME TODO need to be unified with RoomInvitationForm
+	private final RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", Model.of(InviteeType.user));
+	private final Select2MultiChoice<Group> groups = new Select2MultiChoice<>("groups"
+			, new CollectionModel<Group>(new ArrayList<>())
+			, new GroupChoiceProvider());
+	private final UserMultiChoice attendees = new UserMultiChoice("attendees", new CollectionModel<User>(new ArrayList<>()));
+	private enum InviteeType {
+		user
+		, group
+	}
+
+	@Override
+	public int getWidth() {
+		return 650;
+	}
+
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("classes", "{'ui-dialog': 'ui-corner-all appointment'}");
+	}
+
+	public void setModelObjectWithAjaxTarget(Appointment a, AjaxRequestTarget target) {
+		form.setModelObject(a);
+		form.start.setModelObject(getDateTime(a.getStart()));
+		form.end.setModelObject(getDateTime(a.getEnd()));
+		form.setEnabled(isOwner(a));
+		log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + a);
+		if (a.getId() != null) {
+			delete.setVisible(isOwner(a), target);
+			enterRoom.setVisible(a.getRoom() != null, target);
+		} else {
+			delete.setVisible(false, target);
+			enterRoom.setVisible(false, target);
+		}
+		if (a.getRoom() != null) {
+			target.add(sipContainer.replace(new Label("room.confno", a.getRoom().getConfno())).setVisible(a.getRoom().isSipEnabled()));
+		}
+		save.setVisible(isOwner(a), target);
+		super.setModelObject(a);
+	}
+
+	public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, CompoundPropertyModel<Appointment> model) {
+		super(id, title, model, true);
+		log.debug(" -- AppointmentDialog -- Current model " + getModel().getObject());
+		this.calendarPanel = calendarPanel;
+		setOutputMarkupId(true);
+		form = new AppointmentForm("appForm", model);
+		add(form);
+		confirmDelete = new MessageDialog("confirmDelete", Application.getString(814), Application.getString(833), DialogButtons.OK_CANCEL, DialogIcon.WARN){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				if (button != null && button.match(AbstractDialog.OK)){
+					deleteAppointment(handler);
+				}
+			}
+		};
+		add(confirmDelete);
+	}
+
+	protected void deleteAppointment(IPartialPageRequestHandler handler) {
+		Appointment a = getModelObject();
+		getBean(AppointmentDao.class).delete(a, getUserId());
+		calendarPanel.refresh(handler);
+		if (a.getCalendar() != null && a.getHref() != null) {
+			calendarPanel.updatedeleteAppointment(handler, CalendarDialog.DIALOG_TYPE.DELETE_APPOINTMENT, a);
+		}
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(enterRoom, save, delete, cancel);
+	}
+
+	@Override
+	public DialogButton getSubmitButton() {
+		return save;
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onOpen(IPartialPageRequestHandler handler) {
+		handler.add(form.add(new JQueryUIBehavior("#tabs", "tabs")));
+	}
+
+	@Override
+	public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+		if (delete.equals(button)) {
+			confirmDelete.open(handler);
+		} else if (enterRoom.equals(button)) {
+			RoomEnterBehavior.roomEnter((MainPage)getPage(), handler, getModelObject().getRoom().getId());
+		}
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		Appointment a = form.getModelObject();
+		a.setRoom(form.createRoom ? form.appRoom : form.groom.getModelObject());
+		final List<MeetingMember> mms = a.getMeetingMembers() == null ? new ArrayList<>() : a.getMeetingMembers();
+		Set<Long> currentIds = new HashSet<>();
+		List<User> users = new ArrayList<>();
+		if (InviteeType.group == rdi.getModelObject()) {
+			//lets iterate through all group users
+			for (Group g : groups.getModelObject()) {
+				for (GroupUser gu : getBean(GroupUserDao.class).get(g.getId(), 0, Integer.MAX_VALUE)) {
+					User u = gu.getUser();
+					if (!currentIds.contains(u.getId())) {
+						users.add(u);
+						currentIds.add(u.getId());
+					}
+				}
+			}
+		} else {
+			users = new ArrayList<>(attendees.getModelObject());
+			for (User u : users) {
+				if (u.getId() != null) {
+					currentIds.add(u.getId());
+				}
+			}
+		}
+
+		//remove users
+		for (Iterator<MeetingMember> i = mms.iterator(); i.hasNext();) {
+			MeetingMember m = i.next();
+			if (!currentIds.contains(m.getUser().getId())) {
+				i.remove();
+			}
+		}
+		Set<Long> originalIds = new HashSet<>();
+		for (MeetingMember m : mms) {
+			originalIds.add(m.getUser().getId());
+		}
+		//add users
+		for (User u : users) {
+			if (u.getId() == null || !originalIds.contains(u.getId())) {
+				MeetingMember mm = new MeetingMember();
+				mm.setUser(u);
+				mm.setDeleted(false);
+				mm.setInserted(a.getInserted());
+				mm.setUpdated(a.getUpdated());
+				mm.setAppointment(a);
+				mms.add(mm);
+			}
+		}
+		a.setMeetingMembers(mms);
+		a.setStart(getDate(form.start.getModelObject()));
+		a.setEnd(getDate(form.end.getModelObject()));
+		a.setCalendar(form.cals.getModelObject());
+		getBean(AppointmentDao.class).update(a, getUserId());
+		if (a.getCalendar() != null) {
+			calendarPanel.updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
+		}
+		target.add(feedback);
+		calendarPanel.refresh(target);
+	}
+
+	public static boolean isOwner(Appointment object) {
+		return object.getOwner() != null && getUserId().equals(object.getOwner().getId());
+	}
+
+	private class AppointmentForm extends Form<Appointment> {
+		private static final long serialVersionUID = 1L;
+		private boolean createRoom = true;
+		private Room appRoom = null;
+		private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));
+		private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));
+		private final PasswordTextField pwd = new PasswordTextField("password");
+		private final Label owner = new Label("aowner", Model.of(""));
+		private final WebMarkupContainer ownerPanel = new WebMarkupContainer("owner-row");
+		private final WebMarkupContainer createRoomBlock = new WebMarkupContainer("create-room-block", new CompoundPropertyModel<>(appRoom));
+		private final DropDownChoice<Room.Type> roomType = new RoomTypeDropDown("type");
+		private final DropDownChoice<Room> groom = new DropDownChoice<>(
+				"groom"
+				, Model.of(new Room())
+				, getRoomList()
+				, new ChoiceRenderer<Room>("name", "id"));
+		private DropDownChoice<OmCalendar> cals = new DropDownChoice<>(
+				"calendar",
+				new LoadableDetachableModel<List<? extends OmCalendar>>() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected List<? extends OmCalendar> load() {
+						return getCalendarList();
+					}
+				},
+				new ChoiceRenderer<OmCalendar>("title", "id")
+		);
+		private final WebMarkupContainer groupContainer = new WebMarkupContainer("groupContainer");
+
+		private Room createAppRoom() {
+			Room r = new Room();
+			r.setAppointment(true);
+			if (r.getType() == null) {
+				r.setType(Room.Type.conference);
+			}
+			return r;
+		}
+
+		@Override
+		protected void onModelChanged() {
+			super.onModelChanged();
+
+			Appointment a = getModelObject();
+			if (a.getReminder() == null) {
+				a.setReminder(Reminder.none);
+			}
+			if (a.getRoom() == null) {
+				a.setRoom(createAppRoom());
+			}
+			createRoom = a.getRoom().isAppointment();
+			if (createRoom) {
+				appRoom = a.getRoom();
+			} else {
+				groom.setModelObject(a.getRoom());
+				appRoom = createAppRoom();
+			}
+			createRoomBlock.setDefaultModelObject(appRoom);
+			createRoomBlock.setEnabled(createRoom);
+			groom.setEnabled(!createRoom);
+			if (a.getId() == null) {
+				java.util.Calendar start = WebSession.getCalendar();
+				start.setTime(a.getStart());
+				java.util.Calendar end = WebSession.getCalendar();
+				end.setTime(a.getEnd());
+
+				if (start.equals(end)) {
+					end.add(java.util.Calendar.HOUR_OF_DAY, 1);
+					a.setEnd(end.getTime());
+				}
+				cals.setEnabled(true);
+			} else {
+				cals.setEnabled(false);
+			}
+
+			rdi.setModelObject(InviteeType.user);
+			attendees.setModelObject(new ArrayList<>());
+			if (a.getMeetingMembers() != null) {
+				for (MeetingMember mm : a.getMeetingMembers()) {
+					attendees.getModelObject().add(mm.getUser());
+				}
+			}
+			pwd.setEnabled(a.isPasswordProtected());
+			owner.setDefaultModel(Model.of(FormatHelper.formatUser(a.getOwner())));
+			ownerPanel.setVisible(!isOwner(a));
+		}
+
+		public AppointmentForm(String id, CompoundPropertyModel<Appointment> model) {
+			super(id, model);
+			setOutputMarkupId(true);
+
+			add(feedback.setOutputMarkupId(true));
+			//General
+			add(new RequiredTextField<String>("title").setLabel(Model.of(Application.getString(572))));
+			add(ownerPanel.add(owner));
+			boolean showGroups = AuthLevelUtil.hasAdminLevel(getRights());
+			add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					boolean groupsEnabled = InviteeType.group == rdi.getModelObject();
+					target.add(groups.setEnabled(groupsEnabled), attendees.setEnabled(!groupsEnabled));
+				}
+			}));
+			groupContainer.add(
+				groups.setLabel(Model.of(Application.getString(126))).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)
+				, new Radio<>("group", Model.of(InviteeType.group))
+			);
+			if (showGroups) {
+				groups.add(new AjaxFormComponentUpdatingBehavior("change") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						// added to update model
+					}
+				}).setEnabled(false);
+			}
+			rdi.add(attendees.add(new AjaxFormComponentUpdatingBehavior("change") {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						protected void onUpdate(AjaxRequestTarget target) {
+							// added to update model
+						}
+					})
+					, groupContainer.setVisible(showGroups)
+				);
+			rdi.add(new Radio<>("user", Model.of(InviteeType.user)));
+
+			add(new TextField<String>("location"));
+			DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");
+			add(toolbar);
+			add(new WysiwygEditor("description", toolbar));
+
+			//room
+			add(new AjaxCheckBox("createRoom", new PropertyModel<Boolean>(this, "createRoom")) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					createRoom = getConvertedInput();
+					target.add(createRoomBlock.setEnabled(createRoom), groom.setEnabled(!createRoom));
+				}
+			});
+			add(createRoomBlock.add(roomType, new CheckBox("moderated")).setEnabled(createRoom).setOutputMarkupId(true));
+			add(groom.setRequired(true).setLabel(Model.of(Application.getString(406))).setEnabled(!createRoom).setOutputMarkupId(true));
+			add(sipContainer.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true));
+			sipContainer.add(new Label("room.confno", "")).setVisible(false);
+
+			//Advanced
+			add(new DropDownChoice<>(
+					"reminder"
+					, Arrays.asList(Reminder.values())
+					, new IChoiceRenderer<Reminder>() {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public Object getDisplayValue(Reminder art) {
+							return getString("appointment.reminder." + art.name());
+						}
+
+						@Override
+						public String getIdValue(Reminder art, int index) {
+							return art.name();
+						}
+
+						@Override
+						public Reminder getObject(String id, IModel<? extends List<? extends Reminder>> choices) {
+							for (Reminder art : choices.getObject()) {
+								if (art.name().equals(id)) {
+									return art;
+								}
+							}
+							return null;
+						}
+					}));
+			add(new AjaxCheckBox("passwordProtected") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					AppointmentForm.this.getModelObject().setPasswordProtected(getConvertedInput());
+					pwd.setEnabled(AppointmentForm.this.getModelObject().isPasswordProtected());
+					target.add(pwd);
+				}
+			});
+			pwd.setEnabled(getModelObject().isPasswordProtected());
+			pwd.setOutputMarkupId(true);
+			add(pwd);
+			add(cals.setNullValid(true).setLabel(Model.of("calendar")).setOutputMarkupId(true));
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(start.setLabel(Model.of(getString("570"))).setRequired(true)
+					, end.setLabel(Model.of(getString("571"))).setRequired(true));
+		}
+
+		private List<Room> getRoomList() {
+			//FIXME need to be reviewed
+			List<Room> result = new ArrayList<>();
+			RoomDao dao = getBean(RoomDao.class);
+			result.addAll(dao.getPublicRooms());
+			for (GroupUser ou : getBean(UserDao.class).get(getUserId()).getGroupUsers()) {
+				result.addAll(dao.getGroupRooms(ou.getGroup().getId()));
+			}
+			if (getModelObject().getRoom() != null && getModelObject().getRoom().isAppointment()) { //FIXME review
+				result.add(getModelObject().getRoom());
+			}
+			return result;
+		}
+
+		private List<OmCalendar> getCalendarList(){
+			return getBean(AppointmentManager.class).getCalendars(getUserId());
+		}
+
+		@Override
+		protected void onValidate() {
+			if (null != start.getConvertedInput() && null != end.getConvertedInput() && end.getConvertedInput().isBefore(start.getConvertedInput())) {
+				error(Application.getString(1592));
+			}
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
index 3e5cc63..5819d24 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.calendar;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.entity.calendar.Appointment;
-
-import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
-import com.googlecode.wicket.jquery.ui.calendar.CalendarModel;
-import com.googlecode.wicket.jquery.ui.calendar.ICalendarVisitor;
-
-public class AppointmentModel extends CalendarModel implements ICalendarVisitor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public void visit(CalendarEvent event) {
-		//every event can be customized
-	}
-
-	@Override
-	protected List<? extends CalendarEvent> load() {
-		List<CalendarEvent> list = new ArrayList<>();
-		for (Appointment a : getBean(AppointmentDao.class).getInRange(getUserId(), getDate(getStart()), getDate(getEnd()))) {
-			list.add(new OmCalendarEvent(a));
-		}
-		return list;
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+
+import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
+import com.googlecode.wicket.jquery.ui.calendar.CalendarModel;
+import com.googlecode.wicket.jquery.ui.calendar.ICalendarVisitor;
+
+public class AppointmentModel extends CalendarModel implements ICalendarVisitor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public void visit(CalendarEvent event) {
+		//every event can be customized
+	}
+
+	@Override
+	protected List<? extends CalendarEvent> load() {
+		List<CalendarEvent> list = new ArrayList<>();
+		for (Appointment a : getBean(AppointmentDao.class).getInRange(getUserId(), getDate(getStart()), getDate(getEnd()))) {
+			list.add(new OmCalendarEvent(a));
+		}
+		return list;
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
index d15eed3..8f81e1a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class MyRoomsWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-	public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";
-
-	public MyRoomsWidget() {
-		super();
-		location = new WidgetLocation(0, 1);
-		init();
-	}
-	
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString(781L);
-		id = WIDGET_ID_MY_ROOMS;
-	}
-	
-	@Override
-	public WidgetView createView(String viewId) {
-		return new MyRoomsWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class MyRoomsWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";
+
+	public MyRoomsWidget() {
+		super();
+		location = new WidgetLocation(0, 1);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(781L);
+		id = WIDGET_ID_MY_ROOMS;
+	}
+	
+	@Override
+	public WidgetView createView(String viewId) {
+		return new MyRoomsWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
index 5b65f5f..64a1a84 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class MyRoomsWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString(781L);
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString(782L);
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return MyRoomsWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.myrooms";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class MyRoomsWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString(781L);
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString(782L);
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return MyRoomsWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.myrooms";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
index c37eccc..87cfeae 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div wicket:id="rooms"></div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="rooms"></div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
index fee5901..6a9602a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
@@ -1,36 +1,36 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import static org.apache.openmeetings.web.common.UserPanel.getMyRooms;
-
-import org.apache.openmeetings.web.user.rooms.RoomsPanel;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class MyRoomsWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-
-	public MyRoomsWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-		
-		add(new RoomsPanel("rooms", getMyRooms()));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.web.common.UserPanel.getMyRooms;
+
+import org.apache.openmeetings.web.user.rooms.RoomsPanel;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class MyRoomsWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public MyRoomsWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+		
+		add(new RoomsPanel("rooms", getMyRooms()));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
index 20926c3..c6151d9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div wicket:id="dashboard" class="dashboard"></div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="dashboard" class="dashboard"></div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
index 772476f..c1e291e 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
@@ -1,36 +1,36 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.db.util.FormatHelper;
-import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.web.DashboardPanel;
-
-public class OmDashboardPanel extends UserPanel {
-	private static final long serialVersionUID = 1L;
-
-	public OmDashboardPanel(String id) {
-		super(id);
-
-		boolean isRtl = FormatHelper.isRtlLanguage(WebSession.get().getLocale().toLanguageTag());
-		add(new DashboardPanel("dashboard", Model.of(WebSession.getDashboard())).setRtlModel(Model.of(isRtl)));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.db.util.FormatHelper;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.web.DashboardPanel;
+
+public class OmDashboardPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+
+	public OmDashboardPanel(String id) {
+		super(id);
+
+		boolean isRtl = FormatHelper.isRtlLanguage(WebSession.get().getLocale().toLanguageTag());
+		add(new DashboardPanel("dashboard", Model.of(WebSession.getDashboard())).setRtlModel(Model.of(isRtl)));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
index eadac94..f7353b1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidget.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class RecentRoomsWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-	public static final String WIDGET_ID_RECENT_ROOMS = "RecentRoomsWidget";
-
-	public RecentRoomsWidget() {
-		super();
-		location = new WidgetLocation(1, 1);
-		init();
-	}
-
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString("widget.recent.title");
-		id = WIDGET_ID_RECENT_ROOMS;
-	}
-
-	@Override
-	public WidgetView createView(String viewId) {
-		return new RecentRoomsWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RecentRoomsWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_RECENT_ROOMS = "RecentRoomsWidget";
+
+	public RecentRoomsWidget() {
+		super();
+		location = new WidgetLocation(1, 1);
+		init();
+	}
+
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString("widget.recent.title");
+		id = WIDGET_ID_RECENT_ROOMS;
+	}
+
+	@Override
+	public WidgetView createView(String viewId) {
+		return new RecentRoomsWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
index 010e38a..feb2e12 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class RecentRoomsWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString("widget.recent.title");
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString("widget.recent.desc");
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return RecentRoomsWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.recentrooms";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class RecentRoomsWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString("widget.recent.title");
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString("widget.recent.desc");
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return RecentRoomsWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.recentrooms";
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
index c37eccc..87cfeae 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.html
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
-  
--->
-<html xmlns:wicket="http://wicket.apache.org">
-	<wicket:panel>
-		<div wicket:id="rooms"></div>
-	</wicket:panel>
-</html>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="rooms"></div>
+	</wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
index 32b967e..73a3ef9 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RecentRoomsWidgetView.java
@@ -1,38 +1,38 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getUserId;
-
-import org.apache.openmeetings.db.dao.room.RoomDao;
-import org.apache.openmeetings.web.user.rooms.RoomsPanel;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class RecentRoomsWidgetView extends WidgetView {
-	private static final long serialVersionUID = 1L;
-
-	public RecentRoomsWidgetView(String id, Model<Widget> model) {
-		super(id, model);
-
-		add(new RoomsPanel("rooms", getBean(RoomDao.class).getRecent(getUserId())));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.web.user.rooms.RoomsPanel;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RecentRoomsWidgetView extends WidgetView {
+	private static final long serialVersionUID = 1L;
+
+	public RecentRoomsWidgetView(String id, Model<Widget> model) {
+		super(id, model);
+
+		add(new RoomsPanel("rooms", getBean(RoomDao.class).getRecent(getUserId())));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
index aee9f3b..674c350 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
@@ -1,49 +1,49 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.apache.wicket.model.Model;
-import org.wicketstuff.dashboard.AbstractWidget;
-import org.wicketstuff.dashboard.Widget;
-import org.wicketstuff.dashboard.WidgetLocation;
-import org.wicketstuff.dashboard.web.WidgetView;
-
-public class RssWidget extends AbstractWidget {
-	private static final long serialVersionUID = 1L;
-	public static final String WIDGET_ID_RSS = "RssWidget";
-
-	public RssWidget() {
-		super();
-		location = new WidgetLocation(1, 1);
-		init();
-	}
-	
-	@Override
-	public void init() {
-		super.init();
-		title = Application.getString(277L);
-		id = WIDGET_ID_RSS;
-	}
-	
-	@Override
-	public WidgetView createView(String viewId) {
-		return new RssWidgetView(viewId, new Model<Widget>(this));
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.model.Model;
+import org.wicketstuff.dashboard.AbstractWidget;
+import org.wicketstuff.dashboard.Widget;
+import org.wicketstuff.dashboard.WidgetLocation;
+import org.wicketstuff.dashboard.web.WidgetView;
+
+public class RssWidget extends AbstractWidget {
+	private static final long serialVersionUID = 1L;
+	public static final String WIDGET_ID_RSS = "RssWidget";
+
+	public RssWidget() {
+		super();
+		location = new WidgetLocation(1, 1);
+		init();
+	}
+	
+	@Override
+	public void init() {
+		super.init();
+		title = Application.getString(277L);
+		id = WIDGET_ID_RSS;
+	}
+	
+	@Override
+	public WidgetView createView(String viewId) {
+		return new RssWidgetView(viewId, new Model<Widget>(this));
+	}
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/8e63647c/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
index 09487b3..ae33186 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
@@ -1,51 +1,51 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License") +  you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.openmeetings.web.user.dashboard;
-
-import org.apache.openmeetings.web.app.Application;
-import org.wicketstuff.dashboard.WidgetDescriptor;
-
-public class RssWidgetDescriptor implements WidgetDescriptor {
-	private static final long serialVersionUID = 1L;
-
-	@Override
-	public String getName() {
-		return Application.getString(277L);
-	}
-
-	@Override
-	public String getProvider() {
-		return "Apache Openmeetings";
-	}
-
-	@Override
-	public String getDescription() {
-		return Application.getString(277L);
-	}
-
-	@Override
-	public String getWidgetClassName() {
-		return RssWidget.class.getName();
-	}
-
-	@Override
-	public String getTypeName() {
-		return "om.widget.rss";
-	}
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.dashboard;
+
+import org.apache.openmeetings.web.app.Application;
+import org.wicketstuff.dashboard.WidgetDescriptor;
+
+public class RssWidgetDescriptor implements WidgetDescriptor {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public String getName() {
+		return Application.getString(277L);
+	}
+
+	@Override
+	public String getProvider() {
+		return "Apache Openmeetings";
+	}
+
+	@Override
+	public String getDescription() {
+		return Application.getString(277L);
+	}
+
+	@Override
+	public String getWidgetClassName() {
+		return RssWidget.class.getName();
+	}
+
+	@Override
+	public String getTypeName() {
+		return "om.widget.rss";
+	}
+}