/**
*
*/
package fr.inria.soctrace.framesoc.ui.piechart.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*/
public class MergedItems {
// merged item label -> merged item
private Map<String, MergedItem> mergedItems = new HashMap<>();
// base item label -> merged item
private Map<String, MergedItem> label2item = new HashMap<>();
public boolean isEmpty() {
return mergedItems.isEmpty();
}
public List<MergedItem> getMergedItems() {
return new ArrayList<>(mergedItems.values());
}
public void addMergedItem(MergedItem item) {
// remove the base items of this new merged item from any other old merged item
for (String baseItem : item.getBaseItems()) {
if (label2item.containsKey(baseItem)) {
if (label2item.containsKey(baseItem)) {
label2item.get(baseItem).removeBaseItem(baseItem);
}
}
}
// remove a merged item with the same name (if any)
removeMergedItem(item.getLabel());
// add the merged item
mergedItems.put(item.getLabel(), item);
for (String baseItem : item.getBaseItems()) {
label2item.put(baseItem, item);
}
}
public void removeMergedItems(List<String> items) {
for (String item : items) {
removeMergedItem(item);
}
}
public void removeMergedItem(String item) {
if (!mergedItems.containsKey(item)) {
return;
}
List<String> baseItems = mergedItems.get(item).getBaseItems();
for (String baseItem : baseItems) {
label2item.remove(baseItem);
}
// dispose the color
mergedItems.get(item).getColor().dispose();
mergedItems.remove(item);
}
public void removeAllMergedItems() {
mergedItems = new HashMap<>();
label2item = new HashMap<>();
}
public boolean isPartOfMergedItem(String baseItem) {
return label2item.containsKey(baseItem);
}
public boolean isMergedItem(String label) {
return mergedItems.containsKey(label);
}
}