package basics.filesystem.model;

import java.io.File;
import javax.swing.tree.DefaultMutableTreeNode;
import basics.application.Binder;
import basics.filesystem.file.FileInfo;
import basics.testing.Test;

public class FileModelUtl
{
public static void readFolder(DefaultMutableTreeNode rootNode, File fileRoot)
{
   FolderModelUsingFileTypeFilter folderModel = new FolderModelUsingFileTypeFilter(fileRoot);
   for(String type : folderModel.getTypes())
   {
      folderModel.selectType(type);
      folderModel.sortByName();
      DefaultMutableTreeNode parent = new DefaultMutableTreeNode(type);
      rootNode.add(parent);
      for(folderModel.initForwardIterator(); folderModel.hasNext();)
      {
         File file = folderModel.next();
         FileInfo userObject = new FileInfo(file);
         DefaultMutableTreeNode child = new DefaultMutableTreeNode(userObject);
         parent.add(child);
      }
   }
}

public static void readFolderSortedBySize(DefaultMutableTreeNode rootNode, File fileRoot)
{
   FolderModelUsingFileTypeFilter folderModel = new FolderModelUsingFileTypeFilter(fileRoot);
   for(String type : folderModel.getTypes())
   {
      folderModel.selectType(type);
      folderModel.sortBySize();
      DefaultMutableTreeNode parent = new DefaultMutableTreeNode(type);
      rootNode.add(parent);
      for(folderModel.initForwardIterator(); folderModel.hasNext();)
      {
         File file = folderModel.next();
         FileInfo userObject = new FileInfo(file);
         //         OsUtl.trace(userObject.toString());
         DefaultMutableTreeNode child = new DefaultMutableTreeNode(userObject);
         parent.add(child);
      }
   }
}

public static void readFolderSortedByDate(DefaultMutableTreeNode rootNode, File fileRoot)
{
   FolderModelUsingFileTypeFilter folderModel = new FolderModelUsingFileTypeFilter(fileRoot);
   for(String type : folderModel.getTypes())
   {
      folderModel.selectType(type);
      folderModel.sortByDate();
      DefaultMutableTreeNode parent = new DefaultMutableTreeNode(type);
      rootNode.add(parent);
      for(folderModel.initForwardIterator(); folderModel.hasNext();)
      {
         File file = folderModel.next();
         FileInfo userObject = new FileInfo(file);
         DefaultMutableTreeNode child = new DefaultMutableTreeNode(userObject);
         parent.add(child);
      }
   }
}

public static void unittest()
{
   File p = new File(Binder.getBasedir(), "work");
   DefaultMutableTreeNode r = new DefaultMutableTreeNode();
   readFolderSortedBySize(r, p);
   Test.assertTrue(r.getChildCount() == 2, "2 expected, not " + r.getChildCount());
   DefaultMutableTreeNode c = (DefaultMutableTreeNode)r.children().nextElement();
   Test.assertTrue(c.getChildCount() == 6, "6 expected, not " + c.getChildCount());
}
}
