dhz.skz.citaci.weblogger.zerospan.WebloggerZeroSpanCitacBean.java Source code

Java tutorial

Introduction

Here is the source code for dhz.skz.citaci.weblogger.zerospan.WebloggerZeroSpanCitacBean.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package dhz.skz.citaci.weblogger.zerospan;

import dhz.skz.aqdb.facades.ZeroSpanFacade;
import dhz.skz.citaci.FtpKlijent;
import dhz.skz.citaci.weblogger.exceptions.FtpKlijentException;
import dhz.skz.citaci.weblogger.util.NizZeroSpanPodataka;
import dhz.skz.aqdb.entity.IzvorPodataka;
import dhz.skz.aqdb.entity.Postaja;
import dhz.skz.aqdb.entity.ProgramMjerenja;
import dhz.skz.aqdb.entity.ProgramUredjajLink;
import dhz.skz.aqdb.entity.Uredjaj;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TimeZone;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import org.apache.commons.net.ftp.FTPFile;

/**
 *
 * @author kraljevic
 */
@Stateless
@LocalBean
public class WebloggerZeroSpanCitacBean {

    @EJB
    private ZeroSpanFacade dao;

    private static final Logger log = Logger.getLogger(WebloggerZeroSpanCitacBean.class.getName());

    private final TimeZone timeZone = TimeZone.getTimeZone("UTC");

    @EJB
    private FtpKlijent ftp;
    private IzvorPodataka izvor;
    private Postaja postaja;

    public void pokupiZeroSpanSaPostaje(IzvorPodataka izvor, Postaja p) {
        this.izvor = izvor;
        this.postaja = p;
        Date zadnji = getZadnjiZS(izvor, p);

        if (imaZS(izvor, p)) {

            try {
                Map<ProgramMjerenja, NizZeroSpanPodataka> tmp = getMapaZeroSpanNizova(p, izvor, zadnji);
                ftp.connect(new URI(izvor.getUri()));

                WlZeroSpanDatotekaParser citac = new WlZeroSpanDatotekaParser(timeZone);
                citac.setZadnjiPodatak(zadnji);
                citac.setNizKanala(tmp);

                WlZeroSpanFileFilter fns = new WlZeroSpanFileFilter(p.getNazivPostaje(), zadnji, timeZone);
                for (FTPFile file : ftp.getFileList(fns)) {
                    log.log(Level.INFO, "Zero/span datoteka :{0}", file.getName());
                    try (InputStream ifs = ftp.getFileStream(file)) {
                        citac.parse(ifs);
                    } catch (Exception ex) { // kakva god da se iznimka dogodi, nastavljamo
                        log.log(Level.SEVERE, null, ex);
                    } finally {
                        ftp.zavrsi();
                    }
                }
                obradiISpremiNizove(tmp);
            } catch (FtpKlijentException | URISyntaxException ex) {
                log.log(Level.SEVERE, null, ex);
            } finally {
                ftp.disconnect();
            }
        }
    }

    private Date getZadnjiZS(IzvorPodataka izvor, Postaja p) {
        Date zadnji = dao.getVrijemeZadnjegZeroSpanNaPostajiZaIzvor(p, izvor);
        if (zadnji == null) {
            zadnji = new Date(0L);
        }
        log.log(Level.INFO, "Zadnji zero/span na {0} u {1}", new Object[] { p.getNazivLokacije(), zadnji });
        return zadnji;
    }

    private Map<ProgramMjerenja, NizZeroSpanPodataka> getMapaZeroSpanNizova(Postaja p, IzvorPodataka izvor,
            Date zadnji) {
        Map<ProgramMjerenja, NizZeroSpanPodataka> tmp = new HashMap<>();
        Collection<ProgramMjerenja> programNaPostajiZaIzvor = dao.getProgramNaPostajiZaIzvor(p, izvor, zadnji);
        for (ProgramMjerenja pm : programNaPostajiZaIzvor) {
            NizZeroSpanPodataka np = new NizZeroSpanPodataka();
            np.setUredjaji(getUredjajiMapa(pm));
            np.setKljuc(pm);
            tmp.put(pm, np);
        }
        return tmp;
    }

    private void obradiISpremiNizove(Map<ProgramMjerenja, NizZeroSpanPodataka> ulaz) {
        for (ProgramMjerenja p : ulaz.keySet()) {
            NizZeroSpanPodataka niz = ulaz.get(p);
            if (!niz.getPodaci().isEmpty()) {
                try {
                    log.log(Level.INFO, "Pospremam ZS Postaja {0}, komponenta {1}",
                            new Object[] { p.getPostajaId().getNazivPostaje(), p.getKomponentaId().getFormula() });
                    dao.pospremiNiz(niz);
                    niz.getPodaci().clear();
                } catch (Exception ex) {
                    log.log(Level.SEVERE, "Postaja ZS {0}, komponenta {1}",
                            new Object[] { p.getPostajaId().getNazivPostaje(), p.getKomponentaId().getFormula() });
                    throw ex;
                }
            }
        }
    }

    private NavigableMap<Date, Uredjaj> getUredjajiMapa(ProgramMjerenja pm) {
        NavigableMap<Date, Uredjaj> mapa = new TreeMap<>();
        for (ProgramUredjajLink pul : pm.getProgramUredjajLinkCollection()) {
            mapa.put(pul.getVrijemePostavljanja(), pul.getUredjajId());
        }
        return mapa;
    }

    private boolean imaZS(IzvorPodataka izvor, Postaja p) {
        List<ProgramMjerenja> list = dao.getProgramSaZeroSpanomNaPostaji(izvor, p);

        return !((list == null) || (list.isEmpty()));
    }
}