[RESOLVIDO]Evento Move + Schedule Primefaces

Olá pessoal…

Eu consigo mover os eventos do calendário com o código abaixo e assim que movo, atualizo no banco de dados. Até então, nenhum problema.

XML

 <p:ajax event="eventMove" listener="#{agendarConsulta.onEventMove}" update="messages" process="formSchedule"/>

Bean

public void onEventMove(ScheduleEntryMoveEvent eventMove) {
        Date startDate = ((DefaultScheduleEvent) eventMove.getScheduleEvent()).getStartDate();
        Date endDate = ((DefaultScheduleEvent) eventMove.getScheduleEvent()).getEndDate();
        Object data = ((DefaultScheduleEvent) eventMove.getScheduleEvent()).getData();

        String mensagem = aCC.atualizarDataHoraConsulta(startDate, endDate, data);
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "", mensagem);
        addMessage(message);
        atualizarAgenda();
    }

Após mover um evento, quando movo qualquer outro evento, ocorre o erro:

Out 23, 2012 7:15:14 PM com.sun.faces.context.PartialViewContextImpl processPartial
Informações: java.lang.NullPointerException
java.lang.NullPointerException
	at org.primefaces.component.schedule.Schedule.queueEvent(Schedule.java:379)
	at org.primefaces.component.behavior.ajax.AjaxBehaviorRenderer.decode(AjaxBehaviorRenderer.java:42)
	at javax.faces.component.behavior.ClientBehaviorBase.decode(ClientBehaviorBase.java:132)
	at org.primefaces.renderkit.CoreRenderer.decodeBehaviors(CoreRenderer.java:328)
	at org.primefaces.component.schedule.ScheduleRenderer.decode(ScheduleRenderer.java:37)
	at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
	at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1181)
	at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
	at javax.faces.component.UIForm.visitTree(UIForm.java:381)
	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
	at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
	at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
	at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)

Resumindo, eu consigo mover apenas um evento, sem precisar regarregar a página. Alguém sabe onde estou errado?
Quando movo os eventos, atualizo o calendário, trazendo novamente os dados do banco…

Acrescentando mais informações…

Após um debug, vi que o evento ‘ScheduleEntryMoveEvent’ se quer é disparado na segunda vez que movo um evento do calendário… Não importa se é o mesmo evento ou um evento que ainda não havia sido movido.

Bom… não obtive respostas aqui, mas caso alguém passe pelo mesmo problema, eis a solução…

Ao final do metódo onEventMove, estava chamando um método para atualizar a agenda. Acontece que o método é executado também no construtor, para carregar a agenda quando for aberta pela primeira vez. Após tirar a chamada do método atualizarAgenda() do evento, o problema foi resolvido.

public void onEventMove(ScheduleEntryMoveEvent eventMove) {
        Date startDate = ((DefaultScheduleEvent) eventMove.getScheduleEvent()).getStartDate();
        Date endDate = ((DefaultScheduleEvent) eventMove.getScheduleEvent()).getEndDate();
        Object data = ((DefaultScheduleEvent) eventMove.getScheduleEvent()).getData();

        String mensagem = aCC.atualizarDataHoraConsulta(startDate, endDate, data);
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "", mensagem);
        addMessage(message);
      //  atualizarAgenda();    Aqui estava o problema.
    }

Método Atualiza Agenda

public final void atualizaAgenda(){
eventModel = new DefaultScheduleModel();
List<TbConsulta> agenda = aCC.recuperaAgenda();
for(TbConsulta consulta : agenda) {
 eventModel.addEvent(new DefaultScheduleEvent(consulta.getTbUsuarioByIdPaciente().getNomeCompleto, consulta.getDataConsultaInicio(), consulta.getDataConsultaFim(), consulta.getIdConsulta()));
 }
}