Промежуточный. Рефактиринг фильтров
This commit is contained in:
@@ -5,12 +5,12 @@ import Common.Utils.Utils;
|
||||
import javax.swing.*;
|
||||
//одиночный фильтр, пункт фильтрационного меню.
|
||||
public abstract class DBObjectFilter<D extends DBObject> {
|
||||
public JMenuItem menuItem; //пункт меню фильтра. ( возможно потом сделать и кнопку)
|
||||
//--
|
||||
String description;
|
||||
boolean active = true; //включен ли фильтр
|
||||
int count = 0;
|
||||
//--
|
||||
public JMenuItem menuItem; //пункт меню фильтра. ( возможно потом сделать и кнопку)
|
||||
//--
|
||||
static String getNotActiveIconPath() {
|
||||
return "/icons/NotPick.png";
|
||||
}
|
||||
@@ -22,33 +22,36 @@ public abstract class DBObjectFilter<D extends DBObject> {
|
||||
}
|
||||
//-------
|
||||
public boolean Validate(D object) {
|
||||
if (active) {
|
||||
boolean valid = validate(object);
|
||||
if (valid)
|
||||
count++;
|
||||
return valid;
|
||||
}
|
||||
return false;
|
||||
boolean valid = validate(object);
|
||||
if (valid)
|
||||
count++;
|
||||
return valid & active;
|
||||
}
|
||||
public void ResetCount() {
|
||||
count = 0;
|
||||
}
|
||||
public DBObjectFilter(DataSet table, String description_in, boolean active_in) {
|
||||
public DBObjectFilter(DataSet dataSet, String description_in, boolean active_in) {
|
||||
menuItem = new StableMenuItem((description = description_in) + " (0)");
|
||||
active = active_in;
|
||||
menuItem.addActionListener(e -> {
|
||||
active = !active;
|
||||
Mark();
|
||||
table.ShowUI();
|
||||
dataSet.ShowUI();
|
||||
});
|
||||
Mark();
|
||||
}
|
||||
public DBObjectFilter(DataSet table_in, String description_in) {
|
||||
this(table_in, description_in, true);
|
||||
public DBObjectFilter(DataSet dataSet, String description_in) {
|
||||
this(dataSet, description_in, true);
|
||||
}
|
||||
public void ShowDescriptionAndCount() {
|
||||
menuItem.setText(description + " " + Utils.RBrackets(count));
|
||||
public void setActive(boolean flag) {
|
||||
active = flag;
|
||||
Mark();
|
||||
}
|
||||
//--
|
||||
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 LinkedHashMap<K, D> Data = new LinkedHashMap<>(); //наполнение
|
||||
//-
|
||||
//<editor-fold desc="UI таблица">
|
||||
public DataSetControlForm ui_;
|
||||
protected FilterWindow f_ui;
|
||||
//</editor-fold>
|
||||
protected FilterWindow f_ui; // отображение количества объектов
|
||||
//-
|
||||
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) {
|
||||
k = k_in;
|
||||
d = d_in;
|
||||
@@ -49,6 +52,13 @@ public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
|
||||
bar.createSelectionButtons(this);
|
||||
}
|
||||
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() {
|
||||
return ui_;
|
||||
@@ -56,20 +66,6 @@ public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
|
||||
public void setFilterUI(FilterWindow 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() {
|
||||
if ((ui_ != null) && ui_.isShown()) {
|
||||
ui_.ClearSelection();
|
||||
@@ -250,4 +246,39 @@ public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
|
||||
public Object getColumnFilterValue(int columnIndex) {
|
||||
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;
|
||||
import TestingSystem.Common.Group.Group;
|
||||
import Common.UI.Menus_2023.VisualiserMenu;
|
||||
|
||||
import java.util.Vector;
|
||||
public class DataSetFilter {
|
||||
public Vector<DBObjectFilter<Group>> filters;
|
||||
public DataSetFilter(String name){
|
||||
|
||||
public abstract class DataSetFilter<D extends DBObject> {
|
||||
public VisualiserMenu menu;
|
||||
//--
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user