diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java index 8f859c04f..9c7bbb2fa 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java @@ -5,12 +5,14 @@ import com.gempukku.lotro.async.HttpProcessingException; import com.gempukku.lotro.async.ResponseWriter; import com.gempukku.lotro.cache.CacheManager; import com.gempukku.lotro.collection.CollectionsManager; +import com.gempukku.lotro.common.ApplicationConfiguration; import com.gempukku.lotro.db.LeagueDAO; import com.gempukku.lotro.db.PlayerDAO; import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.game.CardCollection; import com.gempukku.lotro.game.CardSets; +import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.Player; import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.hall.HallServer; @@ -35,6 +37,7 @@ import java.util.List; import java.util.Map; public class AdminRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { + private final LotroCardBlueprintLibrary lotroCardBlueprintLibrary; private SoloDraftDefinitions _soloDraftDefinitions; private LeagueService _leagueService; private TournamentService _tournamentService; @@ -60,6 +63,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur _playerDAO = extractObject(context, PlayerDAO.class); _collectionManager = extractObject(context, CollectionsManager.class); _adminService = extractObject(context, AdminService.class); + lotroCardBlueprintLibrary = extractObject(context, LotroCardBlueprintLibrary.class); } @Override @@ -68,6 +72,8 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur clearCache(request, responseWriter); } else if (uri.equals("/shutdown") && request.getMethod() == HttpMethod.GET) { shutdown(request, responseWriter); + } else if (uri.equals("/reloadCards") && request.getMethod() == HttpMethod.GET) { + reloadCards(request, responseWriter); } else if (uri.equals("/setMotd") && request.getMethod() == HttpMethod.POST) { setMotd(request, responseWriter); } else if (uri.equals("/previewSealedLeague") && request.getMethod() == HttpMethod.POST) { @@ -541,6 +547,14 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur responseWriter.writeHtmlResponse("OK"); } + private void reloadCards(HttpRequest request, ResponseWriter responseWriter) throws HttpProcessingException { + validateAdmin(request); + + lotroCardBlueprintLibrary.reloadCards(new java.io.File(ApplicationConfiguration.getProperty("card.path"))); + + responseWriter.writeHtmlResponse("OK"); + } + private void clearCache(HttpRequest request, ResponseWriter responseWriter) throws HttpProcessingException { validateAdmin(request); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprintLibrary.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprintLibrary.java index 2a6050913..41215d5ea 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprintLibrary.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprintLibrary.java @@ -9,12 +9,9 @@ import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import java.io.*; -import java.nio.file.*; import java.util.*; import java.util.concurrent.CountDownLatch; -import static java.nio.file.StandardWatchEventKinds.*; - public class LotroCardBlueprintLibrary { private static Logger logger = Logger.getLogger(LotroCardBlueprintLibrary.class); @@ -77,11 +74,14 @@ public class LotroCardBlueprintLibrary { public void init(File cardPath, CardSets cardSets) { loadCards(cardPath); - setupWatcher(cardPath.toPath()); initCardSets(cardSets); collectionReadyLatch.countDown(); } + public void reloadCards(File cardPath) { + loadCards(cardPath); + } + private void loadCards(File path) { if (path.isFile()) loadCardsFromFile(path); @@ -115,66 +115,6 @@ public class LotroCardBlueprintLibrary { logger.debug("Loaded card file " + file.getName()); } - private void setupWatcher(Path path) { - Thread thr = new Thread( - () -> { - try { - WatchService watcher = FileSystems.getDefault().newWatchService(); - path.register(watcher, - ENTRY_CREATE, - ENTRY_MODIFY); - - while (true) { - // wait for key to be signaled - WatchKey key; - try { - key = watcher.take(); - } catch (InterruptedException x) { - return; - } - - for (WatchEvent event : key.pollEvents()) { - WatchEvent.Kind kind = event.kind(); - - // This key is registered only - // for ENTRY_CREATE events, - // but an OVERFLOW event can - // occur regardless if events - // are lost or discarded. - if (kind == OVERFLOW) { - continue; - } - - // The filename is the - // context of the event. - WatchEvent ev = (WatchEvent) event; - Path filename = ev.context(); - - // Resolve the filename against the directory. - // If the filename is "test" and the directory is "foo", - // the resolved name is "test/foo". - Path child = path.resolve(filename); - - final File file = child.toFile(); - loadCards(file); - } - - // Reset the key -- this step is critical if you want to - // receive further watch events. If the key is no longer valid, - // the directory is inaccessible so exit the loop. - boolean valid = key.reset(); - if (!valid) { - break; - } - } - } catch (IOException exp) { - logger.error("Unable to setup folder watcher on " + path.toString(), exp); - } - } - ); - thr.start(); - } - public String getBaseBlueprintId(String blueprintId) { blueprintId = stripBlueprintModifiers(blueprintId); String base = _blueprintMapping.get(blueprintId);