/* * Copyright 2012-2013 PrimeFaces Extensions. * * 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. * * $Id$ */ package org.primefaces.extensions.showcase.controller.timeline; import java.io.Serializable; import java.util.Calendar; import java.util.Date; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import org.primefaces.extensions.component.timeline.TimelineUpdater; import org.primefaces.extensions.event.timeline.TimelineSelectEvent; import org.primefaces.extensions.model.timeline.TimelineEvent; import org.primefaces.extensions.model.timeline.TimelineModel; import org.primefaces.extensions.showcase.model.timeline.Task; /** * LinkedTimelinesController * * @author Oleg Varaksin / last modified by $Author: $ * @version $Revision: 1.0 $ */ @ManagedBean @ViewScoped public class LinkedTimelinesController implements Serializable { private TimelineModel modelFirst; // model of the first timeline private TimelineModel modelSecond; // model of the second timeline private boolean aSelected; // flag if the project A is selected (for test of select() call on the 2. model) @PostConstruct protected void initialize() { createFirstTimeline(); createSecondTimeline(); } private void createFirstTimeline() { modelFirst = new TimelineModel(); Calendar cal = Calendar.getInstance(); cal.set(2012, Calendar.AUGUST, 22, 17, 30, 0); modelFirst.add(new TimelineEvent(new Task("Mail from boss", "timeline/mail.png", false), cal.getTime())); cal.set(2012, Calendar.AUGUST, 23, 23, 0, 0); modelFirst.add(new TimelineEvent(new Task("Call back my boss", "timeline/callback.png", false), cal.getTime())); cal.set(2012, Calendar.AUGUST, 24, 21, 45, 0); modelFirst.add(new TimelineEvent(new Task("Travel to Spain", "timeline/location.png", false), cal.getTime())); cal.set(2012, Calendar.AUGUST, 26, 0, 0, 0); Date startWork = cal.getTime(); cal.set(2012, Calendar.SEPTEMBER, 2, 0, 0, 0); Date endWork = cal.getTime(); modelFirst.add(new TimelineEvent(new Task("Do homework", "timeline/homework.png", true), startWork, endWork)); cal.set(2012, Calendar.AUGUST, 28, 0, 0, 0); modelFirst.add(new TimelineEvent(new Task("Create memo", "timeline/memo.png", false), cal.getTime())); cal.set(2012, Calendar.AUGUST, 31, 0, 0, 0); Date startReport = cal.getTime(); cal.set(2012, Calendar.SEPTEMBER, 3, 0, 0, 0); Date endReport = cal.getTime(); modelFirst.add(new TimelineEvent(new Task("Create report", "timeline/report.png", true), startReport, endReport)); } private void createSecondTimeline() { modelSecond = new TimelineModel(); Calendar cal = Calendar.getInstance(); cal.set(2012, Calendar.AUGUST, 23, 0, 0, 0); Date startProject = cal.getTime(); cal.set(2012, Calendar.AUGUST, 30, 0, 0, 0); Date endProject = cal.getTime(); modelSecond.add(new TimelineEvent("Project A", startProject, endProject)); cal.set(2012, Calendar.AUGUST, 27, 0, 0, 0); startProject = cal.getTime(); cal.set(2012, Calendar.AUGUST, 31, 0, 0, 0); endProject = cal.getTime(); modelSecond.add(new TimelineEvent("Project B", startProject, endProject)); } public void onSelect(TimelineSelectEvent e) { // get a thread-safe TimelineUpdater instance for the second timeline TimelineUpdater timelineUpdater = TimelineUpdater.getCurrentInstance(":mainForm:timelineSecond"); if (aSelected) { // select project B visually (index in the event's list is 1) timelineUpdater.select(1); } else { // select project A visually (index in the event's list is 0) timelineUpdater.select(0); } aSelected = !aSelected; FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Selected project: " + (aSelected ? "A" : "B"), null); FacesContext.getCurrentInstance().addMessage(null, msg); } public TimelineModel getModelFirst() { return modelFirst; } public TimelineModel getModelSecond() { return modelSecond; } }