183 lines
7.0 KiB
Java
183 lines
7.0 KiB
Java
/*
|
|
* This file is part of Player Analytics (Plan).
|
|
*
|
|
* Plan is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License v3 as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Plan is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
package com.djrapitops.plan.delivery.export;
|
|
|
|
import com.djrapitops.plan.delivery.web.resolver.exception.NotFoundException;
|
|
import com.djrapitops.plan.exceptions.ExportException;
|
|
import com.djrapitops.plan.identification.Server;
|
|
import com.djrapitops.plan.identification.ServerUUID;
|
|
import com.djrapitops.plan.settings.config.PlanConfig;
|
|
import com.djrapitops.plan.settings.config.paths.ExportSettings;
|
|
|
|
import javax.inject.Inject;
|
|
import javax.inject.Singleton;
|
|
import java.io.IOException;
|
|
import java.nio.file.Path;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* Handles export for different pages.
|
|
*
|
|
* @author AuroraLS3
|
|
*/
|
|
@Singleton
|
|
public class Exporter extends FileExporter {
|
|
|
|
private final PlanConfig config;
|
|
private final PlayerJSONExporter playerJSONExporter;
|
|
private final PlayerPageExporter playerPageExporter;
|
|
private final PlayersPageExporter playersPageExporter;
|
|
private final ServerPageExporter serverPageExporter;
|
|
private final NetworkPageExporter networkPageExporter;
|
|
|
|
private final Set<ServerUUID> failedServers;
|
|
private final ReactExporter reactExporter;
|
|
|
|
@Inject
|
|
public Exporter(
|
|
PlanConfig config,
|
|
PlayerJSONExporter playerJSONExporter,
|
|
PlayerPageExporter playerPageExporter,
|
|
PlayersPageExporter playersPageExporter,
|
|
ServerPageExporter serverPageExporter,
|
|
NetworkPageExporter networkPageExporter,
|
|
ReactExporter reactExporter
|
|
) {
|
|
this.config = config;
|
|
this.playerJSONExporter = playerJSONExporter;
|
|
this.playerPageExporter = playerPageExporter;
|
|
this.playersPageExporter = playersPageExporter;
|
|
this.serverPageExporter = serverPageExporter;
|
|
this.networkPageExporter = networkPageExporter;
|
|
this.reactExporter = reactExporter;
|
|
|
|
failedServers = new HashSet<>();
|
|
}
|
|
|
|
/**
|
|
* Export a page of a server.
|
|
*
|
|
* @param server Server which page is going to be exported
|
|
* @return false if the page was not exported due to previous failure or is disabled in config.
|
|
* @throws ExportException If the export failed due to IO, NotFound or GenerationException.
|
|
*/
|
|
public boolean exportServerPage(Server server) throws ExportException {
|
|
ServerUUID serverUUID = server.getUuid();
|
|
if (failedServers.contains(serverUUID) || config.isFalse(ExportSettings.SERVER_PAGE)) return false;
|
|
|
|
try {
|
|
Path toDirectory = config.getPageExportPath();
|
|
if (server.isProxy()) {
|
|
networkPageExporter.export(toDirectory, server);
|
|
} else {
|
|
serverPageExporter.export(toDirectory, server);
|
|
}
|
|
return true;
|
|
} catch (IOException | NotFoundException e) {
|
|
failedServers.add(serverUUID);
|
|
throw new ExportException("Failed to export server: " + server.getIdentifiableName() + " (Attempts disabled until next reload), " + e.toString(), e);
|
|
}
|
|
}
|
|
|
|
public boolean exportServerJSON(Server server) throws ExportException {
|
|
ServerUUID serverUUID = server.getUuid();
|
|
if (failedServers.contains(serverUUID) || config.isFalse(ExportSettings.SERVER_JSON)) return false;
|
|
|
|
try {
|
|
Path toDirectory = config.getJSONExportPath().resolve(toFileName(server.getName()));
|
|
if (server.isProxy()) {
|
|
networkPageExporter.exportJSON(new ExportPaths(), toDirectory, server);
|
|
} else {
|
|
serverPageExporter.exportJSON(toDirectory, server);
|
|
}
|
|
return true;
|
|
} catch (IOException | NotFoundException e) {
|
|
failedServers.add(serverUUID);
|
|
throw new ExportException("Failed to export server: " + server.getIdentifiableName() + " (Attempts disabled until next reload), " + e.toString(), e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Export page of a player.
|
|
*
|
|
* @param playerUUID UUID of the player.
|
|
* @param playerName Name of the player.
|
|
* @return false if the page was not exported due to config settings.
|
|
* @throws ExportException If the export failed due to IO, NotFound or GenerationException.
|
|
*/
|
|
public boolean exportPlayerPage(UUID playerUUID, String playerName) throws ExportException {
|
|
Path toDirectory = config.getPageExportPath();
|
|
if (config.isFalse(ExportSettings.PLAYER_PAGES)) return false;
|
|
|
|
try {
|
|
playerPageExporter.export(toDirectory, playerUUID);
|
|
return true;
|
|
} catch (IOException | NotFoundException e) {
|
|
throw new ExportException("Failed to export player: " + playerName + ", " + e.toString(), e);
|
|
}
|
|
}
|
|
|
|
public boolean exportPlayersPage() throws ExportException {
|
|
Path toDirectory = config.getPageExportPath();
|
|
if (config.isFalse(ExportSettings.PLAYERS_PAGE)) return false;
|
|
|
|
try {
|
|
playersPageExporter.export(toDirectory);
|
|
return true;
|
|
} catch (IOException | NotFoundException e) {
|
|
throw new ExportException("Failed to export players page, " + e.toString(), e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Export Raw Data JSON of a player.
|
|
*
|
|
* @param playerUUID UUID of the player.
|
|
* @param playerName Name of the player.
|
|
* @return false if the json was not exported due to config settings.
|
|
* @throws ExportException If the export failed due to IOException.
|
|
*/
|
|
public boolean exportPlayerJSON(UUID playerUUID, String playerName) throws ExportException {
|
|
Path toDirectory = config.getJSONExportPath();
|
|
if (config.isFalse(ExportSettings.PLAYER_JSON)) return false;
|
|
|
|
try {
|
|
playerJSONExporter.export(toDirectory, playerUUID, playerName);
|
|
return true;
|
|
} catch (IOException e) {
|
|
throw new ExportException("Failed to export player: " + playerName + ", " + e.toString(), e);
|
|
}
|
|
}
|
|
|
|
public void exportReact() throws ExportException {
|
|
if (config.isFalse(ExportSettings.PLAYER_PAGES)
|
|
&& config.isFalse(ExportSettings.SERVER_PAGE)
|
|
&& config.isFalse(ExportSettings.PLAYERS_PAGE)) {
|
|
return;
|
|
}
|
|
|
|
Path toDirectory = config.getPageExportPath();
|
|
|
|
try {
|
|
reactExporter.exportReactFiles(toDirectory);
|
|
} catch (IOException e) {
|
|
throw new ExportException("Failed to export react: " + e.toString(), e);
|
|
}
|
|
}
|
|
} |