/******************************************************************************* * This file is part of the Symfony eclipse plugin. * * (c) Robert Gruendler <r.gruendler@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. ******************************************************************************/ package com.dubture.symfony.index.dao.sql; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.eclipse.osgi.util.NLS; import com.dubture.symfony.index.Schema; import com.dubture.symfony.index.SymfonyDbFactory; import com.dubture.symfony.index.dao.ITransUnitDao; import com.dubture.symfony.index.handler.ITranslationHandler; import com.dubture.symfony.index.log.Logger; public class TransUnitDao extends BaseDao implements ITransUnitDao { private static final String TABLENAME = "TRANSUNIT"; private static final String Q_INSERT_DECL = Schema.readSqlFile("Resources/index/translations/insert_decl.sql"); //$NON-NLS-1$ private static final String QUERY_FIND_BY_PATH = "SELECT NAME, VALUE, LANGUAGE, PATH FROM TRANSUNIT WHERE PATH LIKE ?"; //$NON-NLS-1$ private static final String QUERY_FIND_BY_NAME_PATH = "SELECT NAME, VALUE, LANGUAGE, PATH FROM TRANSUNIT WHERE NAME = ? AND PATH LIKE ?"; //$NON-NLS-1$+ private static final String QUERY_DELETE_BY_NAME_PATH_LANGUAGE = "DELETE FROM TRANSUNIT WHERE NAME = ? AND PATH = ? AND LANGUAGE = ?"; public TransUnitDao() { super(); } @Override public void insert(Connection connection, String path, String name, String value, String language, int timestamp) throws Exception { String tableName = TABLENAME; String query; query = D_INSERT_QUERY_CACHE.get(tableName); if (query == null) { query = NLS.bind(Q_INSERT_DECL, tableName); D_INSERT_QUERY_CACHE.put(tableName, query); } synchronized (batchStatements) { PreparedStatement statement = batchStatements.get(query); if (statement == null) { statement = connection.prepareStatement(query); batchStatements.put(query, statement); } insertBatch(statement, path, name, value, language, timestamp); } } private void insertBatch(PreparedStatement statement, String path, String name, String value, String language, int timestamp) throws SQLException { int param = 0; statement.setString(++param, path); statement.setString(++param, name); statement.setString(++param, value); statement.setString(++param, language); statement.setInt(++param, timestamp); statement.addBatch(); } @Override public void findTranslations(String path, ITranslationHandler iTranslationHandler) { Connection connection = null; try { connection = SymfonyDbFactory.getInstance().createConnection(); PreparedStatement statement = connection.prepareStatement(QUERY_FIND_BY_PATH); statement.setString(1, escapeLikePattern(path) + LIKE_WILDCARD); ResultSet result = statement.executeQuery(); while (result.next()) { int columnIndex = 0; String name = result.getString(++columnIndex); String value = result.getString(++columnIndex); String language = result.getString(++columnIndex); String _path = result.getString(++columnIndex); iTranslationHandler.handle(name, value, language, _path); } } catch (Exception e) { Logger.logException(e); } finally { closeIfExists(connection); } } public void findTranslations(String name, String path, ITranslationHandler handler) { Connection connection = null; try { connection = SymfonyDbFactory.getInstance().createConnection(); PreparedStatement statement = connection.prepareStatement(QUERY_FIND_BY_NAME_PATH); statement.setString(1, name); statement.setString(2, escapeLikePattern(path) + LIKE_WILDCARD); ResultSet result = statement.executeQuery(); while (result.next()) { int columnIndex = 0; String _name = result.getString(++columnIndex); String value = result.getString(++columnIndex); String language = result.getString(++columnIndex); String _path = result.getString(++columnIndex); handler.handle(_name, value, language, _path); } } catch (Exception e) { Logger.logException(e); } finally { closeIfExists(connection); } } @Override public void deleteRoutesByPath(String name, String language, String path) { Connection connection = null; try { connection = SymfonyDbFactory.getInstance().createConnection(); PreparedStatement statement = connection.prepareStatement(QUERY_DELETE_BY_NAME_PATH_LANGUAGE); statement.setString(1, name); statement.setString(2, language); statement.setString(3, path); statement.execute(); connection.commit(); } catch (SQLException e) { Logger.logException(e); } finally { closeIfExists(connection); } } }