diff options
Diffstat (limited to 'src/cuchaz/enigma/convert')
| -rw-r--r-- | src/cuchaz/enigma/convert/FieldMatches.java | 69 | ||||
| -rw-r--r-- | src/cuchaz/enigma/convert/MatchesReader.java | 40 | ||||
| -rw-r--r-- | src/cuchaz/enigma/convert/MatchesWriter.java | 38 |
3 files changed, 137 insertions, 10 deletions
diff --git a/src/cuchaz/enigma/convert/FieldMatches.java b/src/cuchaz/enigma/convert/FieldMatches.java index f78a8f5..6335974 100644 --- a/src/cuchaz/enigma/convert/FieldMatches.java +++ b/src/cuchaz/enigma/convert/FieldMatches.java | |||
| @@ -5,7 +5,8 @@ import java.util.Set; | |||
| 5 | 5 | ||
| 6 | import com.google.common.collect.BiMap; | 6 | import com.google.common.collect.BiMap; |
| 7 | import com.google.common.collect.HashBiMap; | 7 | import com.google.common.collect.HashBiMap; |
| 8 | import com.google.common.collect.Sets; | 8 | import com.google.common.collect.HashMultimap; |
| 9 | import com.google.common.collect.Multimap; | ||
| 9 | 10 | ||
| 10 | import cuchaz.enigma.mapping.ClassEntry; | 11 | import cuchaz.enigma.mapping.ClassEntry; |
| 11 | import cuchaz.enigma.mapping.FieldEntry; | 12 | import cuchaz.enigma.mapping.FieldEntry; |
| @@ -14,22 +15,70 @@ import cuchaz.enigma.mapping.FieldEntry; | |||
| 14 | public class FieldMatches { | 15 | public class FieldMatches { |
| 15 | 16 | ||
| 16 | private BiMap<FieldEntry,FieldEntry> m_matches; | 17 | private BiMap<FieldEntry,FieldEntry> m_matches; |
| 17 | private Set<FieldEntry> m_unmatchedSourceFields; | 18 | private Multimap<ClassEntry,FieldEntry> m_unmatchedSourceFields; |
| 19 | private Multimap<ClassEntry,FieldEntry> m_unmatchedDestFields; | ||
| 18 | 20 | ||
| 19 | public FieldMatches() { | 21 | public FieldMatches() { |
| 20 | m_matches = HashBiMap.create(); | 22 | m_matches = HashBiMap.create(); |
| 21 | m_unmatchedSourceFields = Sets.newHashSet(); | 23 | m_unmatchedSourceFields = HashMultimap.create(); |
| 24 | m_unmatchedDestFields = HashMultimap.create(); | ||
| 22 | } | 25 | } |
| 23 | 26 | ||
| 24 | public void addUnmatchedSourceFields(Set<FieldEntry> fieldEntries) { | 27 | public void addMatch(FieldEntry srcField, FieldEntry destField) { |
| 25 | m_unmatchedSourceFields.addAll(fieldEntries); | 28 | m_matches.put(srcField, destField); |
| 26 | } | 29 | } |
| 27 | 30 | ||
| 28 | public Collection<ClassEntry> getSourceClassesWithUnmatchedFields() { | 31 | public void addUnmatchedSourceField(FieldEntry fieldEntry) { |
| 29 | Set<ClassEntry> classEntries = Sets.newHashSet(); | 32 | m_unmatchedSourceFields.put(fieldEntry.getClassEntry(), fieldEntry); |
| 30 | for (FieldEntry fieldEntry : m_unmatchedSourceFields) { | 33 | } |
| 31 | classEntries.add(fieldEntry.getClassEntry()); | 34 | |
| 35 | public void addUnmatchedSourceFields(Iterable<FieldEntry> fieldEntries) { | ||
| 36 | for (FieldEntry fieldEntry : fieldEntries) { | ||
| 37 | addUnmatchedSourceField(fieldEntry); | ||
| 38 | } | ||
| 39 | } | ||
| 40 | |||
| 41 | public void addUnmatchedDestField(FieldEntry fieldEntry) { | ||
| 42 | m_unmatchedDestFields.put(fieldEntry.getClassEntry(), fieldEntry); | ||
| 43 | } | ||
| 44 | |||
| 45 | public void addUnmatchedDestFields(Iterable<FieldEntry> fieldEntries) { | ||
| 46 | for (FieldEntry fieldEntry : fieldEntries) { | ||
| 47 | addUnmatchedDestField(fieldEntry); | ||
| 32 | } | 48 | } |
| 33 | return classEntries; | 49 | } |
| 50 | |||
| 51 | public Set<ClassEntry> getSourceClassesWithUnmatchedFields() { | ||
| 52 | return m_unmatchedSourceFields.keySet(); | ||
| 53 | } | ||
| 54 | |||
| 55 | public Collection<FieldEntry> getUnmatchedSourceFields() { | ||
| 56 | return m_unmatchedSourceFields.values(); | ||
| 57 | } | ||
| 58 | |||
| 59 | public Collection<FieldEntry> getUnmatchedSourceFields(ClassEntry sourceClass) { | ||
| 60 | return m_unmatchedSourceFields.get(sourceClass); | ||
| 61 | } | ||
| 62 | |||
| 63 | public Collection<FieldEntry> getUnmatchedDestFields() { | ||
| 64 | return m_unmatchedDestFields.values(); | ||
| 65 | } | ||
| 66 | |||
| 67 | public Collection<FieldEntry> getUnmatchedDestFields(ClassEntry sourceClass) { | ||
| 68 | return m_unmatchedDestFields.get(sourceClass); | ||
| 69 | } | ||
| 70 | |||
| 71 | public BiMap<FieldEntry,FieldEntry> matches() { | ||
| 72 | return m_matches; | ||
| 73 | } | ||
| 74 | |||
| 75 | public boolean isDestMatched(FieldEntry destFieldEntry) { | ||
| 76 | return m_matches.containsValue(destFieldEntry); | ||
| 77 | } | ||
| 78 | |||
| 79 | public void makeMatch(FieldEntry sourceField, FieldEntry destField) { | ||
| 80 | m_unmatchedSourceFields.remove(sourceField.getClassEntry(), sourceField); | ||
| 81 | m_unmatchedDestFields.remove(destField.getClassEntry(), destField); | ||
| 82 | m_matches.put(sourceField, destField); | ||
| 34 | } | 83 | } |
| 35 | } | 84 | } |
diff --git a/src/cuchaz/enigma/convert/MatchesReader.java b/src/cuchaz/enigma/convert/MatchesReader.java index b43535c..1dd042d 100644 --- a/src/cuchaz/enigma/convert/MatchesReader.java +++ b/src/cuchaz/enigma/convert/MatchesReader.java | |||
| @@ -10,6 +10,8 @@ import java.util.List; | |||
| 10 | import com.beust.jcommander.internal.Lists; | 10 | import com.beust.jcommander.internal.Lists; |
| 11 | 11 | ||
| 12 | import cuchaz.enigma.mapping.ClassEntry; | 12 | import cuchaz.enigma.mapping.ClassEntry; |
| 13 | import cuchaz.enigma.mapping.FieldEntry; | ||
| 14 | import cuchaz.enigma.mapping.Type; | ||
| 13 | 15 | ||
| 14 | 16 | ||
| 15 | public class MatchesReader { | 17 | public class MatchesReader { |
| @@ -42,4 +44,42 @@ public class MatchesReader { | |||
| 42 | } | 44 | } |
| 43 | return entries; | 45 | return entries; |
| 44 | } | 46 | } |
| 47 | |||
| 48 | public static FieldMatches readFields(File file) | ||
| 49 | throws IOException { | ||
| 50 | try (BufferedReader in = new BufferedReader(new FileReader(file))) { | ||
| 51 | FieldMatches matches = new FieldMatches(); | ||
| 52 | String line = null; | ||
| 53 | while ((line = in.readLine()) != null) { | ||
| 54 | readFieldMatch(matches, line); | ||
| 55 | } | ||
| 56 | return matches; | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | private static void readFieldMatch(FieldMatches matches, String line) { | ||
| 61 | String[] parts = line.split(":", 2); | ||
| 62 | FieldEntry source = readField(parts[0]); | ||
| 63 | FieldEntry dest = readField(parts[1]); | ||
| 64 | if (source != null && dest != null) { | ||
| 65 | matches.addMatch(source, dest); | ||
| 66 | } else if (source != null) { | ||
| 67 | matches.addUnmatchedSourceField(source); | ||
| 68 | } else if (dest != null) { | ||
| 69 | matches.addUnmatchedDestField(dest); | ||
| 70 | } | ||
| 71 | } | ||
| 72 | |||
| 73 | private static FieldEntry readField(String in) { | ||
| 74 | if (in.length() <= 0) { | ||
| 75 | return null; | ||
| 76 | } | ||
| 77 | String[] parts = in.split(" "); | ||
| 78 | assert(parts.length == 3); | ||
| 79 | return new FieldEntry( | ||
| 80 | new ClassEntry(parts[0]), | ||
| 81 | parts[1], | ||
| 82 | new Type(parts[2]) | ||
| 83 | ); | ||
| 84 | } | ||
| 45 | } | 85 | } |
diff --git a/src/cuchaz/enigma/convert/MatchesWriter.java b/src/cuchaz/enigma/convert/MatchesWriter.java index 6658e2a..6e371bc 100644 --- a/src/cuchaz/enigma/convert/MatchesWriter.java +++ b/src/cuchaz/enigma/convert/MatchesWriter.java | |||
| @@ -3,8 +3,10 @@ package cuchaz.enigma.convert; | |||
| 3 | import java.io.File; | 3 | import java.io.File; |
| 4 | import java.io.FileWriter; | 4 | import java.io.FileWriter; |
| 5 | import java.io.IOException; | 5 | import java.io.IOException; |
| 6 | import java.util.Map; | ||
| 6 | 7 | ||
| 7 | import cuchaz.enigma.mapping.ClassEntry; | 8 | import cuchaz.enigma.mapping.ClassEntry; |
| 9 | import cuchaz.enigma.mapping.FieldEntry; | ||
| 8 | 10 | ||
| 9 | 11 | ||
| 10 | public class MatchesWriter { | 12 | public class MatchesWriter { |
| @@ -38,4 +40,40 @@ public class MatchesWriter { | |||
| 38 | out.write(entry.toString()); | 40 | out.write(entry.toString()); |
| 39 | } | 41 | } |
| 40 | } | 42 | } |
| 43 | |||
| 44 | public static void writeFields(FieldMatches fieldMatches, File file) | ||
| 45 | throws IOException { | ||
| 46 | try (FileWriter out = new FileWriter(file)) { | ||
| 47 | for (Map.Entry<FieldEntry,FieldEntry> match : fieldMatches.matches().entrySet()) { | ||
| 48 | writeFieldMatch(out, match.getKey(), match.getValue()); | ||
| 49 | } | ||
| 50 | for (FieldEntry fieldEntry : fieldMatches.getUnmatchedSourceFields()) { | ||
| 51 | writeFieldMatch(out, fieldEntry, null); | ||
| 52 | } | ||
| 53 | for (FieldEntry fieldEntry : fieldMatches.getUnmatchedDestFields()) { | ||
| 54 | writeFieldMatch(out, null, fieldEntry); | ||
| 55 | } | ||
| 56 | } | ||
| 57 | } | ||
| 58 | |||
| 59 | private static void writeFieldMatch(FileWriter out, FieldEntry source, FieldEntry dest) | ||
| 60 | throws IOException { | ||
| 61 | if (source != null) { | ||
| 62 | writeField(out, source); | ||
| 63 | } | ||
| 64 | out.write(":"); | ||
| 65 | if (dest != null) { | ||
| 66 | writeField(out, dest); | ||
| 67 | } | ||
| 68 | out.write("\n"); | ||
| 69 | } | ||
| 70 | |||
| 71 | private static void writeField(FileWriter out, FieldEntry fieldEntry) | ||
| 72 | throws IOException { | ||
| 73 | out.write(fieldEntry.getClassName()); | ||
| 74 | out.write(" "); | ||
| 75 | out.write(fieldEntry.getName()); | ||
| 76 | out.write(" "); | ||
| 77 | out.write(fieldEntry.getType().toString()); | ||
| 78 | } | ||
| 41 | } | 79 | } |