Scheduling
Meeting Scheduler
View Source
Event calendar with drag-and-drop and recurring events.
Meeting Scheduler
Manage your team meetings and appointments
Team Meeting
Client Call
Review
Training
Upcoming Today
9:00 AM
Daily Standup
Team Meeting11:00 AM
Project Review
Review2:00 PM
Client Demo
Client Call4:00 PM
Sprint Planning
Team MeetingThis Week
Total Meetings24
Team Meetings12
Client Calls6
Training Sessions4
Available Hours18h
Explore More Demos
Oorian Core
Task Manager
Interactive task manager demonstrating pure Oorian features: forms, tables, e...
Oorian Core
Browser APIs
Access browser features from Java: Geolocation, Clipboard, Storage, Notificat...
Maps
Weather Forecast
Real-time weather app with current conditions, 10-day forecast, hourly temper...
MeetingSchedulerDemo.java
✕
/***********************************************************************************
* Copyright (c) 2025 Corvus Engineering
* All Rights Reserved
***********************************************************************************/
package com.oorian.website.demos;
import com.oorian.css.*;
import com.oorian.fullcalendar.FcCalendar;
import com.oorian.fullcalendar.FcEvent;
import com.oorian.fullcalendar.enums.CalendarView;
import com.oorian.html.elements.*;
/****************************************************************************************************************
* Meeting Scheduler demo component.
* Showcases a complete meeting scheduler with FullCalendar.
****************************************************************************************************************/
public class MeetingSchedulerDemo extends Div
{
public MeetingSchedulerDemo()
{
createScheduler();
}
private void createScheduler()
{
// Main container
setPadding("40px");
setBackgroundColor("#f8fafc");
Div container = new Div();
container.setMaxWidth("1400px");
container.setMargin("0 auto");
// Header
container.addElement(createHeader());
// Main content area
container.addElement(createMainContent());
addElement(container);
}
private Div createHeader()
{
Div header = new Div();
header.setDisplay(Display.FLEX);
header.setJustifyContent(JustifyContent.SPACE_BETWEEN);
header.setAlignItems(AlignItems.CENTER);
header.setMarginBottom("24px");
Div titleSection = new Div();
H2 title = new H2();
title.setText("Meeting Scheduler");
title.setColor("#1f2937");
title.setFontSize("28px");
title.setFontWeight("700");
title.setMarginTop("0");
title.setMarginBottom("4px");
titleSection.addElement(title);
P subtitle = new P();
subtitle.setText("Manage your team meetings and appointments");
subtitle.setColor("#6b7280");
subtitle.setFontSize("15px");
subtitle.setMargin("0");
titleSection.addElement(subtitle);
header.addElement(titleSection);
// Legend
Div legend = new Div();
legend.setDisplay(Display.FLEX);
legend.addStyleAttribute("gap", "16px");
legend.setAlignItems(AlignItems.CENTER);
legend.addElement(createLegendItem("Team Meeting", "#3b82f6"));
legend.addElement(createLegendItem("Client Call", "#10b981"));
legend.addElement(createLegendItem("Review", "#f59e0b"));
legend.addElement(createLegendItem("Training", "#8b5cf6"));
header.addElement(legend);
return header;
}
private Div createLegendItem(String label, String color)
{
Div item = new Div();
item.setDisplay(Display.FLEX);
item.setAlignItems(AlignItems.CENTER);
item.addStyleAttribute("gap", "6px");
Div dot = new Div();
dot.setWidth("10px");
dot.setHeight("10px");
dot.setBorderRadius("50%");
dot.setBackgroundColor(color);
item.addElement(dot);
Span text = new Span();
text.setText(label);
text.setColor("#6b7280");
text.setFontSize("13px");
item.addElement(text);
return item;
}
private Div createMainContent()
{
Div content = new Div();
content.setDisplay(Display.GRID);
content.addStyleAttribute("grid-template-columns", "280px 1fr");
content.addStyleAttribute("gap", "24px");
// Sidebar
content.addElement(createSidebar());
// Calendar
content.addElement(createCalendarCard());
return content;
}
private Div createSidebar()
{
Div sidebar = new Div();
// Upcoming meetings card
sidebar.addElement(createUpcomingMeetingsCard());
// Quick stats card
sidebar.addElement(createQuickStatsCard());
return sidebar;
}
private Div createUpcomingMeetingsCard()
{
Div card = new Div();
card.setBackgroundColor("#ffffff");
card.setBorderRadius("12px");
card.setPadding("20px");
card.addStyleAttribute("box-shadow", "0 1px 3px rgba(0, 0, 0, 0.1)");
card.setMarginBottom("20px");
H4 title = new H4();
title.setText("Upcoming Today");
title.setColor("#1f2937");
title.setFontSize("15px");
title.setFontWeight("600");
title.setMarginTop("0");
title.setMarginBottom("16px");
card.addElement(title);
card.addElement(createUpcomingItem("9:00 AM", "Daily Standup", "Team Meeting", "#3b82f6"));
card.addElement(createUpcomingItem("11:00 AM", "Project Review", "Review", "#f59e0b"));
card.addElement(createUpcomingItem("2:00 PM", "Client Demo", "Client Call", "#10b981"));
card.addElement(createUpcomingItem("4:00 PM", "Sprint Planning", "Team Meeting", "#3b82f6"));
return card;
}
private Div createUpcomingItem(String time, String title, String category, String color)
{
Div item = new Div();
item.setDisplay(Display.FLEX);
item.addStyleAttribute("gap", "12px");
item.setPadding("10px 0");
item.addStyleAttribute("border-bottom", "1px solid #f1f5f9");
Div timeContainer = new Div();
timeContainer.setMinWidth("70px");
Span timeText = new Span();
timeText.setText(time);
timeText.setColor("#6b7280");
timeText.setFontSize("12px");
timeContainer.addElement(timeText);
item.addElement(timeContainer);
Div details = new Div();
Div titleRow = new Div();
titleRow.setDisplay(Display.FLEX);
titleRow.setAlignItems(AlignItems.CENTER);
titleRow.addStyleAttribute("gap", "8px");
Div indicator = new Div();
indicator.setWidth("3px");
indicator.setHeight("12px");
indicator.setBorderRadius("2px");
indicator.setBackgroundColor(color);
titleRow.addElement(indicator);
Span titleText = new Span();
titleText.setText(title);
titleText.setColor("#1f2937");
titleText.setFontSize("13px");
titleText.setFontWeight("500");
titleRow.addElement(titleText);
details.addElement(titleRow);
Span categoryText = new Span();
categoryText.setText(category);
categoryText.setColor("#9ca3af");
categoryText.setFontSize("11px");
categoryText.setDisplay(Display.BLOCK);
categoryText.setMarginTop("2px");
details.addElement(categoryText);
item.addElement(details);
return item;
}
private Div createQuickStatsCard()
{
Div card = new Div();
card.setBackgroundColor("#ffffff");
card.setBorderRadius("12px");
card.setPadding("20px");
card.addStyleAttribute("box-shadow", "0 1px 3px rgba(0, 0, 0, 0.1)");
H4 title = new H4();
title.setText("This Week");
title.setColor("#1f2937");
title.setFontSize("15px");
title.setFontWeight("600");
title.setMarginTop("0");
title.setMarginBottom("16px");
card.addElement(title);
card.addElement(createStatItem("Total Meetings", "24"));
card.addElement(createStatItem("Team Meetings", "12"));
card.addElement(createStatItem("Client Calls", "6"));
card.addElement(createStatItem("Training Sessions", "4"));
card.addElement(createStatItem("Available Hours", "18h"));
return card;
}
private Div createStatItem(String label, String value)
{
Div item = new Div();
item.setDisplay(Display.FLEX);
item.setJustifyContent(JustifyContent.SPACE_BETWEEN);
item.setAlignItems(AlignItems.CENTER);
item.setPadding("8px 0");
item.addStyleAttribute("border-bottom", "1px solid #f1f5f9");
Span labelText = new Span();
labelText.setText(label);
labelText.setColor("#6b7280");
labelText.setFontSize("13px");
item.addElement(labelText);
Span valueText = new Span();
valueText.setText(value);
valueText.setColor("#1f2937");
valueText.setFontSize("14px");
valueText.setFontWeight("600");
item.addElement(valueText);
return item;
}
private Div createCalendarCard()
{
Div card = new Div();
card.setBackgroundColor("#ffffff");
card.setBorderRadius("12px");
card.setPadding("24px");
card.addStyleAttribute("box-shadow", "0 1px 3px rgba(0, 0, 0, 0.1)");
// Create calendar
FcCalendar calendar = new FcCalendar();
calendar.setInitialView(CalendarView.TIME_GRID_WEEK);
calendar.setCalendarHeight(650);
calendar.setHeaderToolbar("prev,next today", "title", "dayGridMonth,timeGridWeek,timeGridDay");
calendar.setSlotMinTime("07:00:00");
calendar.setSlotMaxTime("20:00:00");
calendar.setSlotDuration("00:30:00");
calendar.setNowIndicator(true);
calendar.setWeekNumbers(true);
calendar.setNavLinks(true);
calendar.setBusinessHours(true);
calendar.setFirstDay(1); // Start on Monday
// Add sample meetings
addSampleEvents(calendar);
card.addElement(calendar);
return card;
}
private void addSampleEvents(FcCalendar calendar)
{
// Daily standup - recurring
FcEvent standup = FcEvent.recurring("standup", "Daily Standup", new int[]{1, 2, 3, 4, 5}, "09:00", "09:30")
.setBackgroundColor("#3b82f6")
.setBorderColor("#2563eb");
calendar.addEvent(standup);
// Team meeting on Monday
calendar.addEvent(new FcEvent("tm1", "Sprint Planning")
.setStart("2025-01-13T10:00:00")
.setEnd("2025-01-13T11:30:00")
.setBackgroundColor("#3b82f6")
.setBorderColor("#2563eb"));
// Client call
calendar.addEvent(new FcEvent("cc1", "Acme Corp - Project Kickoff")
.setStart("2025-01-13T14:00:00")
.setEnd("2025-01-13T15:00:00")
.setBackgroundColor("#10b981")
.setBorderColor("#059669"));
// Review meeting
calendar.addEvent(new FcEvent("rv1", "Code Review - Auth Module")
.setStart("2025-01-14T11:00:00")
.setEnd("2025-01-14T12:00:00")
.setBackgroundColor("#f59e0b")
.setBorderColor("#d97706"));
// Training session
calendar.addEvent(new FcEvent("tr1", "Security Best Practices")
.setStart("2025-01-14T14:00:00")
.setEnd("2025-01-14T16:00:00")
.setBackgroundColor("#8b5cf6")
.setBorderColor("#7c3aed"));
// Client demo
calendar.addEvent(new FcEvent("cc2", "Demo - Beta Features")
.setStart("2025-01-15T10:00:00")
.setEnd("2025-01-15T11:00:00")
.setBackgroundColor("#10b981")
.setBorderColor("#059669"));
// Team retrospective
calendar.addEvent(new FcEvent("tm2", "Sprint Retrospective")
.setStart("2025-01-15T15:00:00")
.setEnd("2025-01-15T16:00:00")
.setBackgroundColor("#3b82f6")
.setBorderColor("#2563eb"));
// 1:1 meeting
calendar.addEvent(new FcEvent("tm3", "1:1 with Manager")
.setStart("2025-01-16T11:00:00")
.setEnd("2025-01-16T11:30:00")
.setBackgroundColor("#3b82f6")
.setBorderColor("#2563eb"));
// Design review
calendar.addEvent(new FcEvent("rv2", "UI/UX Design Review")
.setStart("2025-01-16T14:00:00")
.setEnd("2025-01-16T15:00:00")
.setBackgroundColor("#f59e0b")
.setBorderColor("#d97706"));
// Friday training
calendar.addEvent(new FcEvent("tr2", "New Developer Onboarding")
.setStart("2025-01-17T10:00:00")
.setEnd("2025-01-17T12:00:00")
.setBackgroundColor("#8b5cf6")
.setBorderColor("#7c3aed"));
// All hands meeting
calendar.addEvent(new FcEvent("tm4", "All Hands Meeting")
.setStart("2025-01-17T14:00:00")
.setEnd("2025-01-17T15:30:00")
.setBackgroundColor("#3b82f6")
.setBorderColor("#2563eb"));
}
}