/** * DataCleaner (community edition) * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.datacleaner.reference; import java.util.Collection; import org.apache.metamodel.DataContext; import org.apache.metamodel.data.DataSet; import org.apache.metamodel.query.builder.SatisfiedWhereBuilder; import org.apache.metamodel.schema.Column; import org.datacleaner.connection.DatastoreConnection; final class DatastoreSynonymCatalogConnection implements SynonymCatalogConnection { private final DatastoreConnection _datastoreConnection; private final DatastoreSynonymCatalog _synonymCatalog; public DatastoreSynonymCatalogConnection(final DatastoreSynonymCatalog synonymCatalog, final DatastoreConnection datastoreConnection) { _synonymCatalog = synonymCatalog; _datastoreConnection = datastoreConnection; } @Override public Collection<Synonym> getSynonyms() { final SimpleSynonymCatalog simpleSynonymCatalog = _synonymCatalog.loadIntoMemory(_datastoreConnection); return simpleSynonymCatalog.openConnection(null).getSynonyms(); } @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; } @Override public Replacement replaceInline(final String sentence) { final SimpleSynonymCatalog simpleSynonymCatalog = _synonymCatalog.loadIntoMemory(_datastoreConnection); return simpleSynonymCatalog.openConnection(null).replaceInline(sentence); } @Override public void close() { _datastoreConnection.close(); } }