Skip to content

Commit

Permalink
Clean up
Browse files Browse the repository at this point in the history
* clean up and format various lines of code
* redo code sections into more compactness
  • Loading branch information
brp14005 committed Mar 2, 2016
1 parent ef9b05c commit 66b177c
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 135 deletions.
121 changes: 16 additions & 105 deletions src/main/java/directory/FolderViewManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,23 +34,18 @@
*/
public class FolderViewManager {
private final Image hddIcon = new Image("/icons/hdd.png");
// private directory.IronFileVisitor ironVisitor; // might be used later
private TreeView<IronFile> view;
private CmdExecutor command;
private List<TreeItem<IronFile>> selectedFiles;
private ObservableList<TreeItem<IronFile>> taggedItems = FXCollections.observableArrayList();
private ObservableList<IronFile> taggedItems = FXCollections.observableArrayList();

/**
* Folder View Manager constructor, initializes the view for the file browser
* */
public FolderViewManager(TreeView<IronFile> dirTree) {
/*ironVisitor = new directory.IronFileVisitor(); // save this for later
ironVisitor.setRoot(new TreeItem<>());*/ // save this for later
// OSDetection.getOS();
view = dirTree;
view.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); // enable multi-select
// command = new CmdExecutor();
}
/**
* Sets the root directory of the file browser to the specified folder.
*
* @param file root folder/file to start browser view
**/
public void setRootDirectory(IronFile file) {
Expand All @@ -59,7 +54,6 @@ public void setRootDirectory(IronFile file) {
}
/**
* Overloaded method that sets a collection of folders/files as file browser view.
*
* @param hardDrives a collection of hard drives to being from root
* */
public void setRootDirectory(IronFile[] hardDrives) {
Expand All @@ -72,95 +66,10 @@ public void setRootDirectory(IronFile[] hardDrives) {
view.setShowRoot(false); // hide the blank file
}

public void setSelectedFiles(List<TreeItem<IronFile>> files) {
selectedFiles = files;
}

public void setFileAttrForSelected() {
for(TreeItem<IronFile> item : selectedFiles) {
setFileAttr(item.getValue(), "test_attr_key", "test_attr_value");
}
}

public void getFileAttrForSelected() {
for(TreeItem<IronFile> item : selectedFiles) {
getFileAttr(item.getValue(), "test_attr_key");
}
}

public void deleteFileAttrForSelected() {
for(TreeItem<IronFile> item : selectedFiles) {
deleteFileAttr(item.getValue(), "test_attr_key");
}
}

public void setFileAttr(IronFile file, String key, String value) {
if(OSDetection.OSType == OSDetection.OS.WINDOWS) {
try {
UserDefinedFileAttributeView view = Files.getFileAttributeView(file.toPath(), UserDefinedFileAttributeView.class);
//might want to give unique prefix to tag keys to avoid collision with system metadata
view.write(key, Charset.defaultCharset().encode(value));
} catch(IOException e) {
e.printStackTrace();
}
} else if(OSDetection.OSType == OSDetection.OS.MAC) {
String option = "";
if(file.isDirectory()) {
option = "-r";
}
String cmd = "xattr -w " + option + " " + key + " " + value + " " + file.getAbsolutePath();
try {
String output = command.run(cmd);
} catch(IOException e) { e.printStackTrace(); }
}
}

public String getFileAttr(IronFile file, String key) {
if(OSDetection.OSType == OSDetection.OS.WINDOWS) {
try {
UserDefinedFileAttributeView view = Files.getFileAttributeView(file.toPath(), UserDefinedFileAttributeView.class);
ByteBuffer buf = ByteBuffer.allocate(view.size(key));
view.read(key, buf);
buf.flip();
return Charset.defaultCharset().decode(buf).toString();
} catch(IOException e) {
e.printStackTrace();
}

} else if(OSDetection.OSType == OSDetection.OS.MAC) {
System.out.println("file path: " + file.getAbsolutePath());
String option = "";
if(file.isDirectory()) {
//option = "-r";
}
String cmd = "xattr -p " + option + " " + key + " " + file.getAbsolutePath(); //then append the attr command
try {
String output = command.run(cmd);
} catch(IOException e) { e.printStackTrace(); }
}
return null;
}

public void deleteFileAttr(IronFile file, String key) {
if(OSDetection.OSType == OSDetection.OS.WINDOWS) {
try {
UserDefinedFileAttributeView view = Files.getFileAttributeView(file.toPath(), UserDefinedFileAttributeView.class);
view.delete(key);
} catch(IOException e) { e.printStackTrace(); }
} else if(OSDetection.OSType == OSDetection.OS.MAC) {
System.out.println("file path: " + file.getAbsolutePath());
String cmd = "xattr -d " + key + " " + file.getAbsolutePath(); //then append the attr command
try {
String output = command.run(cmd);
} catch(IOException e) { e.printStackTrace(); }
}
}

public void setTags(ObservableList<TreeItem<IronFile>> selectedItems, String tag) {
for (TreeItem<IronFile> selectedItem : selectedItems) {
selectedItem.getValue().setTag(tag);
taggedItems.add(selectedItem); // add tagged item to list
// System.out.println(selectedItem.getValue().getTag());
public void setTags(ObservableList<IronFile> selectedItems, String tag) {
for (IronFile selectedIronFile : selectedItems) {
selectedIronFile.setTag(tag);
taggedItems.add(selectedIronFile); // add tagged item to list
}
}

Expand All @@ -170,12 +79,14 @@ public void deleteAllTags(ObservableList<TreeItem<IronFile>> selectedItems) {
}
}

public ObservableList<TreeItem<IronFile>> getTagedItems(String searchTag) {
ObservableList<TreeItem<IronFile>> listTagFiles = FXCollections.observableArrayList();
for (TreeItem<IronFile> taggedItem : taggedItems) {
IronFile currentFile = taggedItem.getValue();
if (currentFile.getTag().equals(searchTag)) {
listTagFiles.add(taggedItem);
/**
* Retrieves an Observable list of TreeItem<IronFile> of tagged items.
* */
public ObservableList<IronFile> getTaggedItems(String searchTag) {
ObservableList<IronFile> listTagFiles = FXCollections.observableArrayList();
for (IronFile taggedIronFile : taggedItems) {
if (taggedIronFile.getTag().equals(searchTag)) {
listTagFiles.add(taggedIronFile);
}
}
return listTagFiles;
Expand Down
57 changes: 29 additions & 28 deletions src/main/java/launcher/Controller.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.Event;
Expand All @@ -21,6 +22,7 @@

import java.util.List;
import java.util.ResourceBundle;
import java.util.stream.Collectors;

public class Controller{
@FXML private MenuItem fileOpen;
Expand All @@ -37,39 +39,38 @@ public class Controller{
@FXML private TextField txtAddTag;
@FXML private TextField txtTagSearch;
@FXML private Button btnSearchTag;
@FXML private ListView<TreeItem<IronFile>> viewTags;
@FXML private ListView<IronFile> viewTags;
private FolderViewManager manager;

@FXML private void initialize() {
final FolderViewManager manager = new FolderViewManager(dirTree); // 2 statements in 1 line is best
manager = new FolderViewManager(dirTree); // 2 statements in 1 line is best
IronFile[] hardDrives = IronFile.listRoots(); // an array of hard drives
manager.setRootDirectory(hardDrives);
setEvents(manager);
}

private void setEvents(FolderViewManager manager) {
/*dirTree.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent args) {
ObservableList<TreeItem<IronFile>> selectedItems = dirTree.getSelectionModel().getSelectedItems();
manager.setSelectedFiles(selectedItems);
}
});*/

btnAddTag.setOnAction((event) -> { // new java 8 set mouse event
ObservableList<TreeItem<IronFile>> selectedItems = dirTree.getSelectionModel().getSelectedItems(); // get list of selected files
// manager.setSelectedFiles(selectedItems);
manager.setTags(selectedItems, txtAddTag.getText());
});
btnSearchTag.setOnAction(event -> {
ObservableList<TreeItem<IronFile>> taggedItems = manager.getTagedItems(txtTagSearch.getText());
viewTags.setItems(taggedItems);
// manager.displayTagedFiles(txtTagSearch.getText());
});
toolsDeleteTags.setOnAction(event -> {
ObservableList<TreeItem<IronFile>> selectedItems = dirTree.getSelectionModel().getSelectedItems(); // get list of selected files
manager.deleteAllTags(selectedItems);
// manager.deleteFileAttrForSelected();
});
/**
* Action event triggered when user clicks. This method will add tag directly to IronFile
* Method name must match StartPage.fxml assigned `on Action`
* */
@FXML private void eventAddTag() {
ObservableList<TreeItem<IronFile>> treeIronFileList = dirTree.getSelectionModel().getSelectedItems();
ObservableList<IronFile> selectedIronFiles = FXCollections.observableArrayList();
/** The following line converts ObservableList<TreeItem<IronFile> into ObservableList<IronFile> which is needed to display just the names.**/
selectedIronFiles.addAll(treeIronFileList.stream().map(TreeItem::getValue).collect(Collectors.toList()));
manager.setTags(selectedIronFiles, txtAddTag.getText());
}
/**
* On Click event that will search and display files based on entered tag
* */
@FXML private void eventSearchTag() {
ObservableList<IronFile> taggedItems = manager.getTaggedItems(txtTagSearch.getText());
viewTags.setItems(taggedItems);
}
/**
* Action on click event that will delete all tag information from selected files.
* */
@FXML private void eventDeleteTags() {
ObservableList<TreeItem<IronFile>> selectedItems = dirTree.getSelectionModel().getSelectedItems(); // get list of selected files
manager.deleteAllTags(selectedItems);
}
}

4 changes: 2 additions & 2 deletions src/main/resources/StartPage.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
<HBox alignment="CENTER" maxHeight="-Infinity" minHeight="-Infinity" prefHeight="50.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
<TextField fx:id="txtTagSearch" promptText="Include Tag..." />
<Button fx:id="btnSearchTag" mnemonicParsing="false" text="Search">
<Button fx:id="btnSearchTag" mnemonicParsing="false" onAction="#eventSearchTag" text="Search">
<HBox.margin>
<Insets left="15.0" />
</HBox.margin>
Expand Down Expand Up @@ -128,7 +128,7 @@
<HBox prefHeight="25.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
<TextField fx:id="txtAddTag" promptText="Add Tag..." />
<Button fx:id="btnAddTag" mnemonicParsing="false" prefWidth="75.0" text="Add" />
<Button fx:id="btnAddTag" mnemonicParsing="false" onAction="#eventAddTag" prefWidth="75.0" text="Add" />
</children>
</HBox>
</top>
Expand Down

0 comments on commit 66b177c

Please sign in to comment.