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

com.enonic.xp.vfs.LocalFile Maven / Gradle / Ivy

The newest version!
package com.enonic.xp.vfs;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

import com.google.common.io.ByteSource;
import com.google.common.io.CharSource;
import com.google.common.io.MoreFiles;

import com.enonic.xp.util.Exceptions;

final class LocalFile
    implements VirtualFile
{
    private final VirtualFilePath virtualFilePath;

    private final Path path;

    LocalFile( final Path path )
    {
        this.virtualFilePath = VirtualFilePaths.from( path );
        this.path = path;
    }

    @Override
    public String getName()
    {
        return this.path.getFileName().toString();
    }

    @Override
    public VirtualFilePath getPath()
    {
        return this.virtualFilePath;
    }

    @Override
    public URL getUrl()
    {
        try
        {
            return this.path.toUri().toURL();
        }
        catch ( MalformedURLException e )
        {
            throw Exceptions.unchecked( e );
        }
    }

    @Override
    public boolean isFolder()
    {
        return Files.isDirectory( this.path );
    }

    @Override
    public boolean isFile()
    {
        return Files.isRegularFile( this.path );
    }

    @Override
    public List getChildren()
    {
        if ( !isFolder() )
        {
            return new ArrayList<>();
        }

        final List virtualFiles = new ArrayList<>();

        try (Stream list = Files.list( this.path ))
        {
            list.forEach( ( path ) -> virtualFiles.add( VirtualFiles.from( path ) ) );
        }
        catch ( final IOException e )
        {
            throw Exceptions.unchecked( e );
        }

        return virtualFiles;
    }

    @Override
    public CharSource getCharSource()
    {
        if ( !isFile() )
        {
            return null;
        }

        return MoreFiles.asCharSource( this.path, StandardCharsets.UTF_8 );
    }

    @Override
    public ByteSource getByteSource()
    {
        if ( !isFile() )
        {
            return null;
        }

        return MoreFiles.asByteSource( this.path );
    }

    @Override
    public boolean exists()
    {
        return Files.exists( path );
    }

    @Override
    public VirtualFile resolve( final VirtualFilePath virtualFilePath )
    {
        final Path localPath = virtualFilePath.toLocalPath();

        return VirtualFiles.from( this.path.resolve( localPath ) );
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy