package scripts; import java.util.*; import java.io.*; import java.util.stream.Collectors; import org.nuiton.topia.TopiaContext; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.IsisFishDAOHelper; /** * créer zone pop, importer les shapefiles depuis un dossier * nom fichier doit être le même avec les zones * * N.B. il y a une option pour supprimer tous les zones pop ! faire attention ! * * Auteur: PHAN Tuan Anh, 2022 */ public class TraiterZonePopShapefile { /** mettre ici fichier liste zones pop */ String myZonePopListFile = PTAtoolbox.DATA_FOLDER + "/zone pop/list_zone_pop_merlu_fev2023.txt"; /** mettre ici dossier de shapefile */ String myShpFolder = PTAtoolbox.DATA_FOLDER + "/zone pop/merlu_fev2023"; /** les objets pour manipuler objets isis */ TopiaContext myTX = RegionStorage.getRegion(PTAtoolbox.REGION_NAME).getStorage().beginTransaction(); FisheryRegion myRegion = IsisFishDAOHelper.getFisheryRegionDAO(myTX).findByName(PTAtoolbox.REGION_NAME); ZoneDAO myZoneDAO = IsisFishDAOHelper.getZoneDAO(myTX); List listCells = myRegion.getCell(); Population hake = IsisFishDAOHelper.getPopulationDAO(myTX).findByName("hake_age_emu1"); /** mettre ici nom pop */ /** lancer le script dans isis */ public static void main(String[] args) throws Exception { System.out.println("~~~ Start: " + new Date() + " ~~~" + System.lineSeparator()); TraiterZonePopShapefile myScript = new TraiterZonePopShapefile(); myScript.runIfTrueClean(true); System.out.println("~~~ Done: " + new Date() + " ~~~"); } /** vrai lancement du script car main() accepte pas ces fx */ public void runIfTrueClean(boolean cleanup) throws Exception { if (cleanup) { deleteZonePop(); } else { importShp(); } // save the changes myTX.commitTransaction(); myTX.closeContext(); } private void deleteZonePop() { myZoneDAO.deleteAll(myZoneDAO .findAll() .stream() .filter(zz -> zz.getName().matches("^(hake|mullet) (JUV|SSB) .*")) .collect(Collectors.toList()) ); } /** cœur de ce script */ private void importShp() throws Exception { System.out.println("import les shapefiles"); List zonePopToCreate = PTAtoolbox.readListTxt(myZonePopListFile); for (String zoneP : zonePopToCreate) { File shpFile = new File(String.format("%s/%s.shp", myShpFolder, zoneP)); Zone myZone = PTAtoolbox.traiterZone(myZoneDAO, zoneP); PTAtoolbox.affecterShp(myRegion, listCells, myZone, shpFile); if (zoneP.contains("JUV")) { hake.addRecruitmentZone(myZone); } else if (zoneP.contains("SSB")) { hake.addReproductionZone(myZone); } else { throw new Exception("not zone pop"); } hake.addPopulationZone(myZone); hake.update(); } } }