Search in sources :

Example 1 with JarEntryDirectory

use of org.eclipse.jdt.internal.core.JarEntryDirectory in project che by eclipse.

the class JavaNavigation method getJarEntryResource.

private JarEntry getJarEntryResource(JarEntryResource resource) {
    JarEntry entry = DtoFactory.getInstance().createDto(JarEntry.class);
    if (resource instanceof JarEntryDirectory) {
        entry.setType(JarEntryType.FOLDER);
    }
    if (resource instanceof JarEntryFile) {
        entry.setType(JarEntryType.FILE);
    }
    entry.setName(resource.getName());
    entry.setPath(resource.getFullPath().toOSString());
    return entry;
}
Also used : JarEntryDirectory(org.eclipse.jdt.internal.core.JarEntryDirectory) JarEntry(org.eclipse.che.ide.ext.java.shared.JarEntry) JarEntryFile(org.eclipse.jdt.internal.core.JarEntryFile)

Example 2 with JarEntryDirectory

use of org.eclipse.jdt.internal.core.JarEntryDirectory in project che by eclipse.

the class JavaNavigation method getContent.

public ClassContent getContent(IJavaProject project, int rootId, String path) throws CoreException {
    IPackageFragmentRoot root = getPackageFragmentRoot(project, rootId);
    if (root == null) {
        return null;
    }
    if (path.startsWith("/")) {
        //non java file
        if (root instanceof JarPackageFragmentRoot) {
            JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) root;
            ZipFile jar = null;
            try {
                jar = jarPackageFragmentRoot.getJar();
                ZipEntry entry = jar.getEntry(path.substring(1));
                if (entry != null) {
                    try (InputStream stream = jar.getInputStream(entry)) {
                        return createContent(IoUtil.readStream(stream), false);
                    } catch (IOException e) {
                        LOG.error("Can't read file content: " + entry.getName(), e);
                    }
                }
            } finally {
                if (jar != null) {
                    JavaModelManager.getJavaModelManager().closeZipFile(jar);
                }
            }
        }
        Object[] resources = root.getNonJavaResources();
        for (Object resource : resources) {
            if (resource instanceof JarEntryFile) {
                JarEntryFile file = (JarEntryFile) resource;
                if (file.getFullPath().toOSString().equals(path)) {
                    return readFileContent(file);
                }
            }
            if (resource instanceof JarEntryDirectory) {
                JarEntryDirectory directory = (JarEntryDirectory) resource;
                JarEntryFile file = findJarFile(directory, path);
                if (file != null) {
                    return readFileContent(file);
                }
            }
        }
    } else {
        return getContent(project, path);
    }
    return null;
}
Also used : JarEntryDirectory(org.eclipse.jdt.internal.core.JarEntryDirectory) ZipFile(java.util.zip.ZipFile) JarPackageFragmentRoot(org.eclipse.jdt.internal.core.JarPackageFragmentRoot) InputStream(java.io.InputStream) ZipEntry(java.util.zip.ZipEntry) IOException(java.io.IOException) JarEntryFile(org.eclipse.jdt.internal.core.JarEntryFile) IPackageFragmentRoot(org.eclipse.jdt.core.IPackageFragmentRoot)

Example 3 with JarEntryDirectory

use of org.eclipse.jdt.internal.core.JarEntryDirectory in project che by eclipse.

the class JavaNavigation method getChildren.

public List<JarEntry> getChildren(IJavaProject project, int rootId, String path) throws JavaModelException {
    IPackageFragmentRoot root = getPackageFragmentRoot(project, rootId);
    if (root == null) {
        return NO_ENTRIES;
    }
    if (path.startsWith("/")) {
        // jar file and folders
        Object[] resources = root.getNonJavaResources();
        for (Object resource : resources) {
            if (resource instanceof JarEntryDirectory) {
                JarEntryDirectory directory = (JarEntryDirectory) resource;
                Object[] children = findJarDirectoryChildren(directory, path);
                if (children != null) {
                    return convertToJarEntry(children, root);
                }
            }
        }
    } else {
        // packages and class files
        IPackageFragment fragment = root.getPackageFragment(path);
        if (fragment == null) {
            return NO_ENTRIES;
        }
        return convertToJarEntry(getPackageContent(fragment), root);
    }
    return NO_ENTRIES;
}
Also used : JarEntryDirectory(org.eclipse.jdt.internal.core.JarEntryDirectory) IPackageFragment(org.eclipse.jdt.core.IPackageFragment) IPackageFragmentRoot(org.eclipse.jdt.core.IPackageFragmentRoot)

