<NME> AttributeParser.java
<BEF> ADDFILE
<MSG> Generate okapi attribute parser

<DFF> @@ -0,0 +1,327 @@
+// This is a generated file, do not change manually!
+
+package cgeo.geocaching.connector.oc;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class AttributeParser {
+
+    private final static Map<String, Integer> attrMapDe;
+    private final static Map<String, Integer> attrMapPl;
+
+    static {
+        attrMapDe = new HashMap<String, Integer>();
+        attrMapPl = new HashMap<String, Integer>();
+
+        // last header line
+        attrMapDe.put("Listed at Opencaching only", 6);
+        attrMapDe.put("Dostępna tylko na Opencaching", 6);
+        attrMapDe.put("Nur bei Opencaching logbar", 6);
+        attrMapDe.put("Solo loggeable en Opencaching", 6);
+        attrMapDe.put("Loggabile solo su Opencaching", 6);
+        attrMapPl.put("Near a Survey Marker", 54);
+        attrMapPl.put("W pobliżu punktu geodezyjnego", 54);
+        attrMapPl.put("Whereigo Cache", 55);
+        attrMapPl.put("Whereigo Cache", 55);
+        attrMapPl.put("Whereigo Cache", 55);
+        attrMapDe.put("Letterbox Cache", 8);
+        attrMapPl.put("Letterbox Cache", 56);
+        attrMapDe.put("Skrzynka typu Letterbox", 8);
+        attrMapPl.put("Skrzynka typu Letterbox", 56);
+        attrMapDe.put("Letterbox (benötigt Stempel)", 8);
+        attrMapPl.put("Letterbox (benötigt Stempel)", 56);
+        attrMapDe.put("Letterbox (necesita un estampador)", 8);
+        attrMapPl.put("Letterbox (necesita un estampador)", 56);
+        attrMapDe.put("Letterbox (richiede un timbro)", 8);
+        attrMapPl.put("Letterbox (richiede un timbro)", 56);
+        attrMapPl.put("GeoHotel", 43);
+        attrMapPl.put("GeoHotel", 43);
+        attrMapPl.put("GeoHotel", 43);
+        attrMapPl.put("Magnetic cache", 49);
+        attrMapPl.put("Przyczepiona magnesem", 49);
+        attrMapPl.put("magnetischer Cache", 49);
+        attrMapPl.put("Description contains an audio file", 50);
+        attrMapPl.put("Opis zawiera plik audio", 50);
+        attrMapPl.put("Offset cache", 51);
+        attrMapPl.put("Offset cache", 51);
+        attrMapPl.put("Peilungscache", 51);
+        attrMapPl.put("Garmin's wireless beacon", 52);
+        attrMapPl.put("Beacon - Garmin Chirp", 52);
+        attrMapPl.put("Funksignal – Garmin Chirp", 52);
+        attrMapPl.put("Dead Drop USB cache", 53);
+        attrMapPl.put("Dead Drop USB skrzynka", 53);
+        attrMapDe.put("Has a moving target", 31);
+        attrMapDe.put("bewegliches Ziel", 31);
+        attrMapDe.put("Objetivo en movimiento", 31);
+        attrMapDe.put("Oggetto in movimento", 31);
+        attrMapDe.put("Webcam Cache", 32);
+        attrMapDe.put("Webcam Cache", 32);
+        attrMapDe.put("Webcam Cache", 32);
+        attrMapDe.put("Webcam Cache", 32);
+        attrMapDe.put("Other cache type", 57);
+        attrMapDe.put("sonstiger Cachetyp", 57);
+        attrMapDe.put("Otro tipo de cache", 57);
+        attrMapDe.put("Altro tipo di cache", 57);
+        attrMapDe.put("Investigation required", 54);
+        attrMapDe.put("Recherche", 54);
+        attrMapDe.put("Investigación", 54);
+        attrMapDe.put("Ricerca", 54);
+        attrMapDe.put("Puzzle / Mystery", 55);
+        attrMapDe.put("Rätsel", 55);
+        attrMapDe.put("Puzzle / Misterio", 55);
+        attrMapDe.put("Puzzle / Mystery", 55);
+        attrMapDe.put("Arithmetical problem", 56);
+        attrMapDe.put("Rechenaufgabe", 56);
+        attrMapDe.put("Problema matemático", 56);
+        attrMapDe.put("Problema matematico", 56);
+        attrMapDe.put("Ask owner for start conditions", 58);
+        attrMapDe.put("Startbedingungen beim Owner erfragen", 58);
+        attrMapDe.put("Ask owner for start conditions", 58);
+        attrMapDe.put("Ask owner for start conditions", 58);
+        attrMapPl.put("Wheelchair accessible", 44);
+        attrMapPl.put("Dostępna dla niepełnosprawnych", 44);
+        attrMapPl.put("rollstuhltauglich", 44);
+        attrMapDe.put("Near the parking area", 24);
+        attrMapDe.put("nahe beim Auto", 24);
+        attrMapDe.put("Cerca de un Parking", 24);
+        attrMapDe.put("Vicino all'area di parcheggio", 24);
+        attrMapPl.put("Access only by walk", 84);
+        attrMapPl.put("Dostępna tylko pieszo", 84);
+        attrMapDe.put("Long walk", 25);
+        attrMapDe.put("längere Wanderung", 25);
+        attrMapDe.put("Larga caminata", 25);
+        attrMapDe.put("Lunga camminata", 25);
+        attrMapDe.put("Swamp, marsh or wading", 26);
+        attrMapDe.put("sumpfig/matschiges Gelände / waten", 26);
+        attrMapDe.put("Pantano / terreno fangoso", 26);
+        attrMapDe.put("Palude o marcita", 26);
+        attrMapDe.put("Hilly area", 27);
+        attrMapDe.put("hügeliges Gelände", 27);
+        attrMapDe.put("Terreno montañoso", 27);
+        attrMapDe.put("Area collinare", 27);
+        attrMapDe.put("Some climbing (no gear needed)", 28);
+        attrMapDe.put("leichtes Klettern (ohne Ausrüstung)", 28);
+        attrMapDe.put("fácil de subir (sin equipo)", 28);
+        attrMapDe.put("Arrampicata (attrezzatura non necessaria)", 28);
+        attrMapDe.put("Swimming required", 29);
+        attrMapDe.put("Schwimmen erforderlich", 29);
+        attrMapDe.put("Requiere nadar", 29);
+        attrMapDe.put("Nuoto necessario", 29);
+        attrMapDe.put("Access or parking fee", 36);
+        attrMapDe.put("Zugangs- bzw. Parkentgelt", 36);
+        attrMapDe.put("Acceso o parking pagando", 36);
+        attrMapDe.put("Tassa di ingresso o di parcheggio", 36);
+        attrMapPl.put("Bikes allowed", 85);
+        attrMapPl.put("Dostępna rowerem", 85);
+        attrMapPl.put("Hidden in natural surroundings (forests, mountains, etc.)", 60);
+        attrMapPl.put("Umiejscowiona na łonie natury (lasy, góry, itp.)", 60);
+        attrMapPl.put("Historic site", 61);
+        attrMapPl.put("Miejsce historyczne", 61);
+        attrMapDe.put("Point of interest", 30);
+        attrMapDe.put("interessanter Ort", 30);
+        attrMapDe.put("Punto de interes", 30);
+        attrMapDe.put("Punto di interesse", 30);
+        attrMapDe.put("Hidden wihin enclosed rooms (caves, buildings etc.)", 33);
+        attrMapDe.put("in geschlossenen Räumen (Höhle, Gebäude, etc.)", 33);
+        attrMapDe.put("en espacios confinados (cuevas, edificios, etc)", 33);
+        attrMapDe.put("All'interno di stanze chiuse (caverne, edifici, ecc.)", 33);
+        attrMapDe.put("Hidden under water", 34);
+        attrMapDe.put("Im Wasser versteckt", 34);
+        attrMapDe.put("En el agua", 34);
+        attrMapDe.put("Nell'acqua", 34);
+        attrMapDe.put("Parking area nearby", 18);
+        attrMapDe.put("Parkplatz in der Nähe", 18);
+        attrMapDe.put("Parking cercano", 18);
+        attrMapDe.put("Parcheggio nei pressi", 18);
+        attrMapDe.put("Public transportation", 19);
+        attrMapDe.put("erreichbar mit ÖVM", 19);
+        attrMapDe.put("Transporte Público", 19);
+        attrMapDe.put("Trasporto pubblico", 19);
+        attrMapDe.put("Drinking water nearby", 20);
+        attrMapDe.put("Trinkwasser in der Nähe", 20);
+        attrMapDe.put("Agua potable en las cercanias", 20);
+        attrMapDe.put("Acqua potabile nei pressi", 20);
+        attrMapDe.put("Public restrooms nearby", 21);
+        attrMapDe.put("öffentliche Toilette in der Nähe", 21);
+        attrMapDe.put("Aseos públicos cercanos", 21);
+        attrMapDe.put("Bagni pubblici nei pressi", 21);
+        attrMapDe.put("Public phone nearby", 22);
+        attrMapDe.put("Telefon in der Nähe", 22);
+        attrMapDe.put("Teléfono Público en las cercanias", 22);
+        attrMapDe.put("Telefono pubblico nei pressi", 22);
+        attrMapDe.put("First aid available", 23);
+        attrMapDe.put("Erste Hilfe verfügbar", 23);
+        attrMapDe.put("Disponible socorro rapido", 23);
+        attrMapDe.put("Disponibile pronto soccorso", 23);
+        attrMapDe.put("Available 24/7", 38);
+        attrMapDe.put("rund um die Uhr machbar", 38);
+        attrMapDe.put("Disponible las 24 horas", 38);
+        attrMapDe.put("Disponibile 24 ore", 38);
+        attrMapDe.put("Not 24/7", 39);
+        attrMapPl.put("Not 24/7", 80);
+        attrMapDe.put("Dostępna w określonych godzinach", 39);
+        attrMapPl.put("Dostępna w określonych godzinach", 80);
+        attrMapDe.put("nur zu bestimmten Uhrzeiten", 39);
+        attrMapPl.put("nur zu bestimmten Uhrzeiten", 80);
+        attrMapDe.put("Sólo disponible a ciertas horas", 39);
+        attrMapPl.put("Sólo disponible a ciertas horas", 80);
+        attrMapDe.put("Disponibile solo in certi orari", 39);
+        attrMapPl.put("Disponibile solo in certi orari", 80);
+        attrMapDe.put("Not recommended at night", 40);
+        attrMapDe.put("nur tagüber", 40);
+        attrMapDe.put("solo por el día", 40);
+        attrMapDe.put("solo di giorno", 40);
+        attrMapPl.put("Recommended at night", 91);
+        attrMapPl.put("Zalecane szukanie nocą", 91);
+        attrMapPl.put("am besten nachts findbar", 91);
+        attrMapDe.put("Only at night", 1);
+        attrMapDe.put("nur bei Nacht", 1);
+        attrMapDe.put("Sólo por la noche", 1);
+        attrMapDe.put("Solo di notte", 1);
+        attrMapDe.put("All seasons", 42);
+        attrMapDe.put("ganzjähig zugänglich", 42);
+        attrMapDe.put("Todas las temporadas", 42);
+        attrMapDe.put("Tutte le stagioni", 42);
+        attrMapDe.put("Only available during specified seasons", 60);
+        attrMapDe.put("Nur zu bestimmten Zeiten im Jahr", 60);
+        attrMapDe.put("Sólo disponible durante las estaciones especificadas", 60);
+        attrMapDe.put("Disponibile solo in certe stagioni", 60);
+        attrMapDe.put("Breeding season / protected nature", 43);
+        attrMapDe.put("Brutsaison / Naturschutz", 43);
+        attrMapDe.put("Temporada de reproducción / protección de la naturaleza", 43);
+        attrMapDe.put("Stagione di riproduzione / natura protetta", 43);
+        attrMapDe.put("Available during winter", 44);
+        attrMapDe.put("schneesicheres Versteck", 44);
+        attrMapDe.put("Nieve en el escondite", 44);
+        attrMapDe.put("Luogo a prova di neve", 44);
+        attrMapDe.put("Not at high water level", 41);
+        attrMapDe.put("nicht bei Hochwasser oder Flut", 41);
+        attrMapDe.put("Compass required", 47);
+        attrMapPl.put("Compass required", 47);
+        attrMapDe.put("Potrzebny kompas", 47);
+        attrMapPl.put("Potrzebny kompas", 47);
+        attrMapDe.put("Kompass", 47);
+        attrMapPl.put("Kompass", 47);
+        attrMapDe.put("Brújula", 47);
+        attrMapPl.put("Brújula", 47);
+        attrMapDe.put("Bussola", 47);
+        attrMapPl.put("Bussola", 47);
+        attrMapPl.put("Take something to write", 48);
+        attrMapPl.put("Weź coś do pisania", 48);
+        attrMapPl.put("You may need a shovel", 81);
+        attrMapPl.put("Potrzebna łopatka", 81);
+        attrMapDe.put("Flashlight required", 48);
+        attrMapPl.put("Flashlight required", 82);
+        attrMapDe.put("Potrzebna latarka", 48);
+        attrMapPl.put("Potrzebna latarka", 82);
+        attrMapDe.put("Taschenlampe", 48);
+        attrMapPl.put("Taschenlampe", 82);
+        attrMapDe.put("Linterna", 48);
+        attrMapPl.put("Linterna", 82);
+        attrMapDe.put("Lampada tascabile", 48);
+        attrMapPl.put("Lampada tascabile", 82);
+        attrMapDe.put("Climbing gear required", 49);
+        attrMapDe.put("Kletterzeug", 49);
+        attrMapDe.put("Equipo de escalada", 49);
+        attrMapDe.put("Attrezzatura per arrampicata", 49);
+        attrMapDe.put("Cave equipment required", 50);
+        attrMapDe.put("Höhlenzeug", 50);
+        attrMapDe.put("Equipación para cuevas", 50);
+        attrMapDe.put("Attrezzatura per grotta", 50);
+        attrMapDe.put("Diving equipment required", 51);
+        attrMapDe.put("Taucherausrüstung", 51);
+        attrMapDe.put("Diving equipment", 51);
+        attrMapDe.put("Equipo de buceo", 51);
+        attrMapDe.put("Special tools required", 46);
+        attrMapPl.put("Special tools required", 83);
+        attrMapDe.put("Wymagany dodatkowy sprzęt", 46);
+        attrMapPl.put("Wymagany dodatkowy sprzęt", 83);
+        attrMapDe.put("spezielle Ausrüstung", 46);
+        attrMapPl.put("spezielle Ausrüstung", 83);
+        attrMapDe.put("Equipamiento especial", 46);
+        attrMapPl.put("Equipamiento especial", 83);
+        attrMapDe.put("Equipaggiamento speciale", 46);
+        attrMapPl.put("Equipaggiamento speciale", 83);
+        attrMapDe.put("Requires a boat", 52);
+        attrMapPl.put("Requires a boat", 86);
+        attrMapDe.put("Wymaga sprzętu pływającego", 52);
+        attrMapPl.put("Wymaga sprzętu pływającego", 86);
+        attrMapDe.put("Wasserfahrzeug", 52);
+        attrMapPl.put("Wasserfahrzeug", 86);
+        attrMapDe.put("Barca", 52);
+        attrMapPl.put("Barca", 86);
+        attrMapDe.put("Barca", 52);
+        attrMapPl.put("Barca", 86);
+        attrMapDe.put("No GPS required", 35);
+        attrMapDe.put("ohne GPS findbar", 35);
+        attrMapDe.put("Sin GPS", 35);
+        attrMapDe.put("Senza GPS", 35);
+        attrMapDe.put("Dangerous area", 9);
+        attrMapPl.put("Dangerous area", 90);
+        attrMapDe.put("Skrzynka niebezpieczna", 9);
+        attrMapPl.put("Skrzynka niebezpieczna", 90);
+        attrMapDe.put("gefährliches Gebiet", 9);
+        attrMapPl.put("gefährliches Gebiet", 90);
+        attrMapDe.put("Zona Peligrosa", 9);
+        attrMapPl.put("Zona Peligrosa", 90);
+        attrMapDe.put("Area pericolosa", 9);
+        attrMapPl.put("Area pericolosa", 90);
+        attrMapDe.put("Active railway nearby", 10);
+        attrMapDe.put("aktive Eisenbahnlinie in der Nähe", 10);
+        attrMapDe.put("Cerca del ferrocarril activo", 10);
+        attrMapDe.put("Ferrovia attiva nei pressi", 10);
+        attrMapDe.put("Cliff / Rocks", 11);
+        attrMapDe.put("Klippen / Felsen", 11);
+        attrMapDe.put("Acantilado / Rocas", 11);
+        attrMapDe.put("Scogliera / Rocce", 11);
+        attrMapDe.put("Hunting", 12);
+        attrMapDe.put("Jagdgebiet", 12);
+        attrMapDe.put("Zona de Caza", 12);
+        attrMapDe.put("Caccia", 12);
+        attrMapDe.put("Thorns", 13);
+        attrMapDe.put("Dornen", 13);
+        attrMapDe.put("Espinas", 13);
+        attrMapDe.put("Spine", 13);
+        attrMapDe.put("Ticks", 14);
+        attrMapDe.put("Zecken", 14);
+        attrMapDe.put("Garrapatas", 14);
+        attrMapDe.put("Zecche", 14);
+        attrMapDe.put("Abandoned mines", 15);
+        attrMapDe.put("Folgen des Bergbaus", 15);
+        attrMapDe.put("Mina abandonada", 15);
+        attrMapDe.put("Miniere abbandonate", 15);
+        attrMapDe.put("Poisonous plants", 16);
+        attrMapDe.put("giftige Pflanzen", 16);
+        attrMapDe.put("Planta venenosa", 16);
+        attrMapDe.put("Piante velenose", 16);
+        attrMapDe.put("Dangerous animals", 17);
+        attrMapDe.put("giftige/gefährliche Tiere", 17);
+        attrMapDe.put("Animales Peligrosos", 17);
+        attrMapDe.put("Animali pericolosi", 17);
+        attrMapPl.put("Quick cache", 40);
+        attrMapPl.put("Szybka skrzynka", 40);
+        attrMapDe.put("Overnight stay necessary", 37);
+        attrMapDe.put("Übernachtung erforderlich", 37);
+        attrMapDe.put("Necesario pernoctar", 37);
+        attrMapDe.put("Necessario pernottamento", 37);
+        attrMapPl.put("Take your children", 41);
+        attrMapPl.put("Można zabrać dzieci", 41);
+        attrMapDe.put("Suited for children (10-12 yo)", 59);
+        attrMapDe.put("kindgerecht (10-12 Jahre)", 59);
+        attrMapDe.put("Apto para niños (10-12 años)", 59);
+        attrMapDe.put("Suited for children (10-12 anni)", 59);
+        // first trailer line
+
+    }
+
+    public static int getOcDeId(final String name) {
+
+        int result = 0;
+
+        if (attrMapDe.containsKey(name)) {
+            result = attrMapDe.get(name);
+        }
+        return result;
+    }
+}

Generate okapi attribute parser