diff --git a/README.md b/README.md
index f09b5a6..8e2c503 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@ Another one IRC bot in deep-deep beta.
## License
Source code spreads under the GNU General Public License v3 or higher. Please see LICENSE file.
-####Used libraries:
+#### Used libraries:
* Apache commons CLI: https://commons.apache.org/proper/commons-cli/
* GSON: https://github.com/google/gson
* sqliteJDBC: https://bitbucket.org/xerial/sqlite-jdbc
diff --git a/pom.xml b/pom.xml
index 9ebae2c..a0cb9c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,11 +77,6 @@
1.8
-
-
- **/Temporary/*
-
-
diff --git a/src/main/java/InnaIrcBot/GlobalData.java b/src/main/java/InnaIrcBot/GlobalData.java
index 7bfe309..1e42153 100644
--- a/src/main/java/InnaIrcBot/GlobalData.java
+++ b/src/main/java/InnaIrcBot/GlobalData.java
@@ -1,5 +1,10 @@
package InnaIrcBot;
+import InnaIrcBot.logging.LogDriver;
+
+import java.util.ArrayList;
+import java.util.List;
+
public class GlobalData {
private static final String version = "InnaIrcBot v0.8 \"Коммунарка\"";
public static synchronized String getAppVersion(){
diff --git a/src/main/java/InnaIrcBot/LogDriver/BotDriver.java b/src/main/java/InnaIrcBot/LogDriver/BotDriver.java
deleted file mode 100644
index 184858b..0000000
--- a/src/main/java/InnaIrcBot/LogDriver/BotDriver.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package InnaIrcBot.LogDriver;
-
-import java.util.HashMap;
-
-public class BotDriver {
- private final static HashMap serverDriver = new HashMap<>();
- private final static HashMap systemLogWorkerMap = new HashMap<>();
- /**
- * Define driver for desired server
- * */
- // TODO: add proxy worker for using with multiple drivers
- public static synchronized boolean setLogDriver(String serverName, String driver, String[] driverParams, String applicationLogDir){
- if (driver == null)
- return false;
- if (driver.isEmpty())
- return false;
- if (driverParams.length == 0)
- return false;
- if (driverParams[0] == null)
- return false;
- if (driverParams[0].isEmpty())
- return false;
-
- String[][] drvAndParams = {
- {driver},
- driverParams
- };
- serverDriver.put(serverName, drvAndParams);
- systemLogWorkerMap.put(serverName, new BotSystemWorker(serverName, applicationLogDir));
- return true;
- }
-
- public static synchronized Worker getWorker(String server, String channel){
- if (serverDriver.containsKey(server)) {
- switch (serverDriver.get(server)[0][0].toLowerCase()) {
- case "files":
- BotFilesWorker botFilesWorker = new BotFilesWorker(server, serverDriver.get(server)[1], channel);
- return validateConsistancy(botFilesWorker, server, channel);
- case "sqlite":
- BotSQLiteWorker botSQLiteWorker = new BotSQLiteWorker(server, serverDriver.get(server)[1], channel);
- return validateConsistancy(botSQLiteWorker, server, channel);
- case "mongodb":
- BotMongoWorker botMongoWorker = new BotMongoWorker(server, serverDriver.get(server)[1], channel);
- return validateConsistancy(botMongoWorker, server, channel);
- case "zero":
- return new BotZeroWorker();
- default:
- System.out.println("BotDriver->getWorker(): Configuration issue: can't find required driver \""
- +serverDriver.get(server)[0][0]
- +"\".Using \"ZeroWorker\".");
- return new BotZeroWorker();
- }
- }
- System.out.println("Issue on BotDriver->getWorker(): Channel requested for non-existing server?\n" +
- "\tUsing ZeroWorker.");
- return new BotZeroWorker();
- }
- // If channel found that it's impossible to use defined worker from user settings and asking for use ZeroWorker
- public static synchronized Worker getZeroWorker(){ return new BotZeroWorker(); }
-
- public static synchronized BotSystemWorker getSystemWorker(String serverName){
- return systemLogWorkerMap.get(serverName);
- }
-
- private static Worker validateConsistancy(Worker worker, String server, String channel){ // synchronized?
- if (worker.isConsistent()){
- return worker;
- }
- System.out.println("BotDriver->validateConstancy(): Unable to use "
- +worker.getClass().getSimpleName()+" for "+server+"/"+channel
- +". Using ZeroWorker instead.");
- return new BotZeroWorker();
- }
-}
diff --git a/src/main/java/InnaIrcBot/LogDriver/SystemWorker.java b/src/main/java/InnaIrcBot/LogDriver/SystemWorker.java
deleted file mode 100644
index 00cc001..0000000
--- a/src/main/java/InnaIrcBot/LogDriver/SystemWorker.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package InnaIrcBot.LogDriver;
-
-public interface SystemWorker {
-
- void registerInSystemWorker(ThingToCloseOnDie thing);
-
- void logAdd(String event,
- String initiatorArg,
- String messageArg);
-
- void close();
-}
diff --git a/src/main/java/InnaIrcBot/LogDriver/ThingToCloseOnDie.java b/src/main/java/InnaIrcBot/LogDriver/ThingToCloseOnDie.java
deleted file mode 100644
index 0a5645d..0000000
--- a/src/main/java/InnaIrcBot/LogDriver/ThingToCloseOnDie.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package InnaIrcBot.LogDriver;
-
-public interface ThingToCloseOnDie {
- void die();
-}
diff --git a/src/main/java/InnaIrcBot/ProvidersConsumers/ChanConsumer.java b/src/main/java/InnaIrcBot/ProvidersConsumers/ChanConsumer.java
index 2ea1498..2b95633 100644
--- a/src/main/java/InnaIrcBot/ProvidersConsumers/ChanConsumer.java
+++ b/src/main/java/InnaIrcBot/ProvidersConsumers/ChanConsumer.java
@@ -3,8 +3,8 @@ package InnaIrcBot.ProvidersConsumers;
import InnaIrcBot.Commanders.ChanelCommander;
import InnaIrcBot.GlobalData;
import InnaIrcBot.IrcChannel;
-import InnaIrcBot.LogDriver.BotDriver;
-import InnaIrcBot.LogDriver.Worker;
+import InnaIrcBot.logging.LogDriver;
+import InnaIrcBot.logging.Worker;
import InnaIrcBot.config.ConfigurationManager;
import java.time.LocalTime;
@@ -38,7 +38,7 @@ public class ChanConsumer implements Runnable {
this.chanConsumerQueue = thisIrcChannel.getChannelQueue();
this.serverName = serverName;
this.channelName = thisIrcChannel.toString();
- this.writerWorker = BotDriver.getWorker(serverName, channelName);
+ this.writerWorker = LogDriver.getWorker(serverName, channelName);
this.userList = new ArrayList<>();
this.nick = ownNick;
this.rejoin = ConfigurationManager.getConfiguration(serverName).getRejoinOnKick();
@@ -145,9 +145,9 @@ public class ChanConsumer implements Runnable {
private void fixLogDriverIssues(String a, String b, String c){
System.out.println("ChanConsumer (@"+serverName+"/"+channelName+")->fixLogDriverIssues(): Some issues detected. Trying to fix...");
- this.writerWorker = BotDriver.getWorker(serverName, channelName); // Reset logDriver and try using the same one
+ this.writerWorker = LogDriver.getWorker(serverName, channelName); // Reset logDriver and try using the same one
if (! writerWorker.logAdd(a, b, c)){ // Write to it what was not written (most likely) and if it's still not consistent:
- this.writerWorker = BotDriver.getZeroWorker();
+ this.writerWorker = LogDriver.getZeroWorker();
System.out.println("ChanConsumer (@"+serverName+"/"+channelName+")->fixLogDriverIssues(): failed to use defined LogDriver. Using ZeroWorker instead.");
}
}
diff --git a/src/main/java/InnaIrcBot/ProvidersConsumers/DataProvider.java b/src/main/java/InnaIrcBot/ProvidersConsumers/DataProvider.java
index 6b0bf58..2a209ff 100644
--- a/src/main/java/InnaIrcBot/ProvidersConsumers/DataProvider.java
+++ b/src/main/java/InnaIrcBot/ProvidersConsumers/DataProvider.java
@@ -2,7 +2,7 @@ package InnaIrcBot.ProvidersConsumers;
import InnaIrcBot.config.ConfigurationFile;
import InnaIrcBot.IrcChannel;
-import InnaIrcBot.LogDriver.BotDriver;
+import InnaIrcBot.logging.LogDriver;
import InnaIrcBot.ReconnectControl;
import java.io.*;
@@ -16,16 +16,16 @@ import java.util.concurrent.BlockingQueue;
public class DataProvider implements Runnable {
private final ConfigurationFile configurationFile;
- private final String serverName;
+ private final String server;
private final String nickName;
- private BufferedReader rawStreamReader;
+ private BufferedReader mainReader;
/**
* Initiate connection and prepare input/output streams for run()
* */
public DataProvider(ConfigurationFile configurationFile){
this.configurationFile = configurationFile;
- this.serverName = configurationFile.getServerName();
+ this.server = configurationFile.getServerName();
this.nickName = configurationFile.getUserNick();
}
@@ -35,18 +35,17 @@ public class DataProvider implements Runnable {
} catch (Exception e){
System.out.println("Internal issue: DataProvider->run() caused exception:\n\t"+e.getMessage());
e.printStackTrace();
- }
- ReconnectControl.register(serverName);
-
- if (! BotDriver.setLogDriver(serverName,
- configurationFile.getLogDriver(),
- configurationFile.getLogDriverParameters(),
- configurationFile.getApplicationLogDir())) { //Prepare logDriver for using in threads.)
- this.close();
+ close();
return;
}
+ ReconnectControl.register(server);
+
+ LogDriver.setLogDriver(server,
+ configurationFile.getLogDriverConfiguration(),
+ configurationFile.getApplicationLogDir());
+
/* Used for sending data into consumers objects*/
Map ircChannels = Collections.synchronizedMap(new HashMap<>());
@@ -57,19 +56,19 @@ public class DataProvider implements Runnable {
new SystemConsumer(systemConsumerQueue, nickName, ircChannels, this.configurationFile));
SystemConsumerThread.start();
- StreamProvider.setSysConsumer(serverName, systemConsumerQueue); // Register system consumer at StreamProvider
+ StreamProvider.setSysConsumer(server, systemConsumerQueue); // Register system consumer at StreamProvider
ircChannels.put(systemConsumerChannel.toString(), systemConsumerChannel); // Not sure that PrintWriter is thread-safe..
////////////////////////////////////// Start loop //////////////////////////////////////////////////////////////
- StreamProvider.writeToStream(serverName,"NICK "+this.nickName);
- StreamProvider.writeToStream(serverName,"USER "+ configurationFile.getUserIdent()+" 8 * :"+ configurationFile.getUserRealName()); // TODO: Add usermode 4 rusnet
+ StreamProvider.writeToStream(server,"NICK "+this.nickName);
+ StreamProvider.writeToStream(server,"USER "+ configurationFile.getUserIdent()+" 8 * :"+ configurationFile.getUserRealName()); // TODO: Add usermode 4 rusnet
try {
String rawMessage;
String[] rawStrings; // prefix[0] command[1] command-parameters\r\n[2]
//if there is no prefix, you should assume the message came from your client.
- while ((rawMessage = rawStreamReader.readLine()) != null) {
+ while ((rawMessage = mainReader.readLine()) != null) {
System.out.println(rawMessage);
if (rawMessage.startsWith(":")) {
rawStrings = rawMessage
@@ -101,7 +100,7 @@ public class DataProvider implements Runnable {
}
}
} catch (IOException e){
- System.out.println("Socket issue: I/O exception"); //Connection closed. TODO: MAYBE try reconnect
+ System.out.println("Socket issue: I/O exception: "+e.getMessage()); //Connection closed. TODO: MAYBE try reconnect
}
finally {
SystemConsumerThread.interrupt();
@@ -111,7 +110,7 @@ public class DataProvider implements Runnable {
private void connect() throws Exception{
final int port = configurationFile.getServerPort();
- InetAddress inetAddress = InetAddress.getByName(serverName);
+ InetAddress inetAddress = InetAddress.getByName(server);
Socket socket = new Socket(); // TODO: set timeout?
for (int i = 0; i < 5; i++) {
socket.connect(new InetSocketAddress(inetAddress, port), 5000); // 5sec
@@ -121,20 +120,19 @@ public class DataProvider implements Runnable {
if (! socket.isConnected())
throw new Exception("Unable to connect server.");
- StreamProvider.setStream(serverName, socket);
+ StreamProvider.setStream(server, socket);
InputStream inStream = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(inStream, StandardCharsets.UTF_8); //TODO set charset in options;
- rawStreamReader = new BufferedReader(isr);
+ mainReader = new BufferedReader(isr);
}
private void sendPingReply(String rawData){
- StreamProvider.writeToStream(serverName,"PONG :" + rawData.replace("PING :", ""));
+ StreamProvider.writeToStream(server,"PONG :" + rawData.replace("PING :", ""));
}
- //HANDLE ALWAYS in case thread decided to die
private void close(){
- StreamProvider.delStream(serverName);
- ReconnectControl.notify(serverName);
+ StreamProvider.delStream(server);
+ ReconnectControl.notify(server);
}
}
diff --git a/src/main/java/InnaIrcBot/ProvidersConsumers/SystemConsumer.java b/src/main/java/InnaIrcBot/ProvidersConsumers/SystemConsumer.java
index c0b7dd7..e7d72d9 100644
--- a/src/main/java/InnaIrcBot/ProvidersConsumers/SystemConsumer.java
+++ b/src/main/java/InnaIrcBot/ProvidersConsumers/SystemConsumer.java
@@ -6,8 +6,8 @@ import InnaIrcBot.ReconnectControl;
import InnaIrcBot.config.ConfigurationFile;
import InnaIrcBot.GlobalData;
import InnaIrcBot.IrcChannel;
-import InnaIrcBot.LogDriver.BotDriver;
-import InnaIrcBot.LogDriver.BotSystemWorker;
+import InnaIrcBot.logging.LogDriver;
+import InnaIrcBot.logging.WorkerSystem;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -19,7 +19,7 @@ import java.util.concurrent.BlockingQueue;
public class SystemConsumer implements Runnable{
private final BlockingQueue systemQueue;
- private BotSystemWorker writerWorker;
+ private WorkerSystem writerWorker;
private String nick;
private String serverName;
private final Map channels;
@@ -34,7 +34,7 @@ public class SystemConsumer implements Runnable{
SystemConsumer(BlockingQueue systemQueue, String userNick, Map channels, ConfigurationFile configurationFile) {
this.systemQueue = systemQueue;
- this.writerWorker = BotDriver.getSystemWorker(configurationFile.getServerName());
+ this.writerWorker = LogDriver.getSystemWorker(configurationFile.getServerName());
this.nick = userNick;
this.serverName = configurationFile.getServerName();
this.channels = channels;
diff --git a/src/main/java/InnaIrcBot/config/ConfigurationFile.java b/src/main/java/InnaIrcBot/config/ConfigurationFile.java
index 9dd774a..4eeba65 100644
--- a/src/main/java/InnaIrcBot/config/ConfigurationFile.java
+++ b/src/main/java/InnaIrcBot/config/ConfigurationFile.java
@@ -18,6 +18,8 @@ public class ConfigurationFile {
private String chanelConfigurationsPath;
private String applicationLogDir;
+ private LogDriverConfiguration logDriverConfiguration;
+
public ConfigurationFile(String serverName,
int serverPort,
String serverPass,
@@ -63,8 +65,11 @@ public class ConfigurationFile {
public String getUserNickAuthStyle() { return nonNullString(userNickAuthStyle); }
public String getUserMode() { return nonNullString(userMode); }
public boolean getRejoinOnKick() { return rejoinOnKick; }
- public String getLogDriver() { return nonNullString(logDriver); }
- public String[] getLogDriverParameters() { return logDriverParameters; }
+
+ public LogDriverConfiguration getLogDriverConfiguration(){
+ return new LogDriverConfiguration(nonNullString(logDriver).toLowerCase(), logDriverParameters);
+ }
+
public String getBotAdministratorPassword() { return nonNullString(botAdministratorPassword); }
public String getChanelConfigurationsPath() { return nonNullString(chanelConfigurationsPath); }
public String getApplicationLogDir() { return nonNullString(applicationLogDir); }
diff --git a/src/main/java/InnaIrcBot/config/LogDriverConfiguration.java b/src/main/java/InnaIrcBot/config/LogDriverConfiguration.java
new file mode 100644
index 0000000..9e079e4
--- /dev/null
+++ b/src/main/java/InnaIrcBot/config/LogDriverConfiguration.java
@@ -0,0 +1,40 @@
+package InnaIrcBot.config;
+
+import InnaIrcBot.logging.SupportedLogDrivers;
+
+public class LogDriverConfiguration {
+ private String name;
+ private String[] params;
+
+ public LogDriverConfiguration(String name, String[] params){
+ this.name = name.toLowerCase();
+ this.params = params;
+ validateName();
+ validateParams();
+ }
+ private void validateName(){
+ if (! SupportedLogDrivers.contains(name)) {
+ name = SupportedLogDrivers.zero;
+ }
+ }
+ private void validateParams(){
+ if (params == null) {
+ name = SupportedLogDrivers.zero;
+ return;
+ }
+ if (params.length == 0){
+ name = SupportedLogDrivers.zero;
+ return;
+ }
+ if (params[0] == null){
+ name = SupportedLogDrivers.zero;
+ return;
+ }
+ if (params[0].isEmpty()){
+ name = SupportedLogDrivers.zero;
+ }
+ }
+
+ public String getName() { return name; }
+ public String[] getParams() { return params; }
+}
diff --git a/src/main/java/InnaIrcBot/logging/LogDriver.java b/src/main/java/InnaIrcBot/logging/LogDriver.java
new file mode 100644
index 0000000..037aa31
--- /dev/null
+++ b/src/main/java/InnaIrcBot/logging/LogDriver.java
@@ -0,0 +1,62 @@
+package InnaIrcBot.logging;
+
+import InnaIrcBot.ProvidersConsumers.StreamProvider;
+import InnaIrcBot.config.LogDriverConfiguration;
+
+import java.util.HashMap;
+
+public class LogDriver {
+ private final static HashMap serverDriver = new HashMap<>();
+ private final static HashMap systemLogWorkerMap = new HashMap<>();
+ /**
+ * Define driver for desired server
+ * */
+ // TODO: add proxy worker for using with multiple drivers
+ public static synchronized void setLogDriver(String server,
+ LogDriverConfiguration logDriverConfiguration,
+ String applicationLogDir){
+ String[][] drvAndParams = {
+ {logDriverConfiguration.getName()},
+ logDriverConfiguration.getParams()
+ };
+ serverDriver.put(server, drvAndParams);
+ systemLogWorkerMap.put(server, new WorkerSystem(server, applicationLogDir));
+ }
+
+ public static synchronized Worker getWorker(String server, String channel){
+ if (serverDriver.containsKey(server)) {
+ switch (serverDriver.get(server)[0][0]) {
+ case "files":
+ WorkerFiles workerFiles = new WorkerFiles(server, serverDriver.get(server)[1], channel);
+ return validateConsistancy(workerFiles, server, channel);
+ case "sqlite":
+ WorkerSQLite workerSQLite = new WorkerSQLite(server, serverDriver.get(server)[1], channel);
+ return validateConsistancy(workerSQLite, server, channel);
+ case "mongodb":
+ WorkerMongoDB workerMongoDB = new WorkerMongoDB(server, serverDriver.get(server)[1], channel);
+ return validateConsistancy(workerMongoDB, server, channel);
+ case "zero":
+ return new WorkerZero();
+ }
+ }
+ System.out.println("Issue on BotDriver->getWorker(): Channel requested for non-existing server?\n" +
+ "\tUsing ZeroWorker.");
+ return new WorkerZero();
+ }
+ // If channel found that it's impossible to use defined worker from user settings and asking for use ZeroWorker
+ public static synchronized Worker getZeroWorker(){ return new WorkerZero(); }
+
+ public static synchronized WorkerSystem getSystemWorker(String serverName){
+ return systemLogWorkerMap.get(serverName);
+ }
+
+ private static Worker validateConsistancy(Worker worker, String server, String channel){ // synchronized?
+ if (worker.isConsistent()){
+ return worker;
+ }
+ System.out.println("BotDriver->validateConstancy(): Unable to use "
+ +worker.getClass().getSimpleName()+" for "+server+"/"+channel
+ +". Using ZeroWorker instead.");
+ return new WorkerZero();
+ }
+}
diff --git a/src/main/java/InnaIrcBot/logging/SupportedLogDrivers.java b/src/main/java/InnaIrcBot/logging/SupportedLogDrivers.java
new file mode 100644
index 0000000..ff47c6c
--- /dev/null
+++ b/src/main/java/InnaIrcBot/logging/SupportedLogDrivers.java
@@ -0,0 +1,24 @@
+package InnaIrcBot.logging;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SupportedLogDrivers{
+ public static final String files = "files";
+ public static final String sqlite = "sqlite";
+ public static final String mongodb = "mongodb";
+ public static final String zero = "zero";
+
+ private static final List supportedLogDrivers = new ArrayList<>();
+
+ static {
+ supportedLogDrivers.add(files);
+ supportedLogDrivers.add(sqlite);
+ supportedLogDrivers.add(mongodb);
+ supportedLogDrivers.add(zero);
+ }
+
+ public static boolean contains(String driverName){
+ return supportedLogDrivers.contains(driverName);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/InnaIrcBot/LogDriver/Worker.java b/src/main/java/InnaIrcBot/logging/Worker.java
similarity index 87%
rename from src/main/java/InnaIrcBot/LogDriver/Worker.java
rename to src/main/java/InnaIrcBot/logging/Worker.java
index 40c2119..9eda8f4 100644
--- a/src/main/java/InnaIrcBot/LogDriver/Worker.java
+++ b/src/main/java/InnaIrcBot/logging/Worker.java
@@ -1,4 +1,4 @@
-package InnaIrcBot.LogDriver;
+package InnaIrcBot.logging;
public interface Worker {
boolean consistent = false;
diff --git a/src/main/java/InnaIrcBot/LogDriver/BotFilesWorker.java b/src/main/java/InnaIrcBot/logging/WorkerFiles.java
similarity index 97%
rename from src/main/java/InnaIrcBot/LogDriver/BotFilesWorker.java
rename to src/main/java/InnaIrcBot/logging/WorkerFiles.java
index 7e0882a..58f817e 100644
--- a/src/main/java/InnaIrcBot/LogDriver/BotFilesWorker.java
+++ b/src/main/java/InnaIrcBot/logging/WorkerFiles.java
@@ -1,4 +1,4 @@
-package InnaIrcBot.LogDriver;
+package InnaIrcBot.logging;
import java.io.File;
import java.io.FileWriter;
@@ -8,7 +8,7 @@ import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.regex.Pattern;
-public class BotFilesWorker implements Worker {
+public class WorkerFiles implements Worker {
private final String channel;
private String filePath;
private final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("HH:mm:ss");
@@ -17,7 +17,7 @@ public class BotFilesWorker implements Worker {
private boolean consistent;
- public BotFilesWorker(String server, String[] driverParameters, String channel){
+ public WorkerFiles(String server, String[] driverParameters, String channel){
this.channel = channel.replaceAll(File.separator, ",");
formatFilePath(server, driverParameters);
diff --git a/src/main/java/InnaIrcBot/LogDriver/BotMongoWorker.java b/src/main/java/InnaIrcBot/logging/WorkerMongoDB.java
similarity index 93%
rename from src/main/java/InnaIrcBot/LogDriver/BotMongoWorker.java
rename to src/main/java/InnaIrcBot/logging/WorkerMongoDB.java
index c0c2ee3..5012c52 100644
--- a/src/main/java/InnaIrcBot/LogDriver/BotMongoWorker.java
+++ b/src/main/java/InnaIrcBot/logging/WorkerMongoDB.java
@@ -1,4 +1,4 @@
-package InnaIrcBot.LogDriver;
+package InnaIrcBot.logging;
import com.mongodb.*;
import com.mongodb.client.MongoClient;
@@ -8,6 +8,7 @@ import com.mongodb.client.MongoDatabase;
import com.mongodb.event.*;
import org.bson.Document;
+import java.io.Closeable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -17,13 +18,13 @@ import java.util.concurrent.TimeUnit;
* For each channel we store collection that have name of the ircServer + chanelName.
* If user decides to use one MongoDB for various servers, he may use even one DB (declared in configuration file) and store collections in there.
* **/
-public class BotMongoWorker implements Worker { //TODO consider skipping checks if server already added.
+public class WorkerMongoDB implements Worker { //TODO consider skipping checks if server already added.
private final static Map serversMap = Collections.synchronizedMap(new HashMap<>());
private final String server;
private MongoCollection collection;
private boolean consistent;
- public BotMongoWorker(String server, String[] driverParameters, String channel){
+ public WorkerMongoDB(String server, String[] driverParameters, String channel){
this.server = server;
if (driverParameters.length < 2)
@@ -129,17 +130,20 @@ public class BotMongoWorker implements Worker { //TODO consider sk
// no need to close() obviously
}
- if (consistent){
- ThingToCloseOnDie thing = () -> {
- if (serversMap.containsKey(server)) {
- serversMap.get(server).close();
- serversMap.remove(server);
- }
- };
+ setClosable();
+ }
+ private void setClosable(){
+ if (! consistent)
+ return;
- BotDriver.getSystemWorker(server).registerInSystemWorker(thing);
- }
+ Closeable thing = () -> {
+ if (serversMap.containsKey(server)) {
+ serversMap.get(server).close();
+ serversMap.remove(server);
+ }
+ };
+ LogDriver.getSystemWorker(server).registerInSystemWorker(thing);
}
@Override
diff --git a/src/main/java/InnaIrcBot/LogDriver/BotSQLiteWorker.java b/src/main/java/InnaIrcBot/logging/WorkerSQLite.java
similarity index 97%
rename from src/main/java/InnaIrcBot/LogDriver/BotSQLiteWorker.java
rename to src/main/java/InnaIrcBot/logging/WorkerSQLite.java
index 10f6e20..1026efa 100644
--- a/src/main/java/InnaIrcBot/LogDriver/BotSQLiteWorker.java
+++ b/src/main/java/InnaIrcBot/logging/WorkerSQLite.java
@@ -1,4 +1,4 @@
-package InnaIrcBot.LogDriver;
+package InnaIrcBot.logging;
import org.sqlite.SQLiteConfig;
import org.sqlite.SQLiteOpenMode;
@@ -6,7 +6,7 @@ import org.sqlite.SQLiteOpenMode;
import java.io.File;
import java.sql.*;
-public class BotSQLiteWorker implements Worker {
+public class WorkerSQLite implements Worker {
private Connection connection;
private boolean consistent = false;
@@ -16,7 +16,7 @@ public class BotSQLiteWorker implements Worker {
/**
* Don't even think of changing this balalaika.
* */
- public BotSQLiteWorker(String server, String[] driverParameters, String channel){ // TODO: threads on SQLite level // remember: One file one DB
+ public WorkerSQLite(String server, String[] driverParameters, String channel){ // TODO: threads on SQLite level // remember: One file one DB
this.ircServer = server;
driverParameters[0] = driverParameters[0].trim();
File dir = new File(driverParameters[0]);
diff --git a/src/main/java/InnaIrcBot/LogDriver/BotSystemWorker.java b/src/main/java/InnaIrcBot/logging/WorkerSystem.java
similarity index 86%
rename from src/main/java/InnaIrcBot/LogDriver/BotSystemWorker.java
rename to src/main/java/InnaIrcBot/logging/WorkerSystem.java
index 6440e23..0bf7a2e 100644
--- a/src/main/java/InnaIrcBot/LogDriver/BotSystemWorker.java
+++ b/src/main/java/InnaIrcBot/logging/WorkerSystem.java
@@ -1,22 +1,23 @@
-package InnaIrcBot.LogDriver;
+package InnaIrcBot.logging;
+import java.io.Closeable;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
-public class BotSystemWorker implements SystemWorker{
+public class WorkerSystem{
private FileWriter fileWriter;
private final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("HH:mm:ss");
- private ThingToCloseOnDie thingToCloseOnDie; // call .die() method of this classes when this (system log class) dies.
+ private Closeable thingToCloseOnDie; // call .close() method of this classes when this (system log class) dies.
private final String server;
private boolean consistent = false;
- public BotSystemWorker(String server, String appLogDir){
+ public WorkerSystem(String server, String appLogDir){
this.server = server;
if (appLogDir.isEmpty()) {
@@ -53,7 +54,6 @@ public class BotSystemWorker implements SystemWorker{
return "["+ LocalTime.now().format(dateFormat)+"] ";
}
- @Override
public void logAdd(String event, String initiatorArg, String messageArg) {
if (consistent) {
try {
@@ -69,19 +69,16 @@ public class BotSystemWorker implements SystemWorker{
System.out.println(genDate() + event + " " + initiatorArg + " " + messageArg + "\n");
}
- @Override
- public void registerInSystemWorker(ThingToCloseOnDie thing){
+ public void registerInSystemWorker(Closeable thing){
if (this.thingToCloseOnDie == null){ // only one needed
this.thingToCloseOnDie = thing;
}
}
- @Override
public void close() {
- if (thingToCloseOnDie != null)
- thingToCloseOnDie.die();
-
try {
+ if (thingToCloseOnDie != null)
+ thingToCloseOnDie.close();
fileWriter.close();
}
catch (IOException | NullPointerException ignore){}
diff --git a/src/main/java/InnaIrcBot/LogDriver/BotZeroWorker.java b/src/main/java/InnaIrcBot/logging/WorkerZero.java
similarity index 73%
rename from src/main/java/InnaIrcBot/LogDriver/BotZeroWorker.java
rename to src/main/java/InnaIrcBot/logging/WorkerZero.java
index e3b90d0..c78c3ed 100644
--- a/src/main/java/InnaIrcBot/LogDriver/BotZeroWorker.java
+++ b/src/main/java/InnaIrcBot/logging/WorkerZero.java
@@ -1,6 +1,6 @@
-package InnaIrcBot.LogDriver;
+package InnaIrcBot.logging;
-public class BotZeroWorker implements Worker{
+public class WorkerZero implements Worker{
@Override
public boolean isConsistent() {return true;}
diff --git a/src/main/java/Temporary/DriverTestMongo.java b/src/main/java/Temporary/DriverTestMongo.java
deleted file mode 100644
index de09782..0000000
--- a/src/main/java/Temporary/DriverTestMongo.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package Temporary;
-
-import InnaIrcBot.LogDriver.BotDriver;
-import InnaIrcBot.LogDriver.Worker;
-
-public class DriverTestMongo {
-
- public static void main(String[] args){
- if (BotDriver.setLogDriver("irc.tomsk.net", "MongoDB", new String[]{"192.168.1.186:27017",
- "irc",
- "loper",
- "password"},
- "/tmp/appLogs/"))
- System.out.println("DRVT_Mongo:Successful driver initiation");
- else {
- System.out.println("DRVT_Mongo:Failed driver initiation");
- return;
- }
-
- Worker fw1 = BotDriver.getWorker("irc.tomsk.net","system");
- Worker fw2 = BotDriver.getWorker("irc.tomsk.net","#main");
- Worker fw3 = BotDriver.getWorker("irc.tomsk.net","#lpr");
-
- if ((fw1 !=null) && (fw2 !=null) && (fw3 !=null)){
- System.out.println("DRVT_Mongo:LogFile1: "+fw1.isConsistent());
- System.out.println("DRVT_Mongo:LogFile2: "+fw2.isConsistent());
- System.out.println("DRVT_Mongo:LogFile3: "+fw3.isConsistent());
- boolean res;
-
- res = fw1.logAdd("JOIN", "de_su!loper@desktop.lan", "message1");
- System.out.println("DRVT_Mongo:fw1 exec result: "+res);
- res = fw1.logAdd("PRIVMSG", "de_su!loper@desktop.lan", ": some text here");
- System.out.println("DRVT_Mongo:fw1 exec result: "+res);
- res = fw1.logAdd("PRIVMSG", "de_su!loper@desktop.lan", ": more random tests");
- System.out.println("DRVT_Mongo:fw1 exec result: "+res);
- res = fw1.logAdd("NICK", "de_su!loper@desktop.lan", "developer_su");
- System.out.println("DRVT_Mongo:fw1 exec result: "+res);
- res = fw1.logAdd("MODE", "de_su!loper@desktop.lan", "+b username");
- System.out.println("DRVT_Mongo:fw1 exec result: "+res);
- res = fw1.logAdd("PART", "de_su!loper@desktop.lan", "#chan1");
- System.out.println("DRVT_Mongo:fw1 exec result: "+res);
-
- res = fw2.logAdd("JOIN", "de_su!loper@desktop.lan", "message2");
- System.out.println("DRVT_Mongo:fw2 exec result: "+res);
- res = fw2.logAdd("PRIVMSG", "de_su!loper@desktop.lan", ": some text here");
- System.out.println("DRVT_Mongo:fw2 exec result: "+res);
- res = fw2.logAdd("PRIVMSG", "de_su!loper@desktop.lan", ": more random tests");
- System.out.println("DRVT_Mongo:fw2 exec result: "+res);
- res = fw2.logAdd("NICK", "de_su!loper@desktop.lan", "developer_su");
- System.out.println("DRVT_Mongo:fw2 exec result: "+res);
- res = fw2.logAdd("MODE", "de_su!loper@desktop.lan", "+b username");
- System.out.println("DRVT_Mongo:fw2 exec result: "+res);
- res = fw2.logAdd("PART", "de_su!loper@desktop.lan", "#chan2");
- System.out.println("DRVT_Mongo:fw2 exec result: "+res);
-
- res = fw3.logAdd("JOIN", "de_su!loper@desktop.lan", "message3");
- System.out.println("DRVT_Mongo:fw3 exec result: "+res);
- res = fw3.logAdd("PRIVMSG", "de_su!loper@desktop.lan", ": some text here");
- System.out.println("DRVT_Mongo:fw3 exec result: "+res);
- res = fw3.logAdd("PRIVMSG", "de_su!loper@desktop.lan", ": more random tests");
- System.out.println("DRVT_Mongo:fw3 exec result: "+res);
- res = fw3.logAdd("NICK", "de_su!loper@desktop.lan", "developer_su");
- System.out.println("DRVT_Mongo:fw3 exec result: "+res);
- res = fw3.logAdd("MODE", "de_su!loper@desktop.lan", "+b username");
- System.out.println("DRVT_Mongo:fw3 exec result: "+res);
- res = fw3.logAdd("PART", "de_su!loper@desktop.lan", "#chan3");
- System.out.println("DRVT_Mongo:fw3 exec result: "+res);
-
- fw1.close();
- fw2.close();
- fw3.close();
- }
- }
-}
diff --git a/src/main/java/Temporary/StorageFileTest.java b/src/main/java/Temporary/StorageFileTest.java
deleted file mode 100644
index e431a11..0000000
--- a/src/main/java/Temporary/StorageFileTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package Temporary;
-
-import InnaIrcBot.config.ConfigurationFile;
-
-public class StorageFileTest {
- static public void main(String[] args){
- ConfigurationFile config = new ConfigurationFile(
- "",
- 0,
- "",
- null,
- "",
- "",
- "",
- "",
- "",
- "",
- true,
- "",
- new String[]{null},
- "",
- "",
- ""
- );
-
- System.out.println(config.getLogDriver().isEmpty());
- System.out.println(config.getLogDriverParameters().length);
-
-
- }
-}
diff --git a/src/main/java/Temporary/StorageReaderTest.java b/src/main/java/Temporary/StorageReaderTest.java
deleted file mode 100644
index ddfca14..0000000
--- a/src/main/java/Temporary/StorageReaderTest.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package Temporary;
-
-public class StorageReaderTest {
- public static void main(String[] args){
- // StorageReader.readConfig("/home/loper/bot.config");
- // StorageFile storageFile = StorageReader.getConfig();
- // System.out.println(storageFile.getLogDriver() == null);
- }
-}
diff --git a/src/test/java/InnaIrcBot/config/ConfigurationFileTest.java b/src/test/java/InnaIrcBot/config/ConfigurationFileTest.java
new file mode 100644
index 0000000..f496120
--- /dev/null
+++ b/src/test/java/InnaIrcBot/config/ConfigurationFileTest.java
@@ -0,0 +1,96 @@
+package InnaIrcBot.config;
+
+import InnaIrcBot.logging.SupportedLogDrivers;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ConfigurationFileTest {
+ ConfigurationFile config;
+
+ ConfigurationFileTest(){
+ config = new ConfigurationFile(
+ null,
+ -100,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ true,
+ null,
+ new String[]{null},
+ null,
+ null,
+ null
+ );
+ }
+
+ @Test
+ void getServerName() {
+ }
+
+ @Test
+ void getServerPort() {
+ }
+
+ @Test
+ void getServerPass() {
+ }
+
+ @Test
+ void getChannels() {
+ }
+
+ @Test
+ void getUserNick() {
+ }
+
+ @Test
+ void getUserIdent() {
+ }
+
+ @Test
+ void getUserRealName() {
+ }
+
+ @Test
+ void getUserNickPass() {
+ }
+
+ @Test
+ void getUserNickAuthStyle() {
+ }
+
+ @Test
+ void getUserMode() {
+ }
+
+ @Test
+ void getRejoinOnKick() {
+ }
+
+ @Test
+ void getLogDriverConfiguration() {
+ assertEquals(config.getLogDriverConfiguration().getName(), SupportedLogDrivers.zero);
+ }
+
+ @Test
+ void getBotAdministratorPassword() {
+ }
+
+ @Test
+ void getChanelConfigurationsPath() {
+ }
+
+ @Test
+ void getApplicationLogDir() {
+ }
+
+ @Test
+ void setUserNickAuthStyle() {
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/InnaIrcBot/LogDriver/BotDriverTest.java b/src/test/java/InnaIrcBot/logging/LogDriverTest.java
similarity index 53%
rename from src/test/java/InnaIrcBot/LogDriver/BotDriverTest.java
rename to src/test/java/InnaIrcBot/logging/LogDriverTest.java
index 98bb31d..8a563de 100644
--- a/src/test/java/InnaIrcBot/LogDriver/BotDriverTest.java
+++ b/src/test/java/InnaIrcBot/logging/LogDriverTest.java
@@ -1,5 +1,7 @@
-package InnaIrcBot.LogDriver;
+package InnaIrcBot.logging;
+import InnaIrcBot.config.LogDriverConfiguration;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -9,13 +11,14 @@ import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path;
-class BotDriverTest {
+class LogDriverTest {
@TempDir
Path mainLogsDir,
mainSQLiteLogsDir;
- private static final String serverNameFiles = "irc.example.com";
- private static final String serverNameSQLite = "irc2.example.com";
+ private static final String serverNameFiles = "files.example.com";
+ private static final String serverNameSQLite = "sqlite.example.com";
+ private static final String serverNameMongoDB = "mongo.example.com";
private Worker fw1;
private Worker fw2;
private Worker fw3;
@@ -23,55 +26,66 @@ class BotDriverTest {
@DisplayName("BotDriver: test files driver")
@Test
void driverFilesTest() {
- assertTrue(this::initializeFilesLogDriver);
- createWorkersForFiles();
+ initializeFilesLogDriver();
+ createWorkers(serverNameFiles);
checkConsistency();
checkFilesWorkers();
validateDriver();
checkFilesWorkers();
close();
}
- private void createWorkersForFiles(){
- fw1 = BotDriver.getWorker(serverNameFiles,"system");
- fw2 = BotDriver.getWorker(serverNameFiles,"#main");
- fw3 = BotDriver.getWorker(serverNameFiles,"#lpr");
+ void checkFilesWorkers(){
+ assertTrue(fw1 instanceof WorkerFiles);
+ assertTrue(fw2 instanceof WorkerFiles);
+ assertTrue(fw3 instanceof WorkerFiles);
}
@DisplayName("BotDriver: test SQLite driver")
@Test
void driverSQLiteTest() {
- assertTrue(this::initializeSQLiteLogDriver);
- createWorkersForSQLite();
+ initializeSQLiteLogDriver();
+ createWorkers(serverNameSQLite);
checkConsistency();
checkSQLiteWorkers();
validateDriver();
checkSQLiteWorkers();
close();
}
- private void createWorkersForSQLite(){
- fw1 = BotDriver.getWorker(serverNameSQLite,"system");
- fw2 = BotDriver.getWorker(serverNameSQLite,"#main");
- fw3 = BotDriver.getWorker(serverNameSQLite,"#lpr");
+ void checkSQLiteWorkers(){
+ assertTrue(fw1 instanceof WorkerSQLite);
+ assertTrue(fw2 instanceof WorkerSQLite);
+ assertTrue(fw3 instanceof WorkerSQLite);
}
+ @Disabled("MongoDB connection/configuration example. Requires real MongdDB instance created & configured")
+ @DisplayName("BotDriver: test MongoDB driver")
+ @Test
+ void driverMongoTest() {
+ initializeMongoDBLogDriver();
+ createWorkers(serverNameMongoDB);
+ checkConsistency();
+ checkMongoDBWorkers();
+ validateDriver();
+ checkMongoDBWorkers();
+ close();
+ }
+ void checkMongoDBWorkers(){
+ assertTrue(fw1 instanceof WorkerMongoDB);
+ assertTrue(fw2 instanceof WorkerMongoDB);
+ assertTrue(fw3 instanceof WorkerMongoDB);
+ }
+
+ private void createWorkers(String server){
+ fw1 = LogDriver.getWorker(server,"system");
+ fw2 = LogDriver.getWorker(server,"#main");
+ fw3 = LogDriver.getWorker(server,"#lpr");
+ }
void checkConsistency(){
assertTrue(fw1.isConsistent());
assertTrue(fw2.isConsistent());
assertTrue(fw3.isConsistent());
}
- void checkFilesWorkers(){
- assertTrue(fw1 instanceof BotFilesWorker);
- assertTrue(fw2 instanceof BotFilesWorker);
- assertTrue(fw3 instanceof BotFilesWorker);
- }
-
- void checkSQLiteWorkers(){
- assertTrue(fw1 instanceof BotSQLiteWorker);
- assertTrue(fw2 instanceof BotSQLiteWorker);
- assertTrue(fw3 instanceof BotSQLiteWorker);
- }
-
void validateDriver(){
assertTrue(fw1.logAdd("JOIN", "de_su!loper@desktop.lan", "message1"));
assertTrue(fw1.logAdd("PRIVMSG", "de_su!loper@desktop.lan", ": some text here"));
@@ -95,12 +109,21 @@ class BotDriverTest {
assertTrue(fw3.logAdd("PART", "de_su!loper@desktop.lan", "#chan3"));
}
- private boolean initializeFilesLogDriver(){
- return BotDriver.setLogDriver(serverNameFiles, "files", new String[]{mainLogsDir.toString()}, "");
+ private void initializeFilesLogDriver(){
+ LogDriver.setLogDriver(serverNameFiles, new LogDriverConfiguration("FileS", new String[]{mainLogsDir.toString()}), "");
}
- private boolean initializeSQLiteLogDriver(){
- return BotDriver.setLogDriver(serverNameSQLite, "sqlite", new String[]{mainSQLiteLogsDir.toString()}, "");
+ private void initializeSQLiteLogDriver(){
+ LogDriver.setLogDriver(serverNameSQLite, new LogDriverConfiguration("SQliTe", new String[]{mainSQLiteLogsDir.toString()}), "");
+ }
+
+ private void initializeMongoDBLogDriver(){
+ String[] params = new String[]{"192.168.1.186:27017",
+ "irc",
+ "loper",
+ "password"};
+
+ LogDriver.setLogDriver("irc.tomsk.net",new LogDriverConfiguration("MongoDB", params),"");
}
private void close(){