Skip to content
Snippets Groups Projects
Commit a3a63450 authored by Matej Dipčár's avatar Matej Dipčár
Browse files

Generalize task related models

parent 7ff41c61
No related branches found
No related tags found
2 merge requests!52Final project MR,!46UI <--> DB refactor
Showing
with 126 additions and 224 deletions
package cz.muni.fi.pv168.project.model.db; 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.model.EditableModel;
import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog;
import javax.swing.DefaultListModel; import javax.swing.DefaultListModel;
public class CategoryModel extends DefaultListModel<Category> implements EditableModel<Category> { public abstract class AbstractDataModel<E> extends DefaultListModel<E> implements EditableModel<E> {
private final CategoryDao dataAccessObject;
public CategoryModel(CategoryDao dao) {
this.dataAccessObject = dao;
updateAll();
}
@Override
public void delete(Category entity) {
dataAccessObject.delete(entity);
}
@Override @Override
public void add(Category entity) { public void setElementAt(E element, int index) {
dataAccessObject.add(entity);
}
@Override
public void update(Category entity) {
dataAccessObject.update(entity);
}
@Override
public void setElementAt(Category element, int index) {
try { try {
update(element); update(element);
} catch (Exception e) { } catch (Exception e) {
...@@ -43,35 +19,25 @@ public class CategoryModel extends DefaultListModel<Category> implements Editabl ...@@ -43,35 +19,25 @@ public class CategoryModel extends DefaultListModel<Category> implements Editabl
} }
@Override @Override
public void addElement(Category element) { public void addElement(E element) {
try { try {
add(element); add(element);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
ErrorDialog.show("Error when adding " + element, e); ErrorDialog.show("Error when adding " + element, e);
} }
super.addElement(element); super.addElement(element);
} }
@Override @Override
public boolean removeElement(Object obj) { public boolean removeElement(Object obj) {
try { try {
delete((Category) obj); delete((E) obj);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
ErrorDialog.show("Error when removing " + obj, e); ErrorDialog.show("Error when removing " + obj, e);
} }
return super.removeElement(obj); 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);
}
}
} }
...@@ -3,24 +3,15 @@ package cz.muni.fi.pv168.project.model.db; ...@@ -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.SubTask;
import cz.muni.fi.pv168.project.data.task.Task; import cz.muni.fi.pv168.project.data.task.Task;
import cz.muni.fi.pv168.project.db.subtask.SubTaskDao; 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; public class SubTaskModel extends TaskPropertyListDataModel<SubTask> {
import java.util.List;
public class SubTaskModel extends DefaultListModel<SubTask> implements EditableModel<SubTask> {
private final SubTaskDao dataAccessObject; private final SubTaskDao dataAccessObject;
private Task parentTask;
public SubTaskModel(SubTaskDao dao) { public SubTaskModel(SubTaskDao dao) {
super(Task::getSubTasks);
this.dataAccessObject = dao; this.dataAccessObject = dao;
} }
public void setParentTask(Task task) {
this.parentTask = task;
}
@Override @Override
public void delete(SubTask entity) { public void delete(SubTask entity) {
...@@ -38,42 +29,4 @@ public class SubTaskModel extends DefaultListModel<SubTask> implements EditableM ...@@ -38,42 +29,4 @@ public class SubTaskModel extends DefaultListModel<SubTask> implements EditableM
public void update(SubTask entity) { public void update(SubTask entity) {
dataAccessObject.update(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);
}
} }
...@@ -3,25 +3,16 @@ package cz.muni.fi.pv168.project.model.db; ...@@ -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.category.Category;
import cz.muni.fi.pv168.project.data.task.Task; import cz.muni.fi.pv168.project.data.task.Task;
import cz.muni.fi.pv168.project.db.taskcategory.TaskCategoryDao; 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; public class TaskCategoryModel extends TaskPropertyListDataModel<Category> {
import java.util.List;
public class TaskCategoryModel extends DefaultListModel<Category> implements EditableModel<Category> {
private final TaskCategoryDao dataAccessObject; private final TaskCategoryDao dataAccessObject;
private Task parentTask;
public TaskCategoryModel(TaskCategoryDao dao) { public TaskCategoryModel(TaskCategoryDao dao) {
super(Task::getCategories);
this.dataAccessObject = dao; this.dataAccessObject = dao;
} }
public void setParentTask(Task task) {
this.parentTask = task;
}
@Override @Override
public void delete(Category entity) { public void delete(Category entity) {
dataAccessObject.deleteAssociationFor(parentTask.getId(), entity.getId()); dataAccessObject.deleteAssociationFor(parentTask.getId(), entity.getId());
...@@ -37,42 +28,4 @@ public class TaskCategoryModel extends DefaultListModel<Category> implements Edi ...@@ -37,42 +28,4 @@ public class TaskCategoryModel extends DefaultListModel<Category> implements Edi
@Override @Override
public void update(Category entity) { 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);
}
} }
...@@ -2,25 +2,16 @@ package cz.muni.fi.pv168.project.model.db; ...@@ -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.data.task.Task;
import cz.muni.fi.pv168.project.db.dependency.DependencyDao; 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; public class TaskDependencyModel extends TaskPropertyListDataModel<Task> {
import java.util.List;
public class TaskDependencyModel extends DefaultListModel<Task> implements EditableModel<Task> {
private final DependencyDao dataAccessObject; private final DependencyDao dataAccessObject;
private Task parentTask;
public TaskDependencyModel(DependencyDao dao) { public TaskDependencyModel(DependencyDao dao) {
super(Task::getDependencyTasks);
this.dataAccessObject = dao; this.dataAccessObject = dao;
} }
public void setParentTask(Task task) {
this.parentTask = task;
}
@Override @Override
public void delete(Task entity) { public void delete(Task entity) {
dataAccessObject.deleteAssociationFor(parentTask.getId(), entity.getId()); dataAccessObject.deleteAssociationFor(parentTask.getId(), entity.getId());
...@@ -36,42 +27,4 @@ public class TaskDependencyModel extends DefaultListModel<Task> implements Edita ...@@ -36,42 +27,4 @@ public class TaskDependencyModel extends DefaultListModel<Task> implements Edita
@Override @Override
public void update(Task entity) { 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);
}
} }
...@@ -2,79 +2,15 @@ package cz.muni.fi.pv168.project.model.db; ...@@ -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.data.task.Task;
import cz.muni.fi.pv168.project.db.DataAccessException; import cz.muni.fi.pv168.project.db.DataAccessException;
import cz.muni.fi.pv168.project.db.task.TaskDao; import cz.muni.fi.pv168.project.db.interfaces.DataAccessObject;
import cz.muni.fi.pv168.project.model.EditableModel;
import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog; import cz.muni.fi.pv168.project.ui.dialog.error.ErrorDialog;
import javax.swing.DefaultListModel;
import java.util.function.Predicate; import java.util.function.Predicate;
public class TaskModel extends DefaultListModel<Task> implements EditableModel<Task> { public class TaskModel extends UpdatableDataModel<Task> {
private final TaskDao dataAccessObject; public TaskModel(DataAccessObject<Task> dao) {
super(dao);
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 void updateFiltered(Predicate<Task> predicate) { public void updateFiltered(Predicate<Task> predicate) {
......
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);
}
}
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);
}
}
}
...@@ -2,7 +2,7 @@ package cz.muni.fi.pv168.project.ui.main.view; ...@@ -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.data.category.Category;
import cz.muni.fi.pv168.project.db.DaoHolder; 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.AddAction;
import cz.muni.fi.pv168.project.ui.action.DeleteAction; import cz.muni.fi.pv168.project.ui.action.DeleteAction;
import cz.muni.fi.pv168.project.ui.action.EditAction; import cz.muni.fi.pv168.project.ui.action.EditAction;
...@@ -21,7 +21,7 @@ import javax.swing.JToolBar; ...@@ -21,7 +21,7 @@ import javax.swing.JToolBar;
public class CategoryAndStatisticsView implements Tab<Category> { public class CategoryAndStatisticsView implements Tab<Category> {
private final CategoryModel categoryModel; private final UpdatableDataModel<Category> categoryModel;
private final CategoriesStatisticsToolBar toolBar; private final CategoriesStatisticsToolBar toolBar;
private final TabActions tabActions; private final TabActions tabActions;
...@@ -32,7 +32,7 @@ public class CategoryAndStatisticsView implements Tab<Category> { ...@@ -32,7 +32,7 @@ public class CategoryAndStatisticsView implements Tab<Category> {
private final StatisticsView statisticsView; private final StatisticsView statisticsView;
public CategoryAndStatisticsView(DaoHolder daoHolder) { public CategoryAndStatisticsView(DaoHolder daoHolder) {
categoryModel = new CategoryModel(daoHolder.getCategoryDao()); categoryModel = new UpdatableDataModel<>(daoHolder.getCategoryDao());
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
this.categoryView = new CategoryView(categoryModel); this.categoryView = new CategoryView(categoryModel);
...@@ -92,7 +92,7 @@ public class CategoryAndStatisticsView implements Tab<Category> { ...@@ -92,7 +92,7 @@ public class CategoryAndStatisticsView implements Tab<Category> {
} }
@Override @Override
public CategoryModel getModel() { public UpdatableDataModel<Category> getModel() {
return categoryModel; return categoryModel;
} }
} }
package cz.muni.fi.pv168.project.ui.main.view; package cz.muni.fi.pv168.project.ui.main.view;
import cz.muni.fi.pv168.project.data.category.Category; 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 cz.muni.fi.pv168.project.ui.renderer.list.InnerColoredListRenderer;
import javax.swing.JComponent; import javax.swing.JComponent;
...@@ -18,7 +18,7 @@ public class CategoryView { ...@@ -18,7 +18,7 @@ public class CategoryView {
private final JList<Category> categoryList; private final JList<Category> categoryList;
private final JPanel panel; private final JPanel panel;
public CategoryView(CategoryModel categoryModel) { public CategoryView(UpdatableDataModel<Category> categoryModel) {
panel = new JPanel(new GridBagLayout()); panel = new JPanel(new GridBagLayout());
categoryList = new JList<>(categoryModel); categoryList = new JList<>(categoryModel);
......
package cz.muni.fi.pv168.project.ui.main.view; 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.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.CategoryStatisticsRenderer;
import cz.muni.fi.pv168.project.ui.renderer.statistics.TimeSpentStatisticsRenderer; import cz.muni.fi.pv168.project.ui.renderer.statistics.TimeSpentStatisticsRenderer;
...@@ -15,7 +16,7 @@ public class StatisticsView { ...@@ -15,7 +16,7 @@ public class StatisticsView {
private final JScrollPane scrollPane; private final JScrollPane scrollPane;
private final CategoryStatisticsTableModel tableModel; private final CategoryStatisticsTableModel tableModel;
public StatisticsView(CategoryModel categoryModel) { public StatisticsView(UpdatableDataModel<Category> categoryModel) {
tableModel = new CategoryStatisticsTableModel(categoryModel); tableModel = new CategoryStatisticsTableModel(categoryModel);
JTable statisticsTable = new JTable(tableModel); JTable statisticsTable = new JTable(tableModel);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment