package net.obnoxint.mcdev.omclib.metrics;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
public final class MetricsGraph implements Serializable {
private static final long serialVersionUID = -3445888940253779398L;
public static final String DEFAULT = "Default";
private final String name;
private final Map<String, MetricsPlotter> plotters = new HashMap<>();
MetricsGraph(final MetricsGraph graph) {
this.name = graph.name;
for (final String id : graph.plotters.keySet()) {
this.plotters.put(id, new MetricsPlotter(graph.plotters.get(id)));
}
}
MetricsGraph(final String name) {
this.name = name;
}
public boolean addPlotter(final MetricsPlotter plotter) {
final String id = plotter.getId();
if (!plotters.containsKey(id)) {
plotters.put(id, plotter);
return true;
}
return false;
}
@Override
public boolean equals(final Object obj) {
if (obj != null) {
if (obj instanceof String) {
return ((String) obj).equals(name);
} else if (obj instanceof MetricsGraph) {
return ((MetricsGraph) obj).name.equals(name);
}
}
return false;
}
public MetricsPlotter getDefaultPlotter() {
return getPlotter(MetricsPlotter.DEFAULT);
}
public String getName() {
return name;
}
public MetricsPlotter getPlotter(String id) {
if (id != null && !id.trim().isEmpty()) {
id = id.trim();
if (plotters.containsKey(id)) {
return new MetricsPlotter(plotters.get(id));
} else {
final MetricsPlotter plotter = new MetricsPlotter(id);
plotters.put(id, plotter);
return plotter;
}
}
return null;
}
public String[] getPlotterIds() {
final int l = plotters.size();
return plotters.keySet().toArray(new String[l]);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((plotters == null) ? 0 : plotters.hashCode());
return result;
}
public boolean removePlotter(final MetricsPlotter plotter) {
return plotters.remove(plotter.getId()) != null;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder(name + "=");
final String[] p = getPlotterIds();
for (int i = 0; i < p.length; i++) {
if (i == 0) {
sb.append("[");
}
sb.append(getPlotter(p[i]).toString());
if (i == p.length - 1) {
sb.append("]");
} else {
sb.append(";");
}
}
return sb.toString();
}
public boolean updatePlotter(final MetricsPlotter plotter) {
final boolean r = removePlotter(plotter);
if (r) {
plotters.put(plotter.getId(), new MetricsPlotter(plotter));
}
return r;
}
}