diff --git a/lib/PatPeter/SQLibrary/DatabaseConfig.java b/lib/PatPeter/SQLibrary/DatabaseConfig.java
new file mode 100644
index 0000000..831a894
--- /dev/null
+++ b/lib/PatPeter/SQLibrary/DatabaseConfig.java
@@ -0,0 +1,142 @@
+/************************************************************************
+ * This file is part of SQLibrary.
+ *
+ * SQLibrary is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SQLibrary is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SQLibrary. If not, see .
+ ************************************************************************/
+package lib.PatPeter.SQLibrary;
+
+import java.util.EnumMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Logger;
+
+/**
+ * @author Balor (aka Antoine Aflalo)
+ *
+ */
+public class DatabaseConfig {
+ private final Map config = new EnumMap(Parameter.class);
+ private DatabaseType type;
+ private Logger log;
+
+ public enum DatabaseType {
+ MYSQL,
+ SQLITE,
+ ALL;
+ }
+
+ public enum Parameter {
+ HOSTNAME(DatabaseType.MYSQL),
+ USER(DatabaseType.MYSQL),
+ PASSWORD(DatabaseType.MYSQL),
+ PORT_NUMBER(DatabaseType.MYSQL),
+ DATABASE(DatabaseType.MYSQL),
+ DB_PREFIX(DatabaseType.ALL),
+ DB_LOCATION(DatabaseType.SQLITE),
+ DB_NAME(DatabaseType.SQLITE);
+ private Set dbTypes = new HashSet();
+ private static Map count;
+
+ /**
+ *
+ */
+ private Parameter(DatabaseType... type) {
+ for (int i = 0; i < type.length; i++) {
+ dbTypes.add(type[i]);
+ updateCount(type[i]);
+ }
+
+ }
+
+ public boolean validParam(DatabaseType toCheck) {
+ if (dbTypes.contains(DatabaseType.ALL))
+ return true;
+ if (dbTypes.contains(toCheck))
+ return true;
+ return false;
+
+ }
+
+ private static void updateCount(DatabaseType type) {
+ if (count == null)
+ count = new EnumMap(DatabaseType.class);
+ Integer nb = count.get(type);
+ if (nb == null)
+ nb = 1;
+ else
+ nb++;
+ count.put(type, nb);
+ }
+
+ public static int getCount(DatabaseType type) {
+ int nb = count.get(DatabaseType.ALL) + count.get(type);
+ return nb;
+ }
+ }
+
+ /**
+ * @param type
+ * the type to set
+ */
+ public void setType(DatabaseType type) throws IllegalArgumentException {
+ if (type == DatabaseType.ALL)
+ throw new IllegalArgumentException("You can't set your database type to ALL");
+ this.type = type;
+ }
+
+ /**
+ * @param log
+ * the log to set
+ */
+ public void setLog(Logger log) {
+ this.log = log;
+ }
+
+ /**
+ * @return the type
+ */
+ public DatabaseType getType() {
+ return type;
+ }
+
+ /**
+ * @return the log
+ */
+ public Logger getLog() {
+ return log;
+ }
+
+ public DatabaseConfig setParameter(Parameter param, String value) throws NullPointerException,
+ InvalidConfiguration {
+ if (this.type == null)
+ throw new NullPointerException("You must set the type of the database first");
+ if (!param.validParam(type))
+ throw new InvalidConfiguration(param.toString()
+ + " is invalid for a database type of : " + type.toString());
+ config.put(param, value);
+ return this;
+
+ }
+
+ public String getParameter(Parameter param) {
+ return config.get(param);
+ }
+
+ public boolean isValid() throws InvalidConfiguration {
+ if (log == null)
+ throw new InvalidConfiguration("You need to set the logger.");
+ return config.size() == Parameter.getCount(type);
+ }
+}
diff --git a/lib/PatPeter/SQLibrary/DatabaseFactory.java b/lib/PatPeter/SQLibrary/DatabaseFactory.java
new file mode 100644
index 0000000..f9963ac
--- /dev/null
+++ b/lib/PatPeter/SQLibrary/DatabaseFactory.java
@@ -0,0 +1,46 @@
+/************************************************************************
+ * This file is part of SQLibrary.
+ *
+ * SQLibrary is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SQLibrary is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SQLibrary. If not, see .
+ ************************************************************************/
+package lib.PatPeter.SQLibrary;
+
+import lib.PatPeter.SQLibrary.DatabaseConfig.Parameter;
+
+/**
+ * @author Balor (aka Antoine Aflalo)
+ *
+ */
+public class DatabaseFactory {
+ public static DatabaseHandler createDatabase(DatabaseConfig config) throws InvalidConfiguration {
+ if (!config.isValid())
+ throw new InvalidConfiguration(
+ "The configuration is invalid, you don't have enought parameter for that DB : "
+ + config.getType());
+ switch (config.getType()) {
+ case MYSQL:
+ return new MySQL(config.getLog(), config.getParameter(Parameter.DB_PREFIX),
+ config.getParameter(Parameter.HOSTNAME),
+ config.getParameter(Parameter.PORT_NUMBER),
+ config.getParameter(Parameter.DATABASE), config.getParameter(Parameter.USER),
+ config.getParameter(Parameter.PASSWORD));
+ case SQLITE:
+ return new SQLite(config.getLog(), config.getParameter(Parameter.DB_PREFIX),
+ config.getParameter(Parameter.DB_NAME),
+ config.getParameter(Parameter.DB_LOCATION));
+ default:
+ return null;
+ }
+ }
+}
diff --git a/lib/PatPeter/SQLibrary/InvalidConfiguration.java b/lib/PatPeter/SQLibrary/InvalidConfiguration.java
new file mode 100644
index 0000000..bea973b
--- /dev/null
+++ b/lib/PatPeter/SQLibrary/InvalidConfiguration.java
@@ -0,0 +1,74 @@
+/************************************************************************
+ * This file is part of SQLibrary.
+ *
+ * SQLibrary is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SQLibrary is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with SQLibrary. If not, see .
+ ************************************************************************/
+package lib.PatPeter.SQLibrary;
+
+/**
+ * @author Balor (aka Antoine Aflalo)
+ *
+ */
+public class InvalidConfiguration extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 7939781253235805155L;
+
+ /**
+ *
+ */
+ public InvalidConfiguration() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ */
+ public InvalidConfiguration(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param cause
+ */
+ public InvalidConfiguration(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public InvalidConfiguration(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ * @param cause
+ * @param enableSuppression
+ * @param writableStackTrace
+ */
+ public InvalidConfiguration(String message, Throwable cause, boolean enableSuppression,
+ boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ // TODO Auto-generated constructor stub
+ }
+
+}