protected void onInitialize()

in openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java [123:331]


	protected void onInitialize() {
		final Form<Date> form = new Form<>("form");
		add(form);

		dialog = new AppointmentDialog("calendarAppointment", this, new CompoundPropertyModel<>(getDefault()));
		add(dialog);

		boolean isRtl = isRtl();
		Options options = new Options()
				.set("direction", Options.asString(isRtl ? "rtl" : "ltr"))
				.set("height", Options.asString("100%"))
				.set("customButtons", "{gotoBtn: {text: ' ', click: onOmGotoClick}}")
				.set("headerToolbar", "{start: 'prevYear,prev,next,nextYear today,gotoBtn', center: 'title', end: 'dayGridMonth,timeGridWeek,timeGridDay'}")
				.set("allDaySlot", false)
				.set("nowIndicator", true)
				.set("defaultTimedEventDuration", Options.asString("01:00"))
				.set("selectMirror", true)

				.set("themeSystem", Options.asString("bootstrap5"))
				.set("buttonIcons", new JSONObject()
						.put("close", "bi fa-solid fa-times")
						.put("prev", isRtl ? "bi fa-solid fa-chevron-right" : "bi fa-solid fa-chevron-left")
						.put("next", isRtl ? "bi fa-solid fa-chevron-left" : "bi fa-solid fa-chevron-right")
						.put("prevYear", isRtl ? "bi fa-solid fa-angles-right" : "bi fa-solid fa-angles-left")
						.put("nextYear", isRtl ? "bi fa-solid fa-angles-left" : "bi fa-solid fa-angles-right")
						.toString())
				.set("buttonText", new JSONObject()
						.put("month", getString("801"))
						.put("week", getString("800"))
						.put("day", getString("799"))
						.put("today", getString("1555"))
						.toString())

				.set("locale", Options.asString(WebSession.get().getLocale().toLanguageTag()));

		calendar = new Calendar("calendar", new AppointmentModel(), options) {
			private static final long serialVersionUID = 1L;

			@Override
			public boolean isSelectable() {
				return true;
			}

			@Override
			public boolean isDateClickEnabled() {
				return true;
			}

			@Override
			public boolean isEventClickEnabled() {
				return true;
			}

			@Override
			public boolean isEventDropEnabled() {
				return true;
			}

			@Override
			public boolean isEventResizeEnabled() {
				return true;
			}

			//no need to override onDayClick
			@Override
			public void onSelect(AjaxRequestTarget target, CalendarView view, LocalDateTime start, LocalDateTime end, boolean allDay) {
				Appointment a = getDefault();
				LocalDateTime s = start, e = end;
				if (CalendarView.dayGridMonth == view) {
					LocalDateTime now = ZonedDateTime.now(getZoneId()).toLocalDateTime();
					s = start.withHour(now.getHour()).withMinute(now.getMinute());
					e = s.plus(1, ChronoUnit.HOURS);
				}
				a.setStart(getDate(s));
				a.setEnd(getDate(e));
				dialog.setModelObjectWithAjaxTarget(a, target);

				dialog.show(target);
			}

			@Override
			public void onEventClick(AjaxRequestTarget target, CalendarView view, String eventId) {
				if (!StringUtils.isNumeric(eventId)) {
					return;
				}
				Appointment a = apptDao.get(Long.valueOf(eventId));
				dialog.setModelObjectWithAjaxTarget(a, target);

				dialog.show(target);
			}

			@Override
			public void onEventDrop(AjaxRequestTarget target, String eventId, DateTimeDelta delta, boolean allDay) {
				if (!StringUtils.isNumeric(eventId)) {
					refresh(target);
					return;
				}
				Appointment a = apptDao.get(Long.valueOf(eventId));
				if (!AppointmentDialog.isOwner(a)) {
					return;
				}
				java.util.Calendar cal = WebSession.getCalendar();
				cal.setTime(a.getStart());
				cal.add(java.util.Calendar.YEAR, delta.years());
				cal.add(java.util.Calendar.MONTH, delta.months());
				cal.add(java.util.Calendar.DAY_OF_MONTH, delta.days());
				cal.add(java.util.Calendar.MILLISECOND, delta.millis());
				a.setStart(cal.getTime());

				cal.setTime(a.getEnd());
				cal.add(java.util.Calendar.YEAR, delta.years());
				cal.add(java.util.Calendar.MONTH, delta.months());
				cal.add(java.util.Calendar.DAY_OF_MONTH, delta.days());
				cal.add(java.util.Calendar.MILLISECOND, delta.millis());
				a.setEnd(cal.getTime());

				apptDao.update(a, getUserId());

				if (a.getCalendar() != null) {
					updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
				}
			}

			@Override
			public void onEventResize(AjaxRequestTarget target, String eventId, DateTimeDelta delta) {
				if (!StringUtils.isNumeric(eventId)) {
					refresh(target);
					return;
				}
				Appointment a = apptDao.get(Long.valueOf(eventId));
				if (!AppointmentDialog.isOwner(a)) {
					return;
				}
				java.util.Calendar cal = WebSession.getCalendar();
				cal.setTime(a.getEnd());
				cal.add(java.util.Calendar.YEAR, delta.years());
				cal.add(java.util.Calendar.MONTH, delta.months());
				cal.add(java.util.Calendar.DAY_OF_MONTH, delta.days());
				cal.add(java.util.Calendar.MILLISECOND, delta.millis());
				a.setEnd(cal.getTime());

				apptDao.update(a, getUserId());

				if (a.getCalendar() != null) {
					updatedeleteAppointment(target, CalendarDialog.DIALOG_TYPE.UPDATE_APPOINTMENT, a);
				}
			}
		};

		form.add(calendar);

		populateGoogleCalendars();

		add(refreshTimer);
		add(syncTimer);

		calendarDialog = new CalendarDialog("calendarDialog", this, new CompoundPropertyModel<>(getDefaultCalendar()));

		add(calendarDialog);

		calendarListContainer.setOutputMarkupId(true);
		calendarListContainer.add(new ListView<>("items", new LoadableDetachableModel<List<OmCalendar>>() {
			private static final long serialVersionUID = 1L;

			@Override
			protected List<OmCalendar> load() {
				List<OmCalendar> cals = new ArrayList<>(apptManager.getCalendars(getUserId()));
				cals.addAll(apptManager.getGoogleCalendars(getUserId()));
				return cals;
			}
		}) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void populateItem(final ListItem<OmCalendar> item) {
				item.setOutputMarkupId(true);
				final OmCalendar cal = item.getModelObject();
				item.add(new WebMarkupContainer("item")
						.add(new Label("name", cal.getTitle())));
				item.add(AjaxEventBehavior.onEvent(EVT_CLICK, target -> {
					calendarDialog.show(target, CalendarDialog.DIALOG_TYPE.UPDATE_CALENDAR, cal);
					target.add(calendarDialog);
				}));
			}
		});

		add(new BootstrapAjaxLink<String>("syncCalendarButton", null, Buttons.Type.Outline_Primary, new ResourceModel("calendar.sync")) {
			private static final long serialVersionUID = 1L;

			@Override
			public void onClick(AjaxRequestTarget target) {
				syncCalendar(target);
			}
		}.setSize(Buttons.Size.Small));

		add(new BootstrapAjaxLink<String>("submitCalendar", null, Buttons.Type.Outline_Primary, new ResourceModel("calendar.addCalendar")) {
			private static final long serialVersionUID = 1L;

			@Override
			public void onClick(AjaxRequestTarget target) {
				calendarDialog.show(target, CalendarDialog.DIALOG_TYPE.UPDATE_CALENDAR, getDefaultCalendar());
				target.add(calendarDialog);
			}
		}.setSize(Buttons.Size.Small));

		add(calendarListContainer);

		super.onInitialize();
	}