Better Resource Importing

This commit is contained in:
Konloch 2021-07-14 03:29:36 -07:00
parent c38bc180d9
commit 07bbfaf299
2 changed files with 29 additions and 35 deletions

View File

@ -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<String, Import> 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()
{

View File

@ -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;
}