diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/Import.java b/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/Import.java index c8ef61f1..0c06d0c8 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/Import.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/Import.java @@ -2,6 +2,8 @@ package the.bytecode.club.bytecodeviewer.resources.importing; import the.bytecode.club.bytecodeviewer.resources.importing.impl.*; +import java.util.HashMap; + /*************************************************************************** * Bytecode Viewer (BCV) - Java & Android Reverse Engineering Suite * * Copyright (C) 2014 Kalen 'Konloch' Kinloch - http://bytecodeviewer.com * @@ -28,16 +30,29 @@ public enum Import { DIRECTORY(new DirectoryResourceImporter()), FILE(new FileResourceImporter()), - ZIP(new ZipResourceImporter()), - CLASS(new ClassResourceImporter()), - XAPK(new XAPKResourceImporter()), - APK(new APKResourceImporter()), - DEX(new DEXResourceImporter()), + //TODO ear needs to work the same as XAPK + ZIP(new ZipResourceImporter(), "zip", "jar", "war", "ear"), + CLASS(new ClassResourceImporter(), "class"), + XAPK(new XAPKResourceImporter(), "xapk"), + APK(new APKResourceImporter(), "apk"), + DEX(new DEXResourceImporter(), "dex"), ; - private final Importer importer; + public static final HashMap extensionMap = new HashMap<>(); - Import(Importer importer) {this.importer = importer;} + private final Importer importer; + private final String[] extensions; + + static + { + for(Import i : values()) + for(String s : i.extensions) + extensionMap.put(s, i); + } + + Import(Importer importer, String... extensions) {this.importer = importer; + this.extensions = extensions; + } public Importer getImporter() { diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/ImportResource.java b/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/ImportResource.java index b619bc21..8f0b6ac2 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/ImportResource.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/resources/importing/ImportResource.java @@ -87,34 +87,13 @@ public class ImportResource implements Runnable final String fn = FilenameUtils.getName(file.getName()).toLowerCase(); final String extension = fn.contains(":") ? null : FilenameUtils.getExtension(fn); - switch(extension) - { - //check for zip archives - case "jar": - case "zip": - case "war": - case "ear": //TODO ear needs to work the same as XAPK - Import.ZIP.getImporter().open(file); - break; - - //check for XAPKs - case "xapk": - Import.XAPK.getImporter().open(file); - break; - - //check for APKs - case "apk": - Import.APK.getImporter().open(file); - break; - - //check for DEX - case "dex": - Import.DEX.getImporter().open(file); - break; - - default: - return false; - } + Import imp = Import.extensionMap.get(extension); + + if(imp == null) + return false; + + //import/decode the file using the file specific importer + imp.getImporter().open(file); return true; }