r92 - in trunk/coser-business/src/main: java/fr/ifremer/coser/services resources/i18n
Author: chatellier Date: 2010-10-22 16:49:47 +0000 (Fri, 22 Oct 2010) New Revision: 92 Log: Am?\195?\169lioration du merge d'espece Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-10-22 16:49:10 UTC (rev 91) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ImportService.java 2010-10-22 16:49:47 UTC (rev 92) @@ -129,7 +129,6 @@ IOUtils.closeQuietly(reader); } - System.out.println(Runtime.getRuntime().freeMemory() + "/" + Runtime.getRuntime().totalMemory() + "/" + Runtime.getRuntime().maxMemory()); return project; } Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-10-22 16:49:10 UTC (rev 91) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2010-10-22 16:49:47 UTC (rev 92) @@ -288,13 +288,13 @@ Iterator<String[]> itTuple = project.getHaul().iterator(); itTuple.next(); // skip header while (itTuple.hasNext()) { - String[] trait = itTuple.next(); + String[] tuple = itTuple.next(); // Campagne;Annee;Trait;Mois;Strate;SurfaceBalayee;Lat;Long;ProfMoy - String annee = trait[1]; + String annee = tuple[1]; int intAnnee = Integer.parseInt(annee); if (intAnnee >= beginYear && intAnnee <= endYear) { - String strates = trait[4]; + String strates = tuple[4]; if (!result.contains(strates)) { result.add(strates); } @@ -354,14 +354,14 @@ Iterator<String[]> itTuple = project.getCatch().iterator(); itTuple.next(); // skip header while (itTuple.hasNext()) { - String[] trait = itTuple.next(); + String[] tuple = itTuple.next(); // "Campagne","Annee","Trait","Espece","Nombre","Poids" - String annee = trait[1]; + String annee = tuple[1]; try { int intAnnee = Integer.parseInt(annee); if (intAnnee >= beginYear && intAnnee <= endYear) { - String species = trait[3]; + String species = tuple[3]; if (!result.containsKey(species)) { Specy specy = new Specy(); specy.setName(species); @@ -390,7 +390,161 @@ */ public boolean isSpecyNameExist(Project project, String newSpecyName) { + boolean result = false; + + Iterator<String[]> itTuple = project.getRefTaxSpecies().iterator(); + itTuple.next(); // skip header + while (itTuple.hasNext() && !result) { + String[] tuple = itTuple.next(); + // "C_Perm","NumSys","NivSys","C_VALIDE","L_VALIDE","AA_VALIDE","C_TxP\u00E8re","Taxa" + String specyCode = tuple[3]; + if (specyCode.equals(newSpecyName)) { + result = true; + } + } + return result; + } + + /** + * Fusion d'especes. + * + * @param project project + * @param newSpecyName new specy name (after merge) + * @param speciesNames species name to merge + * @return project + * @throws CoserBusinessException + */ + public Project mergeSpecies(Project project, String newSpecyName, String... speciesNames) throws CoserBusinessException { + + if (!isSpecyNameExist(project, newSpecyName)) { + throw new CoserBusinessException(_("Specy %s doesn't exist in referential", newSpecyName)); + } + + project = mergeCatch(project, newSpecyName, speciesNames); + project = mergeLength(project, newSpecyName, speciesNames); + return project; + } + + /** + * Fusion d'espece dans les données de captures. + * + * @param project project + * @param newSpecyName new specy name (after merge) + * @param speciesNames species name to merge + * @return project + */ + protected Project mergeLength(Project project, String newSpecyName, + String... speciesNames) { + return project; + } + + /** + * Fusion d'especes dans les données de taille. + * + * @param project project + * @param newSpecyName new specy name (after merge) + * @param speciesNames species name to merge + * @return project + */ + protected Project mergeCatch(Project project, String newSpecyName, + String... speciesNames) { - return false; + // "Campagne","Annee","Trait","Espece","Nombre","Poids" + + // regroupement par campagne/annee/trait + String lastCampagne = null; + String lastAnnee = null; + String lastTraits = null; + String[] tupleFound = null; + int tupleIndex = -1; + + // parcours des elements + Iterator<String[]> itTuple = project.getCatch().iterator(); + itTuple.next(); // skip header + int index = 1; // skip header + while (itTuple.hasNext()) { + String[] tuple = itTuple.next(); + + // si les valeurs servant au bornes de regroupement + // on changer, on reset les données du merge + String currentCampagne = tuple[0]; + String currentAnnee = tuple[1]; + String currentTraits = tuple[2]; + if (!currentCampagne.equals(lastCampagne) || + !currentAnnee.equals(lastAnnee) || + !currentTraits.equals(lastTraits)) { + + tupleFound = null; + lastCampagne = currentCampagne; + lastAnnee = currentAnnee; + lastTraits = currentTraits; + } + + // test si l'espece en cours fait partie de celle a merger + String species = tuple[3]; + boolean specyFound = false; + for (String specy : speciesNames) { + if (specy.equals(species)) { + specyFound = true; + } + } + + // si l'espece est a merger, on se souvient du tuple + // principale a merge, ou on merge avec le tuple + // principal si on a deja un tuple principal + if (specyFound) { + if (tupleFound == null) { + tupleFound = tuple; + tupleFound[3] = newSpecyName; + tupleIndex = index; + } + else { + tupleFound = mergeCatches(tupleFound, tuple); + // et on supprime le tuple + // qui a ete merge + itTuple.remove(); + // bidouille le remove decalle les index suivants + index--; + } + + project.getCatch().set(tupleIndex, tupleFound); + } + + index++; + } + + return project; } + + /** + * Merge deux lines des catch. + * + * Le resultat est mergé dans {@code tuple1} et retourné. + * + * Somme les "Nombre" et "Poids" + * + * @param tuple1 tuple1 + * @param tuple2 tuple2 + * @return tuple1 + */ + protected String[] mergeCatches(String[] tuple1, String[] tuple2) { + + // "Campagne","Annee","Trait","Espece","Nombre","Poids" + + try { + double nombre1 = Double.parseDouble(tuple1[4]); + double nombre2 = Double.parseDouble(tuple2[4]); + double poids1 = Double.parseDouble(tuple1[5]); + double poids2 = Double.parseDouble(tuple2[5]); + + tuple1[4] = String.valueOf(nombre1 + nombre2); + tuple1[5] = String.valueOf(poids1 + poids2); + } + catch (NumberFormatException ex) { + if (log.isWarnEnabled()) { + log.warn("Can't convert data as double for merge", ex); + } + } + return tuple1; + } } Modified: trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-10-22 16:49:10 UTC (rev 91) +++ trunk/coser-business/src/main/resources/i18n/coser-business-en_GB.properties 2010-10-22 16:49:47 UTC (rev 92) @@ -3,6 +3,7 @@ Missing\ file\ %s= Project\ %s\ already\ exist= Project\ %s\ doesn't\ exists\ \!= +Specy\ %s\ doesn't\ exist\ in\ referential= Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s= Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s= coser.business.category.catch=Catch Modified: trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties =================================================================== --- trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-10-22 16:49:10 UTC (rev 91) +++ trunk/coser-business/src/main/resources/i18n/coser-business-fr_FR.properties 2010-10-22 16:49:47 UTC (rev 92) @@ -3,6 +3,7 @@ Missing\ file\ %s=Fichier manquant \: %s Project\ %s\ already\ exist=Le projet %s existe d\u00E9j\u00E0 \! Project\ %s\ doesn't\ exists\ \!=Le projet %s n'existe pas \! +Specy\ %s\ doesn't\ exist\ in\ referential= Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s=auvais ent\u00EAte de fichier d\u00E9tect\u00E9.\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s. Wrong\ header\ detected\ in\ file.\ Find\ \:\ %s,\ expected\ %s\ or\ %s=Mauvais ent\u00EAte de fichier d\u00E9tect\u00E9.\nTrouv\u00E9\u2009\:\n\t%s\nAttendu\u2009\:\n\t%s\nou\u2009\:\n\t%s. coser.business.category.catch=Captures
participants (1)
-
chatellier@users.labs.libre-entreprise.org