Промежуточный. Рефактиринг фильтров
This commit is contained in:
6
.idea/workspace.xml
generated
6
.idea/workspace.xml
generated
@@ -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" />
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
|
//--
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user