Промежуточный. Рефактиринг фильтров

This commit is contained in:
2023-12-26 19:12:30 +03:00
parent 05ec4871a1
commit ce31d5dae2
7 changed files with 143 additions and 138 deletions

6
.idea/workspace.xml generated
View File

@@ -7,10 +7,12 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment=""> <list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/src/Common/Database/DataSetFilter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Common/Database/TableFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Database/DBObjectFilter.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Common/Database/DBObjectFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Database/DBObjectFilter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Common/Database/DataSet.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Database/DataSet.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Common/Database/DataSetFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Database/DataSetFilter.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/Group/GroupsDBTable.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/Group/GroupsDBTable.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/Group/GroupsDBTable.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/Group/GroupsDBTable.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/Group/GroupsMenuBar.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/Group/GroupsMenuBar.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMTasks/DVMRunTasksSet.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMTasks/DVMRunTasksSet.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMTasks/DVMRunTasksSet.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMTasks/DVMRunTasksSet.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />

View File

@@ -5,12 +5,12 @@ import Common.Utils.Utils;
import javax.swing.*; import javax.swing.*;
//одиночный фильтр, пункт фильтрационного меню. //одиночный фильтр, пункт фильтрационного меню.
public abstract class DBObjectFilter<D extends DBObject> { public abstract class DBObjectFilter<D extends DBObject> {
public JMenuItem menuItem; //пункт меню фильтра. ( возможно потом сделать и кнопку)
//--
String description; String description;
boolean active = true; //включен ли фильтр boolean active = true; //включен ли фильтр
int count = 0; int count = 0;
//-- //--
public JMenuItem menuItem; //пункт меню фильтра. ( возможно потом сделать и кнопку)
//--
static String getNotActiveIconPath() { static String getNotActiveIconPath() {
return "/icons/NotPick.png"; return "/icons/NotPick.png";
} }
@@ -22,33 +22,36 @@ public abstract class DBObjectFilter<D extends DBObject> {
} }
//------- //-------
public boolean Validate(D object) { public boolean Validate(D object) {
if (active) {
boolean valid = validate(object); boolean valid = validate(object);
if (valid) if (valid)
count++; count++;
return valid; return valid & active;
} }
return false; public DBObjectFilter(DataSet dataSet, String description_in, boolean active_in) {
}
public void ResetCount() {
count = 0;
}
public DBObjectFilter(DataSet table, String description_in, boolean active_in) {
menuItem = new StableMenuItem((description = description_in) + " (0)"); menuItem = new StableMenuItem((description = description_in) + " (0)");
active = active_in; active = active_in;
menuItem.addActionListener(e -> { menuItem.addActionListener(e -> {
active = !active; active = !active;
Mark(); Mark();
table.ShowUI(); dataSet.ShowUI();
}); });
Mark(); Mark();
} }
public DBObjectFilter(DataSet table_in, String description_in) { public DBObjectFilter(DataSet dataSet, String description_in) {
this(table_in, description_in, true); this(dataSet, description_in, true);
} }
public void ShowDescriptionAndCount() { public void setActive(boolean flag) {
menuItem.setText(description + " " + Utils.RBrackets(count)); active = flag;
Mark();
} }
//-- //--
protected abstract boolean validate(D object); protected abstract boolean validate(D object);
//--
public void Drop() {
count = 0;
}
public void Refresh() {
menuItem.setText(description + " " + Utils.RBrackets(count));
}
//--
} }

View File

