de.heartbeat.backend.dashboard.HeartBeatOverview.java Source code

Java tutorial

Introduction

Here is the source code for de.heartbeat.backend.dashboard.HeartBeatOverview.java

Source

/*
 * Copyright 2015 momo.
 *
 * 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 de.heartbeat.backend.dashboard;

import de.heartbeat.backend.HomePage;
import com.skype.Skype;
import com.skype.SkypeException;
import de.heartbeat.backend.skype.Constants;
import de.heartbeat.datastorage.HibernateUtil;
import de.heartbeat.datastorage.entities.HeartBeat;
import de.heartbeat.datastorage.entities.Person;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.time.Duration;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

/**
 *
 * @author momo
 */
public class HeartBeatOverview extends HomePage {

    private final SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    private final List<HeartBeat> heartBeatList = new ArrayList<>();
    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    Session session;

    public HeartBeatOverview(PageParameters parameters) {
        super(parameters);
        final WebMarkupContainer table = new WebMarkupContainer("table");
        WebMarkupContainer alertTable = new WebMarkupContainer("alertTable");
        table.setOutputMarkupId(true);
        table.add(new AbstractAjaxTimerBehavior(Duration.seconds(10)) {

            @Override
            protected void onTimer(AjaxRequestTarget art) {
                heartBeatList.clear();
                session = sessionFactory.openSession();
                session.beginTransaction();
                heartBeatList
                        .addAll(session.createCriteria(HeartBeat.class).add(Restrictions.eq("alert", true)).list());
                session.getTransaction().commit();
                session.close();
                Collections.sort(heartBeatList);
                Collections.reverse(heartBeatList);
                art.add(table);
            }
        });

        session = sessionFactory.openSession();
        session.beginTransaction();
        heartBeatList.addAll(session.createCriteria(HeartBeat.class).add(Restrictions.eq("alert", true)).list());

        session.getTransaction().commit();
        session.close();
        Collections.sort(heartBeatList);
        Collections.reverse(heartBeatList);

        ListView alertView = new ListView("heartBeatAlertView", heartBeatList) {
            @Override
            protected void populateItem(ListItem item) {
                final HeartBeat hb = (HeartBeat) item.getModelObject();
                final Person pers = hb.getPerson();
                DateTime date = new DateTime(hb.getTime());
                DateTimeFormatter fmt = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss");
                String str = fmt.print(date);
                item.add(new Label("name", pers.getFirstName() + " " + pers.getLastName()));
                item.add(new Label("time", str));
                item.add(new Label("pulse", hb.getPulse()));
                item.add(new Label("adress", pers.getAdress()));
                item.add(new Link("skypeCall") {
                    @Override
                    public void onClick() {
                        try {
                            hb.setCalled(true);
                            Session session = sessionFactory.openSession();
                            session.beginTransaction();
                            session.saveOrUpdate(hb);
                            session.getTransaction().commit();
                            session.close();
                            Skype.call(Constants.SKYPE_FRIEND_NICKNAME);
                        } catch (SkypeException ex) {
                            Logger.getLogger(HeartBeatOverview.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                });

                item.add(new Link("skypeMessage") {
                    @Override
                    public void onClick() {
                        try {
                            String message = "dude, dein Puls";
                            Skype.chat(Constants.SKYPE_FRIEND_NICKNAME).send(message);
                        } catch (SkypeException ex) {
                            Logger.getLogger(HeartBeatOverview.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                });
                Link emergency = new Link("emergency") {
                    @Override
                    public void onClick() {
                        hb.setAlert(true);
                        hb.setEmergency(true);
                        Session session = sessionFactory.openSession();
                        session.beginTransaction();
                        session.saveOrUpdate(hb);
                        session.getTransaction().commit();
                        session.close();
                    }
                };
                Link archive = new Link("archived") {
                    @Override
                    public void onClick() {
                        hb.setCalled(false);
                        hb.setAlert(false);
                        hb.setArchived(true);
                        Session session = sessionFactory.openSession();
                        session.beginTransaction();
                        session.saveOrUpdate(hb);
                        session.getTransaction().commit();
                        session.close();
                        heartBeatList.remove(hb);
                    }
                };

                emergency.setVisible(hb.isCalled());
                item.add(emergency);
                archive.setVisible(hb.isEmergency());
                item.add(archive);
            }
        };

        alertTable.add(alertView);
        table.add(alertTable);
        add(table);
    }

}