Example 4 with JarEntryDirectory

use of org.eclipse.jdt.internal.core.JarEntryDirectory in project che by eclipse.

the class JavaNavigation method getEntry.

public JarEntry getEntry(IJavaProject project, int rootId, String path) throws CoreException {
    IPackageFragmentRoot root = getPackageFragmentRoot(project, rootId);
    if (root == null) {
        return null;
    }
    if (path.startsWith("/")) {
        JarPackageFragmentRoot jarPackageFragmentRoot = (JarPackageFragmentRoot) root;
        ZipFile jar = null;
        try {
            jar = jarPackageFragmentRoot.getJar();
            ZipEntry entry = jar.getEntry(path.substring(1));
            if (entry != null) {
                JarEntry result = DtoFactory.getInstance().createDto(JarEntry.class);
                result.setType(JarEntryType.FILE);
                result.setPath(path);
                result.setName(entry.getName().substring(entry.getName().lastIndexOf("/") + 1));
                return result;
            }
        } finally {
            if (jar != null) {
                JavaModelManager.getJavaModelManager().closeZipFile(jar);
            }
        }
        Object[] resources = root.getNonJavaResources();
        for (Object resource : resources) {
            if (resource instanceof JarEntryFile) {
                JarEntryFile file = (JarEntryFile) resource;
                if (file.getFullPath().toOSString().equals(path)) {
                    return getJarEntryResource(file);
                }
            }
            if (resource instanceof JarEntryDirectory) {
                JarEntryDirectory directory = (JarEntryDirectory) resource;
                JarEntryFile file = findJarFile(directory, path);
                if (file != null) {
                    return getJarEntryResource(file);
                }
            }
        }
    } else {
        //java class or file
        IType type = project.findType(path);
        if (type != null && type.isBinary()) {
            IClassFile classFile = type.getClassFile();
            return getJarClass(classFile);
        }
    }
    return null;
}
Also used : JarEntryDirectory(org.eclipse.jdt.internal.core.JarEntryDirectory) IClassFile(org.eclipse.jdt.core.IClassFile) ZipFile(java.util.zip.ZipFile) JarPackageFragmentRoot(org.eclipse.jdt.internal.core.JarPackageFragmentRoot) ZipEntry(java.util.zip.ZipEntry) JarEntry(org.eclipse.che.ide.ext.java.shared.JarEntry) JarEntryFile(org.eclipse.jdt.internal.core.JarEntryFile) IPackageFragmentRoot(org.eclipse.jdt.core.IPackageFragmentRoot) IType(org.eclipse.jdt.core.IType)

Aggregations

JarEntryDirectory (org.eclipse.jdt.internal.core.JarEntryDirectory)4 IPackageFragmentRoot (org.eclipse.jdt.core.IPackageFragmentRoot)3 JarEntryFile (org.eclipse.jdt.internal.core.JarEntryFile)3 ZipEntry (java.util.zip.ZipEntry)2 ZipFile (java.util.zip.ZipFile)2 JarEntry (org.eclipse.che.ide.ext.java.shared.JarEntry)2 JarPackageFragmentRoot (org.eclipse.jdt.internal.core.JarPackageFragmentRoot)2 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 IClassFile (org.eclipse.jdt.core.IClassFile)1 IPackageFragment (org.eclipse.jdt.core.IPackageFragment)1 IType (org.eclipse.jdt.core.IType)1