From c4970cc4addedd4565cf8c3ed9ea92b6a4487e0c Mon Sep 17 00:00:00 2001 From: Thomas Guillemard Date: Fri, 12 Aug 2016 19:23:54 +0200 Subject: Implement Enigma directory format (#1) Others changes: ~ Rework File menu ~ Force UTF-8 for all I/O operations ~ Enigma now detect the original file format and use the correct one when you save a mapping--- .../cuchaz/enigma/mapping/MappingsJsonWriter.java | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/main/java/cuchaz/enigma/mapping/MappingsJsonWriter.java (limited to 'src/main/java/cuchaz/enigma/mapping/MappingsJsonWriter.java') diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsJsonWriter.java b/src/main/java/cuchaz/enigma/mapping/MappingsJsonWriter.java new file mode 100644 index 0000000..db95322 --- /dev/null +++ b/src/main/java/cuchaz/enigma/mapping/MappingsJsonWriter.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2015 Jeff Martin. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser General Public + * License v3.0 which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl.html + *
+ * Contributors:
+ * Jeff Martin - initial API and implementation
+ ******************************************************************************/
+package cuchaz.enigma.mapping;
+
+import com.google.common.base.Charsets;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import cuchaz.enigma.json.*;
+
+public class MappingsJsonWriter {
+
+ public void write(File file, Mappings mappings) throws IOException {
+ if (!file.isDirectory()) {
+ return;
+ }
+
+ String[] entries = file.list();
+ for (String s : entries) {
+ File currentFile = new File(file.getPath(), s);
+ deleteDirectory(currentFile);
+ }
+
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ for (ClassMapping classMapping : sorted(mappings.classes())) {
+ if (classMapping.getDeobfName() != null && !classMapping.getDeobfName().equalsIgnoreCase("") && !classMapping.getDeobfName().equalsIgnoreCase("null")) {
+ JsonClass jsonClass = new JsonClass(classMapping.getObfSimpleName(), classMapping.getDeobfName());
+ write(jsonClass, classMapping);
+
+ File f = new File(file, jsonClass.getName() + ".json");
+ f.getParentFile().mkdirs();
+ f.createNewFile();
+ PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(f), Charsets.UTF_8));
+ writer.write(gson.toJson(jsonClass));
+ writer.close();
+ }
+ }
+ }
+
+ private void write(JsonClass jsonClass, ClassMapping classMapping) {
+ for (ClassMapping innerClassMapping : sorted(classMapping.innerClasses())) {
+ JsonClass innerClass = new JsonClass(classMapping.getObfSimpleName() + "$" + innerClassMapping.getObfSimpleName().replace("nome/", ""), innerClassMapping.getDeobfName());
+ write(innerClass, innerClassMapping);
+ jsonClass.addInnerClass(innerClass);
+ }
+
+ for (FieldMapping fieldMapping : sorted(classMapping.fields())) {
+ jsonClass.addField(new JsonField(fieldMapping.getObfName(), fieldMapping.getDeobfName(), fieldMapping.getObfType().toString()));
+ }
+
+ for (MethodMapping methodMapping : sorted(classMapping.methods())) {
+ List