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