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

Java tutorial

Introduction

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

Source

/**
 * Copyright (C) 2018 Lars Dam
 * 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
 *
 * Known issues in this code
 * - 
 */
package nl.detoren.ijsco.io;

import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.microsoft.schemas.office.visio.x2012.main.SheetType;

import nl.detoren.ijsco.data.GroepsUitslag;
import nl.detoren.ijsco.data.GroepsUitslagen;
import nl.detoren.ijsco.data.Speler;
import nl.detoren.ijsco.data.Spelers;
import nl.detoren.ijsco.data.Status;
import nl.detoren.ijsco.data.UitslagSpeler;
import nl.detoren.ijsco.data.Wedstrijd;
import nl.detoren.ijsco.data.WedstrijdUitslag;
import nl.detoren.ijsco.ui.control.IJSCOController;
import nl.detoren.ijsco.ui.util.Utils;

public class ExcelImport implements ImportInterface {

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

    public GroepsUitslagen importeerUitslagen(File file) {

        GroepsUitslagen groepen = new GroepsUitslagen();
        try {

            FileInputStream excelFile = new FileInputStream(file);
            Workbook workbook = new XSSFWorkbook(excelFile);
            String versie = "onbekend";
            Sheet sheet = workbook.getSheet("Configuratie");
            try {
                versie = sheet.getRow(0).getCell(1).getStringCellValue();
            } catch (Exception ex) {
                logger.log(Level.INFO, "Indelings Excel versie ophalen mislukt");
            }
            logger.log(Level.INFO, "Indelings Excel is versie " + versie);
            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
                sheet = workbook.getSheetAt(i);
                if (sheet.getSheetName().startsWith("Groep ")) {
                    logger.log(Level.INFO, "Importeer uitslag van groep : " + sheet.getSheetName());
                    Row row = sheet.getRow(0);
                    if (row != null) {
                        Cell cell = row.getCell(0);
                        if (cell != null) {
                            int groepsgrootte = (int) cell.getNumericCellValue();
                            logger.log(Level.INFO, "Groepsgrootte is " + groepsgrootte);
                            switch (groepsgrootte) {
                            case 4:
                                groepen.Add(importeerGroep4(sheet));
                                break;
                            case 6:
                                groepen.Add(importeerGroep6(sheet));
                                break;
                            case 8:
                                groepen.Add(importeerGroep8(sheet));
                                break;
                            case 10:
                                groepen.Add(importeerGroep10(sheet));
                                break;
                            default:
                                logger.log(Level.WARNING, "Uitslagen verwerken voor groepsgrootte " + groepsgrootte
                                        + " niet ondersteund!");
                                break;
                            }
                        }
                    }
                    logger.log(Level.INFO, "next");
                }
            }
            workbook.close();
        } catch (Exception ex) {
            logger.log(Level.SEVERE, "Exception! Cause: " + ex.getCause() + ". Internal error is " + ex.getMessage()
                    + ". Stracktrace: \r\n" + Utils.stackTraceToString(ex));
        }
        // Print resultaat;
        logger.log(Level.INFO, groepen.toString());
        return groepen;
    }

    private GroepsUitslag importeerGroep10(Sheet sheet) {
        /*
         *       versie < 0.3
         */
        /*      int groepsgrootte = 10;
              int rowidxbase = 17;
              int columnuitslag = 19;
              int columntotaal = 17;
              int columnwedstrijdidwit = 47;   
              int columnwedstrijdidzwart = 48;         
        */
        /*
         *       versie 0.3
         */
        int groepsgrootte = 10;
        int rowidxbase = 17;
        int columnuitslag = 19;
        int columntotaal = 17;
        int columnwedstrijdidwit = 46;
        int columnwedstrijdidzwart = 47;
        GroepsUitslag groep = importeergroep(groepsgrootte, sheet, rowidxbase, columnuitslag, columntotaal,
                columnwedstrijdidwit, columnwedstrijdidzwart);
        logger.log(Level.INFO, "Import groep 10 klaar");
        return groep;
    }

    private GroepsUitslag importeerGroep8(Sheet sheet) {
        /*
         *       versie < 0.3
         */
        /*
                int groepsgrootte = 8;
              int rowidxbase = 15;
              int columnuitslag = 19;
              int columntotaal = 17;
              int columnwedstrijdidwit = 50;   
              int columnwedstrijdidzwart = 51;
         */
        /*
         *       versie 0.3
         */

        int groepsgrootte = 8;
        int rowidxbase = 15;
        int columnuitslag = 19;
        int columntotaal = 17;
        int columnwedstrijdidwit = 43;
        int columnwedstrijdidzwart = 44;
        GroepsUitslag groep = importeergroep(groepsgrootte, sheet, rowidxbase, columnuitslag, columntotaal,
                columnwedstrijdidwit, columnwedstrijdidzwart);
        logger.log(Level.INFO, "Import groep 8 klaar");
        return groep;
    }

    private GroepsUitslag importeerGroep6(Sheet sheet) {
        /*
         *       versie < 0.3
         */
        /*    int groepsgrootte = 6;
             int rowidxbase = 13;
             int columnuitslag = 19;
             int columntotaal = 17;
             int columnwedstrijdidwit = 46;   
             int columnwedstrijdidzwart = 47;   
        */

        /*
         *       versie 0.3
         */
        int groepsgrootte = 6;
        int rowidxbase = 13;
        int columnuitslag = 19;
        int columntotaal = 17;
        int columnwedstrijdidwit = 40;
        int columnwedstrijdidzwart = 41;
        GroepsUitslag groep = importeergroep(groepsgrootte, sheet, rowidxbase, columnuitslag, columntotaal,
                columnwedstrijdidwit, columnwedstrijdidzwart);
        logger.log(Level.INFO, "Import groep 6 klaar");
        return groep;
    }

    private GroepsUitslag importeerGroep4(Sheet sheet) {
        /*
         *       versie < 0.3
         */
        /*
               int groepsgrootte = 4;
              int rowidxbase = 11;
              int columnuitslag = 18;
              int columtotaal = 16;
              int columnwedstrijdidwit = 42;   
              int columnwedstrijdidzwart = 43;   
         */
        /*
         *       versie 0.3
         */

        int groepsgrootte = 4;
        int rowidxbase = 11;
        int columnuitslag = 18;
        int columtotaal = 16;
        int columnwedstrijdidwit = 36;
        int columnwedstrijdidzwart = 37;
        GroepsUitslag groep = importeergroep(groepsgrootte, sheet, rowidxbase, columnuitslag, columtotaal,
                columnwedstrijdidwit, columnwedstrijdidzwart);
        logger.log(Level.INFO, "Import groep 4 klaar");
        return groep;
    }

    private GroepsUitslag importeergroep(int groepsgrootte, Sheet sheet, int rIdxbase, int cUitslag, int cTotaal,
            int cWedstrijdIDWit, int cWedstrijdIDZwart) {
        Row row;
        HashMap<Integer, Speler> OSBOSpelers = IJSCOController.getI().getStatus().OSBOSpelers;
        GroepsUitslag groep = new GroepsUitslag(groepsgrootte, cellStringValue(sheet.getRow(0).getCell(6)));
        for (int i = 0; i <= groepsgrootte - 1; i++) {
            UitslagSpeler s = new UitslagSpeler();
            // Rang
            Integer rang;
            try {
                rang = cellIntValue(sheet.getRow(2 + i + 1).getCell(cTotaal + 2));
            } catch (Exception ex) {
                logger.log(Level.WARNING, "Rang not found.");
                rang = -1;
            }
            // Id
            Integer id;
            try {
                id = cellIntValue(sheet.getRow(2 + i + 1).getCell(1));
            } catch (Exception ex) {
                logger.log(Level.WARNING, "Rang not found.");
                id = -1;
            }
            // Naam
            String naam;
            try {
                naam = cellStringValue(sheet.getRow(2 + i + 1).getCell(2));
            } catch (Exception ex) {
                logger.log(Level.WARNING, "Naam not found.");
                naam = "Onbekend";
            }
            // Punten
            Integer punten;
            try {
                punten = (int) (10 * cellDoubleValue(sheet.getRow(2 + i + 1).getCell(cTotaal)));
            } catch (Exception ex) {
                logger.log(Level.WARNING, "Punten not found.");
                punten = -1;
            }
            //         // WP
            //         Integer wp;
            //         try {
            //            wp = (int) (10 * cellDoubleValue(sheet.getRow(2+i+1).getCell(23)));
            //         } catch (Exception ex) {
            //            logger.log(Level.WARNING, "WP not found.");
            //            wp = -1;
            //         }
            // SB
            Integer sb;
            try {
                sb = (int) (100 * cellDoubleValue(sheet.getRow(2 + i + 1).getCell(cTotaal + 1)));
            } catch (Exception ex) {
                logger.log(Level.WARNING, "SB not found.");
                sb = -1;
            }
            // Knsbnummer
            Integer knsbnummer;
            try {
                knsbnummer = cellIntValue(sheet.getRow(2 + i + 1).getCell(3));
            } catch (Exception ex) {
                logger.log(Level.WARNING, "KNSBnummer not found.");
                knsbnummer = -1;
            }
            // Startrating
            Integer startrating;
            try {
                startrating = cellIntValue(sheet.getRow(2 + i + 1).getCell(5));
            } catch (Exception ex) {
                logger.log(Level.WARNING, "Startrating not found.");
                startrating = -1;
            }
            s.setId(id);
            s.setRang(rang);
            s.setNaam(naam);
            s.setPunten(punten);
            //s.setWP(wp);
            s.setSB(sb);
            s.setKNSBnummer(knsbnummer);
            s.setStartrating(startrating);
            //logger.log(Level.INFO, s.toFormattedString());
            for (Speler osbo : OSBOSpelers.values()) {
                int osboknsbnummer = 0;
                try {
                    osboknsbnummer = osbo.getKnsbnummer();
                } catch (Exception ex) {
                    logger.log(Level.WARNING, "Exception in finding knsbnummer " + knsbnummer + " in OSBO list");
                }
                int geboortejaar = 0;
                try {
                    geboortejaar = osbo.getGeboortejaar();
                } catch (Exception ex) {
                    logger.log(Level.WARNING,
                            "Exception in finding geboortejaar " + geboortejaar + " in OSBO list");
                }
                if (knsbnummer == osboknsbnummer) {
                    s.setVereniging(osbo.getVereniging());
                    s.setGeboortejaar(osbo.getGeboortejaar());
                    s.setCategorie(osbo.getCategorie());
                }
            }
            groep.addSpeler(s);
        }

        for (int i = 0; i <= groepsgrootte - 2; i++) {
            for (int j = 0; j <= (groepsgrootte - 2) / 2; j++) {
                int uitslagcode;
                row = sheet.getRow(rIdxbase + (i * (3 + (groepsgrootte - 2) / 2)) + j);
                if (row != null) {
                    uitslagcode = cellIntValue(row.getCell(cUitslag));
                    if (uitslagcode >= 0 && uitslagcode < 10) {
                        WedstrijdUitslag wedstrijd = new WedstrijdUitslag();
                        Integer speleridwit;
                        try {
                            speleridwit = cellIntValue(row.getCell(cWedstrijdIDWit));
                            if (speleridwit == null)
                                throw new NullPointerException();
                        } catch (Exception ex) {
                            logger.log(Level.WARNING, "Player number for white not found.");
                            speleridwit = 0;
                        }
                        //logger.log(Level.INFO, "Player white id : " + speleridwit);
                        Integer speleridzwart;
                        try {
                            speleridzwart = cellIntValue(row.getCell(cWedstrijdIDZwart));
                            if (speleridzwart == null)
                                throw new NullPointerException();
                        } catch (Exception ex) {
                            logger.log(Level.WARNING, "Player number for black not found.");
                            speleridzwart = 0;
                        }
                        //logger.log(Level.INFO, "Player black id : " + speleridzwart);
                        //                  Integer knsbwit;
                        //                  try {
                        //                     knsbwit = cellIntValue(sheet.getRow(2+speleridwit).getCell(3));
                        //                  } catch (Exception ex) {
                        //                     logger.log(Level.WARNING, "Player KNSB number for white not found.");
                        //                     knsbwit = 0;
                        //                  }
                        //                  logger.log(Level.INFO, "Player white knsb number : " + knsbwit);
                        //                  String naamwit;
                        //                  try {
                        //                     naamwit = cellStringValue(sheet.getRow(2+speleridwit).getCell(2));
                        //                  } catch (Exception ex) {
                        //                     logger.log(Level.WARNING, "Player name for white not found.");
                        //                     naamwit = "White";
                        //                  }
                        //                  logger.log(Level.INFO, "Player white name : " + naamwit);
                        //                  Integer startratingwit;
                        //                  try {
                        //                     startratingwit = cellIntValue(sheet.getRow(2+speleridwit).getCell(5));
                        //                  } catch (Exception ex) {
                        //                     logger.log(Level.WARNING, "Start rating for white not found.");
                        //                     startratingwit = -1;
                        //                  }
                        //                  Integer knsbzwart;
                        //                  try {
                        //                     knsbzwart = cellIntValue(sheet.getRow(2+speleridzwart).getCell(3));
                        //                  } catch (Exception ex) {
                        //                     logger.log(Level.WARNING, "Player number for black not found.");
                        //                     knsbzwart = 0;
                        //                  }
                        //                  logger.log(Level.INFO, "Player white knsb number : " + knsbzwart);
                        //                  String naamzwart;
                        //                  try {
                        //                     naamzwart = cellStringValue(sheet.getRow(2+speleridzwart).getCell(2));
                        //                  } catch (Exception ex) {
                        //                     logger.log(Level.WARNING, "Player name for black not found.");
                        //                     naamzwart = "Black";
                        //                  }
                        //                  logger.log(Level.INFO, "Player black name : " + naamzwart);
                        //                  Integer startratingzwart;
                        //                  try {
                        //                     startratingzwart = cellIntValue(sheet.getRow(2+speleridzwart).getCell(5));
                        //                  } catch (Exception ex) {
                        //                     logger.log(Level.WARNING, "Start rating for black not found.");
                        //                     startratingzwart = -1;
                        //                  }
                        UitslagSpeler wit = null;
                        try {
                            wit = groep.getSpelerById(speleridwit);
                        } catch (Exception e) {
                            logger.log(Level.WARNING, "Exception in getSpelerbyId wit : " + speleridwit + "");
                        }
                        UitslagSpeler zwart = null;
                        try {
                            zwart = groep.getSpelerById(speleridzwart);
                        } catch (Exception e) {
                            logger.log(Level.WARNING, "Exception in getSpelerbyId zwart : " + speleridzwart + "");
                        }
                        //                  for (Speler s :OSBOSpelers.values()) {
                        //                     int knsbnummer = 0;
                        //                     try {
                        //                        knsbnummer = s.getKnsbnummer();
                        //                     } catch (Exception ex) {
                        //                        logger.log(Level.WARNING, "Exception in finding knsbnummer " + knsbnummer + " in OSBO list");
                        //                     }
                        //                     if (wit != null) {
                        //                        if (knsbnummer == wit.getKNSBnummer()) {
                        //                           wit.setVereniging(s.getVereniging());
                        //                           wit.setGeboortejaar(s.getGeboortejaar());
                        //                           wit.setCategorie(s.getCategorie());
                        //                        }
                        ////                        if (wit.getNaam() == "???" ) {
                        ////                           logger.log(Level.WARNING, "Speler wit is niet gevonden. Knsbnummer " + knsbwit);
                        ////                           wit.setKNSBnummer(knsbwit);
                        ////                           wit.setNaam(naamwit);
                        ////                        }
                        //                     }
                        //                     if (zwart != null) {
                        //                        if (knsbnummer == zwart.getKNSBnummer()) {
                        //                           zwart.setVereniging(s.getVereniging());
                        //                           zwart.setGeboortejaar(s.getGeboortejaar());
                        //                           zwart.setCategorie(s.getCategorie());
                        //                        }
                        ////                        if (zwart.getNaam() == "???" ) {
                        ////                           logger.log(Level.WARNING, "Speler zwart is niet gevonden. Knsbnummer " + knsbzwart);
                        ////                           zwart.setKNSBnummer(knsbzwart);
                        ////                           zwart.setNaam(naamzwart);
                        ////                        }
                        //                     }
                        //                  }
                        boolean bye = false;
                        if (wit.getNaam() != null)
                            if (wit.getNaam().equals("Bye"))
                                bye = true;
                        if (zwart.getNaam() != null)
                            if (zwart.getNaam().equals("Bye"))
                                bye = true;
                        if (!bye) {
                            wedstrijd.setPoule(sheet.getSheetName());
                            wedstrijd.setRonde(i + 1);
                            wedstrijd.setWit(wit);
                            wedstrijd.setstartratingWit(wit.getStartrating());
                            wedstrijd.setZwart(zwart);
                            wedstrijd.setstartratingZwart(zwart.getStartrating());
                            try {
                                logger.log(Level.INFO, "Setting SpelerWit : " + wit.getNaam() + " - KNSBWit : "
                                        + wit.getKNSBnummer());
                                logger.log(Level.INFO, "Setting SpelerZwart : " + zwart.getNaam()
                                        + " - KNSBZwart : " + zwart.getKNSBnummer());
                            } catch (Exception ex) {
                                logger.log(Level.WARNING, "Exception " + ex.getMessage() + " on logging Spelers");
                            }

                            try {
                                logger.log(Level.INFO, "Setting uitslag");
                                wedstrijd.setUitslag012(uitslagcode);
                            } catch (Exception ex) {
                                logger.log(Level.SEVERE, "Exception in setting uitslag: " + ex.getMessage());
                            }
                            try {
                                logger.log(Level.INFO, "Setting Wedstrijd : " + wedstrijd.toString());
                            } catch (Exception ex) {
                                logger.log(Level.WARNING, "Wedstrijd.tostring failed");
                            }
                            groep.addWedstrijd(wedstrijd);
                        } else {
                            logger.log(Level.WARNING, "Match is a bye");
                        }
                    }
                }
            }
        }
        return groep;
    }

    public Spelers controleerSpelers(Spelers spelers, HashMap<Integer, Speler> osbolijst) {
        Spelers update = new Spelers();
        for (Speler s : spelers) {
            Speler osbogegevens = osbolijst.get(s.getKnsbnummer());
            if (osbogegevens != null) {
                s.setNaamKNSB(osbogegevens.getNaam());
                s.setRatingIJSCO(osbogegevens.getRatingIJSCO());
                s.setGeboortejaar(osbogegevens.getGeboortejaar());
                s.setGeslacht(osbogegevens.getGeslacht());
                s.setCategorie(osbogegevens.getCategorie());
                s.setVereniging(osbogegevens.getVereniging());
            }
            update.add(s);
        }
        return update;
    }

    private Integer cellIntValue(Cell cell) {
        Integer value = null;
        if (cell != null) {
            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_NUMERIC:
                value = (int) cell.getNumericCellValue();
                // logger.log(Level.INFO, "Waarde is " + value + " !");
                break;
            case Cell.CELL_TYPE_FORMULA:
                switch (cell.getCachedFormulaResultType()) {
                case Cell.CELL_TYPE_NUMERIC:
                    value = (int) cell.getNumericCellValue();
                    break;
                default:
                    //logger.log(Level.WARNING, "Waarde is geen Numeric!");
                }
                break;
            default:
                //logger.log(Level.WARNING, "Waarde is geen Numeric!");
            }
        }
        return value;
    }

    private Double cellDoubleValue(Cell cell) {
        Double value = null;
        if (cell != null) {
            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_NUMERIC:
                value = (double) cell.getNumericCellValue();
                // logger.log(Level.INFO, "Waarde is " + value + " !");
                break;
            case Cell.CELL_TYPE_FORMULA:
                switch (cell.getCachedFormulaResultType()) {
                case Cell.CELL_TYPE_NUMERIC:
                    //System.out.println("Last evaluated as: " + cell.getNumericCellValue());
                    value = (double) cell.getNumericCellValue();
                    break;
                }
            default:
                //logger.log(Level.WARNING, "Waarde is geen Numeric!");
            }
        }
        return value;
    }

    private String cellStringValue(Cell cell) {
        String value = null;
        if (cell != null) {
            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                value = cell.getStringCellValue();
                // logger.log(Level.INFO, "Waarde is " + value + " !");
                break;
            case Cell.CELL_TYPE_FORMULA:
                switch (cell.getCachedFormulaResultType()) {
                case Cell.CELL_TYPE_STRING:
                    //System.out.println("Last evaluated as \"" + cell.getRichStringCellValue() + "\"");
                    value = cell.getRichStringCellValue().getString();
                    break;
                }
            default:
                //logger.log(Level.WARNING, "Waarde is geen String!");
            }
        }
        return value;
    }

}