package polly.rx;
import java.util.Set;
import java.util.TreeSet;
import polly.rx.commands.AddTrainCommand;
import polly.rx.commands.CloseTrainCommand;
import polly.rx.commands.CrackerCommand;
import polly.rx.commands.DeliverTrainCommand;
import polly.rx.commands.IGMCommand;
import polly.rx.commands.IPCommand;
import polly.rx.commands.MyTrainsCommand;
import polly.rx.commands.MyVenadCommand;
import polly.rx.commands.RankCommand;
import polly.rx.commands.RessComand;
import polly.rx.commands.RouteCommand;
import polly.rx.commands.VenadCommand;
import polly.rx.core.AZEntryManager;
import polly.rx.core.FleetDBManager;
import polly.rx.core.ScoreBoardManager;
import polly.rx.core.TrainManagerV2;
import polly.rx.core.orion.FleetTracker;
import polly.rx.core.orion.Orion;
import polly.rx.core.orion.OrionChatProvider;
import polly.rx.core.orion.ResourcePriceProvider;
import polly.rx.core.orion.VenadUserMapper;
import polly.rx.core.orion.WormholeProvider;
import polly.rx.core.orion.datasource.DBFleetHeatMap;
import polly.rx.core.orion.datasource.DBOrionAccess;
import polly.rx.core.orion.datasource.DBOrionChatProvider;
import polly.rx.core.orion.datasource.MemoryFleetTracker;
import polly.rx.core.orion.datasource.QZoneResourcePriceProvider;
import polly.rx.core.orion.datasource.WLSWormholeProvider;
import polly.rx.core.orion.http.OrionChatController;
import polly.rx.core.orion.http.OrionController;
import polly.rx.core.orion.http.OrionNewsProvider;
import polly.rx.core.orion.model.AlienRace;
import polly.rx.core.orion.model.AlienSpawn;
import polly.rx.core.orion.model.Portal;
import polly.rx.core.orion.model.Sector;
import polly.rx.entities.AZEntry;
import polly.rx.entities.BattleDrop;
import polly.rx.entities.BattleReport;
import polly.rx.entities.BattleReportShip;
import polly.rx.entities.DBHeatMapEntry;
import polly.rx.entities.DBPortal;
import polly.rx.entities.DBProduction;
import polly.rx.entities.DBQuadrant;
import polly.rx.entities.DBSector;
import polly.rx.entities.FleetScan;
import polly.rx.entities.FleetScanHistoryEntry;
import polly.rx.entities.FleetScanShip;
import polly.rx.entities.ScoreBoardEntry;
import polly.rx.entities.TrainEntityV3;
import polly.rx.httpv2.AlienRaceModel;
import polly.rx.httpv2.AlienSpawnModel;
import polly.rx.httpv2.BattleReportModel;
import polly.rx.httpv2.BattleReportShipModel;
import polly.rx.httpv2.FleetScanShipTableModel;
import polly.rx.httpv2.FleetScanTableModel;
import polly.rx.httpv2.FleetScansWithShipModel;
import polly.rx.httpv2.OpenTrainingsModel;
import polly.rx.httpv2.PortalModel;
import polly.rx.httpv2.RXController;
import polly.rx.httpv2.ScoreboardDetailModel;
import polly.rx.httpv2.ScoreboardTableModel;
import polly.rx.httpv2.SectorTableModel;
import polly.rx.httpv2.ShipsForScanTableModel;
import polly.rx.httpv2.StatisticsGatherer;
import polly.rx.httpv2.TrainingTableModel;
import de.skuzzle.polly.sdk.MyPolly;
import de.skuzzle.polly.sdk.PollyPlugin;
import de.skuzzle.polly.sdk.Types;
import de.skuzzle.polly.sdk.constraints.Constraints;
import de.skuzzle.polly.sdk.exceptions.DatabaseException;
import de.skuzzle.polly.sdk.exceptions.DisposingException;
import de.skuzzle.polly.sdk.exceptions.DuplicatedSignatureException;
import de.skuzzle.polly.sdk.exceptions.IncompatiblePluginException;
import de.skuzzle.polly.sdk.exceptions.PluginException;
import de.skuzzle.polly.sdk.exceptions.RoleException;
import de.skuzzle.polly.sdk.httpv2.MenuCategory;
import de.skuzzle.polly.sdk.httpv2.html.HTMLTable;
import de.skuzzle.polly.sdk.httpv2.html.HTMLTableModel;
import de.skuzzle.polly.sdk.roles.RoleManager;
public class MyPlugin extends PollyPlugin {
public final static String FLEET_MANAGER_ROLE = "polly.roles.FLEET_MANAGER"; //$NON-NLS-1$
public final static String TRAINER_ROLE = "polly.roles.TRAINER"; //$NON-NLS-1$
public final static String SBE_MANAGER_ROLE = "polly.roles.SBE_MANAGER"; //$NON-NLS-1$
public final static String ORION_ROLE = "polly.roles.ORION"; //$NON-NLS-1$
public final static String RESSOURCES_PERMISSION = "polly.permission.RESSOURCES"; //$NON-NLS-1$
public final static String ADD_TRAIN_PERMISSION = "polly.permission.ADD_TRAIN"; //$NON-NLS-1$
public final static String DELIVER_TRAIN_PERMISSION = "polly.permission.DELIVER_TRAIN"; //$NON-NLS-1$
public final static String MYTRAINS_PERMISSION = "polly.permission.MY_TRAINS"; //$NON-NLS-1$
public final static String MY_VENAD_PERMISSION = "polly.permission.MY_VENAD"; //$NON-NLS-1$
public final static String CLOSE_TRAIN_PERMISSION = "polly.permission.CLOSE_TRAIN"; //$NON-NLS-1$
public final static String IP_PERMISSION = "polly.permission.IP"; //$NON-NLS-1$
public final static String SBE_PERMISSION = "polly.permission.SBE"; //$NON-NLS-1$
public final static String CRACKER_PERMISSION = "polly.permission.CRACKER"; //$NON-NLS-1$
public final static String RANK_PERMISSION = "polly.permission.RANK"; //$NON-NLS-1$
public final static String VENAD = "VENAD"; //$NON-NLS-1$
public final static String CRACKER = "CRACKER"; //$NON-NLS-1$
public final static String MAX_MONTHS = "MAX_MONTHTS"; //$NON-NLS-1$
public final static String AUTO_REMIND = "AUTO_REMIND"; //$NON-NLS-1$
public final static String AUTO_REMIND_AZ = "AUTO_REMIND_AZ"; //$NON-NLS-1$
public final static String LOW_PZ_WARNING = "LOW_PZ_WARNING"; //$NON-NLS-1$
public final static String PORTALS = "PORTALS"; //$NON-NLS-1$
private static final String VENAD_DEFAULT = "<unbekannt>"; //$NON-NLS-1$
public final static String DOCK_LEVEL = "DOCK_LEVEL"; //$NON-NLS-1$
public static final String REPAIR_TIME_WARNING = "REPAIR_TIME_WARNING"; //$NON-NLS-1$
public final static String LOGGING_PLUGUIN_CFG = "plugin.revorix.cfg"; //$NON-NLS-1$
public final static String CAPTCHA_ANONYMIZE = "anonymize"; //$NON-NLS-1$
public final static String CAPTCHA_TESSDATA_PREFIX = "tessdataPrefix"; //$NON-NLS-1$
public final static String DEFAULT_TESSDATA_PREFIX = "plugins/polly.rx"; //$NON-NLS-1$
private final FleetDBManager fleetDBManager;
private final TrainManagerV2 trainManager;
private final ScoreBoardManager sbeManager;
private final AZEntryManager azManager;
private final OrionChatProvider chatProvider;
public MyPlugin(MyPolly myPolly)
throws DuplicatedSignatureException, IncompatiblePluginException {
super(myPolly);
this.chatProvider = new DBOrionChatProvider(myPolly.persistence());
addCommand(new IGMCommand(myPolly, this.chatProvider));
/* capi train related */
this.trainManager = new TrainManagerV2(myPolly);
getMyPolly().persistence().registerEntity(TrainEntityV3.class);
addCommand(new AddTrainCommand(myPolly, this.trainManager));
addCommand(new CloseTrainCommand(myPolly, this.trainManager));
addCommand(new MyTrainsCommand(myPolly, this.trainManager));
addCommand(new DeliverTrainCommand(myPolly, this.trainManager));
addCommand(new VenadCommand(myPolly));
addCommand(new MyVenadCommand(myPolly));
addCommand(new IPCommand(myPolly));
addCommand(new CrackerCommand(myPolly));
addCommand(new RessComand(myPolly));
/* fleet db related */
this.fleetDBManager = new FleetDBManager(myPolly.persistence());
this.sbeManager = new ScoreBoardManager(myPolly.persistence());
this.azManager = new AZEntryManager(myPolly);
myPolly.persistence().registerEntity(BattleReport.class);
myPolly.persistence().registerEntity(BattleReportShip.class);
myPolly.persistence().registerEntity(BattleDrop.class);
myPolly.persistence().registerEntity(FleetScan.class);
myPolly.persistence().registerEntity(FleetScanHistoryEntry.class);
myPolly.persistence().registerEntity(FleetScanShip.class);
myPolly.persistence().registerEntity(ScoreBoardEntry.class);
myPolly.persistence().registerEntity(AZEntry.class);
myPolly.persistence().registerEntity(DBHeatMapEntry.class);
// orion
myPolly.persistence().registerEntity(DBProduction.class);
myPolly.persistence().registerEntity(DBSector.class);
myPolly.persistence().registerEntity(DBQuadrant.class);
myPolly.persistence().registerEntity(DBPortal.class);
addCommand(new RankCommand(myPolly, this.sbeManager));
myPolly.webInterface().addCategory(new MenuCategory(0, MSG.httpRxCategory));
myPolly.webInterface().getServer().addController(
new RXController(myPolly, this.fleetDBManager, this.sbeManager, this.azManager));
final HTMLTableModel<FleetScan> scanModel = new FleetScanTableModel(this.fleetDBManager);
final HTMLTable<FleetScan> fleetScanTable = new HTMLTable<FleetScan>("fleetScans", scanModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<FleetScanShip> scanShipModel = new FleetScanShipTableModel(this.fleetDBManager);
final HTMLTable<FleetScanShip> fleetScanShipTable = new HTMLTable<FleetScanShip>("ships", scanShipModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<FleetScan> scansWithShip = new FleetScansWithShipModel(this.fleetDBManager);
final HTMLTable<FleetScan> scansWithShipTable = new HTMLTable<FleetScan>("scansWithShip", scansWithShip, myPolly); //$NON-NLS-1$
final HTMLTableModel<FleetScanShip> shipsForScanModel = new ShipsForScanTableModel(this.fleetDBManager);
final HTMLTable<FleetScanShip> shipsForScanTable = new HTMLTable<FleetScanShip>("ships", shipsForScanModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<ScoreBoardEntry> scoreboard = new ScoreboardTableModel(this.sbeManager);
final HTMLTable<ScoreBoardEntry> scoreboardTable = new HTMLTable<ScoreBoardEntry>("scoreboard", scoreboard, myPolly); //$NON-NLS-1$
final HTMLTableModel<ScoreBoardEntry> scoreboardDetail = new ScoreboardDetailModel(this.sbeManager);
final HTMLTable<ScoreBoardEntry> scoreboardDetailTable = new HTMLTable<>("entries", scoreboardDetail, myPolly); //$NON-NLS-1$
final HTMLTableModel<BattleReport> reportModel = new BattleReportModel(this.fleetDBManager);
final HTMLTable<BattleReport> reportTabble = new HTMLTable<BattleReport>("reports", reportModel, myPolly); //$NON-NLS-1$
final StatisticsGatherer statsGatherer = new StatisticsGatherer();
reportTabble.addModelListener(statsGatherer);
final HTMLTableModel<TrainEntityV3> trainingModel = new TrainingTableModel(this.trainManager);
final HTMLTable<TrainEntityV3> trainTable = new HTMLTable<>("closedTrainings", trainingModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<TrainEntityV3> openTrainingModel = new OpenTrainingsModel(this.trainManager);
final HTMLTable<TrainEntityV3> openTrainTable = new HTMLTable<>("openTrainings", openTrainingModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<BattleReportShip> reportAttackerShipModel = new BattleReportShipModel(this.fleetDBManager, true);
final HTMLTableModel<BattleReportShip> reportDefenderShipModel = new BattleReportShipModel(this.fleetDBManager, false);
final HTMLTable<BattleReportShip> reportAttackerShipTable = new HTMLTable<>("attackerShips", reportAttackerShipModel, myPolly); //$NON-NLS-1$
final HTMLTable<BattleReportShip> reportDefenderShipTable = new HTMLTable<>("defenderShips", reportDefenderShipModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<AlienRace> alienRaceModel = new AlienRaceModel();
final HTMLTable<AlienRace> alienRaceTable = new HTMLTable<>("alienRaces", alienRaceModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<AlienSpawn> alienSpawnModel = new AlienSpawnModel();
final HTMLTable<AlienSpawn> alienSpawnTable = new HTMLTable<>("alienSpawns", alienSpawnModel, myPolly); //$NON-NLS-1$
final HTMLTableModel<Portal> portalModel = new PortalModel();
final HTMLTable<Portal> portalTable = new HTMLTable<>("portals", portalModel, myPolly); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/allFleetScans", fleetScanTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/allFleetScanShips", fleetScanShipTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/scansWithShip", scansWithShipTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/shipsForScan", shipsForScanTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/scoreboard", scoreboardTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/scoreboardDetail", scoreboardDetailTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/allReports", reportTabble); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/reportAttackerShips", reportAttackerShipTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/reportDefenderShips", reportDefenderShipTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/alienRaces", alienRaceTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/alienSpawns", alienSpawnTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/portals", portalTable); //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/closedTrainings", trainTable); //$NON-N //$NON-NLS-1$
myPolly.webInterface().getServer().addHttpEventHandler("/api/openTrainings", openTrainTable); //$NON-N //$NON-NLS-1$
}
@Override
protected void actualDispose() throws DisposingException {
super.actualDispose();
}
@Override
public Set<String> getContainedPermissions() {
final Set<String> result = new TreeSet<String>();
result.add(FleetDBManager.ADD_FLEET_SCAN_PERMISSION);
result.add(FleetDBManager.ADD_BATTLE_REPORT_PERMISSION);
result.add(FleetDBManager.DELETE_BATTLE_REPORT_PERMISSION);
result.add(FleetDBManager.VIEW_BATTLE_REPORT_PERMISSION);
result.add(FleetDBManager.VIEW_FLEET_SCAN_PERMISSION);
result.add(FleetDBManager.DELETE_FLEET_SCAN_PERMISSION);
result.add(RANK_PERMISSION);
result.add(RESSOURCES_PERMISSION);
result.add(SBE_PERMISSION);
result.add(CRACKER_PERMISSION);
result.add(OrionController.VIEW_ORION_PREMISSION);
result.add(OrionController.WRITE_ORION_PREMISSION);
result.add(OrionController.ROUTE_ORION_PREMISSION);
result.add(OrionController.MANAGE_RACE_PERMISSION);
result.add(OrionController.SEARCH_SECTORS_PERMISSION);
result.addAll(super.getContainedPermissions());
return result;
}
@Override
public void assignPermissions(RoleManager roleManager)
throws RoleException, DatabaseException {
roleManager.createRole(TRAINER_ROLE);
roleManager.assignPermission(TRAINER_ROLE, ADD_TRAIN_PERMISSION);
roleManager.assignPermission(TRAINER_ROLE, CLOSE_TRAIN_PERMISSION);
roleManager.assignPermission(TRAINER_ROLE, DELIVER_TRAIN_PERMISSION);
roleManager.assignPermission(RoleManager.DEFAULT_ROLE, MYTRAINS_PERMISSION);
roleManager.createRole(FLEET_MANAGER_ROLE);
roleManager.assignPermission(FLEET_MANAGER_ROLE, FleetDBManager.ADD_FLEET_SCAN_PERMISSION);
roleManager.assignPermission(FLEET_MANAGER_ROLE, FleetDBManager.ADD_BATTLE_REPORT_PERMISSION);
roleManager.assignPermission(FLEET_MANAGER_ROLE, FleetDBManager.VIEW_BATTLE_REPORT_PERMISSION);
roleManager.assignPermission(FLEET_MANAGER_ROLE, FleetDBManager.VIEW_FLEET_SCAN_PERMISSION);
roleManager.createRole(SBE_MANAGER_ROLE);
roleManager.assignPermission(SBE_MANAGER_ROLE, SBE_PERMISSION);
roleManager.assignPermission(SBE_MANAGER_ROLE, RANK_PERMISSION);
roleManager.assignPermission(RoleManager.DEFAULT_ROLE, IP_PERMISSION);
roleManager.assignPermission(RoleManager.DEFAULT_ROLE, CRACKER_PERMISSION);
roleManager.createRole(ORION_ROLE);
roleManager.assignPermission(ORION_ROLE, OrionController.VIEW_ORION_PREMISSION);
roleManager.assignPermission(ORION_ROLE, OrionController.WRITE_ORION_PREMISSION);
roleManager.assignPermission(ORION_ROLE, OrionController.ROUTE_ORION_PREMISSION);
roleManager.assignPermission(ORION_ROLE, OrionController.MANAGE_RACE_PERMISSION);
roleManager.assignPermission(ORION_ROLE, OrionController.SEARCH_SECTORS_PERMISSION);
super.assignPermissions(roleManager);
}
@Override
public void onLoad() throws PluginException {
// ORION
final DBOrionAccess dboa = new DBOrionAccess(getMyPolly().persistence());
final WormholeProvider holeProvider = new WLSWormholeProvider();
final DBFleetHeatMap heatMap = new DBFleetHeatMap(getMyPolly().persistence(),
dboa.getQuadrantProvider());
final FleetTracker tracker = new MemoryFleetTracker(heatMap);
final ResourcePriceProvider priceProvider = new QZoneResourcePriceProvider();
final VenadUserMapper userMapper = new VenadUserMapper(getMyPolly().users());
Orion.initialize(
dboa.getQuadrantProvider(),
dboa.getQuadrantUpdater(),
holeProvider,
dboa.getPortalProvider(),
dboa.getAlienManager(),
dboa.getPortalUpdater(),
tracker,
priceProvider,
userMapper,
heatMap
);
final HTMLTableModel<Sector> sectorModel = new SectorTableModel(dboa.getQuadrantProvider());
final HTMLTable<Sector> sectorTable = new HTMLTable<>("sectors", sectorModel, getMyPolly()); //$NON-NLS-1$
getMyPolly().webInterface().getServer().addHttpEventHandler("/api/sectors", sectorTable); //$NON-NLS-1$
final OrionChatController chatController = new OrionChatController(
getMyPolly(), this.chatProvider);
getMyPolly().webInterface().getServer().addController(chatController);
final OrionController oc = new OrionController(getMyPolly(), this.azManager);
final OrionNewsProvider newsProvider = new OrionNewsProvider(
getMyPolly(),
Orion.INSTANCE.getFleetTracker(),
Orion.INSTANCE.getPortalUpdater(),
this.trainManager);
getMyPolly().webInterface().getServer().addController(oc);
getMyPolly().webInterface().getServer().addHttpEventHandler(
OrionNewsProvider.NEWS_URL, newsProvider);
try {
addCommand(new RouteCommand(getMyPolly()));
} catch (final DuplicatedSignatureException e1) {
e1.printStackTrace();
}
try {
getMyPolly().users().addAttribute(REPAIR_TIME_WARNING,
new Types.TimespanType(0), MSG.pluginRepairTimeWarning,
MSG.httpRxCategory, Constraints.TIMESPAN);
getMyPolly().users().addAttribute(VENAD,
new Types.StringType(VENAD_DEFAULT),
MSG.pluginVenadDesc,
MSG.httpRxCategory);
getMyPolly().users().addAttribute(CRACKER, new Types.NumberType(0.0),
MSG.pluginCrackerDesc,
MSG.httpRxCategory, Constraints.INTEGER);
getMyPolly().users().addAttribute(AUTO_REMIND,
new Types.BooleanType(false),
MSG.pluginAutoRemindDesc,
MSG.httpRxCategory);
getMyPolly().users().addAttribute(AUTO_REMIND_AZ,
new Types.TimespanType(840), MSG.pluginAutoRemindAzDesc,
MSG.httpRxCategory, Constraints.TIMESPAN);
getMyPolly().users().addAttribute(LOW_PZ_WARNING,
new Types.NumberType(0.0),
MSG.pluginLowPzWarningDesc,
MSG.httpRxCategory, Constraints.INTEGER);
getMyPolly().users().addAttribute(PORTALS, new Types.StringType(""), //$NON-NLS-1$
MSG.pluginPortalDesc, MSG.httpRxCategory,
new SectorListAttributeConstraint());
getMyPolly().users().addAttribute(DOCK_LEVEL,
new Types.NumberType(1),
MSG.pluginDockLvlDescription, MSG.httpRxCategory,
new DockLevelConstraint());
} catch (final Exception ignore) {
ignore.printStackTrace();
}
try {
this.fleetDBManager.cleanInvalidBattleReports();
this.fleetDBManager.cleanInvalidFleetScans();
} catch (final DatabaseException e) {
e.printStackTrace();
}
}
}