/* * Copyright 2000-2014 Vaadin Ltd. * * Licensed 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 com.vaadin.v7.tests.components.calendar; import java.util.Arrays; import java.util.Date; import java.util.List; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.v7.shared.ui.calendar.CalendarState.EventSortOrder; import com.vaadin.v7.ui.Calendar; import com.vaadin.v7.ui.components.calendar.event.BasicEvent; import com.vaadin.v7.ui.components.calendar.event.CalendarEvent; import com.vaadin.v7.ui.components.calendar.event.CalendarEventProvider; /** * * Test UI for event sorting in calendar month and week views. * * @author Vaadin Ltd */ public class CalendarEventsSort extends AbstractTestUI { @Override protected void setup(VaadinRequest request) { getContent().setSizeFull(); final Calendar calendar = new Calendar("Test calendar"); toMonthView(calendar); calendar.setEventSortOrder(EventSortOrder.UNSORTED); calendar.setEventProvider(createEventProvider()); addComponent(calendar); createSortByDateButton(calendar); createSortByDurationButton(calendar); createSortByProviderButton(calendar); createViewSwitchButton(calendar); } private void createViewSwitchButton(final Calendar calendar) { Button toWeek = new Button("Switch to week view", new ClickListener() { @Override public void buttonClick(ClickEvent event) { Button button = event.getButton(); Boolean month = (Boolean) button.getData(); button.setData(!month); if (month) { button.setCaption("Switch to month view"); toWeekView(calendar); } else { button.setCaption("Switch to week view"); toMonthView(calendar); } } }); toWeek.addStyleName("view"); toWeek.setData(true); addComponent(toWeek); } private Button createSortByProviderButton(final Calendar calendar) { Button byProvider = new Button("Sort by provider", new ClickListener() { @Override public void buttonClick(ClickEvent event) { calendar.setEventSortOrder(EventSortOrder.UNSORTED); } }); byProvider.addStyleName("by-provider"); addComponent(byProvider); return byProvider; } private void createSortByDurationButton(final Calendar calendar) { Button byDuration = new Button("Sort by duration DESC", new ClickListener() { @Override public void buttonClick(ClickEvent event) { Button button = event.getButton(); EventSortOrder order = (EventSortOrder) button .getData(); if (EventSortOrder.DURATION_DESC.equals(order)) { order = EventSortOrder.DURATION_ASC; button.setCaption("Sort by duration DESC"); addSortOrder(true, button); } else { order = EventSortOrder.DURATION_DESC; button.setCaption("Sort by duration ASC"); addSortOrder(false, button); } button.setData(order); calendar.setEventSortOrder(order); } }); byDuration.addStyleName("by-duration"); byDuration.setData(EventSortOrder.DURATION_ASC); addComponent(byDuration); } private void createSortByDateButton(final Calendar calendar) { Button byStartDate = new Button("Sort by start date DESC", new ClickListener() { @Override public void buttonClick(ClickEvent event) { Button button = event.getButton(); EventSortOrder order = (EventSortOrder) button .getData(); if (EventSortOrder.START_DATE_DESC.equals(order)) { order = EventSortOrder.START_DATE_ASC; button.setCaption("Sort by start date DESC"); addSortOrder(true, button); } else { order = EventSortOrder.START_DATE_DESC; button.setCaption("Sort by start date ASC"); addSortOrder(false, button); } button.setData(order); calendar.setEventSortOrder(order); } }); byStartDate.setData(EventSortOrder.START_DATE_ASC); byStartDate.addStyleName("by-start-date"); addComponent(byStartDate); } private CalendarEventProvider createEventProvider() { CalendarEventProvider provider = new CalendarEventProvider() { @Override public List<CalendarEvent> getEvents(Date startDate, Date endDate) { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(java.util.Calendar.HOUR_OF_DAY, 5); cal.set(java.util.Calendar.MINUTE, 0); cal.set(java.util.Calendar.SECOND, 0); cal.set(java.util.Calendar.MILLISECOND, 0); Date start = cal.getTime(); cal.add(java.util.Calendar.HOUR_OF_DAY, 2); Date end = cal.getTime(); CalendarEvent event1 = new BasicEvent("first", "descr1", start, end); cal.set(java.util.Calendar.HOUR_OF_DAY, 2); start = cal.getTime(); cal.add(java.util.Calendar.HOUR_OF_DAY, 4); end = cal.getTime(); CalendarEvent event2 = new BasicEvent("second", "descr2", start, end); cal.set(java.util.Calendar.HOUR_OF_DAY, 1); start = cal.getTime(); cal.add(java.util.Calendar.HOUR_OF_DAY, 2); end = cal.getTime(); CalendarEvent event3 = new BasicEvent("third", "descr2", start, end); return Arrays.asList(event1, event2, event3); } }; return provider; } private void addSortOrder(boolean ascending, Button button) { if (ascending) { button.addStyleName("asc"); button.removeStyleName("desc"); } else { button.removeStyleName("asc"); button.addStyleName("desc"); } } private void toMonthView(final Calendar calendar) { final java.util.Calendar cal = java.util.Calendar.getInstance(); cal.add(java.util.Calendar.DAY_OF_YEAR, -2); calendar.setStartDate(cal.getTime()); cal.add(java.util.Calendar.DAY_OF_YEAR, 14); calendar.setEndDate(cal.getTime()); } private void toWeekView(final Calendar calendar) { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.add(java.util.Calendar.DAY_OF_YEAR, 2); calendar.setEndDate(cal.getTime()); } @Override public String getDescription() { return "Make event sorting strategy customizable."; } @Override protected Integer getTicketNumber() { return 14849; } }