// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.ecologie;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.openstreetmap.josm.data.osm.DataSet;
import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
import org.openstreetmap.josm.tools.Pair;
public class InventaireForestierNationalHandler extends DataGouvDataSetHandler {
private static final String FORET = "foret";
private static final String PEUPLERAIE = "peupleraie";
private static final String PATTERN = "placettes_("+FORET+"|"+PEUPLERAIE+")_(20..)";
public InventaireForestierNationalHandler() {
super();
setName("Inventaire forestier national");
}
@Override
public boolean acceptsFilename(String filename) {
boolean result = acceptsCsvFilename(filename, PATTERN);
if (result) {
setNationalPortalPath(findPortalSuffix(filename));
}
return result;
}
@Override
public boolean acceptsUrl(String url) {
boolean result = super.acceptsUrl(url);
if (result) {
setNationalPortalPath(findPortalSuffix(url));
}
return result;
}
private final String findPortalSuffix(CharSequence filename) {
Matcher m = Pattern.compile(".*"+PATTERN+"\\....").matcher(filename);
if (m.matches()) {
String type = m.group(1);
if (type.equals(FORET)) {
switch (Integer.parseInt(m.group(2))) {
case 2010: return "Données-points-forêt-2010-30379029";
case 2009: return "Données-points-forêt-2009-30378890";
case 2008: return "Données-points-forêt-2008-30378754";
case 2007: return "Données-points-forêt-2007-30378682";
case 2006: return "Données-points-forêt-2006-30379198";
case 2005: return "Données-points-forêt-2005-30378933";
default: System.err.println("Unknown IFN year: "+m.group(2));
}
} else if (type.equals(PEUPLERAIE)) {
switch (Integer.parseInt(m.group(2))) {
case 2010: return "Données-points-peupleraie-2010-30379180";
case 2009: return "Données-points-peupleraie-2009-30378848";
case 2008: return "Données-points-peupleraie-2008-30378632";
case 2007: return "Données-points-peupleraie-2007-30378611";
case 2006: return "Données-points-peupleraie-2006-30378633";
case 2005: return "Données-points-peupleraie-2005-30378717";
default: System.err.println("Unknown IFN year: "+m.group(2));
}
} else {
System.err.println("Unknown IFN type: "+type);
}
}
return null;
}
@Override
public void updateDataSet(DataSet ds) {
// TODO
}
@Override
public List<Pair<String, URL>> getDataURLs() {
List<Pair<String, URL>> result = new ArrayList<>();
try {
for (int year = 2010; year >= 2005; year--) {
result.add(getIfnURL(year, "Peupleraies", PEUPLERAIE));
result.add(getIfnURL(year, "Forêts", FORET));
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
return result;
}
private Pair<String, URL> getIfnURL(int year, String name, String type) throws MalformedURLException {
return new Pair<>(name+" "+year, new URL("http://www.ifn.fr/spip/IMG/csv/placettes_"+type+"_"+year+".csv"));
}
}