### Question:
GenericGermanyKnxProjectCharacteristics extends KnxProjectCharacteristics { Set<String> getTerms(String text) throws IOException { Set<String> terms = new HashSet<>(); try (TokenStream ts = germanAnalyzer.tokenStream("", text)) { CharTermAttribute charTermAttribute = ts.addAttribute(CharTermAttribute.class); ts.reset(); while (ts.incrementToken()) { terms.add(charTermAttribute.toString()); } ts.end(); } return terms; }  @Override GroupAddress findMatchingBrightnessGroupAddress(GroupAddress primarySwitchGroupAddress); @Override GroupAddress findMatchingBrightnessStatusGroupAddress(GroupAddress primarySwitchGroupAddress); @Override GroupAddress findMatchingDimGroupAddress(GroupAddress primarySwitchGroupAddress); @Override GroupAddress findMatchingStatusGroupAddress(GroupAddress primarySwitchGroupAddress); @Override boolean isLight(GroupAddress ga); @Override boolean isPrimarySwitch(GroupAddress ga); @Override void learn(List<GroupAddress> groupAddresses);  }### Answer:
@Test public void getTerms() throws Exception { assertSingleTerm("Licht", "licht"); assertSingleTerm("Lichter", "licht"); assertSingleTerm("Leuchte", "leucht"); assertSingleTerm("Lampe", "lamp"); assertSingleTerm("Strahler", "strahl"); assertSingleTerm("Spots", "spot"); assertSingleTerm("Status", "status"); assertTerms("Deckenleuchte", "deck", "leucht", "deckenleucht"); assertTerms("Deckenlampe", "deck", "lamp", "deckenlamp"); assertTerms("Einbaustrahler", "einbaustrahl", "strahl", "einbau"); assertTrue(characteristics.getTerms("Spiegellicht").contains("licht")); assertTerms("Spiegellicht", "spiegel", "licht", "spiegellicht"); assertTrue(characteristics.getTerms("Beleuchtung").contains("beleuchtung")); assertTerms("Licht Küche Status Ein/Aus", "status", "licht", "kuch"); assertTerms("Rückmeldungen Schalten", "schalt", "ruckmeldung", "ruck"); assertTerms("Rückmelde-/Statusobjekte", "ruckmeld", "ruck", "statusobjekt", "objekt", "status", "meld"); }