// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.opendata.core.datasets.be;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Locale;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.coor.EastNorth;
import org.openstreetmap.josm.data.coor.LatLon;
import org.openstreetmap.josm.data.osm.Tag;
import org.openstreetmap.josm.data.projection.Projection;
import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
import org.openstreetmap.josm.plugins.opendata.core.datasets.SimpleDataSetHandler;
import org.openstreetmap.josm.plugins.opendata.core.io.tabular.DefaultCsvHandler;
public abstract class BelgianDataSetHandler extends SimpleDataSetHandler implements BelgianConstants {
private Projection singleProjection;
private String nationalPortalPathDe;
private String nationalPortalPathEn;
private String nationalPortalPathFr;
private String nationalPortalPathNl;
protected static final Projection lambert1972 = OdConstants.PRJ_LAMBERT_1972.getProjection();
protected static final Projection lambert2008 = OdConstants.PRJ_LAMBERT_2008.getProjection();
protected static final Projection[] projections = new Projection[]{
lambert1972,
lambert2008
};
protected class InternalCsvHandler extends DefaultCsvHandler {
/*@Override
public List<Projection> getSpreadSheetProjections() {
if (singleProjection != null) {
return Arrays.asList(new Projection[]{singleProjection});
} else {
return Arrays.asList(projections);
}
}*/
@Override
public LatLon getCoor(EastNorth en, String[] fields) {
if (singleProjection != null) {
return singleProjection.eastNorth2latlon(en);
} else {
return super.getCoor(en, fields);
}
}
}
public BelgianDataSetHandler() {
init();
}
public BelgianDataSetHandler(String relevantTag) {
super(relevantTag);
init();
}
public BelgianDataSetHandler(boolean relevantUnion, String[] relevantTags) {
super(relevantUnion, relevantTags);
init();
}
public BelgianDataSetHandler(boolean relevantUnion, Tag[] relevantTags) {
super(relevantUnion, relevantTags);
init();
}
private void init() {
setCsvHandler(new InternalCsvHandler());
}
protected final void setNationalPortalPath(String nationalPortalPathDe, String nationalPortalPathEn,
String nationalPortalPathFr, String nationalPortalPathNl) {
this.nationalPortalPathDe = nationalPortalPathDe;
this.nationalPortalPathEn = nationalPortalPathEn;
this.nationalPortalPathFr = nationalPortalPathFr;
this.nationalPortalPathNl = nationalPortalPathNl;
}
protected final void setSingleProjection(Projection singleProjection) {
this.singleProjection = singleProjection;
getCsvHandler().setHandlesProjection(singleProjection != null);
}
@Override
public URL getNationalPortalURL() {
try {
String nationalPortalPath = "";
String lang = Main.pref.get("language");
if (lang == null || lang.isEmpty()) {
lang = Locale.getDefault().toString();
}
if (lang.startsWith("de") && nationalPortalPathDe != null) {
nationalPortalPath = nationalPortalPathDe;
} else if (lang.startsWith("fr") && nationalPortalPathFr != null) {
nationalPortalPath = nationalPortalPathFr;
} else if (lang.startsWith("nl") && nationalPortalPathNl != null) {
nationalPortalPath = nationalPortalPathNl;
} else {
nationalPortalPath = nationalPortalPathEn;
}
return new URL(BELGIAN_PORTAL.replace(OdConstants.PATTERN_LANG, lang.substring(0, 2))+nationalPortalPath); //FIXME
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
public String getLocalPortalIconName() {
return ICON_BE_24;
}
@Override
public String getNationalPortalIconName() {
return ICON_BE_24;
}
}