diff --git a/Lab3/src/main/java/org/lumijiez/base/ArbitraryFile.java b/Lab3/src/main/java/org/lumijiez/base/ArbitraryFile.java index 30bd32e..e784d03 100644 --- a/Lab3/src/main/java/org/lumijiez/base/ArbitraryFile.java +++ b/Lab3/src/main/java/org/lumijiez/base/ArbitraryFile.java @@ -9,6 +9,12 @@ public class ArbitraryFile extends Document{ @Override public String getInfo() { - return "ARBITRARY"; + StringBuilder info = new StringBuilder(); + info.append("Type: ").append(getFileType().getTypeName()).append("
"); + info.append("Extension: ").append(getExtension().toUpperCase()).append("
"); + info.append("File size: ").append(getFilesizeKB()).append(" KB").append("
"); + info.append("Created at: ").append(getCreatedTime()).append("
"); + info.append("Modified at: ").append(getModificationTime()).append("
"); + return info.toString(); } } diff --git a/Lab3/src/main/java/org/lumijiez/base/CodeFile.java b/Lab3/src/main/java/org/lumijiez/base/CodeFile.java index 57e688c..9e5703f 100644 --- a/Lab3/src/main/java/org/lumijiez/base/CodeFile.java +++ b/Lab3/src/main/java/org/lumijiez/base/CodeFile.java @@ -1,5 +1,7 @@ package org.lumijiez.base; +import org.lumijiez.util.Utils; + import java.nio.file.Path; public class CodeFile extends Document{ @@ -9,6 +11,13 @@ public class CodeFile extends Document{ @Override public String getInfo() { - return "CODE"; + StringBuilder info = new StringBuilder(); + info.append("Type: ").append(getFileType().getTypeName()).append("
"); + info.append("Extension: ").append(getExtension().toUpperCase()).append("
"); + info.append("File size: ").append(getFilesizeKB()).append(" KB").append("
"); + info.append("Lines: ").append(Utils.countLines(this)).append("
"); + info.append("Created at: ").append(getCreatedTime()).append("
"); + info.append("Modified at: ").append(getModificationTime()).append("
"); + return info.toString(); } } diff --git a/Lab3/src/main/java/org/lumijiez/base/Document.java b/Lab3/src/main/java/org/lumijiez/base/Document.java index 737fba2..2de230a 100644 --- a/Lab3/src/main/java/org/lumijiez/base/Document.java +++ b/Lab3/src/main/java/org/lumijiez/base/Document.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; +import java.text.SimpleDateFormat; import java.util.Date; public class Document extends File implements IDocument { @@ -31,10 +32,18 @@ public class Document extends File implements IDocument { } @Override - public Date getCreatedTime() { + public String getCreatedTime() { try { BasicFileAttributes fileAttributes = Files.readAttributes(Path.of(this.getPath()), BasicFileAttributes.class); - return new Date(fileAttributes.creationTime().toMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yy"); + SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); + + Date date = new Date(fileAttributes.creationTime().toMillis()); + + String formattedDate = dateFormat.format(date); + String formattedTime = timeFormat.format(date); + + return formattedTime + " " + formattedDate; } catch (IOException e) { e.printStackTrace(); } @@ -42,10 +51,18 @@ public class Document extends File implements IDocument { } @Override - public Date getModificationTime() { + public String getModificationTime() { try { BasicFileAttributes fileAttributes = Files.readAttributes(Path.of(this.getPath()), BasicFileAttributes.class); - return new Date(fileAttributes.lastAccessTime().toMillis()); + SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yy"); + SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm"); + + Date date = new Date(fileAttributes.lastModifiedTime().toMillis()); + + String formattedDate = dateFormat.format(date); + String formattedTime = timeFormat.format(date); + + return formattedTime + " " + formattedDate; } catch (IOException e) { e.printStackTrace(); } diff --git a/Lab3/src/main/java/org/lumijiez/base/ImageFile.java b/Lab3/src/main/java/org/lumijiez/base/ImageFile.java index 54ebce8..b11887e 100644 --- a/Lab3/src/main/java/org/lumijiez/base/ImageFile.java +++ b/Lab3/src/main/java/org/lumijiez/base/ImageFile.java @@ -12,12 +12,15 @@ public class ImageFile extends Document { @Override public String getInfo() { try { + StringBuilder info = new StringBuilder(); + info.append("Type: ").append(getFileType().getTypeName()).append("
"); + info.append("Extension: ").append(getExtension().toUpperCase()).append("
"); BufferedImage image = ImageIO.read(this); - if (image != null) { - int width = image.getWidth(); - int height = image.getHeight(); - return "IMAGE " + width + "x" + height; - } + info.append("Dimensions: ").append(image.getWidth()).append("x").append(image.getHeight()).append("
"); + info.append("File size: ").append(getFilesizeKB()).append(" KB").append("
"); + info.append("Created at: ").append(getCreatedTime()).append("
"); + info.append("Modified at: ").append(getModificationTime()).append("
"); + return info.toString(); } catch (IOException e) { e.printStackTrace(); } diff --git a/Lab3/src/main/java/org/lumijiez/base/TextFile.java b/Lab3/src/main/java/org/lumijiez/base/TextFile.java index e45a1ed..2784817 100644 --- a/Lab3/src/main/java/org/lumijiez/base/TextFile.java +++ b/Lab3/src/main/java/org/lumijiez/base/TextFile.java @@ -1,9 +1,25 @@ package org.lumijiez.base; +import org.lumijiez.util.Utils; + import java.nio.file.Path; public class TextFile extends Document { public TextFile(Path path) { super(path); } + + @Override + public String getInfo() { + StringBuilder info = new StringBuilder(); + info.append("Type: ").append(getFileType().getTypeName()).append("
"); + info.append("Extension: ").append(getExtension().toUpperCase()).append("
"); + info.append("File size: ").append(getFilesizeKB()).append(" KB").append("
"); + info.append("Words: ").append(Utils.countWords(this)).append("
"); + info.append("Lines: ").append(Utils.countLines(this)).append("
"); + info.append("Characters: ").append(Utils.countChars(this)).append("
"); + info.append("Created at: ").append(getCreatedTime()).append("
"); + info.append("Modified at: ").append(getModificationTime()).append("
"); + return info.toString(); + } } diff --git a/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java b/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java index bde11c4..ec83d41 100644 --- a/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java +++ b/Lab3/src/main/java/org/lumijiez/gui/MainFrame.java @@ -11,7 +11,6 @@ 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(); @@ -19,11 +18,12 @@ public class MainFrame extends JFrame { private final JLabel snapshotLabel = new JLabel(); private final JButton CommitButton = new JButton(); private final JButton StatusButton = new JButton(); - private final JMenuBar MainMenubar = new JMenuBar(); + private final JMenuBar mainMenubar = new JMenuBar(); private final JMenu fileMenu = new JMenu(); private final JMenuItem pickFolder = new JMenuItem(); private final JMenu settingsMenu = new JMenu(); private final JMenuItem settings = new JMenuItem(); + private final JList fileList = new JList<>(); private final Map fileContents = new HashMap<>(); private TrackerThread tracker; @@ -33,53 +33,49 @@ public class MainFrame extends JFrame { private void initComponents() { + setResizable(false); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + mainTextPane.setContentType("text/html"); + fileInfoTextPane.setContentType("text/html"); + + mainTextPane.setEditable(false); + fileInfoTextPane.setEditable(false); JFileChooser folderChooser = new JFileChooser(); folderChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); - - int returnVal = folderChooser.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { + if (folderChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { FOLDER_PATH = Path.of(folderChooser.getSelectedFile().getAbsolutePath()); tracker = new TrackerThread(mainTextPane, fileContents, fileList, fileInfoTextPane); tracker.start(); } + snapshotLabel.setFont(new java.awt.Font("Trebuchet MS", Font.PLAIN, 18)); + pathLabel.setFont(new java.awt.Font("Trebuchet MS", Font.PLAIN, 18)); + fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); fileListScrollPane.setViewportView(fileList); - - 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)); - pathLabel.setText("Currently tracking: " + FOLDER_PATH.toString()); - - CommitButton.setText("Commit"); CommitButton.addActionListener(this::CommitButtonActionPerformed); - StatusButton.setText("Status"); - StatusButton.addActionListener(this::StatusButtonActionPerformed); - - fileMenu.setText("File"); - - pickFolder.setText("Pick another folder"); fileMenu.add(pickFolder); - - MainMenubar.add(fileMenu); - - settingsMenu.setText("Edit"); - - settings.setText("Settings"); settingsMenu.add(settings); + mainMenubar.add(fileMenu); + mainMenubar.add(settingsMenu); - MainMenubar.add(settingsMenu); + StatusButton.setText("Status"); + pathLabel.setText("Currently tracking: " + FOLDER_PATH.toString()); + CommitButton.setText("Commit"); + snapshotLabel.setText("Last snapshot: " + new Date()); + fileMenu.setText("File"); + pickFolder.setText("Pick another folder"); + settingsMenu.setText("Edit"); + settings.setText("Settings"); - setJMenuBar(MainMenubar); + setJMenuBar(mainMenubar); GroupLayout layout = new GroupLayout(getContentPane()); getContentPane().setLayout(layout); @@ -98,8 +94,7 @@ public class MainFrame extends JFrame { .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(CommitButton, GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE) .addComponent(fileInfoScrollPane)))) - .addContainerGap()) - ); + .addContainerGap())); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() @@ -123,7 +118,4 @@ public class MainFrame extends JFrame { mainTextPane.setText(""); snapshotLabel.setText("Last snapshot: " + new Date()); } - - private void StatusButtonActionPerformed(java.awt.event.ActionEvent evt) { - } } diff --git a/Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java b/Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java index e6232fd..05f2f54 100644 --- a/Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java +++ b/Lab3/src/main/java/org/lumijiez/interfaces/IDocument.java @@ -2,12 +2,10 @@ package org.lumijiez.interfaces; import org.lumijiez.enums.FileType; -import java.util.Date; - public interface IDocument { String getExtension(); - Date getCreatedTime(); - Date getModificationTime(); + String getCreatedTime(); + String getModificationTime(); FileType getFileType(); long getFilesizeKB(); String getInfo(); diff --git a/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java b/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java index fcf05b1..70ded34 100644 --- a/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java +++ b/Lab3/src/main/java/org/lumijiez/tracker/TrackerThread.java @@ -16,10 +16,10 @@ import java.util.Map; public class TrackerThread extends Thread { private final JTextPane textPane; + private final JTextPane fileInfoTextPane; + private final JList fileList; private Map fileContents; private final Map fileStates = new HashMap<>(); - private final JList fileList; - private final JTextPane fileInfoTextPane; public TrackerThread(JTextPane textPane, Map files, JList fileList, JTextPane fileInfoTextPane) { this.textPane = textPane; @@ -60,7 +60,6 @@ public class TrackerThread extends Thread { }); } - public void reset() { fileStates.clear(); } @@ -96,7 +95,6 @@ public class TrackerThread extends Thread { toShow.append(file.getName()).append(" has been ").append(fileStates.get(file).getAction()).append("
"); } } - // System.out.println(toShow.toString()); textPane.setText(toShow.toString()); } } diff --git a/Lab3/src/main/java/org/lumijiez/util/FileFactory.java b/Lab3/src/main/java/org/lumijiez/util/FileFactory.java index c7d0294..a0bcf29 100644 --- a/Lab3/src/main/java/org/lumijiez/util/FileFactory.java +++ b/Lab3/src/main/java/org/lumijiez/util/FileFactory.java @@ -1,17 +1,26 @@ package org.lumijiez.util; import org.lumijiez.base.*; -import org.lumijiez.enums.FileType; import java.nio.file.Path; public class FileFactory { public static Document getDocument(Path path) { Document doc = new Document(path); - if (doc.getFileType() == FileType.PLAINTEXT) return new TextFile(path); - if (doc.getFileType() == FileType.IMAGE) return new ImageFile(path); - if (doc.getFileType() == FileType.FILE) return new ArbitraryFile(path); - if (doc.getFileType() == FileType.CODE) return new CodeFile(path); + switch (doc.getFileType()) { + case PLAINTEXT -> { + return new TextFile(path); + } + case IMAGE -> { + return new ImageFile(path); + } + case FILE -> { + return new ArbitraryFile(path); + } + case CODE -> { + return new CodeFile(path); + } + } return doc; } } diff --git a/Lab3/src/main/java/org/lumijiez/util/Utils.java b/Lab3/src/main/java/org/lumijiez/util/Utils.java new file mode 100644 index 0000000..e51298a --- /dev/null +++ b/Lab3/src/main/java/org/lumijiez/util/Utils.java @@ -0,0 +1,51 @@ +package org.lumijiez.util; + +import org.lumijiez.base.Document; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +public class Utils { + public static int countWords(Document doc) { + try { + BufferedReader reader = new BufferedReader(new FileReader(doc)); + int wordCount = 0; + String line; + while ((line = reader.readLine()) != null) { + String[] words = line.split("\\s+"); + wordCount += words.length; + } + reader.close(); + return wordCount; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static int countLines(Document doc) { + try { + BufferedReader reader = new BufferedReader(new FileReader(doc)); + int lineCount = 0; + while (reader.readLine() != null) lineCount++; + reader.close(); + return lineCount; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static long countChars(Document doc) { + try { + BufferedReader reader = new BufferedReader(new FileReader(doc)); + long characterCount = 0; + while (reader.read() != -1) characterCount++; + reader.close(); + return characterCount; + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + +}