Java tutorial
/********************************************************************************* * * Copyright 2014 BOUSSEJRA Malik Olivier, HALDEBIQUE Geoffroy, ROYER Johan * * 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 functions.excels; import java.util.Calendar; import java.util.Date; import javax.persistence.PersistenceException; import models.Commune; import models.Espece; import models.EspeceSynonyme; import models.Fiche; import models.FicheHasMembre; import models.InformationsComplementaires; import models.Membre; import models.Observation; import models.StadeSexe; import models.UTMS; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; public class RowCheck { public StringBuilder errorReport; private boolean noError = true; private Row row; private int rowNumber; private String espece_nom; private Espece espece; private String sexe; private StadeSexe stade_sexe = null; private double nombre_dbl; private Integer nombre = null; @SuppressWarnings("unused") private String departement; private String commune_nom; private Commune commune = null; private String lieu_dit; private String utm_str; private UTMS utm; private Date date_date; private Calendar date = Calendar.getInstance(); private Date date_min_date; private Calendar date_min = null; private String[] temoins; private Membre[] membres; private String determinateur; private String methodeCapture; private String milieu; private String essence; private String remarque; private String collection; private String memo = null; /** * Instancie la classe pour charger les informations dans une Row * @param row * @param rowNumber * @param errorReport */ public RowCheck(Row row, int rowNumber, StringBuilder errorReport) { this.row = row; this.rowNumber = rowNumber; this.errorReport = errorReport; } /** * Vrifie que la ligne donne est juste. * @param rowNumber */ public void checkRow() { Cell cell = row.getCell(0); if (cell == null) addError("Pas d'espce."); else { espece_nom = cell.getStringCellValue(); if ((espece = Espece.find.where().eq("espece_nom", espece_nom).findUnique()) == null) { try { EspeceSynonyme syn = EspeceSynonyme.find.where().eq("synonyme_nom", espece_nom).findUnique(); if (syn != null) espece = syn.synonyme_espece; else addError("L'espce " + espece_nom + " n'existe pas."); } catch (PersistenceException e) { addError("Deux espces synonymes ont le mme nom : " + espece_nom); } } } cell = row.getCell(1); if (cell != null) { sexe = cell.getStringCellValue(); if (sexe != null && !sexe.equals("")) { if (sexe.equals("oeuf") || sexe.equals("OEuf") || sexe.equals("Oeuf")) stade_sexe = StadeSexe.find.byId(6); else { if ((stade_sexe = StadeSexe.find.where().eq("stade_sexe_intitule", sexe).findUnique()) == null) addError("Le stade/sexe " + sexe + " n'existe pas."); if (stade_sexe != null && espece != null && !espece.getGroupe().getStadesSexes().contains(stade_sexe)) { addError("Le stade/sexe " + stade_sexe + " n'est pas valable pour le groupe " + espece.getGroupe()); } } } } cell = row.getCell(2); if (cell != null) { try { nombre_dbl = cell.getNumericCellValue(); if (nombre_dbl != 0) { nombre = (int) nombre_dbl; } } catch (IllegalStateException | NumberFormatException e) { addError(nombre_dbl + " n'est pas un entier."); } } cell = row.getCell(3);//Dpartement, on s'en fout. cell = row.getCell(4); if (cell != null) { commune_nom = cell.getStringCellValue(); if (commune_nom != null && !commune_nom.equals("")) { commune = Commune.findFromNomApproximatif(commune_nom); if (commune == null) addError("La commune " + commune_nom + " n'est pas rfrence."); } } cell = row.getCell(5); lieu_dit = cell.getStringCellValue(); cell = row.getCell(6); if (cell == null) addError("Maille UTM non spcifie."); else { utm_str = cell.getStringCellValue(); utm = UTMS.find.byId(utm_str); if (utm == null) addError("Maille UTM " + utm_str + " non existante."); } cell = row.getCell(7); if (cell != null) { try { date_min_date = cell.getDateCellValue(); if (date_min_date != null) { date_min = Calendar.getInstance(); date_min.setTime(date_min_date); } } catch (IllegalStateException e) { addError("Date minimum spcifie invalide."); } } cell = row.getCell(8); if (cell == null) addError("Date non spcifie."); else { try { date_date = cell.getDateCellValue(); date.setTime(date_date); if (date_date == null) addError("La date n'est pas spcifie."); if (date_min != null && date != null && date_min.compareTo(date) >= 0) addError("La date min est suprieure au gale la date."); } catch (IllegalStateException e) { addError("Date invalide."); } } cell = row.getCell(9); if (cell == null) addError("Tmoin non spcifie."); else { String temoins_str = cell.getStringCellValue(); if (temoins_str == null) addError("Tmoin non spcifie."); else { temoins = temoins_str.split(","); membres = new Membre[temoins.length]; for (int i = 0; i < temoins.length; i++) { temoins[i] = temoins[i].trim(); membres[i] = Membre.find.where().eq("membre_nom", temoins[i]).findUnique(); if (membres[i] == null) addError("Le membre '" + temoins[i] + "' n'est pas rfrenc."); } } } cell = row.getCell(10); if (cell != null) determinateur = cell.getStringCellValue(); cell = row.getCell(11); if (cell != null) methodeCapture = cell.getStringCellValue(); else methodeCapture = null; cell = row.getCell(12); if (cell != null) milieu = cell.getStringCellValue(); else milieu = null; cell = row.getCell(13); if (cell != null) essence = cell.getStringCellValue(); else essence = null; cell = row.getCell(14); if (cell != null) remarque = cell.getStringCellValue(); else remarque = null; cell = row.getCell(15); if (cell != null) collection = cell.getStringCellValue(); else collection = null; StringBuilder memo_sb = new StringBuilder(); boolean started = false; if (remarque != null && !remarque.equals("")) { if (!started) { started = true; memo_sb.append(remarque); } else memo_sb.append(" ; " + remarque); } if (methodeCapture != null && !methodeCapture.equals("")) { if (!started) { started = true; memo_sb.append("Mthode de capture : " + methodeCapture); } else memo_sb.append(" ; Mthode de capture : " + methodeCapture); } if (milieu != null && !milieu.equals("")) { if (!started) { started = true; memo_sb.append("Milieu : " + milieu); } else memo_sb.append(" ; Milieu : " + milieu); } if (essence != null && !essence.equals("")) { if (!started) { started = true; memo_sb.append("Essence : " + essence); } else memo_sb.append(" ; Essence : " + essence); } if (collection != null && !collection.equals("")) { if (!started) { started = true; memo_sb.append("Collection : " + collection); } else memo_sb.append(" ; Collection : " + collection); } memo = memo_sb.toString(); } /** * Ajoute une erreur dans la liste des erreurs * @param s */ public void addError(String s) { noError = false; errorReport.append("Ligne " + (rowNumber + 1) + ": "); errorReport.append(s + "<br>"); } public boolean noError() { return noError; } public String getErrors() { return errorReport.toString(); } /** * Sauvegarde la Row dans la base de donnes. */ public void saveToDatabase() { Fiche fiche = new Fiche(commune, lieu_dit, utm, date_min, date, memo); fiche.save(); Observation observation = new Observation(fiche, espece, determinateur, null); observation.observation_date_validation = Calendar.getInstance(); observation.observation_vue_par_expert = true; observation.observation_validee = Observation.VALIDEE; observation.save(); new InformationsComplementaires(observation, nombre, stade_sexe).save(); for (Membre membre : membres) { new FicheHasMembre(membre, fiche).save(); } } }