From 0f47403d0220757fed189b76e2071e25b1025cb8 Mon Sep 17 00:00:00 2001 From: Runemoro Date: Wed, 3 Jun 2020 13:39:42 -0400 Subject: Split GUI code to separate module (#242) * Split into modules * Post merge compile fixes Co-authored-by: modmuss50 --- .../enigma/command/CheckMappingsCommand.java | 77 ----------- src/main/java/cuchaz/enigma/command/Command.java | 154 --------------------- .../enigma/command/ComposeMappingsCommand.java | 41 ------ .../enigma/command/ConvertMappingsCommand.java | 39 ------ .../cuchaz/enigma/command/DecompileCommand.java | 54 -------- .../cuchaz/enigma/command/DeobfuscateCommand.java | 37 ----- .../enigma/command/InvertMappingsCommand.java | 40 ------ .../command/MapSpecializedMethodsCommand.java | 69 --------- .../cuchaz/enigma/command/MappingCommandsUtil.java | 148 -------------------- 9 files changed, 659 deletions(-) delete mode 100644 src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java delete mode 100644 src/main/java/cuchaz/enigma/command/Command.java delete mode 100644 src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java delete mode 100644 src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java delete mode 100644 src/main/java/cuchaz/enigma/command/DecompileCommand.java delete mode 100644 src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java delete mode 100644 src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java delete mode 100644 src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java delete mode 100644 src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java (limited to 'src/main/java/cuchaz/enigma/command') diff --git a/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java b/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java deleted file mode 100644 index 9d238e3..0000000 --- a/src/main/java/cuchaz/enigma/command/CheckMappingsCommand.java +++ /dev/null @@ -1,77 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.Enigma; -import cuchaz.enigma.EnigmaProject; -import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.serde.MappingFormat; -import cuchaz.enigma.translation.mapping.tree.EntryTree; -import cuchaz.enigma.translation.representation.entry.ClassEntry; - -import java.nio.file.Path; -import java.util.Set; -import java.util.stream.Collectors; - -public class CheckMappingsCommand extends Command { - - public CheckMappingsCommand() { - super("checkmappings"); - } - - @Override - public String getUsage() { - return " "; - } - - @Override - public boolean isValidArgument(int length) { - return length == 2; - } - - @Override - public void run(String... args) throws Exception { - Path fileJarIn = getReadableFile(getArg(args, 0, "in jar", true)).toPath(); - Path fileMappings = getReadablePath(getArg(args, 1, "mappings file", true)); - - Enigma enigma = Enigma.create(); - - System.out.println("Reading JAR..."); - - EnigmaProject project = enigma.openJar(fileJarIn, ProgressListener.none()); - - System.out.println("Reading mappings..."); - - MappingFormat format = chooseEnigmaFormat(fileMappings); - MappingSaveParameters saveParameters = enigma.getProfile().getMappingSaveParameters(); - - EntryTree mappings = format.read(fileMappings, ProgressListener.none(), saveParameters); - project.setMappings(mappings); - - JarIndex idx = project.getJarIndex(); - - boolean error = false; - - for (Set partition : idx.getPackageVisibilityIndex().getPartitions()) { - long packages = partition.stream() - .map(project.getMapper()::deobfuscate) - .map(ClassEntry::getPackageName) - .distinct() - .count(); - if (packages > 1) { - error = true; - System.err.println("ERROR: Must be in one package:\n" + partition.stream() - .map(project.getMapper()::deobfuscate) - .map(ClassEntry::toString) - .sorted() - .collect(Collectors.joining("\n")) - ); - } - } - - if (error) { - throw new IllegalStateException("Errors in package visibility detected, see SysErr above"); - } - } -} diff --git a/src/main/java/cuchaz/enigma/command/Command.java b/src/main/java/cuchaz/enigma/command/Command.java deleted file mode 100644 index 09dd321..0000000 --- a/src/main/java/cuchaz/enigma/command/Command.java +++ /dev/null @@ -1,154 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.Enigma; -import cuchaz.enigma.EnigmaProject; -import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.serde.MappingFormat; -import cuchaz.enigma.translation.mapping.tree.EntryTree; - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -import com.google.common.io.MoreFiles; - -public abstract class Command { - public final String name; - - protected Command(String name) { - this.name = name; - } - - public abstract String getUsage(); - - public abstract boolean isValidArgument(int length); - - public abstract void run(String... args) throws Exception; - - protected static EnigmaProject openProject(Path fileJarIn, Path fileMappings) throws Exception { - ProgressListener progress = new ConsoleProgressListener(); - - Enigma enigma = Enigma.create(); - - System.out.println("Reading jar..."); - EnigmaProject project = enigma.openJar(fileJarIn, progress); - - if (fileMappings != null) { - System.out.println("Reading mappings..."); - - MappingSaveParameters saveParameters = enigma.getProfile().getMappingSaveParameters(); - EntryTree mappings = chooseEnigmaFormat(fileMappings).read(fileMappings, progress, saveParameters); - - project.setMappings(mappings); - } - - return project; - } - - protected static MappingFormat chooseEnigmaFormat(Path path) { - if (Files.isDirectory(path)) { - return MappingFormat.ENIGMA_DIRECTORY; - } else if ("zip".equalsIgnoreCase(MoreFiles.getFileExtension(path))) { - return MappingFormat.ENIGMA_ZIP; - } else { - return MappingFormat.ENIGMA_FILE; - } - } - - protected static File getWritableFile(String path) { - if (path == null) { - return null; - } - File file = new File(path).getAbsoluteFile(); - File dir = file.getParentFile(); - if (dir == null) { - throw new IllegalArgumentException("Cannot write file: " + path); - } - // quick fix to avoid stupid stuff in Gradle code - if (!dir.isDirectory()) { - dir.mkdirs(); - } - return file; - } - - protected static File getWritableFolder(String path) { - if (path == null) { - return null; - } - File dir = new File(path).getAbsoluteFile(); - if (!dir.exists()) { - throw new IllegalArgumentException("Cannot write to folder: " + dir); - } - return dir; - } - - protected static File getReadableFile(String path) { - if (path == null) { - return null; - } - File file = new File(path).getAbsoluteFile(); - if (!file.exists()) { - throw new IllegalArgumentException("Cannot find file: " + file.getAbsolutePath()); - } - return file; - } - - protected static Path getReadablePath(String path) { - if (path == null) { - return null; - } - Path file = Paths.get(path).toAbsolutePath(); - if (!Files.exists(file)) { - throw new IllegalArgumentException("Cannot find file: " + file.toString()); - } - return file; - } - - protected static String getArg(String[] args, int i, String name, boolean required) { - if (i >= args.length) { - if (required) { - throw new IllegalArgumentException(name + " is required"); - } else { - return null; - } - } - return args[i]; - } - - public static class ConsoleProgressListener implements ProgressListener { - - private static final int ReportTime = 5000; // 5s - - private int totalWork; - private long startTime; - private long lastReportTime; - - @Override - public void init(int totalWork, String title) { - this.totalWork = totalWork; - this.startTime = System.currentTimeMillis(); - this.lastReportTime = this.startTime; - System.out.println(title); - } - - @Override - public void step(int numDone, String message) { - long now = System.currentTimeMillis(); - boolean isLastUpdate = numDone == this.totalWork; - boolean shouldReport = isLastUpdate || now - this.lastReportTime > ReportTime; - - if (shouldReport) { - int percent = numDone * 100 / this.totalWork; - System.out.println(String.format("\tProgress: %3d%%", percent)); - this.lastReportTime = now; - } - if (isLastUpdate) { - double elapsedSeconds = (now - this.startTime) / 1000.0; - System.out.println(String.format("Finished in %.1f seconds", elapsedSeconds)); - } - } - } -} diff --git a/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java b/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java deleted file mode 100644 index f57f1fa..0000000 --- a/src/main/java/cuchaz/enigma/command/ComposeMappingsCommand.java +++ /dev/null @@ -1,41 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.throwables.MappingParseException; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.tree.EntryTree; -import cuchaz.enigma.utils.Utils; - -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; - -public class ComposeMappingsCommand extends Command { - public ComposeMappingsCommand() { - super("compose-mappings"); - } - - @Override - public String getUsage() { - return " "; - } - - @Override - public boolean isValidArgument(int length) { - return length == 7; - } - - @Override - public void run(String... args) throws IOException, MappingParseException { - MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF); - - EntryTree left = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters); - EntryTree right = MappingCommandsUtil.read(args[2], Paths.get(args[3]), saveParameters); - EntryTree result = MappingCommandsUtil.compose(left, right, args[6].equals("left") || args[6].equals("both"), args[6].equals("right") || args[6].equals("both")); - - Path output = Paths.get(args[5]); - Utils.delete(output); - MappingCommandsUtil.write(result, args[4], output, saveParameters); - } -} diff --git a/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java b/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java deleted file mode 100644 index 689df02..0000000 --- a/src/main/java/cuchaz/enigma/command/ConvertMappingsCommand.java +++ /dev/null @@ -1,39 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.throwables.MappingParseException; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.tree.EntryTree; -import cuchaz.enigma.utils.Utils; - -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; - -public class ConvertMappingsCommand extends Command { - public ConvertMappingsCommand() { - super("convert-mappings"); - } - - @Override - public String getUsage() { - return " "; - } - - @Override - public boolean isValidArgument(int length) { - return length == 4; - } - - @Override - public void run(String... args) throws IOException, MappingParseException { - MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF); - - EntryTree mappings = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters); - - Path output = Paths.get(args[3]); - Utils.delete(output); - MappingCommandsUtil.write(mappings, args[2], output, saveParameters); - } -} diff --git a/src/main/java/cuchaz/enigma/command/DecompileCommand.java b/src/main/java/cuchaz/enigma/command/DecompileCommand.java deleted file mode 100644 index 3d15dac..0000000 --- a/src/main/java/cuchaz/enigma/command/DecompileCommand.java +++ /dev/null @@ -1,54 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.EnigmaProject; -import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.source.DecompilerService; -import cuchaz.enigma.source.Decompilers; - -import java.lang.reflect.Field; -import java.nio.file.Path; -import java.util.Locale; - -public class DecompileCommand extends Command { - - public DecompileCommand() { - super("decompile"); - } - - @Override - public String getUsage() { - return " []"; - } - - @Override - public boolean isValidArgument(int length) { - return length == 2 || length == 3; - } - - @Override - public void run(String... args) throws Exception { - String decompilerName = getArg(args, 1, "decompiler", true); - Path fileJarIn = getReadableFile(getArg(args, 1, "in jar", true)).toPath(); - Path fileJarOut = getWritableFolder(getArg(args, 2, "out folder", true)).toPath(); - Path fileMappings = getReadablePath(getArg(args, 3, "mappings file", false)); - - DecompilerService decompilerService; - - try { - Field decompilerField = Decompilers.class.getField(decompilerName.toUpperCase(Locale.ROOT)); - decompilerService = (DecompilerService) decompilerField.get(null); - } catch (NoSuchFieldException e) { - System.err.println("Decompiler not found."); - return; - } - - EnigmaProject project = openProject(fileJarIn, fileMappings); - - ProgressListener progress = new ConsoleProgressListener(); - - EnigmaProject.JarExport jar = project.exportRemappedJar(progress); - EnigmaProject.SourceExport source = jar.decompile(progress, decompilerService); - - source.write(fileJarOut, progress); - } -} diff --git a/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java b/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java deleted file mode 100644 index b0d2a7d..0000000 --- a/src/main/java/cuchaz/enigma/command/DeobfuscateCommand.java +++ /dev/null @@ -1,37 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.EnigmaProject; -import cuchaz.enigma.ProgressListener; - -import java.nio.file.Path; - -public class DeobfuscateCommand extends Command { - - public DeobfuscateCommand() { - super("deobfuscate"); - } - - @Override - public String getUsage() { - return " []"; - } - - @Override - public boolean isValidArgument(int length) { - return length == 2 || length == 3; - } - - @Override - public void run(String... args) throws Exception { - Path fileJarIn = getReadablePath(getArg(args, 0, "in jar", true)); - Path fileJarOut = getWritableFile(getArg(args, 1, "out jar", true)).toPath(); - Path fileMappings = getReadablePath(getArg(args, 2, "mappings file", false)); - - EnigmaProject project = openProject(fileJarIn, fileMappings); - - ProgressListener progress = new ConsoleProgressListener(); - - EnigmaProject.JarExport jar = project.exportRemappedJar(progress); - jar.write(fileJarOut, progress); - } -} diff --git a/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java b/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java deleted file mode 100644 index cd11e2e..0000000 --- a/src/main/java/cuchaz/enigma/command/InvertMappingsCommand.java +++ /dev/null @@ -1,40 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.throwables.MappingParseException; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingFileNameFormat; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.tree.EntryTree; -import cuchaz.enigma.utils.Utils; - -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; - -public class InvertMappingsCommand extends Command { - public InvertMappingsCommand() { - super("invert-mappings"); - } - - @Override - public String getUsage() { - return " "; - } - - @Override - public boolean isValidArgument(int length) { - return length == 4; - } - - @Override - public void run(String... args) throws IOException, MappingParseException { - MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF); - - EntryTree source = MappingCommandsUtil.read(args[0], Paths.get(args[1]), saveParameters); - EntryTree result = MappingCommandsUtil.invert(source); - - Path output = Paths.get(args[3]); - Utils.delete(output); - MappingCommandsUtil.write(result, args[2], output, saveParameters); - } -} diff --git a/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java b/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java deleted file mode 100644 index eb8d5dc..0000000 --- a/src/main/java/cuchaz/enigma/command/MapSpecializedMethodsCommand.java +++ /dev/null @@ -1,69 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.analysis.ClassCache; -import cuchaz.enigma.analysis.index.BridgeMethodIndex; -import cuchaz.enigma.analysis.index.JarIndex; -import cuchaz.enigma.throwables.MappingParseException; -import cuchaz.enigma.translation.MappingTranslator; -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.mapping.*; -import cuchaz.enigma.translation.mapping.tree.EntryTree; -import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; -import cuchaz.enigma.translation.mapping.tree.HashEntryTree; -import cuchaz.enigma.translation.representation.entry.MethodEntry; -import cuchaz.enigma.utils.Utils; - -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Map; - -public class MapSpecializedMethodsCommand extends Command { - public MapSpecializedMethodsCommand() { - super("map-specialized-methods"); - } - - @Override - public String getUsage() { - return " "; - } - - @Override - public boolean isValidArgument(int length) { - return length == 5; - } - - @Override - public void run(String... args) throws IOException, MappingParseException { - run(Paths.get(args[0]), args[1], Paths.get(args[2]), args[3], Paths.get(args[4])); - } - - public static void run(Path jar, String sourceFormat, Path sourcePath, String resultFormat, Path output) throws IOException, MappingParseException { - MappingSaveParameters saveParameters = new MappingSaveParameters(MappingFileNameFormat.BY_DEOBF); - EntryTree source = MappingCommandsUtil.read(sourceFormat, sourcePath, saveParameters); - EntryTree result = new HashEntryTree<>(); - ClassCache classCache = ClassCache.of(jar); - JarIndex jarIndex = classCache.index(ProgressListener.none()); - BridgeMethodIndex bridgeMethodIndex = jarIndex.getBridgeMethodIndex(); - Translator translator = new MappingTranslator(source, jarIndex.getEntryResolver()); - - // Copy all non-specialized methods - for (EntryTreeNode node : source) { - if (!(node.getEntry() instanceof MethodEntry) || !bridgeMethodIndex.isSpecializedMethod((MethodEntry) node.getEntry())) { - result.insert(node.getEntry(), node.getValue()); - } - } - - // Add correct mappings for specialized methods - for (Map.Entry entry : bridgeMethodIndex.getBridgeToSpecialized().entrySet()) { - MethodEntry bridge = entry.getKey(); - MethodEntry specialized = entry.getValue(); - String name = translator.translate(bridge).getName(); - result.insert(specialized, new EntryMapping(name)); - } - - Utils.delete(output); - MappingCommandsUtil.write(result, resultFormat, output, saveParameters); - } -} diff --git a/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java b/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java deleted file mode 100644 index fc7afbc..0000000 --- a/src/main/java/cuchaz/enigma/command/MappingCommandsUtil.java +++ /dev/null @@ -1,148 +0,0 @@ -package cuchaz.enigma.command; - -import cuchaz.enigma.ProgressListener; -import cuchaz.enigma.throwables.MappingParseException; -import cuchaz.enigma.translation.MappingTranslator; -import cuchaz.enigma.translation.Translator; -import cuchaz.enigma.translation.mapping.EntryMapping; -import cuchaz.enigma.translation.mapping.MappingSaveParameters; -import cuchaz.enigma.translation.mapping.VoidEntryResolver; -import cuchaz.enigma.translation.mapping.serde.*; -import cuchaz.enigma.translation.mapping.tree.EntryTree; -import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; -import cuchaz.enigma.translation.mapping.tree.HashEntryTree; -import cuchaz.enigma.translation.representation.entry.ClassEntry; -import cuchaz.enigma.translation.representation.entry.Entry; -import cuchaz.enigma.translation.representation.entry.FieldEntry; -import cuchaz.enigma.translation.representation.entry.MethodEntry; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.HashSet; -import java.util.Set; - -public final class MappingCommandsUtil { - private MappingCommandsUtil() {} - - public static EntryTree invert(EntryTree mappings) { - Translator translator = new MappingTranslator(mappings, VoidEntryResolver.INSTANCE); - EntryTree result = new HashEntryTree<>(); - - for (EntryTreeNode node : mappings) { - Entry leftEntry = node.getEntry(); - EntryMapping leftMapping = node.getValue(); - - if (!(leftEntry instanceof ClassEntry || leftEntry instanceof MethodEntry || leftEntry instanceof FieldEntry)) { - result.insert(translator.translate(leftEntry), leftMapping); - continue; - } - - Entry rightEntry = translator.translate(leftEntry); - - result.insert(rightEntry, leftMapping == null ? null : new EntryMapping(leftEntry.getName())); // TODO: leftMapping.withName once javadoc PR is merged - } - - return result; - } - - public static EntryTree compose(EntryTree left, EntryTree right, boolean keepLeftOnly, boolean keepRightOnly) { - Translator leftTranslator = new MappingTranslator(left, VoidEntryResolver.INSTANCE); - EntryTree result = new HashEntryTree<>(); - Set> addedMappings = new HashSet<>(); - - for (EntryTreeNode node : left) { - Entry leftEntry = node.getEntry(); - EntryMapping leftMapping = node.getValue(); - - Entry rightEntry = leftTranslator.translate(leftEntry); - - EntryMapping rightMapping = right.get(rightEntry); - if (rightMapping != null) { - result.insert(leftEntry, rightMapping); - addedMappings.add(rightEntry); - } else if (keepLeftOnly) { - result.insert(leftEntry, leftMapping); - } - } - - if (keepRightOnly) { - Translator leftInverseTranslator = new MappingTranslator(invert(left), VoidEntryResolver.INSTANCE); - for (EntryTreeNode node : right) { - Entry rightEntry = node.getEntry(); - EntryMapping rightMapping = node.getValue(); - - if (!addedMappings.contains(rightEntry)) { - result.insert(leftInverseTranslator.translate(rightEntry), rightMapping); - } - } - } - return result; - } - - public static EntryTree read(String type, Path path, MappingSaveParameters saveParameters) throws MappingParseException, IOException { - if (type.equals("enigma")) { - return (Files.isDirectory(path) ? EnigmaMappingsReader.DIRECTORY : EnigmaMappingsReader.ZIP).read(path, ProgressListener.none(), saveParameters); - } - - if (type.equals("tiny")) { - return TinyMappingsReader.INSTANCE.read(path, ProgressListener.none(), saveParameters); - } - - MappingFormat format = null; - try { - format = MappingFormat.valueOf(type.toUpperCase()); - } catch (IllegalArgumentException ignored) { - if (type.equals("tinyv2")) { - format = MappingFormat.TINY_V2; - } - } - - if (format != null) { - return format.getReader().read(path, ProgressListener.none(), saveParameters); - } - - throw new IllegalArgumentException("no reader for " + type); - } - - public static void write(EntryTree mappings, String type, Path path, MappingSaveParameters saveParameters) { - if (type.equals("enigma")) { - EnigmaMappingsWriter.DIRECTORY.write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - if (type.startsWith("tinyv2:") || type.startsWith("tiny_v2:")) { - String[] split = type.split(":"); - - if (split.length != 3) { - throw new IllegalArgumentException("specify column names as 'tinyv2:from_namespace:to_namespace'"); - } - - new TinyV2Writer(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - if (type.startsWith("tiny:")) { - String[] split = type.split(":"); - - if (split.length != 3) { - throw new IllegalArgumentException("specify column names as 'tiny:from_column:to_column'"); - } - - new TinyMappingsWriter(split[1], split[2]).write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - MappingFormat format = null; - try { - format = MappingFormat.valueOf(type.toUpperCase()); - } catch (IllegalArgumentException ignored) {} - - if (format != null) { - format.getWriter().write(mappings, path, ProgressListener.none(), saveParameters); - return; - } - - throw new IllegalArgumentException("no writer for " + type); - } -} -- cgit v1.2.3