diff --git a/Mage.Common/src/main/java/mage/utils/FluentBuilder.java b/Mage.Common/src/main/java/mage/utils/FluentBuilder.java
index 8c4174ac41..003cd65167 100644
--- a/Mage.Common/src/main/java/mage/utils/FluentBuilder.java
+++ b/Mage.Common/src/main/java/mage/utils/FluentBuilder.java
@@ -4,6 +4,11 @@ import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Supplier;
+/**
+ * A base class for fluent, immutable, composable builders.
+ *
+ * @see Builder
+ */
public abstract class FluentBuilder> {
final ArrayList> buildSequence;
diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManagerImpl.java
similarity index 99%
rename from Mage.Server/src/main/java/mage/server/ChatManager.java
rename to Mage.Server/src/main/java/mage/server/ChatManagerImpl.java
index 92b1f03af0..1bd283e03e 100644
--- a/Mage.Server/src/main/java/mage/server/ChatManager.java
+++ b/Mage.Server/src/main/java/mage/server/ChatManagerImpl.java
@@ -5,7 +5,7 @@ import mage.cards.repository.CardRepository;
import mage.game.Game;
import mage.server.exceptions.UserNotFoundException;
import mage.server.game.GameController;
-import mage.server.managers.IChatManager;
+import mage.server.managers.ChatManager;
import mage.server.managers.ManagerFactory;
import mage.server.util.SystemUtil;
import mage.view.ChatMessage.MessageColor;
@@ -26,16 +26,16 @@ import java.util.stream.Collectors;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class ChatManager implements IChatManager {
+public class ChatManagerImpl implements ChatManager {
- private static final Logger logger = Logger.getLogger(ChatManager.class);
+ private static final Logger logger = Logger.getLogger(ChatManagerImpl.class);
private static final HashMap userMessages = new HashMap<>();
private final ManagerFactory managerFactory;
private final ConcurrentHashMap chatSessions = new ConcurrentHashMap<>();
private final ReadWriteLock lock = new ReentrantReadWriteLock();
- public ChatManager(ManagerFactory managerFactory) {
+ public ChatManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
diff --git a/Mage.Server/src/main/java/mage/server/MailClient.java b/Mage.Server/src/main/java/mage/server/MailClientImpl.java
similarity index 89%
rename from Mage.Server/src/main/java/mage/server/MailClient.java
rename to Mage.Server/src/main/java/mage/server/MailClientImpl.java
index fc830ac1ff..6058fec183 100644
--- a/Mage.Server/src/main/java/mage/server/MailClient.java
+++ b/Mage.Server/src/main/java/mage/server/MailClientImpl.java
@@ -1,7 +1,7 @@
package mage.server;
-import mage.server.managers.IConfigSettings;
-import mage.server.managers.IMailClient;
+import mage.server.managers.ConfigSettings;
+import mage.server.managers.MailClient;
import org.apache.log4j.Logger;
import javax.mail.Message;
@@ -12,13 +12,13 @@ import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
-public class MailClient implements IMailClient {
+public class MailClientImpl implements MailClient {
private static final Logger logger = Logger.getLogger(Main.class);
- private final IConfigSettings config;
+ private final ConfigSettings config;
- public MailClient(IConfigSettings config) {
+ public MailClientImpl(ConfigSettings config) {
this.config = config;
}
diff --git a/Mage.Server/src/main/java/mage/server/MailgunClient.java b/Mage.Server/src/main/java/mage/server/MailgunClientImpl.java
similarity index 86%
rename from Mage.Server/src/main/java/mage/server/MailgunClient.java
rename to Mage.Server/src/main/java/mage/server/MailgunClientImpl.java
index 70264baa77..344a77fda2 100644
--- a/Mage.Server/src/main/java/mage/server/MailgunClient.java
+++ b/Mage.Server/src/main/java/mage/server/MailgunClientImpl.java
@@ -5,19 +5,19 @@ import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
import com.sun.jersey.core.util.MultivaluedMapImpl;
-import mage.server.managers.IConfigSettings;
-import mage.server.managers.IMailClient;
+import mage.server.managers.ConfigSettings;
+import mage.server.managers.MailClient;
import org.apache.log4j.Logger;
import javax.ws.rs.core.MediaType;
-public class MailgunClient implements IMailClient {
+public class MailgunClientImpl implements MailClient {
private static final Logger logger = Logger.getLogger(Main.class);
- private final IConfigSettings config;
+ private final ConfigSettings config;
- public MailgunClient(IConfigSettings config) {
+ public MailgunClientImpl(ConfigSettings config) {
this.config = config;
}
diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java
index 49659adc4d..c888866096 100644
--- a/Mage.Server/src/main/java/mage/server/Main.java
+++ b/Mage.Server/src/main/java/mage/server/Main.java
@@ -14,7 +14,7 @@ import mage.remote.Connection;
import mage.server.draft.CubeFactory;
import mage.server.game.GameFactory;
import mage.server.game.PlayerFactory;
-import mage.server.managers.IConfigSettings;
+import mage.server.managers.ConfigSettings;
import mage.server.managers.ManagerFactory;
import mage.server.record.UserStatsRepository;
import mage.server.tournament.TournamentFactory;
@@ -53,6 +53,11 @@ public final class Main {
private static final String testModeArg = "-testMode=";
private static final String fastDBModeArg = "-fastDbMode=";
private static final String adminPasswordArg = "-adminPassword=";
+ /**
+ * The property that holds the path to the configuration file. Defaults to "config/config.xml".
+ *
+ * To set up a different one, start the application with the java option "-Dxmage.config.path=<path>"
+ */
private static final String configPathProp = "xmage.config.path";
private static final File pluginFolder = new File("plugins");
@@ -238,7 +243,7 @@ public final class Main {
ServerMessagesUtil.instance.setStartDate(System.currentTimeMillis());
}
- static boolean isAlreadyRunning(IConfigSettings config, InvokerLocator serverLocator) {
+ static boolean isAlreadyRunning(ConfigSettings config, InvokerLocator serverLocator) {
Map metadata = new HashMap<>();
metadata.put(SocketWrapper.WRITE_TIMEOUT, String.valueOf(config.getSocketWriteTimeout()));
metadata.put("generalizeSocketException", "true");
diff --git a/Mage.Server/src/main/java/mage/server/MainManagerFactory.java b/Mage.Server/src/main/java/mage/server/MainManagerFactory.java
index cacbc635c2..753a2810f6 100644
--- a/Mage.Server/src/main/java/mage/server/MainManagerFactory.java
+++ b/Mage.Server/src/main/java/mage/server/MainManagerFactory.java
@@ -1,118 +1,124 @@
package mage.server;
-import mage.server.draft.DraftManager;
-import mage.server.game.GameManager;
-import mage.server.game.GamesRoomManager;
-import mage.server.game.ReplayManager;
+import mage.server.draft.DraftManagerImpl;
+import mage.server.game.GameManagerImpl;
+import mage.server.game.GamesRoomManagerImpl;
+import mage.server.game.ReplayManagerImpl;
import mage.server.managers.*;
-import mage.server.tournament.TournamentManager;
-import mage.server.util.ThreadExecutor;
+import mage.server.tournament.TournamentManagerImpl;
+import mage.server.util.ThreadExecutorImpl;
public class MainManagerFactory implements ManagerFactory {
- private final IConfigSettings configSettings;
- private final IThreadExecutor threadExecutor;
- private final IChatManager chatManager;
- private final IDraftManager draftManager;
- private final IGameManager gameManager;
- private final IGamesRoomManager gamesRoomManager;
- private final IMailClient mailClient;
- private final IMailClient mailgunClient;
- private final IReplayManager replayManager;
- private final ISessionManager sessionManager;
- private final ITableManager tableManager;
- private final IUserManager userManager;
- private final ITournamentManager tournamentManager;
+ private final ConfigSettings configSettings;
+ private final ThreadExecutor threadExecutor;
+ private final ChatManager chatManager;
+ private final DraftManager draftManager;
+ private final GameManager gameManager;
+ private final GamesRoomManager gamesRoomManager;
+ private final MailClient mailClient;
+ private final MailClient mailgunClient;
+ private final ReplayManager replayManager;
+ private final SessionManager sessionManager;
+ private final TableManager tableManager;
+ private final UserManager userManager;
+ private final TournamentManager tournamentManager;
- public MainManagerFactory(IConfigSettings configSettings) {
+ public MainManagerFactory(ConfigSettings configSettings) {
this.configSettings = configSettings;
- this.threadExecutor = new ThreadExecutor(configSettings);
- this.mailClient = new MailClient(configSettings);
- this.mailgunClient = new MailgunClient(configSettings);
- this.chatManager = new ChatManager(this);
- this.draftManager = new DraftManager(this);
- this.gameManager = new GameManager(this);
- this.replayManager = new ReplayManager(this);
- this.sessionManager = new SessionManager(this);
- this.tournamentManager = new TournamentManager(this);
- final GamesRoomManager gamesRoomManager = new GamesRoomManager(this);
- final TableManager tableManager = new TableManager(this);
- final UserManager userManager = new UserManager(this);
+ // ThreadExecutorImpl, MailClientImpl and MailGunClient depend only on the config, so they are initialised first
+ this.threadExecutor = new ThreadExecutorImpl(configSettings);
+ this.mailClient = new MailClientImpl(configSettings);
+ this.mailgunClient = new MailgunClientImpl(configSettings);
+ // Chat, Draft, Game, Replay, Session and Tournament managers only require access to the ManagerFactory
+ // but do not use them in initialisation
+ this.chatManager = new ChatManagerImpl(this);
+ this.draftManager = new DraftManagerImpl(this);
+ this.gameManager = new GameManagerImpl(this);
+ this.replayManager = new ReplayManagerImpl(this);
+ this.sessionManager = new SessionManagerImpl(this);
+ this.tournamentManager = new TournamentManagerImpl(this);
+ // GamesRoom, Table, User managers depend on the ManagerFactory and have an initialisation block which is delayed
+ // to the end of the construction
+ final GamesRoomManagerImpl gamesRoomManager = new GamesRoomManagerImpl(this);
+ final TableManagerImpl tableManager = new TableManagerImpl(this);
+ final UserManagerImpl userManager = new UserManagerImpl(this);
this.gamesRoomManager = gamesRoomManager;
this.tableManager = tableManager;
this.userManager = userManager;
+ // execute the initialisation block of the relevant manager (they start the executor services)
startThreads(gamesRoomManager, tableManager, userManager);
}
- private void startThreads(GamesRoomManager gamesRoomManager, TableManager tableManager, UserManager userManager) {
+ private void startThreads(GamesRoomManagerImpl gamesRoomManager, TableManagerImpl tableManager, UserManagerImpl userManager) {
userManager.init();
tableManager.init();
gamesRoomManager.init();
}
@Override
- public IChatManager chatManager() {
+ public ChatManager chatManager() {
return chatManager;
}
@Override
- public IDraftManager draftManager() {
+ public DraftManager draftManager() {
return draftManager;
}
@Override
- public IGameManager gameManager() {
+ public GameManager gameManager() {
return gameManager;
}
@Override
- public IGamesRoomManager gamesRoomManager() {
+ public GamesRoomManager gamesRoomManager() {
return gamesRoomManager;
}
@Override
- public IMailClient mailClient() {
+ public MailClient mailClient() {
return mailClient;
}
@Override
- public IMailClient mailgunClient() {
+ public MailClient mailgunClient() {
return mailgunClient;
}
@Override
- public IReplayManager replayManager() {
+ public ReplayManager replayManager() {
return replayManager;
}
@Override
- public ISessionManager sessionManager() {
+ public SessionManager sessionManager() {
return sessionManager;
}
@Override
- public ITableManager tableManager() {
+ public TableManager tableManager() {
return tableManager;
}
@Override
- public IUserManager userManager() {
+ public UserManager userManager() {
return userManager;
}
@Override
- public IConfigSettings configSettings() {
+ public ConfigSettings configSettings() {
return configSettings;
}
@Override
- public IThreadExecutor threadExecutor() {
+ public ThreadExecutor threadExecutor() {
return threadExecutor;
}
@Override
- public ITournamentManager tournamentManager() {
+ public TournamentManager tournamentManager() {
return tournamentManager;
}
}
diff --git a/Mage.Server/src/main/java/mage/server/RoomImpl.java b/Mage.Server/src/main/java/mage/server/RoomImpl.java
index aa896a91fc..9221ee0cd3 100644
--- a/Mage.Server/src/main/java/mage/server/RoomImpl.java
+++ b/Mage.Server/src/main/java/mage/server/RoomImpl.java
@@ -1,6 +1,6 @@
package mage.server;
-import mage.server.managers.IChatManager;
+import mage.server.managers.ChatManager;
import java.util.UUID;
@@ -12,7 +12,7 @@ public abstract class RoomImpl implements Room {
private final UUID chatId;
private final UUID roomId;
- public RoomImpl(IChatManager chatManager) {
+ public RoomImpl(ChatManager chatManager) {
roomId = UUID.randomUUID();
chatId = chatManager.createChatSession("Room " + roomId);
}
diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java
index 66d22cb210..61d36241d5 100644
--- a/Mage.Server/src/main/java/mage/server/Session.java
+++ b/Mage.Server/src/main/java/mage/server/Session.java
@@ -7,7 +7,7 @@ import mage.interfaces.callback.ClientCallbackMethod;
import mage.players.net.UserData;
import mage.players.net.UserGroup;
import mage.server.game.GamesRoom;
-import mage.server.managers.IConfigSettings;
+import mage.server.managers.ConfigSettings;
import mage.server.managers.ManagerFactory;
import mage.server.util.SystemUtil;
import mage.util.RandomUtil;
@@ -115,7 +115,7 @@ public class Session {
if (userName.equals("Admin")) {
return "User name Admin already in use";
}
- IConfigSettings config = managerFactory.configSettings();
+ ConfigSettings config = managerFactory.configSettings();
if (userName.length() < config.getMinUserNameLength()) {
return "User name may not be shorter than " + config.getMinUserNameLength() + " characters";
}
@@ -135,7 +135,7 @@ public class Session {
}
private String validatePassword(String password, String userName) {
- IConfigSettings config = managerFactory.configSettings();
+ ConfigSettings config = managerFactory.configSettings();
if (password.length() < config.getMinPasswordLength()) {
return "Password may not be shorter than " + config.getMinPasswordLength() + " characters";
}
diff --git a/Mage.Server/src/main/java/mage/server/SessionManager.java b/Mage.Server/src/main/java/mage/server/SessionManagerImpl.java
similarity index 97%
rename from Mage.Server/src/main/java/mage/server/SessionManager.java
rename to Mage.Server/src/main/java/mage/server/SessionManagerImpl.java
index 9fa41f13f2..896195a52d 100644
--- a/Mage.Server/src/main/java/mage/server/SessionManager.java
+++ b/Mage.Server/src/main/java/mage/server/SessionManagerImpl.java
@@ -2,7 +2,7 @@ package mage.server;
import mage.MageException;
import mage.players.net.UserData;
-import mage.server.managers.ISessionManager;
+import mage.server.managers.SessionManager;
import mage.server.managers.ManagerFactory;
import org.apache.log4j.Logger;
import org.jboss.remoting.callback.InvokerCallbackHandler;
@@ -14,14 +14,14 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class SessionManager implements ISessionManager {
+public class SessionManagerImpl implements SessionManager {
- private static final Logger logger = Logger.getLogger(SessionManager.class);
+ private static final Logger logger = Logger.getLogger(SessionManagerImpl.class);
private final ManagerFactory managerFactory;
private final ConcurrentHashMap sessions = new ConcurrentHashMap<>();
- public SessionManager(ManagerFactory managerFactory) {
+ public SessionManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java
index db4a24eabe..ca2ce8fe04 100644
--- a/Mage.Server/src/main/java/mage/server/TableController.java
+++ b/Mage.Server/src/main/java/mage/server/TableController.java
@@ -84,7 +84,7 @@ public class TableController {
if (userId != null) {
Optional user = managerFactory.userManager().getUser(userId);
if (!user.isPresent()) {
- logger.fatal(new StringBuilder("User for userId ").append(userId).append(" could not be retrieved from UserManager").toString());
+ logger.fatal(new StringBuilder("User for userId ").append(userId).append(" could not be retrieved from UserManagerImpl").toString());
controllerName = "[unknown]";
} else {
controllerName = user.get().getName();
diff --git a/Mage.Server/src/main/java/mage/server/TableManager.java b/Mage.Server/src/main/java/mage/server/TableManagerImpl.java
similarity index 97%
rename from Mage.Server/src/main/java/mage/server/TableManager.java
rename to Mage.Server/src/main/java/mage/server/TableManagerImpl.java
index 3cfa700135..268c4f20fe 100644
--- a/Mage.Server/src/main/java/mage/server/TableManager.java
+++ b/Mage.Server/src/main/java/mage/server/TableManagerImpl.java
@@ -14,7 +14,7 @@ import mage.game.tournament.TournamentOptions;
import mage.game.tournament.TournamentPlayer;
import mage.players.PlayerType;
import mage.server.game.GameController;
-import mage.server.managers.ITableManager;
+import mage.server.managers.TableManager;
import mage.server.managers.ManagerFactory;
import org.apache.log4j.Logger;
@@ -33,12 +33,12 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class TableManager implements ITableManager {
+public class TableManagerImpl implements TableManager {
protected final ScheduledExecutorService expireExecutor = Executors.newSingleThreadScheduledExecutor();
- // protected static ScheduledExecutorService expireExecutor = ThreadExecutor.getInstance().getExpireExecutor();
+ // protected static ScheduledExecutorService expireExecutor = ThreadExecutorImpl.getInstance().getExpireExecutor();
private final ManagerFactory managerFactory;
- private final Logger logger = Logger.getLogger(TableManager.class);
+ private final Logger logger = Logger.getLogger(TableManagerImpl.class);
private final DateFormat formatter = new SimpleDateFormat("HH:mm:ss");
private final ConcurrentHashMap controllers = new ConcurrentHashMap<>();
@@ -54,7 +54,7 @@ public class TableManager implements ITableManager {
*/
private static final int EXPIRE_CHECK_PERIOD = 10;
- public TableManager(ManagerFactory managerFactory) {
+ public TableManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
@@ -206,7 +206,7 @@ public class TableManager implements ITableManager {
controller.leaveTable(userId);
}
} else {
- logger.error("TableManager.userQuitTournamentSubTables table == null - userId " + userId);
+ logger.error("TableManagerImpl.userQuitTournamentSubTables table == null - userId " + userId);
}
}
}
diff --git a/Mage.Server/src/main/java/mage/server/UserManager.java b/Mage.Server/src/main/java/mage/server/UserManagerImpl.java
similarity index 98%
rename from Mage.Server/src/main/java/mage/server/UserManager.java
rename to Mage.Server/src/main/java/mage/server/UserManagerImpl.java
index d8e8574faa..8b1fa6ff34 100644
--- a/Mage.Server/src/main/java/mage/server/UserManager.java
+++ b/Mage.Server/src/main/java/mage/server/UserManagerImpl.java
@@ -1,7 +1,7 @@
package mage.server;
import mage.server.User.UserState;
-import mage.server.managers.IUserManager;
+import mage.server.managers.UserManager;
import mage.server.managers.ManagerFactory;
import mage.server.record.UserStats;
import mage.server.record.UserStatsRepository;
@@ -20,13 +20,13 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
*
* @author BetaSteward_at_googlemail.com
*/
-public class UserManager implements IUserManager {
+public class UserManagerImpl implements UserManager {
private static final int SERVER_TIMEOUTS_USER_INFORM_OPPONENTS_ABOUT_DISCONNECT_AFTER_SECS = 30; // send to chat info about disconnection troubles, must be more than ping timeout
private static final int SERVER_TIMEOUTS_USER_DISCONNECT_FROM_SERVER_AFTER_SECS = 3 * 60; // removes from all games and chats too (can be seen in users list with disconnected status)
private static final int SERVER_TIMEOUTS_USER_REMOVE_FROM_SERVER_AFTER_SECS = 8 * 60; // removes from users list
- private static final Logger logger = Logger.getLogger(UserManager.class);
+ private static final Logger logger = Logger.getLogger(UserManagerImpl.class);
protected final ScheduledExecutorService expireExecutor = Executors.newSingleThreadScheduledExecutor();
protected final ScheduledExecutorService userListExecutor = Executors.newSingleThreadScheduledExecutor();
@@ -40,7 +40,7 @@ public class UserManager implements IUserManager {
private ExecutorService USER_EXECUTOR;
- public UserManager(ManagerFactory managerFactory) {
+ public UserManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftManager.java b/Mage.Server/src/main/java/mage/server/draft/DraftManagerImpl.java
similarity index 93%
rename from Mage.Server/src/main/java/mage/server/draft/DraftManager.java
rename to Mage.Server/src/main/java/mage/server/draft/DraftManagerImpl.java
index 0b7eef61a8..69127d4479 100644
--- a/Mage.Server/src/main/java/mage/server/draft/DraftManager.java
+++ b/Mage.Server/src/main/java/mage/server/draft/DraftManagerImpl.java
@@ -1,7 +1,7 @@
package mage.server.draft;
import mage.game.draft.Draft;
-import mage.server.managers.IDraftManager;
+import mage.server.managers.DraftManager;
import mage.server.managers.ManagerFactory;
import mage.view.DraftPickView;
@@ -14,12 +14,12 @@ import java.util.concurrent.ConcurrentMap;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class DraftManager implements IDraftManager {
+public class DraftManagerImpl implements DraftManager {
private final ManagerFactory managerFactory;
private final ConcurrentMap draftControllers = new ConcurrentHashMap<>();
- public DraftManager(ManagerFactory managerFactory) {
+ public DraftManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
diff --git a/Mage.Server/src/main/java/mage/server/game/GameManager.java b/Mage.Server/src/main/java/mage/server/game/GameManagerImpl.java
similarity index 97%
rename from Mage.Server/src/main/java/mage/server/game/GameManager.java
rename to Mage.Server/src/main/java/mage/server/game/GameManagerImpl.java
index 8c6bdcf503..3121bfdbdb 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameManager.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameManagerImpl.java
@@ -5,7 +5,7 @@ import mage.constants.ManaType;
import mage.constants.PlayerAction;
import mage.game.Game;
import mage.game.GameOptions;
-import mage.server.managers.IGameManager;
+import mage.server.managers.GameManager;
import mage.server.managers.ManagerFactory;
import mage.view.GameView;
@@ -22,13 +22,13 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class GameManager implements IGameManager {
+public class GameManagerImpl implements GameManager {
private final ManagerFactory managerFactory;
private final ConcurrentMap gameControllers = new ConcurrentHashMap<>();
private final ReadWriteLock gameControllersLock = new ReentrantReadWriteLock();
- public GameManager(ManagerFactory managerFactory) {
+ public GameManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
diff --git a/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java b/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java
index 2c23027a03..b7f3c9aae9 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameSessionPlayer.java
@@ -11,7 +11,7 @@ import mage.interfaces.callback.ClientCallback;
import mage.interfaces.callback.ClientCallbackMethod;
import mage.players.Player;
import mage.server.User;
-import mage.server.managers.IUserManager;
+import mage.server.managers.UserManager;
import mage.server.managers.ManagerFactory;
import mage.view.*;
import org.apache.log4j.Logger;
@@ -28,7 +28,7 @@ public class GameSessionPlayer extends GameSessionWatcher {
private static final Logger logger = Logger.getLogger(GameSessionPlayer.class);
- private final IUserManager userManager;
+ private final UserManager userManager;
private final UUID playerId;
private final ExecutorService callExecutor;
diff --git a/Mage.Server/src/main/java/mage/server/game/GameSessionWatcher.java b/Mage.Server/src/main/java/mage/server/game/GameSessionWatcher.java
index 5e3de9641e..6aafddbf67 100644
--- a/Mage.Server/src/main/java/mage/server/game/GameSessionWatcher.java
+++ b/Mage.Server/src/main/java/mage/server/game/GameSessionWatcher.java
@@ -6,7 +6,7 @@ import mage.interfaces.callback.ClientCallback;
import mage.interfaces.callback.ClientCallbackMethod;
import mage.players.Player;
import mage.server.User;
-import mage.server.managers.IUserManager;
+import mage.server.managers.UserManager;
import mage.view.GameClientMessage;
import mage.view.GameEndView;
import mage.view.GameView;
@@ -25,13 +25,13 @@ public class GameSessionWatcher {
protected static final Logger logger = Logger.getLogger(GameSessionWatcher.class);
- private final IUserManager userManager;
+ private final UserManager userManager;
protected final UUID userId;
protected final Game game;
protected boolean killed = false;
protected final boolean isPlayer;
- public GameSessionWatcher(IUserManager userManager, UUID userId, Game game, boolean isPlayer) {
+ public GameSessionWatcher(UserManager userManager, UUID userId, Game game, boolean isPlayer) {
this.userManager = userManager;
this.userId = userId;
this.game = game;
diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomManager.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomManagerImpl.java
similarity index 89%
rename from Mage.Server/src/main/java/mage/server/game/GamesRoomManager.java
rename to Mage.Server/src/main/java/mage/server/game/GamesRoomManagerImpl.java
index b63ab4200a..77ea11bc72 100644
--- a/Mage.Server/src/main/java/mage/server/game/GamesRoomManager.java
+++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomManagerImpl.java
@@ -1,6 +1,6 @@
package mage.server.game;
-import mage.server.managers.IGamesRoomManager;
+import mage.server.managers.GamesRoomManager;
import mage.server.managers.ManagerFactory;
import org.apache.log4j.Logger;
@@ -11,16 +11,16 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class GamesRoomManager implements IGamesRoomManager {
+public class GamesRoomManagerImpl implements GamesRoomManager {
private final ManagerFactory managerFactory;
private final ConcurrentHashMap rooms = new ConcurrentHashMap<>();
private UUID mainRoomId;
private UUID mainChatId;
- private static final Logger logger = Logger.getLogger(GamesRoomManager.class);
+ private static final Logger logger = Logger.getLogger(GamesRoomManagerImpl.class);
- public GamesRoomManager(ManagerFactory managerFactory) {
+ public GamesRoomManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
diff --git a/Mage.Server/src/main/java/mage/server/game/ReplayManager.java b/Mage.Server/src/main/java/mage/server/game/ReplayManagerImpl.java
similarity index 91%
rename from Mage.Server/src/main/java/mage/server/game/ReplayManager.java
rename to Mage.Server/src/main/java/mage/server/game/ReplayManagerImpl.java
index 9dcbb06462..c41c554067 100644
--- a/Mage.Server/src/main/java/mage/server/game/ReplayManager.java
+++ b/Mage.Server/src/main/java/mage/server/game/ReplayManagerImpl.java
@@ -1,6 +1,6 @@
package mage.server.game;
-import mage.server.managers.IReplayManager;
+import mage.server.managers.ReplayManager;
import mage.server.managers.ManagerFactory;
import java.util.UUID;
@@ -9,12 +9,12 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class ReplayManager implements IReplayManager {
+public class ReplayManagerImpl implements ReplayManager {
private final ConcurrentHashMap replaySessions = new ConcurrentHashMap<>();
private final ManagerFactory managerFactory;
- public ReplayManager(ManagerFactory managerFactory) {
+ public ReplayManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
diff --git a/Mage.Server/src/main/java/mage/server/managers/IChatManager.java b/Mage.Server/src/main/java/mage/server/managers/ChatManager.java
similarity index 97%
rename from Mage.Server/src/main/java/mage/server/managers/IChatManager.java
rename to Mage.Server/src/main/java/mage/server/managers/ChatManager.java
index 4c54375a52..504911f7b2 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IChatManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/ChatManager.java
@@ -9,7 +9,7 @@ import mage.view.ChatMessage;
import java.util.List;
import java.util.UUID;
-public interface IChatManager {
+public interface ChatManager {
UUID createChatSession(String info);
void joinChat(UUID chatId, UUID userId);
diff --git a/Mage.Server/src/main/java/mage/server/managers/IConfigSettings.java b/Mage.Server/src/main/java/mage/server/managers/ConfigSettings.java
similarity index 97%
rename from Mage.Server/src/main/java/mage/server/managers/IConfigSettings.java
rename to Mage.Server/src/main/java/mage/server/managers/ConfigSettings.java
index 4f61c6928c..be6d6c6c23 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IConfigSettings.java
+++ b/Mage.Server/src/main/java/mage/server/managers/ConfigSettings.java
@@ -5,7 +5,7 @@ import mage.server.util.config.Plugin;
import java.util.List;
-public interface IConfigSettings {
+public interface ConfigSettings {
String getServerAddress();
String getServerName();
diff --git a/Mage.Server/src/main/java/mage/server/managers/IDraftManager.java b/Mage.Server/src/main/java/mage/server/managers/DraftManager.java
similarity index 96%
rename from Mage.Server/src/main/java/mage/server/managers/IDraftManager.java
rename to Mage.Server/src/main/java/mage/server/managers/DraftManager.java
index 75fc2ca65a..d9d17a9900 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IDraftManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/DraftManager.java
@@ -9,7 +9,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-public interface IDraftManager {
+public interface DraftManager {
UUID createDraftSession(Draft draft, ConcurrentHashMap userPlayerMap, UUID tableId);
void joinDraft(UUID draftId, UUID userId);
diff --git a/Mage.Server/src/main/java/mage/server/managers/IGameManager.java b/Mage.Server/src/main/java/mage/server/managers/GameManager.java
similarity index 98%
rename from Mage.Server/src/main/java/mage/server/managers/IGameManager.java
rename to Mage.Server/src/main/java/mage/server/managers/GameManager.java
index dc40fdb8d8..4531a53742 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IGameManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/GameManager.java
@@ -13,7 +13,7 @@ import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-public interface IGameManager {
+public interface GameManager {
UUID createGameSession(Game game, ConcurrentHashMap userPlayerMap, UUID tableId, UUID choosingPlayerId, GameOptions gameOptions);
void joinGame(UUID gameId, UUID userId);
diff --git a/Mage.Server/src/main/java/mage/server/managers/IGamesRoomManager.java b/Mage.Server/src/main/java/mage/server/managers/GamesRoomManager.java
similarity index 88%
rename from Mage.Server/src/main/java/mage/server/managers/IGamesRoomManager.java
rename to Mage.Server/src/main/java/mage/server/managers/GamesRoomManager.java
index b68e96b0bb..e2a877358a 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IGamesRoomManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/GamesRoomManager.java
@@ -5,7 +5,7 @@ import mage.server.game.GamesRoom;
import java.util.Optional;
import java.util.UUID;
-public interface IGamesRoomManager {
+public interface GamesRoomManager {
UUID createRoom();
UUID getMainRoomId();
diff --git a/Mage.Server/src/main/java/mage/server/managers/IMailClient.java b/Mage.Server/src/main/java/mage/server/managers/MailClient.java
similarity index 76%
rename from Mage.Server/src/main/java/mage/server/managers/IMailClient.java
rename to Mage.Server/src/main/java/mage/server/managers/MailClient.java
index 0dcf168b5c..bfb125a6c9 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IMailClient.java
+++ b/Mage.Server/src/main/java/mage/server/managers/MailClient.java
@@ -1,6 +1,6 @@
package mage.server.managers;
-public interface IMailClient {
+public interface MailClient {
boolean sendMessage(String email, String subject, String text);
diff --git a/Mage.Server/src/main/java/mage/server/managers/ManagerFactory.java b/Mage.Server/src/main/java/mage/server/managers/ManagerFactory.java
index 14d7592f05..917c681f92 100644
--- a/Mage.Server/src/main/java/mage/server/managers/ManagerFactory.java
+++ b/Mage.Server/src/main/java/mage/server/managers/ManagerFactory.java
@@ -1,29 +1,29 @@
package mage.server.managers;
public interface ManagerFactory {
- IChatManager chatManager();
+ ChatManager chatManager();
- IDraftManager draftManager();
+ DraftManager draftManager();
- IGameManager gameManager();
+ GameManager gameManager();
- IGamesRoomManager gamesRoomManager();
+ GamesRoomManager gamesRoomManager();
- IMailClient mailClient();
+ MailClient mailClient();
- IMailClient mailgunClient();
+ MailClient mailgunClient();
- IReplayManager replayManager();
+ ReplayManager replayManager();
- ISessionManager sessionManager();
+ SessionManager sessionManager();
- ITableManager tableManager();
+ TableManager tableManager();
- IUserManager userManager();
+ UserManager userManager();
- IConfigSettings configSettings();
+ ConfigSettings configSettings();
- IThreadExecutor threadExecutor();
+ ThreadExecutor threadExecutor();
- ITournamentManager tournamentManager();
+ TournamentManager tournamentManager();
}
diff --git a/Mage.Server/src/main/java/mage/server/managers/IReplayManager.java b/Mage.Server/src/main/java/mage/server/managers/ReplayManager.java
similarity index 92%
rename from Mage.Server/src/main/java/mage/server/managers/IReplayManager.java
rename to Mage.Server/src/main/java/mage/server/managers/ReplayManager.java
index 540fb77192..df6148cee9 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IReplayManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/ReplayManager.java
@@ -2,7 +2,7 @@ package mage.server.managers;
import java.util.UUID;
-public interface IReplayManager {
+public interface ReplayManager {
void replayGame(UUID gameId, UUID userId);
void startReplay(UUID gameId, UUID userId);
diff --git a/Mage.Server/src/main/java/mage/server/managers/ISessionManager.java b/Mage.Server/src/main/java/mage/server/managers/SessionManager.java
similarity index 97%
rename from Mage.Server/src/main/java/mage/server/managers/ISessionManager.java
rename to Mage.Server/src/main/java/mage/server/managers/SessionManager.java
index 1e5fe8c731..b5dc0d109b 100644
--- a/Mage.Server/src/main/java/mage/server/managers/ISessionManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/SessionManager.java
@@ -10,7 +10,7 @@ import org.jboss.remoting.callback.InvokerCallbackHandler;
import javax.annotation.Nonnull;
import java.util.Optional;
-public interface ISessionManager {
+public interface SessionManager {
Optional getSession(@Nonnull String sessionId);
void createSession(String sessionId, InvokerCallbackHandler callbackHandler);
diff --git a/Mage.Server/src/main/java/mage/server/managers/ITableManager.java b/Mage.Server/src/main/java/mage/server/managers/TableManager.java
similarity index 98%
rename from Mage.Server/src/main/java/mage/server/managers/ITableManager.java
rename to Mage.Server/src/main/java/mage/server/managers/TableManager.java
index f682349208..7ba5d81c75 100644
--- a/Mage.Server/src/main/java/mage/server/managers/ITableManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/TableManager.java
@@ -17,7 +17,7 @@ import java.util.Collection;
import java.util.Optional;
import java.util.UUID;
-public interface ITableManager {
+public interface TableManager {
Table createTable(UUID roomId, UUID userId, MatchOptions options);
Table createTable(UUID roomId, MatchOptions options);
diff --git a/Mage.Server/src/main/java/mage/server/managers/IThreadExecutor.java b/Mage.Server/src/main/java/mage/server/managers/ThreadExecutor.java
similarity index 91%
rename from Mage.Server/src/main/java/mage/server/managers/IThreadExecutor.java
rename to Mage.Server/src/main/java/mage/server/managers/ThreadExecutor.java
index d268b93ae7..46f59b5343 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IThreadExecutor.java
+++ b/Mage.Server/src/main/java/mage/server/managers/ThreadExecutor.java
@@ -3,7 +3,7 @@ package mage.server.managers;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ScheduledExecutorService;
-public interface IThreadExecutor {
+public interface ThreadExecutor {
int getActiveThreads(ExecutorService executerService);
ExecutorService getCallExecutor();
diff --git a/Mage.Server/src/main/java/mage/server/managers/ITournamentManager.java b/Mage.Server/src/main/java/mage/server/managers/TournamentManager.java
similarity index 96%
rename from Mage.Server/src/main/java/mage/server/managers/ITournamentManager.java
rename to Mage.Server/src/main/java/mage/server/managers/TournamentManager.java
index ddf1f0775a..852588c264 100644
--- a/Mage.Server/src/main/java/mage/server/managers/ITournamentManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/TournamentManager.java
@@ -9,7 +9,7 @@ import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
-public interface ITournamentManager {
+public interface TournamentManager {
Optional getTournamentController(UUID tournamentId);
void createTournamentSession(Tournament tournament, ConcurrentHashMap userPlayerMap, UUID tableId);
diff --git a/Mage.Server/src/main/java/mage/server/managers/IUserManager.java b/Mage.Server/src/main/java/mage/server/managers/UserManager.java
similarity index 96%
rename from Mage.Server/src/main/java/mage/server/managers/IUserManager.java
rename to Mage.Server/src/main/java/mage/server/managers/UserManager.java
index e1f6cebd2f..626609ee25 100644
--- a/Mage.Server/src/main/java/mage/server/managers/IUserManager.java
+++ b/Mage.Server/src/main/java/mage/server/managers/UserManager.java
@@ -10,7 +10,7 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
-public interface IUserManager {
+public interface UserManager {
Optional createUser(String userName, String host, AuthorizedUser authorizedUser);
Optional getUser(UUID userId);
diff --git a/Mage.Server/src/main/java/mage/server/record/TableRecorderImpl.java b/Mage.Server/src/main/java/mage/server/record/TableRecorderImpl.java
index b8ed2b5876..de1eaf025e 100644
--- a/Mage.Server/src/main/java/mage/server/record/TableRecorderImpl.java
+++ b/Mage.Server/src/main/java/mage/server/record/TableRecorderImpl.java
@@ -3,13 +3,13 @@ package mage.server.record;
import mage.game.Table;
import mage.game.Table.TableRecorder;
import mage.game.result.ResultProtos.TableProto;
-import mage.server.managers.IUserManager;
+import mage.server.managers.UserManager;
public class TableRecorderImpl implements TableRecorder {
- private final IUserManager userManager;
+ private final UserManager userManager;
- public TableRecorderImpl(IUserManager userManager) {
+ public TableRecorderImpl(UserManager userManager) {
this.userManager = userManager;
}
diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
index a13c925f6d..094e1420b9 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java
@@ -19,7 +19,7 @@ import mage.game.tournament.TournamentPlayer;
import mage.players.PlayerType;
import mage.server.User;
import mage.server.draft.DraftController;
-import mage.server.managers.ITableManager;
+import mage.server.managers.TableManager;
import mage.server.managers.ManagerFactory;
import mage.view.ChatMessage.MessageColor;
import mage.view.ChatMessage.MessageType;
@@ -216,7 +216,7 @@ public class TournamentController {
private void startMatch(TournamentPairing pair, MatchOptions matchOptions) {
try {
- ITableManager tableManager = managerFactory.tableManager();
+ TableManager tableManager = managerFactory.tableManager();
Table table = tableManager.createTable(managerFactory.gamesRoomManager().getMainRoomId(), matchOptions);
table.setTournamentSubTable(true);
table.setTournament(tournament);
@@ -259,7 +259,7 @@ public class TournamentController {
private void startMultiplayerMatch(MultiplayerRound round, MatchOptions matchOptions) {
try {
- ITableManager tableManager = managerFactory.tableManager();
+ TableManager tableManager = managerFactory.tableManager();
Table table = tableManager.createTable(managerFactory.gamesRoomManager().getMainRoomId(), matchOptions);
table.setTournamentSubTable(true);
table.setTournament(tournament);
diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentManager.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentManagerImpl.java
similarity index 89%
rename from Mage.Server/src/main/java/mage/server/tournament/TournamentManager.java
rename to Mage.Server/src/main/java/mage/server/tournament/TournamentManagerImpl.java
index 4ff65f9180..f84ec3fcd5 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentManager.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentManagerImpl.java
@@ -2,7 +2,7 @@ package mage.server.tournament;
import mage.cards.decks.Deck;
import mage.game.tournament.Tournament;
-import mage.server.managers.ITournamentManager;
+import mage.server.managers.TournamentManager;
import mage.server.managers.ManagerFactory;
import mage.view.TournamentView;
import org.apache.log4j.Logger;
@@ -15,12 +15,12 @@ import java.util.concurrent.ConcurrentMap;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class TournamentManager implements ITournamentManager {
+public class TournamentManagerImpl implements TournamentManager {
private final ManagerFactory managerFactory;
private final ConcurrentMap controllers = new ConcurrentHashMap<>();
- public TournamentManager(ManagerFactory managerFactory) {
+ public TournamentManagerImpl(ManagerFactory managerFactory) {
this.managerFactory = managerFactory;
}
@@ -46,7 +46,7 @@ public class TournamentManager implements ITournamentManager {
if (tournamentController != null) {
tournamentController.quit(userId);
} else {
- Logger.getLogger(TournamentManager.class).error("Tournament controller missing tournamentid: " + tournamentId + " userId: " + userId);
+ Logger.getLogger(TournamentManagerImpl.class).error("Tournament controller missing tournamentid: " + tournamentId + " userId: " + userId);
}
}
diff --git a/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java b/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java
index a147610b46..20be1a6425 100644
--- a/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java
+++ b/Mage.Server/src/main/java/mage/server/util/ConfigWrapper.java
@@ -1,13 +1,13 @@
package mage.server.util;
-import mage.server.managers.IConfigSettings;
+import mage.server.managers.ConfigSettings;
import mage.server.util.config.Config;
import mage.server.util.config.GamePlugin;
import mage.server.util.config.Plugin;
import java.util.List;
-public class ConfigWrapper implements IConfigSettings {
+public class ConfigWrapper implements ConfigSettings {
private final Config config;
diff --git a/Mage.Server/src/main/java/mage/server/util/ThreadExecutor.java b/Mage.Server/src/main/java/mage/server/util/ThreadExecutorImpl.java
similarity index 94%
rename from Mage.Server/src/main/java/mage/server/util/ThreadExecutor.java
rename to Mage.Server/src/main/java/mage/server/util/ThreadExecutorImpl.java
index 22602dde5a..85ca2f8b1e 100644
--- a/Mage.Server/src/main/java/mage/server/util/ThreadExecutor.java
+++ b/Mage.Server/src/main/java/mage/server/util/ThreadExecutorImpl.java
@@ -1,14 +1,14 @@
package mage.server.util;
-import mage.server.managers.IConfigSettings;
-import mage.server.managers.IThreadExecutor;
+import mage.server.managers.ConfigSettings;
+import mage.server.managers.ThreadExecutor;
import java.util.concurrent.*;
/**
* @author BetaSteward_at_googlemail.com
*/
-public class ThreadExecutor implements IThreadExecutor {
+public class ThreadExecutorImpl implements ThreadExecutor {
private final ExecutorService callExecutor;
private final ExecutorService gameExecutor;
private final ScheduledExecutorService timeoutExecutor;
@@ -25,7 +25,7 @@ public class ThreadExecutor implements IThreadExecutor {
* resource consuming process.
*/
- public ThreadExecutor(IConfigSettings config) {
+ public ThreadExecutorImpl(ConfigSettings config) {
callExecutor = Executors.newCachedThreadPool();
gameExecutor = Executors.newFixedThreadPool(config.getMaxGameThreads());
timeoutExecutor = Executors.newScheduledThreadPool(4);
diff --git a/Mage.Server/src/test/java/mage/server/util/ConfigFactoryTest.java b/Mage.Server/src/test/java/mage/server/util/ConfigFactoryTest.java
index aab38e713a..3563287fad 100644
--- a/Mage.Server/src/test/java/mage/server/util/ConfigFactoryTest.java
+++ b/Mage.Server/src/test/java/mage/server/util/ConfigFactoryTest.java
@@ -4,6 +4,8 @@ import mage.server.util.config.Config;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
+import java.nio.file.Paths;
+
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@@ -22,7 +24,7 @@ public class ConfigFactoryTest {
@DisplayName("should fail if config is malformed")
void failOnMalformed() {
assertThatExceptionOfType(ConfigurationException.class)
- .isThrownBy(() -> ConfigFactory.loadFromFile("config/config_error.xml"));
+ .isThrownBy(() -> ConfigFactory.loadFromFile(Paths.get("src", "test", "resources", "config_error.xml").toString()));
}
@Test
diff --git a/Mage.Server/config/config_error.xml b/Mage.Server/src/test/resources/config_error.xml
similarity index 100%
rename from Mage.Server/config/config_error.xml
rename to Mage.Server/src/test/resources/config_error.xml
diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestBase.java
index f008d5112d..6e1eb646b8 100644
--- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestBase.java
+++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestBase.java
@@ -14,7 +14,7 @@ import mage.players.Player;
import mage.players.PlayerType;
import mage.server.game.GameFactory;
import mage.server.game.PlayerFactory;
-import mage.server.managers.IConfigSettings;
+import mage.server.managers.ConfigSettings;
import mage.server.tournament.TournamentFactory;
import mage.server.util.ConfigFactory;
import mage.server.util.ConfigWrapper;
@@ -102,7 +102,7 @@ public abstract class MageTestBase {
public static void init() {
Logger.getRootLogger().setLevel(Level.DEBUG);
deleteSavedGames();
- IConfigSettings config = new ConfigWrapper(ConfigFactory.loadFromFile("config/config.xml"));
+ ConfigSettings config = new ConfigWrapper(ConfigFactory.loadFromFile("config/config.xml"));
config.getGameTypes().forEach((gameType) -> {
GameFactory.instance.addGameType(gameType.getName(), loadGameType(gameType), loadPlugin(gameType));
});
diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java
index 485808af31..1d88a74644 100644
--- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java
+++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/MageTestPlayerBase.java
@@ -23,7 +23,7 @@ import mage.game.permanent.PermanentCard;
import mage.game.tournament.TournamentType;
import mage.players.Player;
import mage.server.game.GameFactory;
-import mage.server.managers.IConfigSettings;
+import mage.server.managers.ConfigSettings;
import mage.server.util.ConfigFactory;
import mage.server.util.ConfigWrapper;
import mage.server.util.PluginClassLoader;
@@ -116,7 +116,7 @@ public abstract class MageTestPlayerBase {
logger.debug("Default charset: " + Charset.defaultCharset());
deleteSavedGames();
- IConfigSettings config = new ConfigWrapper(ConfigFactory.loadFromFile("config/config.xml"));
+ ConfigSettings config = new ConfigWrapper(ConfigFactory.loadFromFile("config/config.xml"));
for (GamePlugin plugin : config.getGameTypes()) {
GameFactory.instance.addGameType(plugin.getName(), loadGameType(plugin), loadPlugin(plugin));
}
diff --git a/readme.md b/readme.md
index a25e05cdf0..7e680f87d9 100644
--- a/readme.md
+++ b/readme.md
@@ -58,6 +58,13 @@ Look [here](http://www.slightlymagic.net/forum/viewtopic.php?f=70&t=13632) for m
[Wiki page](https://github.com/magefree/mage/wiki) contains detail information about private or public server setup.
+### Server options
+
+The XMage server locates by default the configuration file from the current working directory to the relative path `config/config.xml`
+(`config\config.xml` in Windows). To change this location, start the server with the property `xmage.config.path` set
+to the desired location, for example `-Dxmage.config.path=config/otherconfig.xml`. The option can be set from the
+XMageLauncher in `Settings > Java > Server java options`.
+
## Troubleshooting / FAQ
Github issues page contain [popular problems and fixes](https://github.com/magefree/mage/issues?q=is%3Aissue+label%3AFAQ+):