diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/AbstractDataModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/AbstractDataModel.java new file mode 100644 index 0000000000000000000000000000000000000000..3b9145d5a8f8087e6e05c72837657e84fedbf76d --- /dev/null +++ b/src/main/java/cz/muni/fi/pv168/project/model/db/AbstractDataModel.java @@ -0,0 +1,43 @@ +package cz.muni.fi.pv168.project.model.db; + +import cz.muni.fi.pv168.project.model.EditableModel; +import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; + +import javax.swing.DefaultListModel; + +public abstract class AbstractDataModel<E> extends DefaultListModel<E> implements EditableModel<E> { + + @Override + public void setElementAt(E element, int index) { + try { + update(element); + } catch (Exception e) { + e.printStackTrace(); + ErrorDialog.show("Error when editing " + element, e); + } + super.setElementAt(element, index); + } + + @Override + public void addElement(E element) { + try { + add(element); + } catch (Exception e) { + e.printStackTrace(); + ErrorDialog.show("Error when adding " + element, e); + } + + super.addElement(element); + } + + @Override + public boolean removeElement(Object obj) { + try { + delete((E) obj); + } catch (Exception e) { + e.printStackTrace(); + ErrorDialog.show("Error when removing " + obj, e); + } + return super.removeElement(obj); + } +} diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/CategoryModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/CategoryModel.java deleted file mode 100644 index 181371ce3c771f64b958979651084b17f574a7c2..0000000000000000000000000000000000000000 --- a/src/main/java/cz/muni/fi/pv168/project/model/db/CategoryModel.java +++ /dev/null @@ -1,77 +0,0 @@ -package cz.muni.fi.pv168.project.model.db; - -import cz.muni.fi.pv168.project.data.category.Category; -import cz.muni.fi.pv168.project.db.category.CategoryDao; -import cz.muni.fi.pv168.project.model.EditableModel; -import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; - -import javax.swing.DefaultListModel; - -public class CategoryModel extends DefaultListModel<Category> implements EditableModel<Category> { - - private final CategoryDao dataAccessObject; - - public CategoryModel(CategoryDao dao) { - this.dataAccessObject = dao; - updateAll(); - } - - @Override - public void delete(Category entity) { - dataAccessObject.delete(entity); - } - - @Override - public void add(Category entity) { - dataAccessObject.add(entity); - } - - @Override - public void update(Category entity) { - dataAccessObject.update(entity); - } - - @Override - public void setElementAt(Category element, int index) { - try { - update(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when editing " + element, e); - } - super.setElementAt(element, index); - } - - @Override - public void addElement(Category element) { - try { - add(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when adding " + element, e); - } - - super.addElement(element); - } - - @Override - public boolean removeElement(Object obj) { - try { - delete((Category) obj); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when removing " + obj, e); - } - return super.removeElement(obj); - } - - public void updateAll() { - clear(); - try { - addAll(dataAccessObject.getAll()); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when querying all elements.", e); - } - } -} diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/SubTaskModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/SubTaskModel.java index bfbab38df8fdfcc17b142fe20df3174cb046d64a..a799053e2260ad3f8fd3a80d18f446402c55fc37 100644 --- a/src/main/java/cz/muni/fi/pv168/project/model/db/SubTaskModel.java +++ b/src/main/java/cz/muni/fi/pv168/project/model/db/SubTaskModel.java @@ -3,24 +3,15 @@ package cz.muni.fi.pv168.project.model.db; import cz.muni.fi.pv168.project.data.task.SubTask; import cz.muni.fi.pv168.project.data.task.Task; import cz.muni.fi.pv168.project.db.subtask.SubTaskDao; -import cz.muni.fi.pv168.project.model.EditableModel; -import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; -import javax.swing.DefaultListModel; -import java.util.List; - -public class SubTaskModel extends DefaultListModel<SubTask> implements EditableModel<SubTask> { +public class SubTaskModel extends TaskPropertyListDataModel<SubTask> { private final SubTaskDao dataAccessObject; - private Task parentTask; public SubTaskModel(SubTaskDao dao) { + super(Task::getSubTasks); this.dataAccessObject = dao; } - - public void setParentTask(Task task) { - this.parentTask = task; - } @Override public void delete(SubTask entity) { @@ -38,42 +29,4 @@ public class SubTaskModel extends DefaultListModel<SubTask> implements EditableM public void update(SubTask entity) { dataAccessObject.update(entity); } - - public List<SubTask> fetchAll() { - return parentTask.getSubTasks(); - } - - @Override - public void setElementAt(SubTask element, int index) { - try { - update(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when editing " + element, e); - } - super.setElementAt(element, index); - } - - @Override - public void addElement(SubTask element) { - try { - add(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when adding " + element, e); - } - - super.addElement(element); - } - - @Override - public boolean removeElement(Object obj) { - try { - delete((SubTask) obj); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when removing " + obj, e); - } - return super.removeElement(obj); - } } diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/TaskCategoryModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskCategoryModel.java index 2f850860df129772e5d10ca68eee8b784e2ed5cb..aa4413cdbc3bb1761b3a09c99a7a3bf71ddde072 100644 --- a/src/main/java/cz/muni/fi/pv168/project/model/db/TaskCategoryModel.java +++ b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskCategoryModel.java @@ -3,25 +3,16 @@ package cz.muni.fi.pv168.project.model.db; import cz.muni.fi.pv168.project.data.category.Category; import cz.muni.fi.pv168.project.data.task.Task; import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryDao; -import cz.muni.fi.pv168.project.model.EditableModel; -import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; -import javax.swing.DefaultListModel; -import java.util.List; - -public class TaskCategoryModel extends DefaultListModel<Category> implements EditableModel<Category> { +public class TaskCategoryModel extends TaskPropertyListDataModel<Category> { private final TaskCategoryDao dataAccessObject; - private Task parentTask; public TaskCategoryModel(TaskCategoryDao dao) { + super(Task::getCategories); this.dataAccessObject = dao; } - public void setParentTask(Task task) { - this.parentTask = task; - } - @Override public void delete(Category entity) { dataAccessObject.deleteAssociationFor(parentTask.getId(), entity.getId()); @@ -37,42 +28,4 @@ public class TaskCategoryModel extends DefaultListModel<Category> implements Edi @Override public void update(Category entity) { } - - public List<Category> fetchAll() { - return parentTask.getCategories(); - } - - @Override - public void setElementAt(Category element, int index) { - try { - update(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when editing " + element, e); - } - super.setElementAt(element, index); - } - - @Override - public void addElement(Category element) { - try { - add(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when adding " + element, e); - } - - super.addElement(element); - } - - @Override - public boolean removeElement(Object obj) { - try { - delete((Category) obj); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when removing " + obj, e); - } - return super.removeElement(obj); - } } diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/TaskDependencyModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskDependencyModel.java index 8a85a003e870c9916fb4a8fe1895f76cd4aa424e..d15e88f8c580f72e6abf29fd30935072d434149c 100644 --- a/src/main/java/cz/muni/fi/pv168/project/model/db/TaskDependencyModel.java +++ b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskDependencyModel.java @@ -2,25 +2,16 @@ package cz.muni.fi.pv168.project.model.db; import cz.muni.fi.pv168.project.data.task.Task; import cz.muni.fi.pv168.project.db.dependency.DependencyDao; -import cz.muni.fi.pv168.project.model.EditableModel; -import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; -import javax.swing.DefaultListModel; -import java.util.List; - -public class TaskDependencyModel extends DefaultListModel<Task> implements EditableModel<Task> { +public class TaskDependencyModel extends TaskPropertyListDataModel<Task> { private final DependencyDao dataAccessObject; - private Task parentTask; public TaskDependencyModel(DependencyDao dao) { + super(Task::getDependencyTasks); this.dataAccessObject = dao; } - public void setParentTask(Task task) { - this.parentTask = task; - } - @Override public void delete(Task entity) { dataAccessObject.deleteAssociationFor(parentTask.getId(), entity.getId()); @@ -36,42 +27,4 @@ public class TaskDependencyModel extends DefaultListModel<Task> implements Edita @Override public void update(Task entity) { } - - public List<Task> fetchAll() { - return parentTask.getDependencyTasks(); - } - - @Override - public void setElementAt(Task element, int index) { - try { - update(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when editing " + element, e); - } - super.setElementAt(element, index); - } - - @Override - public void addElement(Task element) { - try { - add(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when adding " + element, e); - } - - super.addElement(element); - } - - @Override - public boolean removeElement(Object obj) { - try { - delete((Task) obj); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when removing " + obj, e); - } - return super.removeElement(obj); - } } diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/TaskModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskModel.java index e689b00f9e045027aba6db4d35b882f17612b7f7..d3eda703415173d1b43d458755824707061a83da 100644 --- a/src/main/java/cz/muni/fi/pv168/project/model/db/TaskModel.java +++ b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskModel.java @@ -2,79 +2,15 @@ package cz.muni.fi.pv168.project.model.db; import cz.muni.fi.pv168.project.data.task.Task; import cz.muni.fi.pv168.project.db.DataAccessException; -import cz.muni.fi.pv168.project.db.task.TaskDao; -import cz.muni.fi.pv168.project.model.EditableModel; +import cz.muni.fi.pv168.project.db.interfaces.DataAccessObject; import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; -import javax.swing.DefaultListModel; import java.util.function.Predicate; -public class TaskModel extends DefaultListModel<Task> implements EditableModel<Task> { - - private final TaskDao dataAccessObject; - - public TaskModel(TaskDao dao) { - this.dataAccessObject = dao; - updateAll(); - } - - @Override - public void delete(Task entity) { - dataAccessObject.delete(entity); - } - - @Override - public void add(Task entity) { - dataAccessObject.add(entity); - } - - @Override - public void update(Task entity) { - dataAccessObject.update(entity); - } - - @Override - public void setElementAt(Task element, int index) { - try { - update(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when editing " + element, e); - } - super.setElementAt(element, index); - } - - @Override - public void addElement(Task element) { - try { - add(element); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when adding " + element, e); - } - - super.addElement(element); - } - - @Override - public boolean removeElement(Object obj) { - try { - delete((Task) obj); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when removing " + obj, e); - } - return super.removeElement(obj); - } - - public void updateAll() { - clear(); - try { - addAll(dataAccessObject.getAll()); - } catch (Exception e) { - e.printStackTrace(); - ErrorDialog.show("Error when querying all elements.", e); - } +public class TaskModel extends UpdatableDataModel<Task> { + + public TaskModel(DataAccessObject<Task> dao) { + super(dao); } public void updateFiltered(Predicate<Task> predicate) { diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/TaskPropertyListDataModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskPropertyListDataModel.java new file mode 100644 index 0000000000000000000000000000000000000000..b66636e2ce5a54f9abc74066fb23aad85fa9ca0a --- /dev/null +++ b/src/main/java/cz/muni/fi/pv168/project/model/db/TaskPropertyListDataModel.java @@ -0,0 +1,24 @@ +package cz.muni.fi.pv168.project.model.db; + +import cz.muni.fi.pv168.project.data.task.Task; + +import java.util.List; +import java.util.function.Function; + +public abstract class TaskPropertyListDataModel<E> extends AbstractDataModel<E> { + + protected Task parentTask; + private final Function<Task, List<E>> fetcher; + + public TaskPropertyListDataModel(Function<Task, List<E>> fetcher) { + this.fetcher = fetcher; + } + + public void setParentTask(Task task) { + this.parentTask = task; + } + + public List<E> fetchAll() { + return fetcher.apply(parentTask); + } +} diff --git a/src/main/java/cz/muni/fi/pv168/project/model/db/UpdatableDataModel.java b/src/main/java/cz/muni/fi/pv168/project/model/db/UpdatableDataModel.java new file mode 100644 index 0000000000000000000000000000000000000000..781a685a7baf3e7af6fd57850810117d08b046c8 --- /dev/null +++ b/src/main/java/cz/muni/fi/pv168/project/model/db/UpdatableDataModel.java @@ -0,0 +1,39 @@ +package cz.muni.fi.pv168.project.model.db; + +import cz.muni.fi.pv168.project.db.interfaces.DataAccessObject; +import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; + +public class UpdatableDataModel<E> extends AbstractDataModel<E> { + + protected final DataAccessObject<E> dataAccessObject; + + public UpdatableDataModel(DataAccessObject<E> dao) { + this.dataAccessObject = dao; + updateAll(); + } + + @Override + public void delete(E entity) { + dataAccessObject.delete(entity); + } + + @Override + public void add(E entity) { + dataAccessObject.add(entity); + } + + @Override + public void update(E entity) { + dataAccessObject.update(entity); + } + + public void updateAll() { + clear(); + try { + addAll(dataAccessObject.getAll()); + } catch (Exception e) { + e.printStackTrace(); + ErrorDialog.show("Error when querying all elements.", e); + } + } +} diff --git a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryAndStatisticsView.java b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryAndStatisticsView.java index 9362c316683b4e0a51c3b12ab25a24b1b50f08f9..a42585fcc42bf692a99ef7c1eeb8f3fda0e0728a 100644 --- a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryAndStatisticsView.java +++ b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryAndStatisticsView.java @@ -2,7 +2,7 @@ package cz.muni.fi.pv168.project.ui.main.view; import cz.muni.fi.pv168.project.data.category.Category; import cz.muni.fi.pv168.project.db.DaoHolder; -import cz.muni.fi.pv168.project.model.db.CategoryModel; +import cz.muni.fi.pv168.project.model.db.UpdatableDataModel; import cz.muni.fi.pv168.project.ui.action.AddAction; import cz.muni.fi.pv168.project.ui.action.DeleteAction; import cz.muni.fi.pv168.project.ui.action.EditAction; @@ -21,7 +21,7 @@ import javax.swing.JToolBar; public class CategoryAndStatisticsView implements Tab<Category> { - private final CategoryModel categoryModel; + private final UpdatableDataModel<Category> categoryModel; private final CategoriesStatisticsToolBar toolBar; private final TabActions tabActions; @@ -32,7 +32,7 @@ public class CategoryAndStatisticsView implements Tab<Category> { private final StatisticsView statisticsView; public CategoryAndStatisticsView(DaoHolder daoHolder) { - categoryModel = new CategoryModel(daoHolder.getCategoryDao()); + categoryModel = new UpdatableDataModel<>(daoHolder.getCategoryDao()); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); this.categoryView = new CategoryView(categoryModel); @@ -92,7 +92,7 @@ public class CategoryAndStatisticsView implements Tab<Category> { } @Override - public CategoryModel getModel() { + public UpdatableDataModel<Category> getModel() { return categoryModel; } } diff --git a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryView.java b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryView.java index ccb229f87860ecbc3cc435e81fd3c8e313c5a6c9..591b8612f11483815bab6af2f5f77711839deef8 100644 --- a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryView.java +++ b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/CategoryView.java @@ -1,7 +1,7 @@ package cz.muni.fi.pv168.project.ui.main.view; import cz.muni.fi.pv168.project.data.category.Category; -import cz.muni.fi.pv168.project.model.db.CategoryModel; +import cz.muni.fi.pv168.project.model.db.UpdatableDataModel; import cz.muni.fi.pv168.project.ui.renderer.list.InnerColoredListRenderer; import javax.swing.JComponent; @@ -18,7 +18,7 @@ public class CategoryView { private final JList<Category> categoryList; private final JPanel panel; - public CategoryView(CategoryModel categoryModel) { + public CategoryView(UpdatableDataModel<Category> categoryModel) { panel = new JPanel(new GridBagLayout()); categoryList = new JList<>(categoryModel); diff --git a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/StatisticsView.java b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/StatisticsView.java index 1afed2af28ce4af635efe778eaf92a9aaac9c819..3dda750a538761ad82d1a5b1fc17e07fb9d0bd71 100644 --- a/src/main/java/cz/muni/fi/pv168/project/ui/main/view/StatisticsView.java +++ b/src/main/java/cz/muni/fi/pv168/project/ui/main/view/StatisticsView.java @@ -1,7 +1,8 @@ package cz.muni.fi.pv168.project.ui.main.view; +import cz.muni.fi.pv168.project.data.category.Category; import cz.muni.fi.pv168.project.model.CategoryStatisticsTableModel; -import cz.muni.fi.pv168.project.model.db.CategoryModel; +import cz.muni.fi.pv168.project.model.db.UpdatableDataModel; import cz.muni.fi.pv168.project.ui.renderer.statistics.CategoryStatisticsRenderer; import cz.muni.fi.pv168.project.ui.renderer.statistics.TimeSpentStatisticsRenderer; @@ -15,7 +16,7 @@ public class StatisticsView { private final JScrollPane scrollPane; private final CategoryStatisticsTableModel tableModel; - public StatisticsView(CategoryModel categoryModel) { + public StatisticsView(UpdatableDataModel<Category> categoryModel) { tableModel = new CategoryStatisticsTableModel(categoryModel); JTable statisticsTable = new JTable(tableModel);