nl.detoren.ijsco.io.OSBOLoader.java Source code

Java tutorial

Introduction

Here is the source code for nl.detoren.ijsco.io.OSBOLoader.java

Source

/**
 * Copyright (C) 2016 Leo van der Meulen
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation version 3.0
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * See: http://www.gnu.org/licenses/gpl-3.0.html
 *
 * Problemen in deze code:
 */
package nl.detoren.ijsco.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URI;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.math3.util.MultidimensionalCounter.Iterator;
import org.apache.poi.util.IOUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Entities.EscapeMode;
import org.jsoup.select.Elements;

import nl.detoren.ijsco.data.Spelers;
import nl.detoren.ijsco.ui.Mainscreen;
import nl.detoren.ijsco.data.Speler;

/**
 * Laad bekende OSBO spelers in, dit kan automatisch vanaf de website van de
 * OSBO door het jeugdrating bestand in te lezen en door een lokale kopie van
 * dit bestand in te lezen.
 * @author Leo.vanderMeulen
 *
 */
public class OSBOLoader {

    private final static Logger logger = Logger.getLogger(Mainscreen.class.getName());

    public Spelers laadBestand(String bestandsnaam) {
        try {
            //File input = new File("c:/lijst.html");
            File input = new File(bestandsnaam);
            //Document doc = Jsoup.parse(input, "UTF-8");
            Document doc = Jsoup.parse(input, "ISO-8859-1");
            //((org.jsoup.nodes.Document) doc).outputSettings().charset().forName("UTF-8");
            ((org.jsoup.nodes.Document) doc).outputSettings().escapeMode(EscapeMode.xhtml);
            return load(doc);
        } catch (Exception e) {
            //System.out.println("Error loading OSBO spelers " + e.getMessage());
        }
        return null;
    }

    public Spelers laadWebsite(String url) {
        try {
            //Document doc = Jsoup.connect("http://osbo.nl/jeugd/jrating.htm").get();
            //String url = "http://osbo.nl/jeugd/jrating.htm";
            //String url = "http://ijsco.schaakverenigingdetoren.nl/ijsco1718/IJSCOrating1718.htm";
            Document doc = Jsoup.connect(url).get();
            doc.head().appendElement("meta").attr("charset", "UTF-8");
            doc.head().appendElement("meta").attr("http-equiv", "Content-Type").attr("content", "text/html");
            //Document doc = Jsoup.parse(new URL(url).openStream(), "UTF-8", url);
            //URI baseURI=new URI(url);
            //String content=IOUtils.toString(stream,"utf-8");
            //Document doc=Jsoup.parse(content,baseurl);      
            return load(doc);
        } catch (Exception e) {
            logger.log(Level.WARNING, "Error loading OSBO spelers \" + e.getMessage()");
            System.out.println("Error loading OSBO spelers " + e.getMessage());
        }
        return null;
    }

    private static String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
            sb.append((char) cp);
        }
        return sb.toString();
    }

    public static JSONArray readJsonFromUrl(String url) throws IOException {
        InputStream is = new URL(url).openStream();
        try {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
            String jsonText = readAll(rd);
            //JSONObject json = new JSONObject(jsonText);
            Object o = JSONValue.parse(jsonText);
            JSONArray json = (JSONArray) o;
            return json;
        } finally {
            is.close();
        }
    }

    public Spelers laadJSON(String url) {
        Spelers spelers = null;
        try {
            JSONArray json = readJsonFromUrl(url);
            spelers = parseJSON(json);

        } catch (Exception e) {
            logger.log(Level.WARNING, "Error loading OSBO spelers " + e.getMessage());
            System.out.println("Error loading OSBO spelers " + e.getMessage());
        }
        return spelers;
    }

    public Spelers laadCSV(String csvpath) {
        File csvData = new File(csvpath);
        CSVParser parser = null;
        try {
            parser = CSVParser.parse(csvData, java.nio.charset.Charset.defaultCharset(), CSVFormat.RFC4180);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for (CSVRecord csvRecord : parser) {
            //TODO
        }
        return null;
    }

    private Spelers parseJSON(JSONArray json) {
        Spelers spelers = new Spelers();
        for (Object l : json) {
            if (l instanceof JSONObject) {
                logger.log(Level.INFO, "JSONObject" + l.toString());
                JSONObject jo = (JSONObject) l;
                JSONObject s = (JSONObject) jo.get("speler");
                Speler speler = new Speler();
                long k = (long) s.get("knsbnummer");
                speler.setKnsbnummer((int) k);
                logger.log(Level.INFO, String.format("%s", speler.getKnsbnummer()));
                String voornaam = (String) s.get("voornaam");
                String tussenvoegsel = (String) s.get("tussenvoegsel");
                String achternaam = (String) s.get("achternaam");
                String samengestelde_naam = voornaam;
                if (tussenvoegsel != null && !tussenvoegsel.trim().isEmpty())
                    samengestelde_naam += " " + tussenvoegsel;
                if (achternaam != null && !achternaam.trim().isEmpty())
                    samengestelde_naam += " " + achternaam;
                speler.setNaamKNSB(samengestelde_naam);
                int g = Integer.parseInt((String) s.get("geboortejaar"));
                speler.setGeboortejaar((int) g);
                String geslacht = (String) s.get("geslacht");
                logger.log(Level.INFO, "Geslacht van " + speler.getNaam() + " is " + geslacht);
                speler.setGeslacht(geslacht);
                long r = (long) jo.get("osborating");
                speler.setRatingIJSCO((int) r);
                speler.bepaalCategorie();
                logger.log(Level.INFO,
                        "Speler : " + speler.getNaam() + " heeft geboortejaar " + speler.getGeboortejaar());
                spelers.add(speler);
            }
        }
        return spelers;
    }

    private Spelers load(Document doc) {
        Spelers spelers = new Spelers();
        int knsbnummer = 0;
        int knsbrating = 0;
        int osborating = 0;
        String vereniging = "";
        int geboortejaar = 0;
        String categorie = "";
        String naam = "";
        Element table = doc.select("table").first();
        Elements rows = table.select("tr");
        for (Element row : rows) {
            Elements cells = row.select("td");
            if (cells.size() > 7) {
                try {
                    naam = cells.get(1).text();
                } catch (Exception e) {
                    naam = null;
                    System.out.println(e);
                }
                try {
                    knsbnummer = Integer.parseInt(cells.get(8).text());
                } catch (Exception e) {
                    knsbnummer = 0;
                    System.out.println(e);
                }
                try {
                    osborating = Integer.parseInt(cells.get(3).text());
                } catch (Exception e) {
                    osborating = -1;
                    System.out.println(e);
                }
                try {
                    knsbrating = Integer.parseInt(cells.get(4).text());
                } catch (Exception e) {
                    knsbrating = -1;
                    System.out.println(e);
                }
                try {
                    vereniging = cells.get(2).text();
                } catch (Exception e) {
                    vereniging = "";
                    System.out.println(e);
                }
                try {
                    geboortejaar = Integer.parseInt(cells.get(6).text());
                } catch (Exception e) {
                    geboortejaar = -1;
                    System.out.println(e);
                }
                try {
                    categorie = cells.get(7).text();
                } catch (Exception e) {
                    categorie = "-";
                    System.out.println(e);
                }

                Speler s = new Speler(knsbnummer, naam, vereniging, geboortejaar, categorie, osborating,
                        knsbrating);
                spelers.add(s);
            }
        }
        return spelers;
    }
}