Package net.fusejna

Source Code of net.fusejna.DirectoryFillerImpl

package net.fusejna;

import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import net.fusejna.types.TypeOff;

import com.sun.jna.Function;
import com.sun.jna.Pointer;

/**
* A class which provides functionality to pass filenames back to FUSE as part of a readdir() call.
*/
public final class DirectoryFillerImpl implements DirectoryFiller
{
  private static final String currentDirectory = ".";
  private static final String parentDirectory = "..";
  private final Pointer buf;
  private final Function nativeFunction;
  private final Set<String> addedFiles = new HashSet<String>();

  DirectoryFillerImpl(final Pointer buf, final Function nativeFunction)
  {
    this.buf = buf;
    this.nativeFunction = nativeFunction;
    add(currentDirectory, parentDirectory);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public final boolean add(final Iterable<String> files)
  {
    int result;
    for (String file : files) {
      if (file == null) {
        continue;
      }
      if (file.contains(File.separator)) {
        file = new File(file).getName(); // Keep only the name component
      }
      if (addedFiles.add(file)) {
        final Object[] args = { buf, file, null, new TypeOff(0L) };
        result = nativeFunction.invokeInt(args);
        if (result != 0) {
          return false;
        }
      }
    }
    return true;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public final boolean add(final String... files)
  {
    return add(Arrays.asList(files));
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public String toString()
  {
    final StringBuilder output = new StringBuilder();
    int count = 0;
    for (final String file : addedFiles) {
      output.append(file);
      if (count < addedFiles.size() - 1) {
        output.append(", ");
      }
      count++;
    }
    return output.toString();
  }
}
TOP

Related Classes of net.fusejna.DirectoryFillerImpl

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.