Эх сурвалжийг харах

Gestion valeur par defaut @DbLink

Arthur Brandao 5 жил өмнө
parent
commit
0f6669a347

+ 13 - 0
src/db/DatabaseUtils.java

@@ -2,6 +2,8 @@ package db;
 
 import java.lang.reflect.Field;
 
+import db.annotation.DbLink;
+
 public class DatabaseUtils {
 	
 	public static void checkIfPersistable(Field f) {
@@ -13,5 +15,16 @@ public class DatabaseUtils {
 			throw new IllegalStateException("Field object don't implement Persistable");
 		}
 	}
+	
+	public static String getDbLink(Field f) {
+		if (!f.isAnnotationPresent(DbLink.class)) {
+			return null;
+		}
+		String val = f.getAnnotation(DbLink.class).value();
+		if ("#PROPERTIES#".equals(val)) {
+			val = DatabaseProperties.get("dblink");
+		}
+		return val;
+	}
 
 }

+ 2 - 1
src/db/annotation/DbLink.java

@@ -11,8 +11,9 @@ public @interface DbLink {
 	
 	/**
 	 * Le nom du package dans lequel se trouve la class Table lié à l'entité qu'il faut importer
+	 * La valeur par défaut #PROPERTIES# doit être remplacer par la valeur dans le fichier de properties
 	 * @return
 	 */
-	public String value() default "db.table";
+	public String value() default "#PROPERTIES#";
 	
 }

+ 11 - 9
src/db/mapper/DatabaseMapper.java

@@ -29,7 +29,8 @@ public class DatabaseMapper {
 						// Recup valeur dans le resultat
 						Object value = rs.getObject(field.getAnnotation(DbField.class).value());
 						// Si lien avec une autre entité
-						if(value != null && field.isAnnotationPresent(DbLink.class)) {
+						String link = DatabaseUtils.getDbLink(field);
+						if(value != null && link != null) {
 							DatabaseUtils.checkIfPersistable(field);
 							Long otherId = (Long) value;
 							if(otherId == 0) {
@@ -38,7 +39,7 @@ public class DatabaseMapper {
 								String[] split = field.getType().getName().split("\\.");
 								String className = split[split.length - 1];
 								// Chargement de la class Table qui gère l'entité
-								Class<?> clazz = Class.forName(field.getAnnotation(DbLink.class).value() + "." + className + "Table");
+								Class<?> clazz = Class.forName(link + "." + className + "Table");
 								DatabaseTable table = (DatabaseTable) clazz.getMethod("getInstance").invoke(null);
 								value = table.getById(otherId);
 							}
@@ -67,23 +68,24 @@ public class DatabaseMapper {
 								continue;
 							}
 							// Recup valeur dans le resultat
-							Object val = rs.getObject(field.getAnnotation(DbField.class).value());
+							Object value = rs.getObject(field.getAnnotation(DbField.class).value());
 							// Si lien avec une autre entité
-							if(val != null && field.isAnnotationPresent(DbLink.class)) {
+							String link = DatabaseUtils.getDbLink(field);
+							if(value != null && link != null) {
 								DatabaseUtils.checkIfPersistable(field);
-								Long otherId = (Long) val;
+								Long otherId = (Long) value;
 								if(otherId == 0) {
-									val = null;
+									value = null;
 								} else {
 									String[] split = field.getType().getName().split("\\.");
 									String className = split[split.length - 1];
 									// Chargement de la class Table qui gère l'entité
-									Class<?> clazz = Class.forName(field.getAnnotation(DbLink.class).value() + "." + className + "Table");
+									Class<?> clazz = Class.forName(link + "." + className + "Table");
 									DatabaseTable table = (DatabaseTable) clazz.getMethod("getInstance").invoke(null);
-									val = table.getById(otherId);
+									value = table.getById(otherId);
 								}
 							}
-							field.set(obj, val);
+							field.set(obj, value);
 						}
 						list.add(obj);
 					}

+ 1 - 1
src/db/table/EcoleTable.java → src/microfolie/db/table/EcoleTable.java

@@ -1,4 +1,4 @@
-package db.table;
+package microfolie.db.table;
 
 import db.DatabaseTable;
 import db.annotation.DbTable;

+ 1 - 1
src/db/table/EspaceTable.java → src/microfolie/db/table/EspaceTable.java

@@ -1,4 +1,4 @@
-package db.table;
+package microfolie.db.table;
 
 import java.util.List;
 import java.util.Optional;

+ 1 - 1
src/db/table/FrequentationTable.java → src/microfolie/db/table/FrequentationTable.java

@@ -1,4 +1,4 @@
-package db.table;
+package microfolie.db.table;
 
 import db.DatabaseTable;
 import db.annotation.DbTable;

+ 1 - 1
src/db/table/NiveauTable.java → src/microfolie/db/table/NiveauTable.java

@@ -1,4 +1,4 @@
-package db.table;
+package microfolie.db.table;
 
 import db.DatabaseTable;
 import db.annotation.DbTable;

+ 1 - 1
src/db/table/UsagerTable.java → src/microfolie/db/table/UsagerTable.java

@@ -1,4 +1,4 @@
-package db.table;
+package microfolie.db.table;
 
 import java.util.List;
 import java.util.Optional;

+ 1 - 1
src/db/table/VilleTable.java → src/microfolie/db/table/VilleTable.java

@@ -1,4 +1,4 @@
-package db.table;
+package microfolie.db.table;
 
 import java.util.List;
 import java.util.Optional;

+ 4 - 4
src/servlets/TestDb.java

@@ -15,14 +15,14 @@ import javax.servlet.http.HttpServletResponse;
 import db.Database;
 import db.DatabaseManager;
 import db.annotation.DbTable;
-import db.table.EcoleTable;
-import db.table.EspaceTable;
-import db.table.UsagerTable;
-import db.table.VilleTable;
 import entity.Ecole;
 import entity.Espace;
 import entity.Usager;
 import entity.Ville;
+import microfolie.db.table.EcoleTable;
+import microfolie.db.table.EspaceTable;
+import microfolie.db.table.UsagerTable;
+import microfolie.db.table.VilleTable;
 
 /**
  * Servlet implementation class TestDb