Skip to content

Commit 683b861

Browse files
authored
Merge pull request #267 from romary22/master
Add kar file support (KAraf aRchive)
2 parents 0b9d892 + a82460b commit 683b861

File tree

9 files changed

+126
-2
lines changed

9 files changed

+126
-2
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright (c) 2008-2019 Emmanuel Dupuy.
3+
* This project is distributed under the GPLv3 license.
4+
* This is a Copyleft license that gives the user the right to use,
5+
* copy and modify the code freely for non-commercial purposes.
6+
*/
7+
8+
package org.jd.gui.model.container;
9+
10+
import org.jd.gui.api.API;
11+
import org.jd.gui.api.model.Container;
12+
13+
import java.nio.file.Path;
14+
15+
public class KarContainer extends GenericContainer {
16+
public KarContainer(API api, Container.Entry parentEntry, Path rootPath) {
17+
super(api, parentEntry, rootPath);
18+
}
19+
20+
public String getType() { return "kar"; }
21+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright (c) 2008-2019 Emmanuel Dupuy.
3+
* This project is distributed under the GPLv3 license.
4+
* This is a Copyleft license that gives the user the right to use,
5+
* copy and modify the code freely for non-commercial purposes.
6+
*/
7+
8+
package org.jd.gui.service.container;
9+
10+
import org.jd.gui.api.API;
11+
import org.jd.gui.api.model.Container;
12+
import org.jd.gui.model.container.KarContainer;
13+
import org.jd.gui.spi.ContainerFactory;
14+
import org.jd.gui.util.exception.ExceptionUtil;
15+
16+
import java.nio.file.Files;
17+
import java.nio.file.InvalidPathException;
18+
import java.nio.file.Path;
19+
20+
public class KarContainerFactoryProvider implements ContainerFactory {
21+
@Override
22+
public String getType() { return "kar"; }
23+
24+
@Override
25+
public boolean accept(API api, Path rootPath) {
26+
if (rootPath.toUri().toString().toLowerCase().endsWith(".kar!/")) {
27+
return true;
28+
} else {
29+
// Extension: accept uncompressed KAR file containing a folder 'repository'
30+
try {
31+
return rootPath.getFileSystem().provider().getScheme().equals("file") && Files.exists(rootPath.resolve("repository"));
32+
} catch (InvalidPathException e) {
33+
assert ExceptionUtil.printStackTrace(e);
34+
return false;
35+
}
36+
}
37+
}
38+
39+
@Override
40+
public Container make(API api, Container.Entry parentEntry, Path rootPath) {
41+
return new KarContainer(api, parentEntry, rootPath);
42+
}
43+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright (c) 2008-2019 Emmanuel Dupuy.
3+
* This project is distributed under the GPLv3 license.
4+
* This is a Copyleft license that gives the user the right to use,
5+
* copy and modify the code freely for non-commercial purposes.
6+
*/
7+
8+
package org.jd.gui.service.fileloader;
9+
10+
import org.jd.gui.api.API;
11+
12+
import java.io.File;
13+
14+
public class KarFileLoaderProvider extends ZipFileLoaderProvider {
15+
protected static final String[] EXTENSIONS = { "kar" };
16+
17+
@Override public String[] getExtensions() { return EXTENSIONS; }
18+
@Override public String getDescription() { return "Karaf archive files (*.kar)"; }
19+
20+
@Override
21+
public boolean accept(API api, File file) {
22+
return file.exists() && file.isFile() && file.canRead() && file.getName().toLowerCase().endsWith(".kar");
23+
}
24+
}

services/src/main/java/org/jd/gui/service/indexer/ZipFileIndexerProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
public class ZipFileIndexerProvider extends AbstractIndexerProvider {
1616

17-
@Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar"); }
17+
@Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar", "*:file:*.kar"); }
1818

1919
@Override
2020
public void index(API api, Container.Entry entry, Indexes indexes) {

services/src/main/java/org/jd/gui/service/sourcesaver/ZipFileSourceSaverProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
public class ZipFileSourceSaverProvider extends DirectorySourceSaverProvider {
2424

25-
@Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar", "*:file:*.jmod"); }
25+
@Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar", "*:file:*.jmod", "*:file:*.kar"); }
2626

2727
@Override
2828
public void save(API api, SourceSaver.Controller controller, SourceSaver.Listener listener, Path rootPath, Container.Entry entry) {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright (c) 2008-2019 Emmanuel Dupuy.
3+
* This project is distributed under the GPLv3 license.
4+
* This is a Copyleft license that gives the user the right to use,
5+
* copy and modify the code freely for non-commercial purposes.
6+
*/
7+
8+
package org.jd.gui.service.treenode;
9+
10+
import org.jd.gui.api.API;
11+
import org.jd.gui.api.feature.ContainerEntryGettable;
12+
import org.jd.gui.api.feature.UriGettable;
13+
import org.jd.gui.api.model.Container;
14+
import org.jd.gui.view.data.TreeNodeBean;
15+
16+
import javax.swing.tree.DefaultMutableTreeNode;
17+
import java.io.File;
18+
19+
public class KarFileTreeNodeFactoryProvider extends ZipFileTreeNodeFactoryProvider {
20+
@Override public String[] getSelectors() { return appendSelectors("*:file:*.kar"); }
21+
22+
@Override
23+
@SuppressWarnings("unchecked")
24+
public <T extends DefaultMutableTreeNode & ContainerEntryGettable & UriGettable> T make(API api, Container.Entry entry) {
25+
int lastSlashIndex = entry.getPath().lastIndexOf("/");
26+
String label = entry.getPath().substring(lastSlashIndex+1);
27+
String location = new File(entry.getUri()).getPath();
28+
T node = (T)new TreeNode(entry, new TreeNodeBean(label, "Location: " + location, ICON));
29+
// Add dummy node
30+
node.add(new DefaultMutableTreeNode());
31+
return node;
32+
}
33+
}

services/src/main/resources/META-INF/services/org.jd.gui.spi.ContainerFactory

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Order is important : 'GenericContainerFactoryProvider' must be the last
2+
org.jd.gui.service.container.KarContainerFactoryProvider
23
org.jd.gui.service.container.JavaModuleContainerFactoryProvider
34
org.jd.gui.service.container.EarContainerFactoryProvider
45
org.jd.gui.service.container.WarContainerFactoryProvider

services/src/main/resources/META-INF/services/org.jd.gui.spi.FileLoader

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ org.jd.gui.service.fileloader.EarFileLoaderProvider
44
org.jd.gui.service.fileloader.JarFileLoaderProvider
55
org.jd.gui.service.fileloader.JavaFileLoaderProvider
66
org.jd.gui.service.fileloader.JavaModuleFileLoaderProvider
7+
org.jd.gui.service.fileloader.KarFileLoaderProvider
78
org.jd.gui.service.fileloader.LogFileLoaderProvider
89
org.jd.gui.service.fileloader.WarFileLoaderProvider
910
org.jd.gui.service.fileloader.ZipFileLoaderProvider

services/src/main/resources/META-INF/services/org.jd.gui.spi.TreeNodeFactory

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ org.jd.gui.service.treenode.JavaModuleFileTreeNodeFactoryProvider
1414
org.jd.gui.service.treenode.JavaModulePackageTreeNodeFactoryProvider
1515
org.jd.gui.service.treenode.JsonFileTreeNodeFactoryProvider
1616
org.jd.gui.service.treenode.JspFileTreeNodeFactoryProvider
17+
org.jd.gui.service.treenode.KarFileTreeNodeFactoryProvider
1718
org.jd.gui.service.treenode.ManifestFileTreeNodeFactoryProvider
1819
org.jd.gui.service.treenode.MetainfDirectoryTreeNodeFactoryProvider
1920
org.jd.gui.service.treenode.MetainfServiceFileTreeNodeFactoryProvider

0 commit comments

Comments
 (0)