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

com.github.stephenc.javaisotools.rockridge.impl.RockRidgeNamingConventions Maven / Gradle / Ivy

/*
 * Copyright (c) 2010. Stephen Connolly.
 * Copyright (C) 2007. Jens Hatlak 
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */

package com.github.stephenc.javaisotools.rockridge.impl;

import java.util.Vector;

import com.github.stephenc.javaisotools.iso9660.ISO9660File;
import com.github.stephenc.javaisotools.iso9660.ISO9660Directory;
import com.github.stephenc.javaisotools.iso9660.NamingConventions;

public class RockRidgeNamingConventions extends NamingConventions {

    public static boolean HIDE_MOVED_DIRECTORIES_STORE = true;
    public static boolean FORCE_PORTABLE_FILENAME_CHARACTER_SET = true;
    // Filename lengths are not restricted by Rock Ridge,
    // these are just safe defaults
    public static int MAX_DIRECTORY_LENGTH = 255;
    public static int MAX_FILENAME_LENGTH = 255;

    public RockRidgeNamingConventions() {
        super("Rock Ridge");
    }

    public void apply(ISO9660Directory dir) {
        String filename = normalize(dir.getName());

        if (filename.length() > MAX_DIRECTORY_LENGTH) {
            // Shorten filename
            filename = filename.substring(0, MAX_DIRECTORY_LENGTH);
        }

        setFilename(dir, filename);
    }

    public void apply(ISO9660File file) {
        String filename = normalize(file.getFilename());
        String extension = normalize(file.getExtension());
        int length = filename.length() + extension.length();

        if (extension.length() == 0) {
            if (length > MAX_FILENAME_LENGTH) {
                // Shorten filename
                filename = filename.substring(0, MAX_FILENAME_LENGTH);
            }
        } else {
            if (length + 1 > MAX_FILENAME_LENGTH) {
                // Shorten filename
                filename = filename.substring(0, MAX_FILENAME_LENGTH - extension.length() - 1);
            }
        }

        setFilename(file, filename, extension);
    }

    public boolean checkDuplicate(Vector duplicates, String name, int version) {
        return checkDuplicate(duplicates, name, version, false);
    }

    public void endRenaming(ISO9660File file) {
        if (VERBOSE) {
            System.out.println(" to " + file.getName());
        }
    }

    private String normalize(String name) {
        if (FORCE_PORTABLE_FILENAME_CHARACTER_SET) {
            return name.replaceAll("[^-A-Za-z0-9._]", "_");
        }
        return name;
    }

    public void checkPathLength(String isoPath) {
        // Nothing to do here (Rock Ridge has no own path length constraint -> ISO 9660 check is sufficient)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy