FileSystemScanner.java :  » Media » jammed » com » jammed » app » Java Open Source

Java Open Source » Media » jammed 
jammed » com » jammed » app » FileSystemScanner.java
package com.jammed.app;

import com.jammed.event.ScannerListener;
import com.jammed.gen.MediaProtos.Media;
import com.jammed.gen.MediaProtos.Playlist;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.SwingUtilities;

/**
 *
 * @author nmaludy
 */
public class FileSystemScanner {

  private static FileSystemScanner INSTANCE;
  private static MediaFilter mediaFilter = new MediaFilter();
  private final ExecutorService executor;

  private static FileFilter directores = new FileFilter() {
    public boolean accept(File f) {
      return f.isDirectory();
    }
  };

  private FileSystemScanner() {
    executor = Executors.newSingleThreadExecutor();
  }

  public static final void start(File root, ScannerListener listener) {
    if (INSTANCE == null) {
      INSTANCE = new FileSystemScanner();
    }
    INSTANCE.scan(root, listener);
  }

  private void scan(File root, ScannerListener listener) {
    executor.execute(new Scanner(root, listener));
  }

  private class Scanner implements Runnable {

    private File root;
    private ScannerListener listener;
    private Playlist.Builder result;
    private Queue<File> dirs = new LinkedList<File>();

    public Scanner(File r, ScannerListener l) {
      root = r;
      listener = l;
      result = Playlist.newBuilder();
      result.setType(result.getType());
      result.setHost("127.0.0.1");
    }

    @Override
    public void run() {
      processDir(root);
      while(!dirs.isEmpty()) {
        processDir(dirs.poll());
      }
      fireScanComplete();
    }

    private void processDir(File dir){
      dirs.addAll(Arrays.asList(dir.listFiles(directores)));
      List<File> media = new ArrayList<File>(Arrays.asList(dir.listFiles(mediaFilter)));
      processFiles(media);
    }

    private void processFiles(List<File> files) {
      for (File f: files) {
        Media.Builder media = Media.newBuilder();
        media.setLocation(f.getAbsolutePath());
        media.setTitle(f.getName());
        media.setLength(0);
        media.setType(media.getType());
        media.setHostname(Cloud.getInstance().getHostName());
        result.addMedia(media.build());
      }
    }

    private void fireScanComplete() {
      final Playlist playlist = result.build();
      
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          listener.scanCompleted(playlist);
        }
      });
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.