public SimpleSynonymCatalog loadIntoMemory(final DatastoreConnection datastoreConnection) { final Map<String, String> synonymMap = new HashMap<>(); final Column masterTermColumn = getMasterTermColumn(datastoreConnection); final Column[] columns = getSynonymColumns(datastoreConnection); try (DataSet dataSet = datastoreConnection.getDataContext().query().from(masterTermColumn.getTable().getName()) .select(masterTermColumn).select(columns).execute()) { while (dataSet.next()) { final Row row = dataSet.getRow(); final String masterTerm = getMasterTerm(row, masterTermColumn); final String[] synonyms = getSynonyms(row, columns); for (final String synonym : synonyms) { synonymMap.put(synonym, masterTerm); } } } return new SimpleSynonymCatalog(getName(), synonymMap); }
@Override public String getMasterTerm(final String term) { final DataContext dataContext = _datastoreConnection.getDataContext(); final Column masterTermColumn = _synonymCatalog.getMasterTermColumn(_datastoreConnection); final Column[] columns = _synonymCatalog.getSynonymColumns(_datastoreConnection); SatisfiedWhereBuilder<?> queryBuilder = dataContext.query().from(masterTermColumn.getTable()).select(masterTermColumn).where(columns[0]) .eq(term); for (int i = 1; i < columns.length; i++) { final Column column = columns[i]; queryBuilder = queryBuilder.or(column).eq(term); } queryBuilder.maxRows(1); try (DataSet dataSet = queryBuilder.execute()) { while (dataSet.next()) { final Object value = dataSet.getRow().getValue(0); if (value != null) { return value.toString(); } } } return null; }