Plan/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/QueriedTabData.java

70 lines
2.6 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.extension.implementation.storage.queries;
import com.djrapitops.plan.extension.implementation.TabInformation;
import com.djrapitops.plan.extension.implementation.results.ExtensionData;
import com.djrapitops.plan.extension.implementation.results.ExtensionTabData;
import com.djrapitops.plan.utilities.java.ThrowingSupplier;
import java.util.HashMap;
import java.util.Map;
/**
* Query utility for extracting Tabs.
*
* @author Rsl1122
*/
public class QueriedTabData {
private final Map<Integer, Map<String, ExtensionTabData.Builder>> byPluginID;
public QueriedTabData() {
byPluginID = new HashMap<>();
}
public <K extends Throwable> ExtensionTabData.Builder getTab(int pluginID, String tabName, ThrowingSupplier<TabInformation, K> newDefault) throws K {
Map<String, ExtensionTabData.Builder> byTabName = byPluginID.getOrDefault(pluginID, new HashMap<>());
ExtensionTabData.Builder tab = byTabName.get(tabName);
if (tab == null) {
tab = new ExtensionTabData.Builder(newDefault.get());
}
byTabName.put(tabName, tab);
byPluginID.put(pluginID, byTabName);
return tab;
}
public Map<Integer, ExtensionData.Builder> toExtensionDataByPluginID() {
Map<Integer, ExtensionData.Builder> dataByPluginID = new HashMap<>();
for (Map.Entry<Integer, Map<String, ExtensionTabData.Builder>> entry : byPluginID.entrySet()) {
Integer pluginID = entry.getKey();
ExtensionData.Builder data = dataByPluginID.get(pluginID);
if (data == null) {
data = new ExtensionData.Builder(pluginID);
}
for (ExtensionTabData.Builder tabData : entry.getValue().values()) {
data.addTab(tabData.build());
}
dataByPluginID.put(pluginID, data);
}
return dataByPluginID;
}
}