diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..3f3893a --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e1a2468 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/Week2.class +/Week4.class +/Week4Bonus.class +/Task.class +/Week9$1.class +/Week9$2.class +/Week9$3.class +/Week9.class +/Week9Gui.class +/Task$CompareByTitle.class +/Week9$4.class +/Task$SortByTitleComparator.class diff --git a/.project b/.project new file mode 100644 index 0000000..899a6d0 --- /dev/null +++ b/.project @@ -0,0 +1,28 @@ + + + club-challenges + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + 1698871122678 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/Task.java b/Task.java index a11794b..1a58c3c 100644 --- a/Task.java +++ b/Task.java @@ -1,48 +1,84 @@ + +import java.util.Arrays; +import java.util.Comparator; + // Represents a Task, which can be written and loaded to/from a file and are comparable to each other. public class Task { - private String title; - private String description; - private String dueDate; - private boolean completed; + private String title; + private String description; + private String dueDate; + private boolean completed; - // Constructor to create a new Task object. - public Task(String title, String description, String dueDate) { - this.title = title; - this.description = description; - this.dueDate = dueDate; - this.completed = false; - } + public static final Comparator BY_TITLE = new SortByTitleComparator(); - public String getTitle() { - return title; - } + // Constructor to create a new Task object. + public Task(String title, String description, String dueDate) { + this.title = title; + this.description = description; + this.dueDate = dueDate; + this.completed = false; + } - public String getDescription() { - return description; - } + public String getTitle() { + return title; + } - public String getDueDate() { - return dueDate; - } + public String getDescription() { + return description; + } - public boolean isCompleted() { - return completed; - } + public String getDueDate() { + return dueDate; + } - // Edit a task by providing new information. - public void editTask(String newTitle, String newDescription, String newDueDate) { - this.title = newTitle; - this.description = newDescription; - this.dueDate = newDueDate; - } + public boolean isCompleted() { + return completed; + } - // Return if a task is complete or not. - public void toggleComplete() { - if(completed) completed = false; - else completed = true; + // Edit a task by providing new information. + public void editTask(String newTitle, String newDescription, String newDueDate) { + this.title = newTitle; + this.description = newDescription; + this.dueDate = newDueDate; + } - System.out.println("task status toggled"); - } + // Return if a task is complete or not. + public void toggleComplete() { + if (completed) + completed = false; + else + completed = true; - // TODO: Implement Comparable or Comparator. + System.out.println("task status toggled"); + } + + // TODO: Implement Comparable or Comparator. + private static class SortByTitleComparator implements Comparator { + + @Override + public int compare(Task t1, Task t2) { + String[] tokens1 = t1.title.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"); + String[] tokens2 = t2.title.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"); + + int length = Math.min(tokens1.length, tokens2.length); + + for (int i = 0; i < length; i++) { + if (Character.isDigit(tokens1[i].charAt(0)) && Character.isDigit(tokens2[i].charAt(0))) { + int intCompare = Integer.compare(Integer.parseInt(tokens1[i]), Integer.parseInt(tokens2[i])); + + if (intCompare != 0) + return intCompare; + } else { + + int stringCompare = tokens1[i].compareTo(tokens2[i]); + + if (stringCompare != 0) + return stringCompare; + } + } + + return Integer.compare(tokens1.length, tokens2.length); + } + + } } diff --git a/Week9.java b/Week9.java index 8e80cca..f1b60ce 100644 --- a/Week9.java +++ b/Week9.java @@ -1,8 +1,5 @@ -package week9; - -import java.awt.event.*; - -import java.util.ArrayList; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; @@ -10,6 +7,10 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; + +import javax.swing.JOptionPane; public class Week9 { private static ArrayList tasks; @@ -19,7 +20,7 @@ public class Week9 { // NOTE: For sorts, the Task class needs something implemented. private static void sortByTitle() { System.out.println("Sort By Title clicked!"); - // TODO + Collections.sort(tasks, Task.BY_TITLE); gui.update(tasks); } @@ -37,6 +38,15 @@ public class Week9 { gui.update(tasks); } + // addBtn Method + private static void addBtn() { + String[] strs = new String[3]; + strs[0] = JOptionPane.showInputDialog("Please Enter A Title:"); + strs[1] = JOptionPane.showInputDialog("Please Enter A Discription:"); + strs[2] = JOptionPane.showInputDialog("Please Enter A Due Date:"); + + } + private void parse(File f) { try (BufferedReader myReader = new BufferedReader(new FileReader(f))) { String line; @@ -71,8 +81,7 @@ public class Week9 { // Writes each task to the file after a change. private static void saveTasks() { System.out.println("writing tasks to " + filepath); - try (BufferedWriter myWriter = new BufferedWriter( - new FileWriter(filepath))) { + try (BufferedWriter myWriter = new BufferedWriter(new FileWriter(filepath))) { myWriter.flush(); String line; @@ -84,8 +93,7 @@ public class Week9 { desc = task.getDescription(); date = task.getDueDate(); completed = task.isCompleted(); - line = String.format("%s,%s,%s,%b", title, desc, date, - completed); + line = String.format("%s,%s,%s,%b", title, desc, date, completed); myWriter.append(line); myWriter.newLine(); @@ -108,8 +116,8 @@ public class Week9 { testData(); } - // Identify the operating system of the user, and obtain the path to the - // "tasks" directory. + // Identify the operating system of the user, and obtain the path to the "tasks" + // directory. private String getNotesDirectoryPath() { String os = System.getProperty("os.name").toLowerCase(); @@ -133,8 +141,7 @@ public class Week9 { if (f.isFile()) { System.out.println("loading tasks from " + filepath); parse(f); - } - else { + } else { try { f.createNewFile(); System.out.println(filepath + " has been created."); @@ -144,13 +151,12 @@ public class Week9 { } } - // Test tasks, not read from a file and are not intended to be saved to a - // file. + // Test tasks, not read from a file and are not intended to be saved to a file. private void testData() { - for (int i = 0; i < 10; i++) - tasks.add(new Task("Title " + i, "Description " + i, - "Due Date " + i)); - saveTasks(); + tasks.add(new Task("Title 1000", "Description ", "Due Date ")); + tasks.add(new Task("100 Title", "Description ", "Due Date ")); + for (int i = 20; i > 0; i--) + tasks.add(new Task("Title " + i, "Description " + i, "Due Date " + i)); } public static void main(String[] args) { @@ -173,147 +179,13 @@ public class Week9 { } }; - gui = new Week9Gui(tasks, sortByTitle, sortByDueDate, - filterByCompleted); - } -======= -import java.util.Scanner; - -import javax.swing.JOptionPane; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; - -public class Week9 { - private static ArrayList tasks; - private static String filepath; - private static Week9Gui gui; - - // NOTE: For sorts, the Task class needs something implemented. - private static void sortByTitle() { - System.out.println("Sort By Title clicked!"); - // TODO - gui.update(tasks); - } - - // NOTE: For sorts, the Task class needs something implemented. - private static void sortByDueDate() { - System.out.println("Sort By Due Date clicked!"); - // TODO - gui.update(tasks); - } - - // NOTE: For sorts, the Task class needs something implemented. - private static void filterByComplete() { - System.out.println("Filter By Complete clicked!"); - // TODO - gui.update(tasks); - } - - //addBtn Method - private static void addBtn() { - String[] strs = new String[3]; - strs[0] = JOptionPane.showInputDialog("Please Enter A Title:"); - strs[1] = JOptionPane.showInputDialog("Please Enter A Discription:"); - strs[2] = JOptionPane.showInputDialog("Please Enter A Due Date:"); - - - } - - private void parse(File f) throws IOException { - // TODO: Need to open the file and get each line. - // TODO: Parse the format ("TITLE, DESCRIPTION, DUE DATE, COMPLETED"), - // TODO: Create a new Task object and add it to the ArrayList. - - } - - // Writes each task to the file after a change. - private static void saveTasks() { - System.out.println("writing tasks to " + filepath); - // TODO: Write each Task stored in the ArrayList to the file. - } - - ///////////////////////// END OF TODO //////////////////////////// - - // Initialize tasks and GUI, populate with test data (if applicable). - private void init() { - filepath = getNotesDirectoryPath(); - initTasks(); - testData(); - } - - // Identify the operating system of the user, and obtain the path to the "tasks" directory. - private String getNotesDirectoryPath() { - String os = System.getProperty("os.name").toLowerCase(); - - String userHome = System.getProperty("user.home"); - String tasksDir = "tasks"; - - if (os.contains("win")) // Windows - return userHome + "\\" + tasksDir; - else if (os.contains("mac")) // MacOS - return userHome + "/Library/Application Support/" + tasksDir; - else // Linux/other - return userHome + "/" + tasksDir; - } - - // Create the tasks file if it does not already exist. Load tasks from the existing file otherwise. - private void initTasks() { - File f = new File(filepath); - tasks = new ArrayList(); - - if(f.isFile()) { - System.out.println("loading tasks from " + filepath); - try { - parse(f); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } else { - try { - f.createNewFile(); - System.out.println(filepath + " has been created."); - } catch(Exception e) { - System.out.println(e); - } - } - } - - // Test tasks, not read from a file and are not intended to be saved to a file. - private void testData() { - for(int i = 0; i < 10; i++) - tasks.add(new Task("Title " + i, "Description " + i, "Due Date " + i)); - } - - public static void main(String[] args) { - new Week9().init(); - ActionListener sortByTitle = new ActionListener() { - public void actionPerformed(ActionEvent e) { - sortByTitle(); - } - }; - - ActionListener sortByDueDate = new ActionListener() { - public void actionPerformed(ActionEvent e) { - sortByDueDate(); - } - }; - - ActionListener filterByCompleted = new ActionListener() { - public void actionPerformed(ActionEvent e) { - filterByComplete(); - } - }; - - ActionListener addBtn = new ActionListener() { + ActionListener addBtn = new ActionListener() { public void actionPerformed(ActionEvent e) { addBtn(); } - }; + }; - gui = new Week9Gui(tasks, sortByTitle, sortByDueDate, filterByCompleted, addBtn); - } + gui = new Week9Gui(tasks, sortByTitle, sortByDueDate, filterByCompleted, addBtn); + } -} +} \ No newline at end of file