Package fuse

Source Code of fuse.FuseMount

/**
*   FUSE-J: Java bindings for FUSE (Filesystem in Userspace by Miklos Szeredi (mszeredi@inf.bme.hu))
*
*   Copyright (C) 2003 Peter Levart (peter@select-tech.si)
*
*   This program can be distributed under the terms of the GNU LGPL.
*   See the file COPYING.LIB
*/

package fuse;

import fuse.compat.Filesystem1;
import fuse.compat.Filesystem1ToFilesystem2Adapter;
import fuse.compat.Filesystem2;
import fuse.compat.Filesystem2ToFilesystem3Adapter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class FuseMount {
    private static final Log log = LogFactory.getLog(FuseMount.class);

    static {
        System.loadLibrary("javafs");
    }

    private FuseMount() {
        // no instances
    }

    //
    // compatibility APIs
    public static void mount(String[] args, Filesystem1 filesystem1) throws Exception {
        mount(args,
                new Filesystem2ToFilesystem3Adapter(new Filesystem1ToFilesystem2Adapter(filesystem1)),
                LogFactory.getLog(filesystem1.getClass()));
    }

    public static void mount(String[] args, Filesystem2 filesystem2) throws Exception {
        mount(args, new Filesystem2ToFilesystem3Adapter(filesystem2), LogFactory.getLog(filesystem2.getClass()));
    }

    //
    // prefered String level API
    public static void mount(String[] args, Filesystem3 filesystem3, Log log) throws Exception {
        mount(args, new Filesystem3ToFuseFSAdapter(filesystem3, log));
    }

    //
    // byte level API
    public static void mount(String[] args, FuseFS fuseFS) throws Exception {
        ThreadGroup threadGroup = new ThreadGroup(Thread.currentThread().getThreadGroup(), "FUSE Threads");
        threadGroup.setDaemon(true);

        log.info("Mounting filesystem");

        mount(args, fuseFS, threadGroup);

        log.info("Filesystem is unmounted");

        if (log.isDebugEnabled()) {
            int n = threadGroup.activeCount();
            log.debug("ThreadGroup(\"" + threadGroup.getName() + "\").activeCount() = " + n);

            Thread[] threads = new Thread[n];
            threadGroup.enumerate(threads);
            for (int i = 0; i < threads.length; i++) {
                log.debug("thread[" + i + "] = " + threads[i] + ", isDaemon = " + threads[i].isDaemon());
            }
        }
    }

    //
    // byte level API
    public static void mount(
            final String[] args, final Filesystem3 filesystem3,
            final ThreadGroup group, final Log log) throws Exception {

        final Filesystem3ToFuseFSAdapter fuseFS = new Filesystem3ToFuseFSAdapter(filesystem3, log);
        Thread fuseThread = new Thread(group, new Runnable() {
            public void run() {
                try {
                    log.info("Mounting filesystem");
                    mount(args, fuseFS, group);
                    log.info("Filesystem is unmounted");
                    if (log.isDebugEnabled()) {
                        int n = group.activeCount();
                        log.debug("ThreadGroup(\"" + group.getName() + "\").activeCount() = " + n);

                        Thread[] threads = new Thread[n];
                        group.enumerate(threads);
                        for (int i = 0; i < threads.length; i++) {
                            log.debug("thread[" + i + "] = " + threads[i] + ", isDaemon = " + threads[i].isDaemon());
                        }
                    }
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        });
        group.setDaemon(true);
        fuseThread.setDaemon(true);
        fuseThread.start();
    }

    private static native void mount(String[] args, FuseFS fuseFS, ThreadGroup threadGroup) throws Exception;
}
TOP

Related Classes of fuse.FuseMount

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.