Jobs PluginData

This commit is contained in:
Rsl1122 2017-11-26 14:18:08 +02:00
parent 4427baa744
commit 56ac0da8fe
4 changed files with 87 additions and 142 deletions

View File

@ -1,84 +0,0 @@
package com.djrapitops.pluginbridge.plan.jobs;
import com.gamingmesh.jobs.Jobs;
import com.gamingmesh.jobs.dao.JobsDAOData;
import main.java.com.djrapitops.plan.data.additional.AnalysisType;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.analysis.MathUtils;
import main.java.com.djrapitops.plan.utilities.html.Html;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
/**
* PluginData class for Jobs-plugin.
* <p>
* Registered to the plugin by JobsHook
*
* @author Rsl1122
* @see JobsHook
* @since 3.2.1
*/
public class JobsAnalysisJobTable extends PluginData {
/**
* Class Constructor, sets the parameters of the PluginData object.
*/
public JobsAnalysisJobTable() {
super("Jobs", "analysis_table", AnalysisType.HTML);
final String job = Html.FONT_AWESOME_ICON.parse("suitcase") + " Job";
final String workers = Html.FONT_AWESOME_ICON.parse("users") + " Workers";
final String tLevel = Html.FONT_AWESOME_ICON.parse("plus") + " Total Level";
final String aLevel = Html.FONT_AWESOME_ICON.parse("plus") + " Avg Level";
super.setPrefix(Html.TABLE_START_4.parse(job, workers, aLevel, tLevel));
super.setSuffix(Html.TABLE_END.parse());
}
@Override
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
List<JobsDAOData> allJobs = Jobs.getDBManager().getDB().getAllJobs()
.values().stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
if (allJobs.isEmpty()) {
return parseContainer("", Html.TABLELINE_4.parse("No Players with Jobs", "", "", ""));
}
Map<String, Integer> workers = new HashMap<>();
Map<String, Long> totals = new HashMap<>();
for (JobsDAOData data : allJobs) {
String job = data.getJobName();
int level = data.getLevel();
if (!workers.containsKey(job)) {
workers.put(job, 0);
}
workers.put(job, workers.get(job) + 1);
if (!totals.containsKey(job)) {
totals.put(job, 0L);
}
totals.put(job, totals.get(job) + level);
}
StringBuilder html = new StringBuilder();
for (Map.Entry<String, Integer> entry : workers.entrySet()) {
String job = entry.getKey();
Integer amountOfWorkers = entry.getValue();
Long totalLevel = totals.get(job);
html.append(Html.TABLELINE_4.parse(
job,
amountOfWorkers,
FormatUtils.cutDecimals(MathUtils.average((int) (long) totalLevel, amountOfWorkers)),
totalLevel)
);
}
return parseContainer("", html.toString());
}
@Override
public Serializable getValue(UUID uuid) {
return -1;
}
}

View File

