All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jruby.util.JarDirectoryResource Maven / Gradle / Ivy

package org.jruby.util;

import java.io.IOException;
import java.io.InputStream;

import java.nio.channels.Channel;
import java.nio.file.attribute.FileTime;

/**
 * Represents a directory in a jar.
 *
 * 

Jars do not necessarily have to contain entries for a directory. However, from ruby's point of * view, if a jar contains entry /foo/bar, it already contains /foo directory. This resource permits * just that.

*/ class JarDirectoryResource extends JarResource { private final String path; private final String[] contents; JarDirectoryResource(String jarPath, boolean rootSlashPrefix, String path, String[] contents) { super(jarPath, rootSlashPrefix); this.path = path; this.contents = contents; } @Override public String entryName() { return path; } @Override public boolean isDirectory() { return true; } @Override public boolean isFile() { return false; } @Override public long length() { // this pseudo-directory doesn't take up any space return 0L; } @Override public long lastModified() { // Iterating over matching entries is expensive, so let's return that we've never been modified return 0L; } public FileTime creationTime() { return null; // NOTE: not implemented } public FileTime lastAccessTime() { return null; // NOTE: not implemented } public FileTime lastModifiedTime() { return null; // NOTE: not implemented } @Override public String[] list() { return contents; } public boolean isRoot() { return "/".equals(path); } @Override public InputStream openInputStream() throws IOException { throw new ResourceException.FileIsDirectory(path); } @Override public Channel openChannel(final int flags, int perm) throws ResourceException { // opening a directory seems to blow up with EACCESS in jruby // (although MRI allows instantiation but blows up on read). // So mimicking that for now. throw new ResourceException.PermissionDenied(absolutePath()); } @Override public T unwrap(Class type) { throw new UnsupportedOperationException("unwrap: " + type.getName()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy