/*******************************************************************************
* Gisgraphy Project
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*
* Copyright 2008 Gisgraphy project
* David Masclet <davidmasclet@gisgraphy.com>
*
*
*******************************************************************************/
package com.gisgraphy.helper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
*
* @author <a href="mailto:david.masclet@gisgraphy.com">David Masclet</a>
*
*/
@SuppressWarnings("serial")
public class AdmStateLevelInfo {
/**
* The logger
*/
public static final Logger logger = LoggerFactory
.getLogger(AdmStateLevelInfo.class);
private static Map<String, Integer> lowLevel = new HashMap<String, Integer>();
private static Map<String, Integer> HighLevel = new HashMap<String, Integer>();
private static Map<String, List<Integer>> cityLevels = new HashMap<String, List<Integer>>();
public static final int DEFAULT_HIGH_LEVEL =7 ;
public static final int LOW_HIGH_LEVEL =4 ;
private static final int DEFAULT_CITY_LEVEL = 8;
static {
lowLevel.put("AZ", 3);
lowLevel.put("BR", 3);
lowLevel.put("BT", 3);
lowLevel.put("CN", 3);
lowLevel.put("EH", 3);
lowLevel.put("GQ", 3);
lowLevel.put("GS", 3);
lowLevel.put("GW", 3);
lowLevel.put("IN", 3);
lowLevel.put("LB", 3);
lowLevel.put("MA", 3);
lowLevel.put("MG", 3);
lowLevel.put("PG", 3);
lowLevel.put("PH", 3);
lowLevel.put("RU", 3);
lowLevel.put("SE", 3);
lowLevel.put("SH", 3);
lowLevel.put("SK", 3);
lowLevel.put("SN", 3);
lowLevel.put("TR", 3);
lowLevel.put("TZ", 3);
lowLevel.put("VE", 3);
HighLevel.put("BA", 5);
HighLevel.put("BD", 6);
HighLevel.put("BH", 5);
HighLevel.put("CF", 5);
HighLevel.put("CN", 5);
HighLevel.put("CO", 5);
HighLevel.put("DK", 6);
HighLevel.put("DZ", 6);
HighLevel.put("GE", 5);
HighLevel.put("HN", 8);
HighLevel.put("HR", 6);
HighLevel.put("ID", 6);
HighLevel.put("IE", 7);
HighLevel.put("IN", 6);
HighLevel.put("IQ", 5);
HighLevel.put("IR", 5);
HighLevel.put("IS", 5);
HighLevel.put("JP", 6);
HighLevel.put("KR", 6);
HighLevel.put("LV", 6);
HighLevel.put("LY", 4);
HighLevel.put("MK", 5);
HighLevel.put("MY", 9);
HighLevel.put("NO", 6);
HighLevel.put("NZ", 6);
HighLevel.put("PH", 5);
HighLevel.put("PT", 6);
HighLevel.put("RO", 5);
HighLevel.put("RS", 6);
HighLevel.put("SE", 6);
HighLevel.put("SK", 6);
HighLevel.put("SL", 5);
HighLevel.put("TN", 4);
HighLevel.put("TR", 5);
HighLevel.put("TZ", 8);
HighLevel.put("UA", 6);
HighLevel.put("UG", 5);
HighLevel.put("US", 6);
cityLevels.put("BA", new ArrayList<Integer>(){{add(6);;add(7);add(8);}});
cityLevels.put("BD", new ArrayList<Integer>(){{add(7);add(8);add(9);}});
cityLevels.put("BH", new ArrayList<Integer>(){{add(6);add(8);}});
cityLevels.put("CF", new ArrayList<Integer>(){{add(6);add(8);}});
cityLevels.put("CN", new ArrayList<Integer>(){{add(6);add(7);add(8);add(10);}});
cityLevels.put("CO", new ArrayList<Integer>(){{add(6);add(7);add(8);}});
cityLevels.put("DK", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("DZ", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("EE", new ArrayList<Integer>(){{add(8);add(9);}});
cityLevels.put("FI", new ArrayList<Integer>(){{add(8);add(9);}});
cityLevels.put("GE", new ArrayList<Integer>(){{add(6);add(7);add(8);add(9);}});
cityLevels.put("HN", new ArrayList<Integer>(){{add(9);}});
cityLevels.put("HR", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("ID", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("IE", new ArrayList<Integer>(){{add(8);add(9);}});
cityLevels.put("IN", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("IQ", new ArrayList<Integer>(){{add(6);}});
cityLevels.put("IR", new ArrayList<Integer>(){{add(6);}});
cityLevels.put("IS", new ArrayList<Integer>(){{add(6);}});
cityLevels.put("JP", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("KR", new ArrayList<Integer>(){{add(7);add(8);add(10);}});
cityLevels.put("LV", new ArrayList<Integer>(){{add(7);add(8);add(9);}});
cityLevels.put("LY", new ArrayList<Integer>(){{add(6);}});
cityLevels.put("MD", new ArrayList<Integer>(){{add(8);add(9);}});
cityLevels.put("MK", new ArrayList<Integer>(){{add(6);add(7);add(8);}});
cityLevels.put("MY", new ArrayList<Integer>(){{add(10);}});
cityLevels.put("NO", new ArrayList<Integer>(){{add(7);}});
cityLevels.put("NZ", new ArrayList<Integer>(){{add(7);}});
cityLevels.put("PH", new ArrayList<Integer>(){{add(6);add(7);}});
cityLevels.put("PL", new ArrayList<Integer>(){{add(8);add(10);}});
cityLevels.put("PT", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("RO", new ArrayList<Integer>(){{add(6);add(8);}});
cityLevels.put("RS", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("SE", new ArrayList<Integer>(){{add(8);}});
cityLevels.put("SK", new ArrayList<Integer>(){{add(7);add(8);add(9);}});
cityLevels.put("SL", new ArrayList<Integer>(){{add(6);}});
cityLevels.put("TH", new ArrayList<Integer>(){{add(8);add(10);}});
cityLevels.put("TN", new ArrayList<Integer>(){{add(5);}});
cityLevels.put("TR", new ArrayList<Integer>(){{add(6);add(8);}});
cityLevels.put("TZ", new ArrayList<Integer>(){{add(9);}});
cityLevels.put("UA", new ArrayList<Integer>(){{add(7);add(8);}});
cityLevels.put("UG", new ArrayList<Integer>(){{add(6);add(8);add(9);}});
cityLevels.put("US", new ArrayList<Integer>(){{add(7);add(8);}});
}
public static int getLowLevel(String countryCode) {
if (countryCode != null) {
Integer level = lowLevel.get(countryCode.toUpperCase());
if (level == null){
return LOW_HIGH_LEVEL;
} else {
return level;
}
}
return LOW_HIGH_LEVEL;
}
public static int getHighLevel(String countryCode) {
if (countryCode != null) {
Integer level = HighLevel.get(countryCode.toUpperCase());
if (level == null){
return DEFAULT_HIGH_LEVEL;
} else {
return level;
}
}
return DEFAULT_HIGH_LEVEL;
}
public static boolean isCityLevel(String countryCode, String level){
try {
return isCityLevel(countryCode, Integer.parseInt(level));
} catch (NumberFormatException e) {
return false;
}
}
public static boolean isCitySubdivisionLevel(String countryCode, String level){
try {
return isCitySubdivisionLevel(countryCode, Integer.parseInt(level));
} catch (NumberFormatException e) {
return false;
}
}
public static boolean isCitySubdivisionLevel(String countryCode,
int level) {
if (countryCode != null){
List<Integer> levels = cityLevels.get(countryCode.toUpperCase());
Integer maxLevel = 0;
if (levels!=null){
for (Integer l : levels){
if (l>maxLevel){
maxLevel = l;
}
}
return level >maxLevel;
} else {
return level > DEFAULT_CITY_LEVEL;
}
}
return level > DEFAULT_CITY_LEVEL;
}
public static boolean isCityLevel(String countryCode, int level){
if (countryCode != null){
List<Integer> levels = cityLevels.get(countryCode.toUpperCase());
if (levels!=null){
if (levels.contains(level)){
return true;
} else {
return false;
}
} else {
return level == DEFAULT_CITY_LEVEL;
}
}
return level == DEFAULT_CITY_LEVEL;
}
public static boolean shouldBeImportedAsAdm(String countryCode,int osmLevel){
if (countryCode!=null && osmLevel >0 && osmLevel >= getLowLevel(countryCode) && osmLevel <= getHighLevel(countryCode)){
return true;
}
return false;
}
}