|  | @@ -4,12 +4,10 @@ import java.util.List;
 | 
											
												
													
														|  |  import java.lang.reflect.Field;
 |  |  import java.lang.reflect.Field;
 | 
											
												
													
														|  |  import java.lang.reflect.InvocationTargetException;
 |  |  import java.lang.reflect.InvocationTargetException;
 | 
											
												
													
														|  |  import java.math.BigDecimal;
 |  |  import java.math.BigDecimal;
 | 
											
												
													
														|  | -import java.math.BigInteger;
 |  | 
 | 
											
												
													
														|  |  import java.sql.SQLException;
 |  |  import java.sql.SQLException;
 | 
											
												
													
														|  |  import java.util.ArrayList;
 |  |  import java.util.ArrayList;
 | 
											
												
													
														|  |  import java.util.HashMap;
 |  |  import java.util.HashMap;
 | 
											
												
													
														|  |  import java.util.Map;
 |  |  import java.util.Map;
 | 
											
												
													
														|  | -import java.util.Map.Entry;
 |  | 
 | 
											
												
													
														|  |  import java.util.Optional;
 |  |  import java.util.Optional;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import db.annotation.DbField;
 |  |  import db.annotation.DbField;
 | 
											
										
											
												
													
														|  | @@ -45,8 +43,10 @@ public abstract class Table<T extends Persistable> {
 | 
											
												
													
														|  |  		return list;
 |  |  		return list;
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	
 |  |  	
 | 
											
												
													
														|  | -	public List<T> getWhere() {
 |  | 
 | 
											
												
													
														|  | -		return null;
 |  | 
 | 
											
												
													
														|  | 
 |  | +	public List<T> getWhere(List<String> where, List<Object> params) {
 | 
											
												
													
														|  | 
 |  | +		List<T> list = getWhereFromDb(where, params);
 | 
											
												
													
														|  | 
 |  | +		list.forEach(elt -> cache(elt));
 | 
											
												
													
														|  | 
 |  | +		return list;
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	
 |  |  	
 | 
											
												
													
														|  |  	public List<T> getAll() {
 |  |  	public List<T> getAll() {
 | 
											
										
											
												
													
														|  | @@ -82,7 +82,33 @@ public abstract class Table<T extends Persistable> {
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	
 |  |  	
 | 
											
												
													
														|  |  	public final void delete(long id) {
 |  |  	public final void delete(long id) {
 | 
											
												
													
														|  | -		
 |  | 
 | 
											
												
													
														|  | 
 |  | +		DbTable dbTable = getDbTableAnnotation();
 | 
											
												
													
														|  | 
 |  | +		// Cherche l'id
 | 
											
												
													
														|  | 
 |  | +		String idField = null;
 | 
											
												
													
														|  | 
 |  | +		for(Field field : dbTable.entity().getFields()) {
 | 
											
												
													
														|  | 
 |  | +			if(!field.isAnnotationPresent(DbId.class)) {
 | 
											
												
													
														|  | 
 |  | +				continue;
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +			// Lecture du nom de l'id dans la base
 | 
											
												
													
														|  | 
 |  | +			if(field.isAnnotationPresent(DbField.class)) {
 | 
											
												
													
														|  | 
 |  | +				idField = field.getAnnotation(DbField.class).name();
 | 
											
												
													
														|  | 
 |  | +			} else {
 | 
											
												
													
														|  | 
 |  | +				throw new IllegalStateException("Unable to find DbField annotation on id");
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		if (idField == null) {
 | 
											
												
													
														|  | 
 |  | +			throw new IllegalStateException("Unable to find find DbField annotation");
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		// Requete SQL
 | 
											
												
													
														|  | 
 |  | +		String sql = "Delete From " + dbTable.name() + " Where " + idField + " = ?";
 | 
											
												
													
														|  | 
 |  | +		List<Object> params = new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +		params.add(id);
 | 
											
												
													
														|  | 
 |  | +		// Execution requete
 | 
											
												
													
														|  | 
 |  | +		if (!Database.execute(sql, params)) {
 | 
											
												
													
														|  | 
 |  | +			throw new IllegalStateException("Unable to delete data");
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		// Retire du cache
 | 
											
												
													
														|  | 
 |  | +		remove(id);
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	
 |  |  	
 | 
											
												
													
														|  |  	public void delete(T obj) {
 |  |  	public void delete(T obj) {
 | 
											
										
											
												
													
														|  | @@ -99,6 +125,12 @@ public abstract class Table<T extends Persistable> {
 | 
											
												
													
														|  |  		//cacheMap.forEach((key, val) -> System.out.println("Cache: " + key));
 |  |  		//cacheMap.forEach((key, val) -> System.out.println("Cache: " + key));
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	
 |  |  	
 | 
											
												
													
														|  | 
 |  | +	private void remove(long id) {
 | 
											
												
													
														|  | 
 |  | +		if (cacheMap.containsKey(id)) {
 | 
											
												
													
														|  | 
 |  | +			cacheMap.remove(id);
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  |  	private DbTable getDbTableAnnotation() {
 |  |  	private DbTable getDbTableAnnotation() {
 | 
											
												
													
														|  |  		Class<?> clazz = this.getClass();
 |  |  		Class<?> clazz = this.getClass();
 | 
											
												
													
														|  |  		// Recupération info anotation DbTable
 |  |  		// Recupération info anotation DbTable
 | 
											
										
											
												
													
														|  | @@ -180,6 +212,38 @@ public abstract class Table<T extends Persistable> {
 | 
											
												
													
														|  |  		return result.get();
 |  |  		return result.get();
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  	
 |  |  	
 | 
											
												
													
														|  | 
 |  | +	private List<T> getWhereFromDb(List<String> fields, List<Object> params) {
 | 
											
												
													
														|  | 
 |  | +		DbTable dbTable = getDbTableAnnotation();
 | 
											
												
													
														|  | 
 |  | +		// Requete sql
 | 
											
												
													
														|  | 
 |  | +		StringBuilder sql = new StringBuilder();
 | 
											
												
													
														|  | 
 |  | +		sql.append("Select * From " + dbTable.name() + "Where 1=1");
 | 
											
												
													
														|  | 
 |  | +		fields.forEach(elt -> sql.append(" And elt  = ?"));
 | 
											
												
													
														|  | 
 |  | +		// Execution requete
 | 
											
												
													
														|  | 
 |  | +		Optional<List<T>> result = Database.query(sql.toString(), params, rs -> {
 | 
											
												
													
														|  | 
 |  | +			try {
 | 
											
												
													
														|  | 
 |  | +				List<T> list = new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +				while(rs.next()) {
 | 
											
												
													
														|  | 
 |  | +					T obj = (T) dbTable.entity().getConstructor().newInstance();
 | 
											
												
													
														|  | 
 |  | +					for(Field field : dbTable.entity().getFields()) {
 | 
											
												
													
														|  | 
 |  | +						if(!field.isAnnotationPresent(DbField.class)) {
 | 
											
												
													
														|  | 
 |  | +							continue;
 | 
											
												
													
														|  | 
 |  | +						}
 | 
											
												
													
														|  | 
 |  | +						obj.getClass().getField(field.getName()).set(obj, rs.getObject(field.getAnnotation(DbField.class).name()));
 | 
											
												
													
														|  | 
 |  | +					}
 | 
											
												
													
														|  | 
 |  | +					list.add(obj);
 | 
											
												
													
														|  | 
 |  | +				}
 | 
											
												
													
														|  | 
 |  | +				return list;
 | 
											
												
													
														|  | 
 |  | +			} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | NoSuchFieldException | SQLException e) {
 | 
											
												
													
														|  | 
 |  | +				throw new IllegalStateException("Unable to map value to the entity");
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +		});
 | 
											
												
													
														|  | 
 |  | +		// Return
 | 
											
												
													
														|  | 
 |  | +		if(result.isEmpty()) {
 | 
											
												
													
														|  | 
 |  | +			return new ArrayList<>();
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +		return result.get();
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	
 | 
											
												
													
														|  |  	private List<T> getAllFromDb() {
 |  |  	private List<T> getAllFromDb() {
 | 
											
												
													
														|  |  		DbTable dbTable = getDbTableAnnotation();
 |  |  		DbTable dbTable = getDbTableAnnotation();
 | 
											
												
													
														|  |  		// Requete sql
 |  |  		// Requete sql
 |