001 // This file is part of AceWiki. 002 // Copyright 2008-2012, AceWiki developers. 003 // 004 // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU 005 // Lesser General Public License as published by the Free Software Foundation, either version 3 of 006 // the License, or (at your option) any later version. 007 // 008 // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 009 // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 010 // Lesser General Public License for more details. 011 // 012 // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If 013 // not, see http://www.gnu.org/licenses/. 014 015 package ch.uzh.ifi.attempto.acewiki.core; 016 017 import java.util.Collections; 018 import java.util.Comparator; 019 import java.util.List; 020 021 /** 022 * This utility class contains static methods for general tasks on the language level. 023 * 024 * @author Tobias Kuhn 025 */ 026 public class LanguageUtils { 027 028 private static OntologyElementsComparator comparator = new OntologyElementsComparator(); 029 030 // no instances allowed: 031 private LanguageUtils() {} 032 033 /** 034 * Returns the pretty-printed form of the given text. Underscores are transformed into blanks. 035 * 036 * @param text The input text. 037 * @return The pretty-printed text; 038 */ 039 public static String getPrettyPrinted(String text) { 040 if (text == null) return null; 041 return text.replace("_", " "); 042 } 043 044 /** 045 * Returns a heading of the form "headword1 (headword2, ..., headwordn)" for the given ontology 046 * element. 047 * 048 * @param oe The ontology element. 049 * @return The heading. 050 */ 051 public static String getHeading(OntologyElement oe) { 052 String[] h = oe.getHeadwords(); 053 String heading = getPrettyPrinted(h[0]); 054 if (h.length > 1) { 055 String aliases = ""; 056 for (int i=1 ; i<h.length ; i++) { 057 aliases += ", " + getPrettyPrinted(h[i]); 058 } 059 if (aliases.length() > 0) { 060 aliases = aliases.substring(2); 061 } 062 heading += " (" + aliases + ")"; 063 } 064 return heading; 065 } 066 067 /** 068 * Sorts the list of ontology elements according to their main headword. 069 * 070 * @param elements The list to be sorted. 071 */ 072 public static void sortOntologyElements(List<? extends OntologyElement> elements) { 073 Collections.sort(elements, comparator); 074 } 075 076 077 private static class OntologyElementsComparator implements Comparator<OntologyElement> { 078 079 public int compare(OntologyElement o1, OntologyElement o2) { 080 if (o1 instanceof DummyOntologyElement && !(o2 instanceof DummyOntologyElement)) { 081 return -1; 082 } else if (!(o1 instanceof DummyOntologyElement) && o2 instanceof DummyOntologyElement) { 083 return 1; 084 } else { 085 return o1.getHeadwords()[0].compareToIgnoreCase(o2.getHeadwords()[0]); 086 } 087 } 088 089 } 090 091 }