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

org.uberfire.java.nio.base.GeneralPathImpl Maven / Gradle / Ivy

There is a newer version: 7.74.1.Final
Show newest version
/*
 * Copyright 2015 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.uberfire.java.nio.base;

import java.io.File;
import java.util.regex.Matcher;

import org.uberfire.java.nio.file.FileSystem;
import org.uberfire.java.nio.file.Path;

import static org.uberfire.commons.validation.Preconditions.*;

public class GeneralPathImpl
        extends AbstractPath
        implements SegmentedPath {

    private GeneralPathImpl( final FileSystem fs,
                             final File file ) {
        super( fs, file );
    }

    private GeneralPathImpl( final FileSystem fs,
                             final String path,
                             boolean isRoot,
                             boolean isRealPath,
                             boolean isNormalized ) {
        super( fs, path, "", isRoot, isRealPath, isNormalized );
    }

    @Override
    protected RootInfo setupRoot( final FileSystem fs,
                                  final String path,
                                  final String host,
                                  final boolean isRoot ) {

        final boolean isRooted = isRoot ? true : path.startsWith( "/" );
        final Matcher hasWindowsDrive = WINDOWS_DRIVER.matcher( path );

        final boolean isAbsolute;
        if ( isRooted || hasWindowsDrive.matches() ) {
            isAbsolute = true;
        } else {
            isAbsolute = false;
        }

        int lastOffset = isAbsolute ? 1 : 0;
        int windowsDriveEndsAt = -1;
        if ( isAbsolute && hasWindowsDrive.matches() ) {
            windowsDriveEndsAt = hasWindowsDrive.toMatchResult().end( 1 ) + 1;
            lastOffset = windowsDriveEndsAt;
        }

        final boolean isFinalRoot;
        if ( path.length() == 1 && lastOffset == 1 ) {
            isFinalRoot = true;
        } else if ( hasWindowsDrive.matches() && path.length() == windowsDriveEndsAt ) {
            isFinalRoot = true;
        } else {
            isFinalRoot = isRoot;
        }

        return new RootInfo( lastOffset, isAbsolute, isFinalRoot, path.getBytes() );
    }

    @Override
    protected String defaultDirectory() {
        if ( usesWindowsFormat ) {
            final String result = new File( "" ).getAbsolutePath().replaceAll( "/", "\\\\" ) + "\\";

            if ( !hasWindowsDriver( result ) ) {
                return DEFAULT_WINDOWS_DRIVER + result;
            }
            return result;
        }
        return new File( "" ).getAbsolutePath() + "/";
    }

    private boolean hasWindowsDriver( final String text ) {
        checkNotEmpty( "text", text );
        return WINDOWS_DRIVER.matcher( text ).matches();
    }

    public static GeneralPathImpl newFromFile( final FileSystem fs,
                                               final File file ) {
        checkNotNull( "fs", fs );
        checkNotNull( "file", file );

        return new GeneralPathImpl( fs, file );
    }

    public static GeneralPathImpl create( final FileSystem fs,
                                          final String path,
                                          boolean isRealPath ) {
        return create( fs, path, isRealPath, false );
    }

    public static GeneralPathImpl createRoot( final FileSystem fs,
                                              final String path,
                                              boolean isRealPath ) {
        return new GeneralPathImpl( fs, path, true, isRealPath, true );
    }

    public static GeneralPathImpl create( final FileSystem fs,
                                          final String path,
                                          boolean isRealPath,
                                          boolean isNormalized ) {
        checkNotNull( "fs", fs );
        checkNotNull( "path", path );

        return new GeneralPathImpl( fs, path, false, isRealPath, isNormalized );
    }

    @Override
    protected Path newRoot( FileSystem fs,
                            String substring,
                            String host,
                            boolean realPath ) {
        return new GeneralPathImpl( fs, substring, true, realPath, true );
    }

    @Override
    protected Path newPath( final FileSystem fs,
                            final String substring,
                            String host,
                            final boolean isRealPath,
                            final boolean isNormalized ) {
        return new GeneralPathImpl( fs, substring, false, isRealPath, isNormalized );
    }

    @Override
    public File toFile()
            throws UnsupportedOperationException {
        if ( file == null ) {
            synchronized ( this ) {
                file = new File( toString() );
            }
        }
        return file;
    }

    @Override
    public String getSegmentId() {
        return "/";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy