Add kar file support (Karaf Archive)
https://karaf.apache.org/manual/latest/kar
roswalt
4 years ago
0 | /* | |
1 | * Copyright (c) 2008-2019 Emmanuel Dupuy. | |
2 | * This project is distributed under the GPLv3 license. | |
3 | * This is a Copyleft license that gives the user the right to use, | |
4 | * copy and modify the code freely for non-commercial purposes. | |
5 | */ | |
6 | ||
7 | package org.jd.gui.model.container; | |
8 | ||
9 | import org.jd.gui.api.API; | |
10 | import org.jd.gui.api.model.Container; | |
11 | ||
12 | import java.nio.file.Path; | |
13 | ||
14 | public class KarContainer extends GenericContainer { | |
15 | public KarContainer(API api, Container.Entry parentEntry, Path rootPath) { | |
16 | super(api, parentEntry, rootPath); | |
17 | } | |
18 | ||
19 | public String getType() { return "kar"; } | |
20 | } |
+43
-0
0 | /* | |
1 | * Copyright (c) 2008-2019 Emmanuel Dupuy. | |
2 | * This project is distributed under the GPLv3 license. | |
3 | * This is a Copyleft license that gives the user the right to use, | |
4 | * copy and modify the code freely for non-commercial purposes. | |
5 | */ | |
6 | ||
7 | package org.jd.gui.service.container; | |
8 | ||
9 | import org.jd.gui.api.API; | |
10 | import org.jd.gui.api.model.Container; | |
11 | import org.jd.gui.model.container.KarContainer; | |
12 | import org.jd.gui.spi.ContainerFactory; | |
13 | import org.jd.gui.util.exception.ExceptionUtil; | |
14 | ||
15 | import java.nio.file.Files; | |
16 | import java.nio.file.InvalidPathException; | |
17 | import java.nio.file.Path; | |
18 | ||
19 | public class KarContainerFactoryProvider implements ContainerFactory { | |
20 | @Override | |
21 | public String getType() { return "kar"; } | |
22 | ||
23 | @Override | |
24 | public boolean accept(API api, Path rootPath) { | |
25 | if (rootPath.toUri().toString().toLowerCase().endsWith(".kar!/")) { | |
26 | return true; | |
27 | } else { | |
28 | // Extension: accept uncompressed KAR file containing a folder 'repository' | |
29 | try { | |
30 | return rootPath.getFileSystem().provider().getScheme().equals("file") && Files.exists(rootPath.resolve("repository")); | |
31 | } catch (InvalidPathException e) { | |
32 | assert ExceptionUtil.printStackTrace(e); | |
33 | return false; | |
34 | } | |
35 | } | |
36 | } | |
37 | ||
38 | @Override | |
39 | public Container make(API api, Container.Entry parentEntry, Path rootPath) { | |
40 | return new KarContainer(api, parentEntry, rootPath); | |
41 | } | |
42 | } |
0 | /* | |
1 | * Copyright (c) 2008-2019 Emmanuel Dupuy. | |
2 | * This project is distributed under the GPLv3 license. | |
3 | * This is a Copyleft license that gives the user the right to use, | |
4 | * copy and modify the code freely for non-commercial purposes. | |
5 | */ | |
6 | ||
7 | package org.jd.gui.service.fileloader; | |
8 | ||
9 | import org.jd.gui.api.API; | |
10 | ||
11 | import java.io.File; | |
12 | ||
13 | public class KarFileLoaderProvider extends ZipFileLoaderProvider { | |
14 | protected static final String[] EXTENSIONS = { "kar" }; | |
15 | ||
16 | @Override public String[] getExtensions() { return EXTENSIONS; } | |
17 | @Override public String getDescription() { return "Karaf archive files (*.kar)"; } | |
18 | ||
19 | @Override | |
20 | public boolean accept(API api, File file) { | |
21 | return file.exists() && file.isFile() && file.canRead() && file.getName().toLowerCase().endsWith(".kar"); | |
22 | } | |
23 | } |
13 | 13 | |
14 | 14 | public class ZipFileIndexerProvider extends AbstractIndexerProvider { |
15 | 15 | |
16 | @Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar", "*:file:*.jmod"); } | |
16 | @Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar", "*:file:*.jmod", "*:file:*.kar"); } | |
17 | 17 | |
18 | 18 | @Override |
19 | 19 | public void index(API api, Container.Entry entry, Indexes indexes) { |
+1
-1
21 | 21 | |
22 | 22 | public class ZipFileSourceSaverProvider extends DirectorySourceSaverProvider { |
23 | 23 | |
24 | @Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar", "*:file:*.jmod"); } | |
24 | @Override public String[] getSelectors() { return appendSelectors("*:file:*.zip", "*:file:*.jar", "*:file:*.war", "*:file:*.ear", "*:file:*.aar", "*:file:*.jmod", "*:file:*.kar"); } | |
25 | 25 | |
26 | 26 | @Override |
27 | 27 | public void save(API api, SourceSaver.Controller controller, SourceSaver.Listener listener, Path rootPath, Container.Entry entry) { |
+33
-0
0 | /* | |
1 | * Copyright (c) 2008-2019 Emmanuel Dupuy. | |
2 | * This project is distributed under the GPLv3 license. | |
3 | * This is a Copyleft license that gives the user the right to use, | |
4 | * copy and modify the code freely for non-commercial purposes. | |
5 | */ | |
6 | ||
7 | package org.jd.gui.service.treenode; | |
8 | ||
9 | import org.jd.gui.api.API; | |
10 | import org.jd.gui.api.feature.ContainerEntryGettable; | |
11 | import org.jd.gui.api.feature.UriGettable; | |
12 | import org.jd.gui.api.model.Container; | |
13 | import org.jd.gui.view.data.TreeNodeBean; | |
14 | ||
15 | import javax.swing.tree.DefaultMutableTreeNode; | |
16 | import java.io.File; | |
17 | ||
18 | public class KarFileTreeNodeFactoryProvider extends ZipFileTreeNodeFactoryProvider { | |
19 | @Override public String[] getSelectors() { return appendSelectors("*:file:*.kar"); } | |
20 | ||
21 | @Override | |
22 | @SuppressWarnings("unchecked") | |
23 | public <T extends DefaultMutableTreeNode & ContainerEntryGettable & UriGettable> T make(API api, Container.Entry entry) { | |
24 | int lastSlashIndex = entry.getPath().lastIndexOf("/"); | |
25 | String label = entry.getPath().substring(lastSlashIndex+1); | |
26 | String location = new File(entry.getUri()).getPath(); | |
27 | T node = (T)new TreeNode(entry, new TreeNodeBean(label, "Location: " + location, ICON)); | |
28 | // Add dummy node | |
29 | node.add(new DefaultMutableTreeNode()); | |
30 | return node; | |
31 | } | |
32 | } |
0 | 0 | # Order is important : 'GenericContainerFactoryProvider' must be the last |
1 | org.jd.gui.service.container.KarContainerFactoryProvider | |
1 | 2 | org.jd.gui.service.container.JmodContainerFactoryProvider |
2 | 3 | org.jd.gui.service.container.EarContainerFactoryProvider |
3 | 4 | org.jd.gui.service.container.WarContainerFactoryProvider |
3 | 3 | org.jd.gui.service.fileloader.JarFileLoaderProvider |
4 | 4 | org.jd.gui.service.fileloader.JavaFileLoaderProvider |
5 | 5 | org.jd.gui.service.fileloader.JmodFileLoaderProvider |
6 | org.jd.gui.service.fileloader.KarFileLoaderProvider | |
6 | 7 | org.jd.gui.service.fileloader.LogFileLoaderProvider |
7 | 8 | org.jd.gui.service.fileloader.WarFileLoaderProvider |
8 | 9 | org.jd.gui.service.fileloader.ZipFileLoaderProvider |
13 | 13 | org.jd.gui.service.treenode.JmodPackageTreeNodeFactoryProvider |
14 | 14 | org.jd.gui.service.treenode.JsonFileTreeNodeFactoryProvider |
15 | 15 | org.jd.gui.service.treenode.JspFileTreeNodeFactoryProvider |
16 | org.jd.gui.service.treenode.KarFileTreeNodeFactoryProvider | |
16 | 17 | org.jd.gui.service.treenode.ManifestFileTreeNodeFactoryProvider |
17 | 18 | org.jd.gui.service.treenode.MetainfDirectoryTreeNodeFactoryProvider |
18 | 19 | org.jd.gui.service.treenode.MetainfServiceFileTreeNodeFactoryProvider |