@ -0,0 +1,85 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package com.djrapitops.pluginbridge.plan.jobs;
import com.gamingmesh.jobs.Jobs;
import com.gamingmesh.jobs.dao.JobsDAOData;
import main.java.com.djrapitops.plan.data.additional.*;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.analysis.MathUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* //TODO Class Javadoc Comment
*
* @author Rsl1122
*/
public class JobsData extends PluginData {
public JobsData() {
super(ContainerSize.THIRD, "Jobs");
super.setIconColor("brown");
super.setPluginIcon("suitcase");
}
@Override
public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) throws Exception {
List<JobsDAOData> playersJobs = Jobs.getDBManager().getDB().getAllJobs(null, uuid);
TableContainer jobTable = new TableContainer(getWithIcon("Job", "suitcase"), getWithIcon("Level", "plus"));
for (JobsDAOData job : playersJobs) {
jobTable.addRow(job.getJobName(), job.getLevel());
}
if (playersJobs.isEmpty()) {
jobTable.addRow("No Jobs");
}
inspectContainer.addTable("jobTable", jobTable);
return inspectContainer;
}
@Override
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) throws Exception {
List<JobsDAOData> allJobs = Jobs.getDBManager().getDB().getAllJobs()
.values().stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
TableContainer jobTable = new TableContainer(getWithIcon("Job", "suitcase"), getWithIcon("Workers", "users"), getWithIcon("Total Level", "plus"), getWithIcon("Average Level", "plus"));
if (allJobs.isEmpty()) {
jobTable.addRow("No Jobs with Workers");
} else {
Map<String, Integer> workers = new HashMap<>();
Map<String, Long> totals = new HashMap<>();
for (JobsDAOData data : allJobs) {
String job = data.getJobName();
int level = data.getLevel();
workers.put(job, workers.getOrDefault(job, 0) + 1);
totals.put(job, totals.getOrDefault(job, 0L) + level);
}
List<String> order = new ArrayList<>(workers.keySet());
Collections.sort(order);
for (String job : order) {
int amountOfWorkers = workers.getOrDefault(job, 0);
long totalLevel = totals.getOrDefault(job, 0L);
jobTable.addRow(
job,
amountOfWorkers,
FormatUtils.cutDecimals(MathUtils.averageDouble(totalLevel, amountOfWorkers)),
totalLevel
);
}
}
analysisContainer.addTable("jobTable", jobTable);
return analysisContainer;
}
}

View File

@ -1,8 +1,8 @@
package com.djrapitops.pluginbridge.plan.jobs;
import main.java.com.djrapitops.plan.data.additional.HookHandler;
import com.djrapitops.pluginbridge.plan.Hook;
import main.java.com.djrapitops.plan.api.API;
import main.java.com.djrapitops.plan.data.additional.HookHandler;
/**
* A Class responsible for hooking to Jobs and registering data sources.
@ -26,8 +26,7 @@ public class JobsHook extends Hook {
public void hook() throws NoClassDefFoundError {
if (enabled) {
addPluginDataSource(new JobsInspectJobTable());
addPluginDataSource(new JobsAnalysisJobTable());
addPluginDataSource(new JobsData());
}
}
}

View File

@ -1,55 +0,0 @@
package com.djrapitops.pluginbridge.plan.jobs;
import com.gamingmesh.jobs.Jobs;
import com.gamingmesh.jobs.dao.JobsDAOData;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.html.Html;
import java.io.Serializable;
import java.util.List;
import java.util.UUID;
/**
* PluginData class for Jobs-plugin.
* <p>
* Registered to the plugin by JobsHook
*
* @author Rsl1122
* @see JobsHook
* @since 3.2.1
*/
public class JobsInspectJobTable extends PluginData {
/**
* Class Constructor, sets the parameters of the PluginData object.
*/
public JobsInspectJobTable() {
super("Jobs", "inspect_table");
super.setAnalysisOnly(false);
final String job = Html.FONT_AWESOME_ICON.parse("suitcase") + " Job";
final String level = Html.FONT_AWESOME_ICON.parse("plus") + " Level";
super.setPrefix(Html.TABLE_START_2.parse(job, level));
super.setSuffix(Html.TABLE_END.parse());
}
@Override
public String getHtmlReplaceValue(String modifierPrefix, UUID uuid) {
try {
List<JobsDAOData> playersJobs = Jobs.getDBManager().getDB().getAllJobs(null, uuid);
if (!playersJobs.isEmpty()) {
StringBuilder html = new StringBuilder();
for (JobsDAOData job : playersJobs) {
html.append(Html.TABLELINE_2.parse(job.getJobName(), job.getLevel()));
}
return parseContainer("", html.toString());
}
} catch (NullPointerException ignored) {
}
return parseContainer("", Html.TABLELINE_2.parse("No Jobs.", ""));
}
@Override
public Serializable getValue(UUID uuid) {
return -1;
}
}