All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.evasion.plugin.geoloc.dataimport.AbstractFileParser Maven / Gradle / Ivy

There is a newer version: 2.0.0.2
Show newest version
/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package com.evasion.plugin.geoloc.dataimport;

import com.evasion.EntityJPA;
import com.evasion.entity.geolocation.City;
import com.evasion.entity.geolocation.Country;
import com.evasion.entity.geolocation.AdminDivision;
import com.evasion.exception.EvasionException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.util.Date;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author glon-56610
 */
public abstract class AbstractFileParser {

    /**
     * LOGGER.
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(
            AbstractFileParser.class);

    private File file = null;

    private BufferedReader reader = null;

    private String nextLine = null;

    private int lineNumber = 0;

    public AbstractFileParser(File file) {
        if (file == null) {
            throw new IllegalArgumentException("file name can not be Null");
        }
        LOGGER.info("Traitement du fichier GIS {}", file.getName());
        this.file = file;
    }

    public void initParser() throws EvasionException {
        try {
            if (file.getName().endsWith(".zip") || file.getName().endsWith(".ZIP")) {

                ZipFile zf = new ZipFile(file);
                reader = new BufferedReader(extractFileToZip(zf));
            } else {
                reader = new BufferedReader(new FileReader(file));
            }
            nextLine = reader.readLine();
            nextLine = reader.readLine();
        } catch (ZipException ex) {
            throw new EvasionException("Error on read Zip File", ex);
        } catch (IOException ex) {
            throw new EvasionException("Error on init parser", ex);
        }
    }

    private InputStreamReader extractFileToZip(ZipFile zf) throws EvasionException {
        ZipEntry zipentry;
        try {
            Enumeration entries = zf.entries();
            while (entries.hasMoreElements()) {
                zipentry = (ZipEntry) entries.nextElement();
                //for each entry to be extracted
                String entryName = zipentry.getName();

                File newFile = new File(entryName);
                String directory = newFile.getParent();

                if (directory == null && newFile.isDirectory()) {
                    break;
                }
                return new InputStreamReader(zf.getInputStream(zipentry));
            }
        } catch (Exception e) {
            LOGGER.error("Extraction zip file error", e);
            close();

        }
        throw new EvasionException("Extraction zip file error");
    }

    public abstract int getNbrColomnRef();

    public abstract String separateurColumn();

    public EntityJPA next() throws EvasionException {
        try {
            EntityJPA entity = null;
            if (hasMoreElement()) {
                String[] tabLigne = nextLine.split(separateurColumn());
                if (tabLigne.length != getNbrColomnRef()) {
                    LOGGER.warn("Format de la ligne {} non valide dans le fichier ", lineNumber);
                    //return null;
                    //throw new ImportFormatException("Format de ligne  non valide.");
                } else {
                    entity = traiterLigne(tabLigne);
                }
                // préparation de la future ligne
                nextLine = reader.readLine();
                lineNumber++;
            }
            return entity;
        } catch (IOException ex) {
            LOGGER.error("IO Exception sur un readline.", ex);
            close();
            throw new EvasionException("IO Exception sur un readline.", ex);
        }
    }

    public void close() {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException ex) {
            LOGGER.error("Can not close zipFile or reader", ex);
        } finally {
            reader = null;
        }
    }

    public boolean hasMoreElement() {
        return nextLine != null && !nextLine.isEmpty();
    }

    protected abstract EntityJPA traiterLigne(String[] ligne);

    public Date formatStringToDate(String date) {
        String[] dates = date.split("-");
        return new GregorianCalendar(Integer.parseInt(dates[0]), Integer.parseInt(dates[1]), Integer.parseInt(dates[2])).getTime();
    }

    public int getLineNumber() {
        return this.lineNumber;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy