ingo@1095: package de.intevation.flys.utils; ingo@1095: ingo@1095: import gnu.trove.TDoubleArrayList; ingo@1095: ingo@1095: import de.intevation.flys.artifacts.FLYSArtifact; felix@1099: import de.intevation.flys.artifacts.model.RiverFactory; felix@1099: import de.intevation.flys.model.River; ingo@1095: ingo@1095: public class FLYSUtils { ingo@1095: ingo@1095: public static enum KM_MODE { RANGE, LOCATIONS, NONE }; ingo@1095: ingo@1095: ingo@1095: private FLYSUtils() { ingo@1095: } ingo@1095: ingo@1095: ingo@1095: public static KM_MODE getKmRangeMode(FLYSArtifact flys) { felix@1099: String mode = flys.getDataAsString("ld_mode"); ingo@1095: ingo@1095: if (mode == null || mode.length() == 0) { ingo@1095: return KM_MODE.NONE; ingo@1095: } ingo@1095: else if (mode.equals("distance")) { ingo@1095: return KM_MODE.RANGE; ingo@1095: } ingo@1095: else if (mode.equals("locations")) { ingo@1095: return KM_MODE.LOCATIONS; ingo@1095: } ingo@1095: else { ingo@1095: return KM_MODE.NONE; ingo@1095: } ingo@1095: } ingo@1095: ingo@1095: ingo@1095: public static double[] getKmRange(FLYSArtifact flys) { ingo@1095: switch (getKmRangeMode(flys)) { ingo@1095: case RANGE: { ingo@1095: return getKmFromTo(flys); ingo@1095: } ingo@1095: ingo@1095: case LOCATIONS: { ingo@1095: double[] locs = getLocations(flys); ingo@1095: return new double[] { locs[0], locs[locs.length-1] }; ingo@1095: } ingo@1095: ingo@1095: case NONE: { ingo@1095: double[] locs = getLocations(flys); ingo@1095: if (locs != null) { ingo@1095: return new double[] { locs[0], locs[locs.length-1] }; ingo@1095: } ingo@1095: else { ingo@1095: return getKmFromTo(flys); ingo@1095: } ingo@1095: } ingo@1095: } ingo@1095: ingo@1095: return new double[] { Double.NaN, Double.NaN }; ingo@1095: } ingo@1095: ingo@1095: ingo@1095: public static double[] getKmFromTo(FLYSArtifact flys) { ingo@1095: String strFrom = flys.getDataAsString("ld_from"); ingo@1095: String strTo = flys.getDataAsString("ld_to"); ingo@1095: ingo@1095: if (strFrom == null || strTo == null) { ingo@1095: return null; ingo@1095: } ingo@1095: ingo@1095: try { ingo@1095: return new double[] { ingo@1095: Double.parseDouble(strFrom), ingo@1095: Double.parseDouble(strTo) }; ingo@1095: } ingo@1095: catch (NumberFormatException nfe) { ingo@1095: return null; ingo@1095: } ingo@1095: } ingo@1095: ingo@1095: ingo@1095: public static double[] getLocations(FLYSArtifact flys) { ingo@1095: String locationStr = flys.getDataAsString("ld_locations"); ingo@1095: ingo@1095: if (locationStr == null || locationStr.length() == 0) { ingo@1095: return null; ingo@1095: } ingo@1095: ingo@1095: String[] tmp = locationStr.split(" "); ingo@1095: TDoubleArrayList locations = new TDoubleArrayList(); ingo@1095: ingo@1095: for (String l: tmp) { ingo@1095: try { ingo@1095: locations.add(Double.parseDouble(l)); ingo@1095: } ingo@1095: catch (NumberFormatException nfe) { ingo@1095: } ingo@1095: } ingo@1095: ingo@1095: locations.sort(); ingo@1095: ingo@1095: return locations.toNativeArray(); ingo@1095: } felix@1099: felix@1099: felix@1099: /** felix@1099: * Returns the selected River object based on the 'river' data that might felix@1099: * have been inserted by the user. felix@1099: * felix@1099: * @return the selected River or null if no river has been chosen yet. felix@1099: */ felix@1099: public static River getRiver(FLYSArtifact flys) { felix@1099: String sRiver = flys.getDataAsString("river"); felix@1099: felix@1099: return (sRiver != null) felix@1099: ? RiverFactory.getRiver(sRiver) felix@1099: : null; felix@1099: } ingo@1095: }