/* Relation.java - list of semantic relations used in all wiktionaries. * * Copyright (c) 2009 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com> * Distributed under GNU General Public License. */ package wikokit.base.wikt.constant; import java.util.Set; import java.util.Map; import java.util.HashMap; import java.util.Collection; import wikokit.base.wikipedia.language.LanguageType; import wikokit.base.wikt.multi.ru.name.RelationRu; /** Strictly defined names of semantic relations * used in all wiktionaries. * * @see http://en.wiktionary.org/wiki/Wiktionary:Semantic_relations */ public class Relation { /** Semantic relation name, e.g. synonymy. */ private final String name; /** Short Relation name, e.g. "syn." for synonymy */ //private final String short_name; /* Set helps to check the presence of elements */ private static Map<String, Relation> name2relation = new HashMap<String, Relation>(); //private static Set<String> name_set = new HashSet<String>(); private Relation(String _name) { name = _name; name2relation.put(_name, this); } @Override public String toString() { return name; } /** Gets name of Relation in the language l. * If there is no translation then returns Relation name in English */ public String toString(LanguageType l) { String s = ""; if(l == LanguageType.ru) { s = RelationRu.getName(this); } else if(l == LanguageType.en) { s = name; } else { throw new NullPointerException("Relation.toString(LanguageType l): Null LanguageType"); } if(0 == s.length()) // English name is better than nothing s = name; return s; } /** Gets short name of Relation in the language l. */ public String getShortName (LanguageType l) { String s = ""; if(l == LanguageType.ru) { s = RelationRu.getShortName(this); } else if(l == LanguageType.en) { // skip? } else { throw new NullPointerException("Relation.getShortName(LanguageType l): Null LanguageType"); } return s; } /** Checks weather exists a semantic relation by its name. */ public static boolean has(String name) { return name2relation.containsKey(name); } /** Gets semantic relation by its name */ public static Relation get(String name) { return name2relation.get(name); } /** Counts number of relations. */ public static int size() { return name2relation.size(); } /** Gets all relations. */ public static Collection<Relation> getAllRelations() { return name2relation.values(); } /** Gets all relations (as Array[]). * Rem: We are waiting a marvellous day when JavaFX will support Collection<>. * Then this function will be deleted. */ public static Relation[] getAllRelationsOrderedArray() { return RELATION_ORDERED_ARRAY; //return (Relation[])name2relation.values().toArray(NULL_RELATION_ARRAY); } /** Gets all names of semantic relations. */ public static Set<String> getAllRelationNames() { return name2relation.keySet(); } //public static final Relation unknown = new Relation("unknown"); /** The relation is unknown :( */ public static final Relation synonymy = new Relation("synonyms"); public static final Relation antonymy = new Relation("antonyms"); public static final Relation relational_antonym = new Relation("relational antonym"); // ruwikt public static final Relation hypernymy = new Relation("hypernyms"); public static final Relation hyponymy = new Relation("hyponyms"); public static final Relation holonymy = new Relation("holonyms"); public static final Relation meronymy = new Relation("meronyms"); public static final Relation troponymy = new Relation("troponyms"); public static final Relation coordinate_term = new Relation("coordinate terms"); public static final Relation otherwise_related = new Relation("see also"); // See also //private final static Relation[] NULL_RELATION_ARRAY = new Relation[0]; private final static Relation[] RELATION_ORDERED_ARRAY = { Relation.synonymy, Relation.antonymy, Relation.relational_antonym, Relation.hypernymy, Relation.hyponymy, Relation.holonymy, Relation.meronymy, Relation.troponymy, Relation.coordinate_term, Relation.otherwise_related // // converse }; }