@@ -24,12 +24,15 @@ public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
public Class<D> d; //класс объектов. public Class<D> d; //класс объектов.
public LinkedHashMap<K, D> Data = new LinkedHashMap<>(); //наполнение public LinkedHashMap<K, D> Data = new LinkedHashMap<>(); //наполнение
//- //-
//<editor-fold desc="UI таблица">
public DataSetControlForm ui_; public DataSetControlForm ui_;
protected FilterWindow f_ui; protected FilterWindow f_ui; // отображение количества объектов
//</editor-fold>
//- //-
public LinkedHashMap<Integer, ColumnFilter> columnsFilters = new LinkedHashMap<>(); public LinkedHashMap<Integer, ColumnFilter> columnsFilters = new LinkedHashMap<>(); //текстовые фильтры столбцов
//--
protected Vector<DataSetFilter<D>> filters = new Vector<>();
protected void createFilters() {
}
//--
public DataSet(Class<K> k_in, Class<D> d_in) { public DataSet(Class<K> k_in, Class<D> d_in) {
k = k_in; k = k_in;
d = d_in; d = d_in;
@@ -49,6 +52,13 @@ public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
bar.createSelectionButtons(this); bar.createSelectionButtons(this);
} }
content_in.add(ui_.getDataPanel(), BorderLayout.CENTER); content_in.add(ui_.getDataPanel(), BorderLayout.CENTER);
//----
createFilters();
if (!filters.isEmpty()) {
DataMenuBar menuBar = UI.menuBars.get(getClass());
for (DataSetFilter<D> filter : filters)
menuBar.addMenus(filter.menu);
}
} }
public DataSetControlForm getUi() { public DataSetControlForm getUi() {
return ui_; return ui_;
@@ -56,20 +66,6 @@ public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
public void setFilterUI(FilterWindow ui_in) { public void setFilterUI(FilterWindow ui_in) {
f_ui = ui_in; f_ui = ui_in;
} }
public void ShowUI() {
if (ui_ != null) {
ui_.Show();
if (f_ui != null)
f_ui.ShowMatchesCount(getRowCountUI());
}
}
public void ShowUI(Object key) {
if (ui_ != null) {
ui_.Show(key);
if (f_ui != null)
f_ui.ShowMatchesCount(getRowCountUI());
}
}
public void ClearUI() { public void ClearUI() {
if ((ui_ != null) && ui_.isShown()) { if ((ui_ != null) && ui_.isShown()) {
ui_.ClearSelection(); ui_.ClearSelection();
@@ -250,4 +246,39 @@ public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
public Object getColumnFilterValue(int columnIndex) { public Object getColumnFilterValue(int columnIndex) {
return ""; return "";
} }
//--
public void ShowUI() {
for (DataSetFilter<D> filter : filters)
filter.Drop();
//--
if (ui_ != null) {
ui_.Show();
if (f_ui != null)
f_ui.ShowMatchesCount(getRowCountUI());
}
//--
for (DataSetFilter<D> filter : filters)
filter.Refresh();
}
public void ShowUI(Object key) {
for (DataSetFilter<D> filter : filters)
filter.Drop();
//--
if (ui_ != null) {
ui_.Show(key);
if (f_ui != null)
f_ui.ShowMatchesCount(getRowCountUI());
}
//--
for (DataSetFilter<D> filter : filters)
filter.Refresh();
}
public boolean applyFilters(D object) {
//todo добавить ситуацию когда все фильтры отменены
for (DataSetFilter<D> filter : filters) {
if (!filter.Validate(object))
return false;
}
return true;
}
} }

View File

@@ -1,10 +1,44 @@
package Common.Database; package Common.Database;
import TestingSystem.Common.Group.Group; import Common.UI.Menus_2023.VisualiserMenu;
import java.util.Vector; import java.util.Vector;
public class DataSetFilter { public abstract class DataSetFilter<D extends DBObject> {
public Vector<DBObjectFilter<Group>> filters; public VisualiserMenu menu;
public DataSetFilter(String name){ //--
protected DataSet<?, D> dataSet;
//--
//JMenuItem bSelectAll;
//JMenuItem bUnSelectAll;
//--
protected Vector<DBObjectFilter<D>> filters;
public DataSetFilter(String name, DataSet dataSet_in) {
dataSet = dataSet_in;
menu = new VisualiserMenu(name, "/icons/Filter.png", true);
filters = new Vector<>();
fill();
//-
for (DBObjectFilter<D> filter : filters)
menu.add(filter.menuItem);
menu.addSeparator();
}
void selectAll(boolean flag) {
for (DBObjectFilter filter : filters)
filter.setActive(flag);
}
public boolean Validate(D object) {
boolean res = false;
for (DBObjectFilter<D> filter : filters)
if (filter.Validate(object))
res |= true;
return res;
}
public abstract void fill();
public void Drop() {
for (DBObjectFilter<D> filter : filters)
filter.Drop();
}
public void Refresh() {
for (DBObjectFilter<D> filter : filters)
filter.Refresh();
} }
} }

View File

@@ -2,7 +2,7 @@ package TestingSystem.Common.Group;
import Common.Current; import Common.Current;
import Common.Database.*; import Common.Database.*;
import Common.UI.DataSetControlForm; import Common.UI.DataSetControlForm;
import Common.UI.Menus_2023.VisualiserMenu; import Common.UI.Menus_2023.DataMenuBar;
import Common.UI.UI; import Common.UI.UI;
import Common.UI.Windows.Dialog.DBObjectDialog; import Common.UI.Windows.Dialog.DBObjectDialog;
import ProjectData.LanguageName; import ProjectData.LanguageName;
@@ -16,26 +16,26 @@ import java.util.Vector;
//- //-
public class GroupsDBTable extends iDBTable<Group> { public class GroupsDBTable extends iDBTable<Group> {
public static boolean filterMyOnly = false; public static boolean filterMyOnly = false;
public Vector<DBObjectFilter<Group>> typeFilters;
public Vector<DBObjectFilter<Group>> languageFilters;
//------------------------------------------------>>>
public GroupsDBTable() { public GroupsDBTable() {
super(Group.class); super(Group.class);
if (Current.hasUI()) { }
//-- //------------------------------------------------>>>
typeFilters = new Vector<>(); @Override
languageFilters = new Vector<>(); protected void createFilters() {
//-- filters.add(new DataSetFilter<Group>("Тип", this) {
for (TestType type : TestType.values()) { @Override
typeFilters.add( public void fill() {
new DBObjectFilter<Group>(this, type.getDescription()) { for (TestType type : TestType.values())
filters.add(new DBObjectFilter<Group>(dataSet, type.getDescription()) {
@Override @Override
protected boolean validate(Group object) { protected boolean validate(Group object) {
return object.type.equals(type); return object.type.equals(type);
} }
}); });
} }
//-- });
}
/*
for (LanguageName languageName : LanguageName.values()) { for (LanguageName languageName : LanguageName.values()) {
languageFilters.add(new DBObjectFilter<Group>(this, languageName.getDescription()) { languageFilters.add(new DBObjectFilter<Group>(this, languageName.getDescription()) {
@Override @Override
@@ -44,70 +44,7 @@ public class GroupsDBTable extends iDBTable<Group> {
} }
}); });
} }
} */
}
@Override
public void mountUI(JPanel content_in) {
super.mountUI(content_in);
//---
GroupsMenuBar menuBar = (GroupsMenuBar) UI.menuBars.get(getClass());
menuBar.DropFilters();
//----
menuBar.addFilters(
new VisualiserMenu("Тип", "/icons/Filter.png", true) {
{
for (DBObjectFilter filter : typeFilters)
add(filter.menuItem);
}
},
new VisualiserMenu("Язык", "/icons/Filter.png", true) {
{
for (DBObjectFilter filter : languageFilters)
add(filter.menuItem);
}
}
);
}
public void ResetFiltersCount() {
for (DBObjectFilter filter : typeFilters)
filter.ResetCount();
for (DBObjectFilter filter : languageFilters)
filter.ResetCount();
}
public void ShowFiltersCount() {
for (DBObjectFilter filter : typeFilters)
filter.ShowDescriptionAndCount();
for (DBObjectFilter filter : languageFilters)
filter.ShowDescriptionAndCount();
}
public boolean applyFilters(Group object) {
boolean type = false;
//возвращать сразу нельзя. иначе количество не посчитает.
for (DBObjectFilter filter : typeFilters) {
if (filter.Validate(object)) {
type |= true;
}
}
boolean language = false;
for (DBObjectFilter filter : languageFilters) {
if (filter.Validate(object)) {
language |= true;
}
}
return type && language;
}
@Override
public void ShowUI() {
ResetFiltersCount();
super.ShowUI();
ShowFiltersCount();
}
@Override
public void ShowUI(Object key) {
ResetFiltersCount();
super.ShowUI(key);
ShowFiltersCount();
}
@Override @Override
public String getSingleDescription() { public String getSingleDescription() {
return "группа тестов"; return "группа тестов";
@@ -129,10 +66,6 @@ public class GroupsDBTable extends iDBTable<Group> {
public boolean hasCheckBox() { public boolean hasCheckBox() {
return true; return true;
} }
@Override
protected void AdditionalInitColumns() {
//columns.get(0).setVisible(false);
}
}; };
} }
@Override @Override

View File

@@ -35,6 +35,7 @@ public class GroupsMenuBar extends DataMenuBar {
} }
}); });
} }
/*
public void addFilters(JMenu typesFilterMenu, JMenu languagesFilterMenu) { public void addFilters(JMenu typesFilterMenu, JMenu languagesFilterMenu) {
filters = addMenus(typesFilterMenu, languagesFilterMenu); filters = addMenus(typesFilterMenu, languagesFilterMenu);
} }
@@ -47,4 +48,5 @@ public class GroupsMenuBar extends DataMenuBar {
revalidate(); revalidate();
repaint(); repaint();
} }
*/
} }

View File

@@ -50,16 +50,16 @@ public class DVMRunTasksSet extends DataSet<Integer, DVMRunTask> {
} }
public void ResetFiltersCount() { public void ResetFiltersCount() {
for (DBObjectFilter<DVMRunTask> filter : compilationFilters) for (DBObjectFilter<DVMRunTask> filter : compilationFilters)
filter.ResetCount(); filter.Drop();
for (DBObjectFilter<DVMRunTask> filter : runFilters) for (DBObjectFilter<DVMRunTask> filter : runFilters)
filter.ResetCount(); filter.Drop();
} }
public void ShowFiltersCount() { public void ShowFiltersCount() {
for (DBObjectFilter<DVMRunTask> filter : compilationFilters) { for (DBObjectFilter<DVMRunTask> filter : compilationFilters) {
filter.ShowDescriptionAndCount(); filter.Refresh();
} }
for (DBObjectFilter<DVMRunTask> filter : runFilters) { for (DBObjectFilter<DVMRunTask> filter : runFilters) {
filter.ShowDescriptionAndCount(); filter.Refresh();
} }
} }
public boolean applyFilters(DVMRunTask object) { public boolean applyFilters(DVMRunTask object) {