// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.opendata.core.util;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Locale;
import javax.swing.ImageIcon;
import org.apache.commons.lang3.StringUtils;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.Relation;
import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleHandler;
import org.openstreetmap.josm.tools.ImageProvider;
import org.openstreetmap.josm.tools.Utils;
public abstract class OdUtils {
private static final String TEMP_DIR_PREFIX = "josm_opendata_temp_";
public static final boolean isMultipolygon(OsmPrimitive p) {
return p instanceof Relation && ((Relation) p).isMultipolygon();
}
public static final String[] stripQuotesAndExtraChars(String[] split, String sep) {
List<String> result = new ArrayList<>();
boolean append = false;
for (int i = 0; i < split.length; i++) {
if (append) {
int index = result.size()-1;
if (split[i].endsWith("\"") && StringUtils.countMatches(split[i], "\"") % 2 == 1) {
append = false;
}
result.set(index, result.get(index)+sep+split[i].replaceAll("\"", ""));
} else if (split[i].startsWith("\"")) {
if (!(split[i].endsWith("\"") && StringUtils.countMatches(split[i], "\"") % 2 == 0)) {
append = true;
}
result.add(split[i].replaceAll("\"", ""));
} else {
result.add(split[i]);
}
}
// Remove exotic characters such as U+FEFF found in some CSV files
for (ListIterator<String> it = result.listIterator(); it.hasNext();) {
it.set(Utils.strip(it.next()));
}
return result.toArray(new String[0]);
}
public static final ImageIcon getImageIcon(String iconName) {
return getImageIcon(iconName, false);
}
public static final ImageIcon getImageIcon(String iconName, boolean optional) {
return getImageProvider(iconName, optional).get();
}
public static final ImageProvider getImageProvider(String iconName) {
return getImageProvider(iconName, false);
}
public static final ImageProvider getImageProvider(String iconName, boolean optional) {
return new ImageProvider(iconName).setOptional(optional).setAdditionalClassLoaders(ModuleHandler.getResourceClassLoaders());
}
public static final String getJosmLanguage() {
String lang = Main.pref.get("language");
if (lang == null || lang.isEmpty()) {
lang = Locale.getDefault().toString();
}
return lang;
}
public static final double convertMinuteSecond(double minute, double second) {
return (minute/60.0) + (second/3600.0);
}
public static final double convertDegreeMinuteSecond(double degree, double minute, double second) {
return degree + convertMinuteSecond(minute, second);
}
public static final File createTempDir() throws IOException {
return Files.createTempDirectory(TEMP_DIR_PREFIX).toFile();
}
public static final void deleteDir(File dir) {
for (File file : dir.listFiles()) {
if (!file.delete()) {
file.deleteOnExit();
}
}
if (!dir.delete()) {
dir.deleteOnExit();
}
}
public static final void deletePreviousTempDirs() {
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
if (tmpDir.exists() && tmpDir.isDirectory()) {
for (File dir : tmpDir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.startsWith(TEMP_DIR_PREFIX);
}
})) {
deleteDir(dir);
}
}
}
}