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

101 lines
3.7 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.ElementOrder;
import com.djrapitops.plan.extension.icon.Color;
import com.djrapitops.plan.extension.icon.Icon;
import com.djrapitops.plan.extension.implementation.TabInformation;
import com.djrapitops.plan.extension.implementation.results.ExtensionTabData;
import com.djrapitops.plan.extension.implementation.results.ExtensionTableData;
import com.djrapitops.plan.extension.table.Table;
import com.djrapitops.plan.extension.table.TableAccessor;
import java.util.HashMap;
import java.util.Map;
/**
* Query utility for extracting Tables.
*
* @author Rsl1122
*/
public class QueriedTables {
// Map: <Plugin ID - <Table ID - Table.Factory>>
private final Map<Integer, Map<Integer, Table.Factory>> byPluginID;
public QueriedTables() {
byPluginID = new HashMap<>();
}
public boolean contains(int pluginID, int tableID) {
Map<Integer, Table.Factory> byTableID = byPluginID.get(pluginID);
return byTableID != null && byTableID.containsKey(tableID);
}
public void put(int pluginID, int tableID, Table.Factory table) {
Map<Integer, Table.Factory> byTableID = byPluginID.getOrDefault(pluginID, new HashMap<>());
byTableID.put(tableID, table);
byPluginID.put(pluginID, byTableID);
}
public void addRow(int pluginID, int tableID, Object... row) {
if (row.length <= 0) return;
Map<Integer, Table.Factory> byTableID = byPluginID.get(pluginID);
if (byTableID == null) return;
Table.Factory table = byTableID.get(tableID);
if (table == null) return;
table.addRow(row);
}
public QueriedTabData toQueriedTabs() {
QueriedTabData tabData = new QueriedTabData();
for (Map.Entry<Integer, Map<Integer, Table.Factory>> entry : byPluginID.entrySet()) {
Integer pluginID = entry.getKey();
for (Table.Factory table : entry.getValue().values()) {
// Extra Table information
String tableName = TableAccessor.getTableName(table);
Color tableColor = TableAccessor.getColor(table);
// Extra tab information
String tabName = TableAccessor.getTabName(table);
ExtensionTabData.Builder tab = tabData.getTab(pluginID, tabName, () -> extractTabInformation(table));
tab.putTableData(new ExtensionTableData(
tableName, table.build(), tableColor
));
}
}
return tabData;
}
private TabInformation extractTabInformation(Table.Factory table) {
String tabName = TableAccessor.getTabName(table);
int tabPriority = TableAccessor.getTabPriority(table);
ElementOrder[] tabOrder = TableAccessor.getTabOrder(table);
Icon tabIcon = TableAccessor.getTabIcon(table);
return new TabInformation(tabName, tabIcon, tabOrder, tabPriority);
}
}