summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/convert
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/convert')
-rw-r--r--src/cuchaz/enigma/convert/FieldMatches.java69
-rw-r--r--src/cuchaz/enigma/convert/MatchesReader.java40
-rw-r--r--src/cuchaz/enigma/convert/MatchesWriter.java38
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
6import com.google.common.collect.BiMap; 6import com.google.common.collect.BiMap;
7import com.google.common.collect.HashBiMap; 7import com.google.common.collect.HashBiMap;
8import com.google.common.collect.Sets; 8import com.google.common.collect.HashMultimap;
9import com.google.common.collect.Multimap;
9 10
10import cuchaz.enigma.mapping.ClassEntry; 11import cuchaz.enigma.mapping.ClassEntry;
11import cuchaz.enigma.mapping.FieldEntry; 12import cuchaz.enigma.mapping.FieldEntry;
@@ -14,22 +15,70 @@ import cuchaz.enigma.mapping.FieldEntry;
14public class FieldMatches { 15public 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;
10import com.beust.jcommander.internal.Lists; 10import com.beust.jcommander.internal.Lists;
11 11
12import cuchaz.enigma.mapping.ClassEntry; 12import cuchaz.enigma.mapping.ClassEntry;
13import cuchaz.enigma.mapping.FieldEntry;
14import cuchaz.enigma.mapping.Type;
13 15
14 16
15public class MatchesReader { 17public 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;
3import java.io.File; 3import java.io.File;
4import java.io.FileWriter; 4import java.io.FileWriter;
5import java.io.IOException; 5import java.io.IOException;
6import java.util.Map;
6 7
7import cuchaz.enigma.mapping.ClassEntry; 8import cuchaz.enigma.mapping.ClassEntry;
9import cuchaz.enigma.mapping.FieldEntry;
8 10
9 11
10public class MatchesWriter { 12public 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}