// Path: plume-db/src/main/java/com/coreoz/plume/db/crud/CrudDao.java
// public interface CrudDao<T> {
// 
// 	List<T> findAll();
// 
// 	T findById(Long id);
// 
// 	T save(T entityToUpdate);
// 
// 	long delete(Long id);
// 
// }
// 
// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/transaction/TransactionManagerQuerydsl.java
// @Singleton
// public class TransactionManagerQuerydsl extends TransactionManager {
// 
// 	private final Configuration querydslConfiguration;
// 
// 	@Inject
// 	public TransactionManagerQuerydsl(Config config) {
// 		this(config, "db");
// 	}
// 
// 	public TransactionManagerQuerydsl(Config config, String prefix) {
// 		super(config, prefix);
// 
// 		String dialect = config.getString(prefix + ".dialect");
// 		this.querydslConfiguration = new Configuration(QuerydslTemplates.valueOf(dialect).sqlTemplates());
// 	}
// 
// 	public TransactionManagerQuerydsl(DataSource dataSource, Configuration querydslConfiguration) {
// 		super(dataSource);
// 
// 		this.querydslConfiguration = querydslConfiguration;
// 	}
// 
// 	// API
// 
// 	public <Q> SQLQuery<Q> selectQuery() {
// 		SQLQuery<Q> query = new SQLQuery<>(getConnectionProvider(), querydslConfiguration);
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	public <Q> SQLQuery<Q> selectQuery(Connection connection) {
// 		return new SQLQuery<>(connection, querydslConfiguration);
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLDeleteClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path, Connection connection) {
// 		return new SQLDeleteClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLInsertClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path, Connection connection) {
// 		return new SQLInsertClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLUpdateClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path, Connection connection) {
// 		return new SQLUpdateClause(connection, querydslConfiguration, path);
// 	}
// 
// 	// internal
// 
// 	private <T extends AbstractSQLClause<?>> T autoCloseQuery(T query) {
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	private Supplier<Connection> getConnectionProvider() {
// 		return () -> {
// 			try {
// 				return dataSource().getConnection();
// 			} catch (SQLException e) {
// 				throw new RuntimeException(e);
// 			}
// 		};
// 	}
// 
// }
// 
// Path: plume-db/src/main/java/com/coreoz/plume/db/utils/IdGenerator.java
// public class IdGenerator {
// 
// 	private static long counterMax = 0;
// 	private static long counter = counterMax+1;
// 
// 	private static void calcCounter() {
// 		// bits 33 -> 62 (30) : current time in seconds
// 		counter = ((System.currentTimeMillis() / 1000) & 0x3FFFFFFFL) << 33;
// 
// 		String ip = "127.0.0.1";
// 		try {
// 			ip = InetAddress.getLocalHost().getHostAddress();
// 		} catch (Throwable t) {
// 			// Don't care any error
// 		}
// 
// 		// bits 25 -> 32 (8)
// 		if (ip.equals("127.0.0.1")) {
// 			// 127.0.0.1 is too common. Instead, generate a unique string.
// 			counter |= (ThreadLocalRandom.current().nextInt(256) & 0xFFL) << 25;
// 		} else {
// 			counter |= (Long.parseLong(ip.substring(ip.lastIndexOf('.')+1)) & 0xFF) << 25;
// 		}
// 
// 		// bits 21 -> 24 (3)
// 		counter |= (ThreadLocalRandom.current().nextInt(16) & 0x0FL) << 21;
// 
// 		// All remaining bits 0 -> 20 (21) are the counter
// 
// 		// It will count until it reach
// 		counterMax = counter + 0x1FFFFF; // 21 bits
// 	}
// 
// 	public static synchronized long generate() {
// 		if (counter>counterMax) {
// 			calcCounter();
// 		}
// 		return counter++;
// 	}
// 
// }


import java.sql.Connection;
import com.coreoz.plume.db.crud.CrudDao;
import com.coreoz.plume.db.querydsl.transaction.TransactionManagerQuerydsl;
import com.coreoz.plume.db.utils.IdGenerator;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.dsl.NumberPath;
import com.querydsl.sql.RelationalPath;
import com.querydsl.sql.dml.DefaultMapper;
package com.coreoz.plume.db.querydsl.crud;



public class CrudDaoQuerydsl<T extends CrudEntity> extends QueryDslDao<T> implements CrudDao<T> {

	private final NumberPath<Long> idPath;

// Path: plume-db/src/main/java/com/coreoz/plume/db/crud/CrudDao.java
// public interface CrudDao<T> {
// 
// 	List<T> findAll();
// 
// 	T findById(Long id);
// 
// 	T save(T entityToUpdate);
// 
// 	long delete(Long id);
// 
// }
// 
// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/transaction/TransactionManagerQuerydsl.java
// @Singleton
// public class TransactionManagerQuerydsl extends TransactionManager {
// 
// 	private final Configuration querydslConfiguration;
// 
// 	@Inject
// 	public TransactionManagerQuerydsl(Config config) {
// 		this(config, "db");
// 	}
// 
// 	public TransactionManagerQuerydsl(Config config, String prefix) {
// 		super(config, prefix);
// 
// 		String dialect = config.getString(prefix + ".dialect");
// 		this.querydslConfiguration = new Configuration(QuerydslTemplates.valueOf(dialect).sqlTemplates());
// 	}
// 
// 	public TransactionManagerQuerydsl(DataSource dataSource, Configuration querydslConfiguration) {
// 		super(dataSource);
// 
// 		this.querydslConfiguration = querydslConfiguration;
// 	}
// 
// 	// API
// 
// 	public <Q> SQLQuery<Q> selectQuery() {
// 		SQLQuery<Q> query = new SQLQuery<>(getConnectionProvider(), querydslConfiguration);
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	public <Q> SQLQuery<Q> selectQuery(Connection connection) {
// 		return new SQLQuery<>(connection, querydslConfiguration);
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLDeleteClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path, Connection connection) {
// 		return new SQLDeleteClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLInsertClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path, Connection connection) {
// 		return new SQLInsertClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLUpdateClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path, Connection connection) {
// 		return new SQLUpdateClause(connection, querydslConfiguration, path);
// 	}
// 
// 	// internal
// 
// 	private <T extends AbstractSQLClause<?>> T autoCloseQuery(T query) {
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	private Supplier<Connection> getConnectionProvider() {
// 		return () -> {
// 			try {
// 				return dataSource().getConnection();
// 			} catch (SQLException e) {
// 				throw new RuntimeException(e);
// 			}
// 		};
// 	}
// 
// }
// 
// Path: plume-db/src/main/java/com/coreoz/plume/db/utils/IdGenerator.java
// public class IdGenerator {
// 
// 	private static long counterMax = 0;
// 	private static long counter = counterMax+1;
// 
// 	private static void calcCounter() {
// 		// bits 33 -> 62 (30) : current time in seconds
// 		counter = ((System.currentTimeMillis() / 1000) & 0x3FFFFFFFL) << 33;
// 
// 		String ip = "127.0.0.1";
// 		try {
// 			ip = InetAddress.getLocalHost().getHostAddress();
// 		} catch (Throwable t) {
// 			// Don't care any error
// 		}
// 
// 		// bits 25 -> 32 (8)
// 		if (ip.equals("127.0.0.1")) {
// 			// 127.0.0.1 is too common. Instead, generate a unique string.
// 			counter |= (ThreadLocalRandom.current().nextInt(256) & 0xFFL) << 25;
// 		} else {
// 			counter |= (Long.parseLong(ip.substring(ip.lastIndexOf('.')+1)) & 0xFF) << 25;
// 		}
// 
// 		// bits 21 -> 24 (3)
// 		counter |= (ThreadLocalRandom.current().nextInt(16) & 0x0FL) << 21;
// 
// 		// All remaining bits 0 -> 20 (21) are the counter
// 
// 		// It will count until it reach
// 		counterMax = counter + 0x1FFFFF; // 21 bits
// 	}
// 
// 	public static synchronized long generate() {
// 		if (counter>counterMax) {
// 			calcCounter();
// 		}
// 		return counter++;
// 	}
// 
// }


// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/crud/CrudDaoQuerydsl.java
import java.sql.Connection;
import com.coreoz.plume.db.crud.CrudDao;
import com.coreoz.plume.db.querydsl.transaction.TransactionManagerQuerydsl;
import com.coreoz.plume.db.utils.IdGenerator;
import com.querydsl.core.types.OrderSpecifier;
import com.querydsl.core.types.dsl.NumberPath;
import com.querydsl.sql.RelationalPath;
import com.querydsl.sql.dml.DefaultMapper;

package com.coreoz.plume.db.querydsl.crud;



public class CrudDaoQuerydsl<T extends CrudEntity> extends QueryDslDao<T> implements CrudDao<T> {

	private final NumberPath<Long> idPath;

	public CrudDaoQuerydsl(TransactionManagerQuerydsl transactionManager,