/*
* #%L
* gitools-core
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.datasources.idmapper;
import java.util.*;
public class MappingData {
private final MappingNode srcNode;
private MappingNode dstNode;
private final Set<String> dstIds;
private final Map<String, Set<String>> map;
public MappingData(String srcId, String dstId) {
this.srcNode = new StringMappingNode(srcId);
this.dstNode = new StringMappingNode(dstId);
dstIds = new HashSet<>();
map = new HashMap<>();
}
public MappingNode getSrcNode() {
return srcNode;
}
public MappingNode getDstNode() {
return dstNode;
}
public void setDstNode(MappingNode dstNode) {
this.dstNode = dstNode;
}
public Set<String> getSrcIds() {
return map.keySet();
}
public Set<String> getDstIds() {
return dstIds;
}
public Set<String> get(String srcId) {
Set<String> d = map.get(srcId);
if (d == null) {
d = new HashSet<>();
}
return d;
}
public void put(String srcId, String dstId) {
Set<String> ids = map.get(srcId);
if (ids == null) {
ids = new HashSet<>();
map.put(srcId, ids);
}
dstIds.add(dstId);
ids.add(dstId);
}
void clearDstIds() {
dstIds.clear();
}
public void set(String srcId, Set<String> dids) {
map.put(srcId, dids);
dstIds.addAll(dids);
}
public Map<String, Set<String>> getMap() {
return map;
}
public void map(Map<String, Set<String>> dstmap) {
clearDstIds();
for (Map.Entry<String, Set<String>> e : map.entrySet()) {
Set<String> dset = new HashSet<>();
for (String sname : e.getValue()) {
Set<String> dnames = dstmap.get(sname);
if (dnames != null) {
dset.addAll(dnames);
}
}
set(e.getKey(), dset);
}
}
void clear() {
dstIds.clear();
map.clear();
}
public boolean isEmpty() {
return map.keySet().isEmpty();
}
public void identity(Set<String> set) {
clear();
for (String id : set)
put(id, id);
}
public void removeEmptyKeys() {
List<String> rm = new ArrayList<>();
for (Map.Entry<String, Set<String>> e : map.entrySet())
if (e.getValue().isEmpty()) {
rm.add(e.getKey());
}
for (String k : rm)
map.remove(k);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(map.size()).append(" keys, ");
sb.append(dstIds.size()).append(" distinct values. ");
sb.append(map.toString());
return sb.toString();
}
}