package org.olap4j.driver.olap4ld.helper; import java.util.regex.Pattern; import java.util.regex.Matcher; public class HumaniseCamelCase { //----------------------------------------------------------------------- Static Properties and Constants private static final String CAMEL_CASE_PATTERN = "([A-Z]|[a-z])[a-z]*"; private static final String CAMEL_CASE_PATTERN_NUMBERS = "([0-9]*[-]*)*"; //----------------------------------------------------------------------- Instance Properties private String humanisedString; private String acronym; //----------------------------------------------------------------------- Instance Methods /** * Converts a camelCase to a more human form, with spaces. E.g. 'Camel case' * * TODO: Takes also numbers, adds them at the end, only. * * @param camelCaseString * @return a humanised version of a camelCaseString if it is indeed camel-case. Returns the * original string if it is'nt camel-case */ public String humanise(String camelCaseString) { reset(); Matcher wordMatcher = camelCaseWordMatcher(camelCaseString); while(wordMatcher.find()) { String word = wordMatcher.group(); boolean wordIsSingleCapitalLetter = word.matches("^[A-Z]$"); if(wordIsSingleCapitalLetter) { addToAcronym(word); } else { appendAcronymIfThereIsOne(); appendWord(word); } } humanisedString += " "; Matcher numberMatcher = camelCaseNumberMatcher(camelCaseString); while(numberMatcher.find()) { String number = numberMatcher.group(); boolean wordIsSingleCapitalLetter = number.matches("^[0-9]$"); if(wordIsSingleCapitalLetter) { addToAcronym(number); } else { appendNumber(number); } } appendAcronymIfThereIsOne(); return humanisedString.length() > 0 ? humanisedString : camelCaseString; } private Matcher camelCaseWordMatcher(String camelCaseString) { return Pattern.compile(CAMEL_CASE_PATTERN).matcher(camelCaseString); } private Matcher camelCaseNumberMatcher(String camelCaseString) { return Pattern.compile(CAMEL_CASE_PATTERN_NUMBERS).matcher(camelCaseString); } private void reset() { humanisedString = ""; acronym = ""; } private void addToAcronym(String word) { acronym += word; } private void appendWord(String word) { boolean firstWord = humanisedString.length() == 0; humanisedString += firstWord ? capitaliseFirstLetter(word) : " " + word.toLowerCase(); } private void appendNumber(String number) { humanisedString += number; } private void appendAcronymIfThereIsOne() { if(acronym.length() > 0) { boolean firstWord = humanisedString.length() == 0; humanisedString += firstWord ? acronym : " " + acronym; acronym = ""; } } private String capitaliseFirstLetter(String str) { return str.substring(0, 1).toUpperCase() + str.substring(1); } }