Compare commits

...

2 commits
v0.2 ... master

Author SHA1 Message Date
Seelenoede
bf24ecdab0 - Fixed things GUIn the Engine class
- changed from Swing GUI to JavaFX GUI
- added release 0.3
2019-08-21 15:00:31 +02:00
Seelenoede
c14054b170 Separated GUI from Logic. No new features 2019-08-16 14:19:27 +02:00
6 changed files with 217 additions and 216 deletions

Binary file not shown.

View file

@ -0,0 +1,56 @@
package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class Engine {
private SettingsFilter filter;
public Engine() {
filter = new SettingsFilter();
}
/**
* Extract files from the directories
*
* @author Seelenoede
*/
protected void extractFiles(File[] dirs) {
for(File dir:dirs) {
try {
String parentDir = dir.getCanonicalFile().getParent();
File[] files;
if(filter.extensions.size() == 0)
files = dir.listFiles();
else
files = dir.listFiles(filter);
for(File file:files) {
Path target = FileSystems.getDefault().getPath(parentDir + "\\" + file.getName());
Files.move(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
protected void setExtensionSettings(String extensionString) {
if(extensionString.equals("")) {
return;
}
String[] extensions = extensionString.split(",");
for(String extension:extensions) {
filter.extensions.add(extension.trim());
}
}
}

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<BorderPane fx:controller="eu.seelenoede.getyourfilesoutthere.Main" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171">
<center>
<Label fx:id="lblDone" text="Done" visible="false" BorderPane.alignment="CENTER">
<BorderPane.margin>
<Insets bottom="5.0" />
</BorderPane.margin>
</Label>
</center>
<bottom>
<Button mnemonicParsing="false" onAction="#handleStartButtonAction" text="Start" BorderPane.alignment="CENTER" />
</bottom>
<top>
<GridPane BorderPane.alignment="CENTER">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" />
<ColumnConstraints hgrow="SOMETIMES" />
<ColumnConstraints hgrow="SOMETIMES" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="textField_dirs" editable="false" GridPane.columnIndex="1">
<GridPane.margin>
<Insets />
</GridPane.margin>
</TextField>
<Label text="Path: " />
<Button alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#handleBrowseButtonAction" text="Browse" GridPane.columnIndex="2">
<GridPane.margin>
<Insets left="5.0" right="5.0" />
</GridPane.margin>
</Button>
<Label text="Extensions: " GridPane.rowIndex="1" />
<TextField fx:id="textField_extensions" GridPane.columnIndex="1" GridPane.rowIndex="1" text=""/>
</children>
<BorderPane.margin>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</BorderPane.margin>
</GridPane>
</top>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</BorderPane>

View file

@ -0,0 +1,95 @@
package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.IOException;
import javax.swing.JFileChooser;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
public class Main extends Application {
private boolean alreadyRunning;
private File[] dirs;
private Engine engine;
@FXML Label lblDone;
@FXML TextField textField_dirs;
@FXML TextField textField_extensions;
@FXML
public void initialize() {
engine = new Engine();
alreadyRunning = false;
}
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("GUI.fxml"));
Scene scene = new Scene(root);
primaryStage.setTitle("Get Your Files Out There");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
@FXML
private void handleBrowseButtonAction(ActionEvent event) {
selectDirs();
}
@FXML
private void handleStartButtonAction(ActionEvent event) {
Thread noBlock = new Thread() {
public void run() {
engine.setExtensionSettings(textField_extensions.getText());
resetElements();
engine.extractFiles(dirs);
alreadyRunning = false;
lblDone.setVisible(true);
}
};
if ((!alreadyRunning) & (dirs!=null)) {
noBlock.start();
alreadyRunning = true;
}
}
private void resetElements() {
lblDone.setVisible(false);
}
private void selectDirs() {
if(alreadyRunning){
return;
}
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setMultiSelectionEnabled(true);
int val = chooser.showOpenDialog(null);
if (val == JFileChooser.APPROVE_OPTION) {
dirs = chooser.getSelectedFiles();
String selectedDirs = "";
for (File dir:dirs)
{
selectedDirs = selectedDirs + "\"" + dir.getAbsolutePath() + "\"; ";
}
textField_dirs.setText(selectedDirs);
}
}
}

View file

@ -1,215 +0,0 @@
package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import javax.swing.JFileChooser;
import javax.swing.BoxLayout;
import java.awt.FlowLayout;
public class MainForm {
private JFrame frmGetYourFiles;
private JTextField textField;
private JLabel lblPath;
private boolean alreadyRunning;
private JPanel panel_progress;
private JButton btnBrowse;
private File[] dirs;
private JLabel lblDone;
static ArrayList<String> extensions;
private SettingsFilter filter;
private JPanel panel;
private JPanel panel_settings;
private JLabel lblSettings;
private JTextField textField_extensions;
/**
* Launch the application.
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
MainForm window = new MainForm();
window.frmGetYourFiles.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public MainForm() {
filter = new SettingsFilter();
extensions = new ArrayList<String>();
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
alreadyRunning = false;
frmGetYourFiles = new JFrame("Get Your Files Out There");
frmGetYourFiles.setTitle("Get Your Files Out There");
frmGetYourFiles.getContentPane().setBackground(Color.LIGHT_GRAY);
frmGetYourFiles.setResizable(false);
frmGetYourFiles.setBackground(Color.WHITE);
frmGetYourFiles.setBounds(100, 100, 489, 150);
frmGetYourFiles.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmGetYourFiles.setLocationRelativeTo(null);
frmGetYourFiles.getContentPane().setLayout(new BorderLayout(0, 0));
panel = new JPanel();
frmGetYourFiles.getContentPane().add(panel, BorderLayout.NORTH);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JPanel panel_path = new JPanel();
panel.add(panel_path);
panel_path.setBackground(Color.WHITE);
lblPath = new JLabel("Path: ");
panel_path.add(lblPath);
textField = new JTextField();
textField.setEditable(false);
panel_path.add(textField);
textField.setColumns(30);
btnBrowse = new JButton("Browse");
btnBrowse.setBackground(Color.LIGHT_GRAY);
btnBrowse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(alreadyRunning){
return;
}
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setMultiSelectionEnabled(true);
int val = chooser.showOpenDialog(null);
if (val == JFileChooser.APPROVE_OPTION) {
dirs = chooser.getSelectedFiles();
String selectedDirs = "";
for (File dir:dirs)
{
selectedDirs = selectedDirs + "\"" + dir.getAbsolutePath() + "\"; ";
}
textField.setText(selectedDirs);
}
}
});
panel_path.add(btnBrowse);
panel_settings = new JPanel();
panel_settings.setBackground(Color.WHITE);
panel.add(panel_settings);
panel_settings.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
lblSettings = new JLabel("Extensions: ");
panel_settings.add(lblSettings);
textField_extensions = new JTextField();
panel_settings.add(textField_extensions);
textField_extensions.setColumns(35);
JButton btnStart = new JButton("Start");
frmGetYourFiles.getContentPane().add(btnStart, BorderLayout.SOUTH);
btnStart.setSelected(true);
btnStart.setBackground(Color.LIGHT_GRAY);
frmGetYourFiles.getRootPane().setDefaultButton(btnStart);
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Thread noBlock = new Thread() {
public void run() {
setExtensionSettings();
resetElements();
extractFiles();
}
};
if ((!alreadyRunning) & (dirs!=null)) {
noBlock.start();
alreadyRunning = true;
}
}
});
panel_progress = new JPanel();
panel_progress.setBackground(Color.WHITE);
frmGetYourFiles.getContentPane().add(panel_progress, BorderLayout.CENTER);
lblDone = new JLabel("");
panel_progress.add(lblDone);
}
private void extractFiles() {
for(File dir:dirs) {
try {
String parentDir = dir.getCanonicalFile().getParent();
File[] files;
if(MainForm.extensions.size() == 1 && MainForm.extensions.get(0).equals(""))
files = dir.listFiles();
else
files = dir.listFiles(filter);
for(File file:files) {
Path target = FileSystems.getDefault().getPath(parentDir + "\\" + file.getName());
Files.move(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
lblDone.setText("Done");
alreadyRunning = false;
}
private void resetElements() {
//lblExtract.setText("");
//lblZip.setText("");
lblDone.setText("");
//progressBar_Extraction.setValue(0);
//progressBar_Zip.setValue(0);
}
private void setExtensionSettings() {
String[] extensions = textField_extensions.getText().split(",");
if (extensions.length == 0)
return;
for(String extension:extensions) {
MainForm.extensions.add(extension.trim());
}
}
}

View file

@ -2,15 +2,22 @@ package eu.seelenoede.getyourfilesoutthere;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
public class SettingsFilter implements FileFilter {
ArrayList<String> extensions;
SettingsFilter() {
extensions = new ArrayList<String>();
}
@Override
public boolean accept(File pathname) {
String filePath = pathname.getAbsolutePath();
String fileExtension = filePath.substring(filePath.lastIndexOf('.') + 1);
if(MainForm.extensions.contains(fileExtension))
if(extensions.contains(fileExtension))
return true;
return false;
}