Project Proposal

ABlissFul File Browser by Mike Francis, Kyle Schueckler, and Chris Dunnigan

First Proposal Walk Through

Overview of Our Project:

The idea of copy and paste is a not as clear as drag and drop, so we wanted to make it easier to drag and drop files between directories. Also we wanted to make a more representative file icon that would reflect the size.

Current State of Project:

Our project currently does everything we set out to do which includes:

What Can Your Program Do:

Our program can display a file system in a way that allow the user to quickly and easily manage their files. A user can open files, browse in tabs and panes, add to favorites, drag and drop to a visual clipboard.

How does your user interface work :

The interface is similar to other file browsers with the addition of fowling important features.

What are the important features :

Three Course-Related Issues:

First

Problem: Easily updating tabbed panel, and directory tree when the current directory is updated.


Solution: Model View Controller.


Code: First we had to add a class to represent our data, DataModel.java.


Next, each class that had to listen for updates must implement Observer. This class must also take the Data Model in its constructor so that it can access the current data. To implement Observer the class has to have the method:

public void update(Observable t, Object o){}


Inside this method you can access any data inside the Data Model.


Result: We learned how useful a model view controller can be. As a result of this problem we used the MVC to solve one more problem during this project.


Second

Problem: Multiple drag and drops starting at the sometime thus causing an InvalidDnDOperationException. This exception sets an non-resetable state that does not allow any other drag and drops to take place


Solution: The underlying problem was multiple DragGestureListeners being registered on the same Components when a directory was reentered or a file added to the clipboard more then once. The solution was to reset the DragSource to a new instance each time the directory was changed or the clipboard was cleared.



Code: DragSource ds = new DragSource();


Result: This solved the problem, by removing the chance of having multiple DragGestureListeners registered on the same component.


Third

Problem: When making a JTree represent a file system it will show that all directories as expandable even when there are no other directories are in them.


Solution: The solution was to make directories that have no sub directories a leafs in the tree. Then you must write a tree cell renderer that will draw leaf nodes as a image that is the same as the folder.


Code: In DirectoryChooser there is a DirNode class that extends DefaultMutableTreeNode. In this class there is a public boolean isLeaf() method. In this method we put the following code:

if(getChildCount() > 0)

return false;

return true;

The next thing is the FileCellRenderer class which extends DefaultTreeCellRenderer this sets the images to file icons that are saved in another directory.


Result: The tree then looks right but there is a performance downside. When using it on a large file system there are some slow down because the only way to tell if you are a leaf is if you have no children, and the only way to know if you have children is to get them. A way to speed things up may be to make it concurrent and use some sort of fork/join, but because would be a very long and difficult change and the limited time of this project there was not enough time to try this out.