/* * Copyright 2015, The Querydsl Team (http://www.querydsl.com/team) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.querydsl.sql; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Collection; import java.util.List; import java.util.Map; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.querydsl.core.QueryMetadata; /** * A mutable implementation of SQL listener context. * <p> * INTERNAL USE ONLY - {@link com.querydsl.sql.SQLDetailedListener} implementations are not expected to use this * class directly */ public class SQLListenerContextImpl implements SQLListenerContext { private final Map<String, Object> contextMap; private final QueryMetadata md; private final List<String> sqlStatements; private final List<PreparedStatement> preparedStatements; private RelationalPath<?> entity; private Connection connection; private Exception exception; public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection, final RelationalPath<?> entity) { this.contextMap = Maps.newHashMap(); this.preparedStatements = Lists.newArrayList(); this.sqlStatements = Lists.newArrayList(); this.md = metadata; this.connection = connection; this.entity = entity; } public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection) { this(metadata, connection, null); } public SQLListenerContextImpl(final QueryMetadata metadata) { this(metadata, null, null); } public void addSQL(final String sql) { this.sqlStatements.add(sql); } public void setEntity(final RelationalPath<?> entity) { this.entity = entity; } public void setConnection(final Connection connection) { this.connection = connection; } public void setException(final Exception exception) { this.exception = exception; } public void addPreparedStatement(final PreparedStatement preparedStatement) { this.preparedStatements.add(preparedStatement); } @Override public QueryMetadata getMetadata() { return md; } @Override public RelationalPath<?> getEntity() { return entity; } @Override public String getSQL() { return sqlStatements.isEmpty() ? null : sqlStatements.get(0); } @Override public Collection<String> getSQLStatements() { return sqlStatements; } @Override public Exception getException() { return exception; } @Override public Connection getConnection() { return connection; } @Override public Collection<PreparedStatement> getPreparedStatements() { return preparedStatements; } @Override public PreparedStatement getPreparedStatement() { return preparedStatements.isEmpty() ? null : preparedStatements.get(0); } @Override public Object getData(final String dataKey) { return contextMap.get(dataKey); } @Override public void setData(final String dataKey, final Object value) { contextMap.put(dataKey, value); } @Override public String toString() { StringBuilder sb = new StringBuilder() .append(" sql:").append(nicerSql(getSQL())) .append(" connection:").append(connection == null ? "not connected" : "connected") .append(" entity:").append(entity) .append(" exception:").append(exception); for (Map.Entry<String, Object> entry : contextMap.entrySet()) { sb.append(" [").append(entry.getKey()).append(":").append(entry.getValue()).append("]"); } return sb.toString(); } private String nicerSql(final String sql) { return "'" + (sql == null ? null : sql.replace('\n', ' ')) + "'"; } }