package cuchaz.enigma.convert; import java.util.Collection; import java.util.Set; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import cuchaz.enigma.mapping.ClassEntry; import cuchaz.enigma.mapping.FieldEntry; public class FieldMatches { private BiMap m_matches; private Multimap m_unmatchedSourceFields; private Multimap m_unmatchedDestFields; public FieldMatches() { m_matches = HashBiMap.create(); m_unmatchedSourceFields = HashMultimap.create(); m_unmatchedDestFields = HashMultimap.create(); } public void addMatch(FieldEntry srcField, FieldEntry destField) { m_matches.put(srcField, destField); } public void addUnmatchedSourceField(FieldEntry fieldEntry) { m_unmatchedSourceFields.put(fieldEntry.getClassEntry(), fieldEntry); } public void addUnmatchedSourceFields(Iterable fieldEntries) { for (FieldEntry fieldEntry : fieldEntries) { addUnmatchedSourceField(fieldEntry); } } public void addUnmatchedDestField(FieldEntry fieldEntry) { m_unmatchedDestFields.put(fieldEntry.getClassEntry(), fieldEntry); } public void addUnmatchedDestFields(Iterable fieldEntries) { for (FieldEntry fieldEntry : fieldEntries) { addUnmatchedDestField(fieldEntry); } } public Set getSourceClassesWithUnmatchedFields() { return m_unmatchedSourceFields.keySet(); } public Collection getUnmatchedSourceFields() { return m_unmatchedSourceFields.values(); } public Collection getUnmatchedSourceFields(ClassEntry sourceClass) { return m_unmatchedSourceFields.get(sourceClass); } public Collection getUnmatchedDestFields() { return m_unmatchedDestFields.values(); } public Collection getUnmatchedDestFields(ClassEntry sourceClass) { return m_unmatchedDestFields.get(sourceClass); } public BiMap matches() { return m_matches; } public boolean isDestMatched(FieldEntry destFieldEntry) { return m_matches.containsValue(destFieldEntry); } public void makeMatch(FieldEntry sourceField, FieldEntry destField) { m_unmatchedSourceFields.remove(sourceField.getClassEntry(), sourceField); m_unmatchedDestFields.remove(destField.getClassEntry(), destField); m_matches.put(sourceField, destField); } }