From 79a11cf6cbe8eff3a34cdd271ff537f69ed8d34e Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 17 Oct 2023 15:19:08 +0300 Subject: [PATCH] Big code clean-up, added interfaces, and colored text --- Lab3/src/main/java/org/lumijiez/Main.java | 9 +-- .../main/java/org/lumijiez/base/Document.java | 33 +++++++++ .../java/org/lumijiez/enums/DiffType.java | 15 ++++ .../java/org/lumijiez/enums/FileType.java | 16 +++++ .../lumijiez/{util => enums}/StateType.java | 10 +-- .../main/java/org/lumijiez/gui/MainFrame.java | 33 ++++----- .../org/lumijiez/interfaces/IDocument.java | 10 +++ .../org/lumijiez/tracker/TrackerThread.java | 71 ++++++++----------- .../main/java/org/lumijiez/util/DiffType.java | 5 -- .../java/org/lumijiez/util/FileDiffer.java | 21 +++--- 10 files changed, 135 insertions(+), 88 deletions(-) create mode 100644 Lab3/src/main/java/org/lumijiez/base/Document.java create mode 100644 Lab3/src/main/java/org/lumijiez/enums/DiffType.java create mode 100644 Lab3/src/main/java/org/lumijiez/enums/FileType.java rename Lab3/src/main/java/org/lumijiez/{util => enums}/StateType.java (50%) create mode 100644 Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java delete mode 100644 Lab3/src/main/java/org/lumijiez/util/DiffType.java diff --git a/Lab3/src/main/java/org/lumijiez/Main.java b/Lab3/src/main/java/org/lumijiez/Main.java index aa6e1f9..b7c22c9 100644 --- a/Lab3/src/main/java/org/lumijiez/Main.java +++ b/Lab3/src/main/java/org/lumijiez/Main.java @@ -3,16 +3,9 @@ package org.lumijiez; import org.lumijiez.gui.MainFrame; import javax.swing.*; -import java.io.IOException; public class Main { public static void main(String[] args) { - SwingUtilities.invokeLater(() -> { - try { - new MainFrame().setVisible(true); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true)); } } \ No newline at end of file diff --git a/Lab3/src/main/java/org/lumijiez/base/Document.java b/Lab3/src/main/java/org/lumijiez/base/Document.java new file mode 100644 index 0000000..8ea4612 --- /dev/null +++ b/Lab3/src/main/java/org/lumijiez/base/Document.java @@ -0,0 +1,33 @@ +package org.lumijiez.base; + +import org.lumijiez.enums.FileType; +import org.lumijiez.interfaces.IDocument; + +import java.util.Date; + +public class Document implements IDocument { + private String fullFilename = ""; + private FileType fileType; + private Date createdAt; + private Date modifiedAt; + + @Override + public String getFilename() { + return null; + } + + @Override + public String getExtension() { + return null; + } + + @Override + public Date getCreatedTime() { + return null; + } + + @Override + public Date getModificationTime() { + return null; + } +} diff --git a/Lab3/src/main/java/org/lumijiez/enums/DiffType.java b/Lab3/src/main/java/org/lumijiez/enums/DiffType.java new file mode 100644 index 0000000..55e060e --- /dev/null +++ b/Lab3/src/main/java/org/lumijiez/enums/DiffType.java @@ -0,0 +1,15 @@ +package org.lumijiez.enums; + +public enum DiffType { + CREATE(StateType.NEW), DELETE(StateType.DELETED), MODIFY(StateType.MODIFIED), NONE(StateType.NONE); + + private final StateType type; + + DiffType(StateType type) { + this.type = type; + } + + public StateType getState() { + return type; + } +} diff --git a/Lab3/src/main/java/org/lumijiez/enums/FileType.java b/Lab3/src/main/java/org/lumijiez/enums/FileType.java new file mode 100644 index 0000000..17077c4 --- /dev/null +++ b/Lab3/src/main/java/org/lumijiez/enums/FileType.java @@ -0,0 +1,16 @@ +package org.lumijiez.enums; + +import java.util.ArrayList; +import java.util.List; + +public enum FileType { + IMAGE, PLAINTEXT, FILE, CODE; + public List typeExtensions; + + static { + IMAGE.typeExtensions = new ArrayList<>(List.of("jpg", "png")); + PLAINTEXT.typeExtensions = new ArrayList<>(List.of("txt", "csv")); + FILE.typeExtensions = new ArrayList<>(List.of("doc", "pdf", "zip")); + CODE.typeExtensions = new ArrayList<>(List.of("java", "cpp", "py")); + } +} diff --git a/Lab3/src/main/java/org/lumijiez/util/StateType.java b/Lab3/src/main/java/org/lumijiez/enums/StateType.java similarity index 50% rename from Lab3/src/main/java/org/lumijiez/util/StateType.java rename to Lab3/src/main/java/org/lumijiez/enums/StateType.java index 66483ab..ee0a836 100644 --- a/Lab3/src/main/java/org/lumijiez/util/StateType.java +++ b/Lab3/src/main/java/org/lumijiez/enums/StateType.java @@ -1,14 +1,14 @@ -package org.lumijiez.util; +package org.lumijiez.enums; public enum StateType { NEW("Created"), MODIFIED("Modified"), DELETED("Deleted"), NONE("Nothing"); - private final String name; + private final String action; StateType(String name) { - this.name = name; + this.action = name; } - public String getName() { - return this.name; + public String getAction() { + return this.action; } } diff --git a/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java b/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java index 0d31c42..8064db8 100644 --- a/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java +++ b/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java @@ -4,16 +4,18 @@ import org.lumijiez.tracker.TrackerThread; import javax.swing.*; import java.awt.*; import java.io.File; -import java.io.IOException; import java.nio.file.Path; import java.util.*; public class MainFrame extends JFrame { + public static Path FOLDER_PATH; private final JScrollPane fileListScrollPane = new JScrollPane(); + private final JScrollPane fileInfoScrollPane = new JScrollPane(); private final JList fileList = new JList<>(); private final JLabel pathLabel = new JLabel(); private final JScrollPane mainScrollPane = new JScrollPane(); private final JTextPane mainTextPane = new JTextPane(); + private final JTextPane fileInfoTextPane = new JTextPane(); private final JLabel snapshotLabel = new JLabel(); private final JButton CommitButton = new JButton(); private final JButton StatusButton = new JButton(); @@ -25,7 +27,7 @@ public class MainFrame extends JFrame { private final Map fileContents = new HashMap<>(); private TrackerThread tracker; - public MainFrame() throws IOException { + public MainFrame() { initComponents(); } @@ -40,20 +42,22 @@ public class MainFrame extends JFrame { int returnVal = folderChooser.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { - tracker = new TrackerThread(mainTextPane, Path.of(folderChooser.getSelectedFile().getAbsolutePath()), fileContents, fileList); + FOLDER_PATH = Path.of(folderChooser.getSelectedFile().getAbsolutePath()); + tracker = new TrackerThread(mainTextPane, fileContents, fileList); tracker.start(); } fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fileListScrollPane.setViewportView(fileList); - snapshotLabel.setFont(new java.awt.Font("Trebuchet MS", Font.PLAIN, 18)); // NOI18N + snapshotLabel.setFont(new java.awt.Font("Trebuchet MS", Font.PLAIN, 18)); snapshotLabel.setText("Last snapshot: " + new Date()); mainScrollPane.setViewportView(mainTextPane); + fileInfoScrollPane.setViewportView(fileInfoTextPane); - pathLabel.setFont(new java.awt.Font("Trebuchet MS", Font.PLAIN, 18)); // NOI18N - pathLabel.setText("Currently tracking: " + folderChooser.getSelectedFile().getAbsolutePath()); + pathLabel.setFont(new java.awt.Font("Trebuchet MS", Font.PLAIN, 18)); + pathLabel.setText("Currently tracking: " + FOLDER_PATH.toString()); CommitButton.setText("Commit"); CommitButton.addActionListener(this::CommitButtonActionPerformed); @@ -84,35 +88,32 @@ public class MainFrame extends JFrame { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) - .addComponent(pathLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(snapshotLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(pathLabel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(fileListScrollPane, GroupLayout.PREFERRED_SIZE, 195, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(mainScrollPane, GroupLayout.PREFERRED_SIZE, 599, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(CommitButton) - .addGap(0, 1, Short.MAX_VALUE)) - .addComponent(StatusButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addComponent(CommitButton, GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE) + .addComponent(fileInfoScrollPane)))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(snapshotLabel, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE) - .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addComponent(pathLabel, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false) - .addComponent(fileListScrollPane, GroupLayout.DEFAULT_SIZE, 573, Short.MAX_VALUE) - .addComponent(mainScrollPane)) + .addComponent(fileListScrollPane, GroupLayout.DEFAULT_SIZE, 573, Short.MAX_VALUE) + .addComponent(mainScrollPane) .addGroup(layout.createSequentialGroup() .addComponent(CommitButton) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) - .addComponent(StatusButton))) + .addComponent(fileInfoScrollPane))) .addContainerGap())); pack(); } diff --git a/Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java b/Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java new file mode 100644 index 0000000..998d968 --- /dev/null +++ b/Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java @@ -0,0 +1,10 @@ +package org.lumijiez.interfaces; + +import java.util.Date; + +public interface IDocument { + public String getFilename(); + public String getExtension(); + public Date getCreatedTime(); + public Date getModificationTime(); +} diff --git a/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java b/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java index b50045b..b890c7e 100644 --- a/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java +++ b/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java @@ -1,26 +1,24 @@ package org.lumijiez.tracker; -import org.lumijiez.util.DiffType; +import org.lumijiez.gui.MainFrame; +import org.lumijiez.enums.DiffType; import org.lumijiez.util.FileDiffer; -import org.lumijiez.util.StateType; +import org.lumijiez.enums.StateType; import javax.swing.*; import java.io.File; -import java.nio.file.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class TrackerThread extends Thread { private final JTextPane textPane; - private final Path path; private Map fileContents; - private final JList fileList; private final Map fileStates = new HashMap<>(); + private final JList fileList; - public TrackerThread(JTextPane textPane, Path path, Map files, JList fileList) { + public TrackerThread(JTextPane textPane, Map files, JList fileList) { this.textPane = textPane; - this.path = path; this.fileContents = files; this.fileList = fileList; init(); @@ -28,19 +26,14 @@ public class TrackerThread extends Thread { public void init() { System.out.println("Init called"); - fileContents = FileDiffer.crawlDirectory(path); - - ArrayList fileNames = new ArrayList<>(); - - for (File file : fileContents.keySet()) { - fileNames.add(file.getName()); - } + fileContents = FileDiffer.crawlDirectory(MainFrame.FOLDER_PATH); + ArrayList fList = new ArrayList<>(fileContents.keySet()); fileList.setModel(new AbstractListModel<>() { public int getSize() { - return fileNames.size(); + return fList.size(); } public String getElementAt(int i) { - return fileNames.get(i); + return fList.get(i).getName(); } }); } @@ -50,42 +43,37 @@ public class TrackerThread extends Thread { } public void checkDirectory() { - Map> result = FileDiffer.diff(fileContents, FileDiffer.crawlDirectory(path)); + Map> result = FileDiffer.diff(fileContents, FileDiffer.crawlDirectory(MainFrame.FOLDER_PATH)); StringBuilder toShow = new StringBuilder(); - boolean created = false, deleted = false, modified = false; - if (!result.get(DiffType.CREATE).isEmpty()) { - created = true; - for (File file : result.get(DiffType.CREATE)) { - fileStates.put(file, StateType.NEW); + boolean somethingNew = false; + + for (DiffType type : result.keySet()) { + for (File file : result.get(type)) { + somethingNew = true; + System.out.println("File changed " + file.getName() + " " + type.getState().getAction()); + fileStates.put(file, type.getState()); } - System.out.println("Created"); } - if (!result.get(DiffType.DELETE).isEmpty()) { - deleted = true; - for (File file : result.get(DiffType.DELETE)) { - fileStates.put(file, StateType.DELETED); - } - System.out.println("Deleted"); - } - - if (!result.get(DiffType.MODIFY).isEmpty()) { - modified = true; - for (File file : result.get(DiffType.MODIFY)) { - fileStates.put(file, StateType.MODIFIED); - } - System.out.println("Modified"); - } - - if (created || deleted || modified) { + if (somethingNew) { init(); for (File file : fileStates.keySet()) { if (fileStates.get(file) != StateType.NONE) { - toShow.append(file.getName()).append(" has been ").append(fileStates.get(file).getName()).append("
"); + if (fileStates.get(file) == StateType.NEW) { + toShow.append(""); + } + if (fileStates.get(file) == StateType.DELETED) { + toShow.append(""); + } + if (fileStates.get(file) == StateType.MODIFIED) { + toShow.append(""); + } + toShow.append(file.getName()).append(" has been ").append(fileStates.get(file).getAction()).append("
"); } } + // System.out.println(toShow.toString()); textPane.setText(toShow.toString()); } } @@ -94,7 +82,6 @@ public class TrackerThread extends Thread { public void run() { while(this.isAlive()) { checkDirectory(); - //Thread.sleep(200); } } } diff --git a/Lab3/src/main/java/org/lumijiez/util/DiffType.java b/Lab3/src/main/java/org/lumijiez/util/DiffType.java deleted file mode 100644 index 2be9dfd..0000000 --- a/Lab3/src/main/java/org/lumijiez/util/DiffType.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.lumijiez.util; - -public enum DiffType { - CREATE, DELETE, MODIFY, NONE -} diff --git a/Lab3/src/main/java/org/lumijiez/util/FileDiffer.java b/Lab3/src/main/java/org/lumijiez/util/FileDiffer.java index 5316fe5..4d6e515 100644 --- a/Lab3/src/main/java/org/lumijiez/util/FileDiffer.java +++ b/Lab3/src/main/java/org/lumijiez/util/FileDiffer.java @@ -1,5 +1,7 @@ package org.lumijiez.util; +import org.lumijiez.enums.DiffType; + import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -12,32 +14,27 @@ import java.util.stream.Stream; public class FileDiffer { public static Map> diff(Map oldFiles, Map newFiles) { - Map> result = new HashMap<>(); - - ArrayList newFileList = new ArrayList<>(); - ArrayList deletedFileList = new ArrayList<>(); - ArrayList modifiedFileList = new ArrayList<>(); + Map> result = Map.of( + DiffType.CREATE, new ArrayList<>(), + DiffType.DELETE, new ArrayList<>(), + DiffType.MODIFY, new ArrayList<>()); for (File file : oldFiles.keySet()) { if (newFiles.get(file) != null) { if (Arrays.compare(oldFiles.get(file), newFiles.get(file)) != 0) { - modifiedFileList.add(file); + result.get(DiffType.MODIFY).add(file); } } else { - deletedFileList.add(file); + result.get(DiffType.DELETE).add(file); } } for (File file : newFiles.keySet()) { if (oldFiles.get(file) == null) { - newFileList.add(file); + result.get(DiffType.CREATE).add(file); } } - result.put(DiffType.CREATE, newFileList); - result.put(DiffType.DELETE, deletedFileList); - result.put(DiffType.MODIFY, modifiedFileList); - return result; }