рефакторинг фильтров. обобщил их от интерфейса

This commit is contained in:
2024-10-21 13:54:52 +03:00
parent 6af0df7835
commit f1c0523753
11 changed files with 95 additions and 90 deletions

View File

@@ -21,7 +21,6 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Vector;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@@ -32,10 +31,22 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
protected boolean events_on = true;
protected String colNamesAndSizes = "";
protected Vector<ColumnInfo> columns = new Vector<>(); //информация о столбцах и их оформлении
protected Vector<DataSetFiltersMenu> filtersMenus = new Vector<>(); //выпадающие меню фильтрации
protected LinkedHashMap<Integer, HeaderTextFilter> headersTextFilters = new LinkedHashMap<>(); //текстовые фильтры столбцов
//-
protected Vector<DBbjectFilter_<D>> allFilters = new Vector<>();
<M> Vector<M> getFilters(Class<M> f){
Vector<M> res = new Vector<>();
for (DBbjectFilter_ filter_: allFilters){
//либо М, либо наследует от М
if (filter_.getClass().equals(f)||filter_.getClass().getSuperclass().equals(f)){
res.add((M) filter_);
}
}
return res;
}
public void AddFilter(DBbjectFilter_ filter_in){
allFilters.add(filter_in);
}
//---
//фильтры и подсчеты. todo слить с баром (?)
MatchesCounter f_ui = null;
//--
@@ -46,6 +57,7 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
super(DataTable.class, mountPanel_in);
dataSource = dataSource_in;
createFilters();
//--
if (hasMenuBar()) {
try {
if (!MainModule_.instance.getUI().menuBars.containsKey(dataSource.getClass())) {
@@ -59,15 +71,15 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
mountPanel.add(bar, BorderLayout.NORTH);
//--
f_ui = (count -> bar.countLabel.setText(String.valueOf(count)));
//--
if (!filtersMenus.isEmpty()) {
for (DataSetFiltersMenu filter : filtersMenus)
bar.addMenus(filter);
//todo возможно улушить объект бара
for (JMenu filter : getFilters(DataSetFiltersMenu.class)) {
bar.addMenus(filter);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
System.out.println("found "+allFilters.size()+" filters for ui "+this.getClass().getSimpleName());
}
public ColumnInfo getColumnInfo(int i) {
return columns.get(i);
@@ -320,32 +332,20 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
Utils_.MainLog.PrintException(e);
}
}
for (HeaderTextFilter filter : headersTextFilters.values()) {
for (HeaderTextFilter filter : getFilters(HeaderTextFilter.class))
filter.Mount(getControl());
}
}
protected DataMenuBar createMenuBar() {
return new DataMenuBar(dataSource.getPluralDescription());
}
protected void createFilters() {
}
protected boolean applyFiltersMenus(D object) {
for (DataSetFiltersMenu filterMenu : filtersMenus) {
if (!filterMenu.Validate(object))
return false;
}
return true;
}
protected boolean applyHeadersFilters(D object){
for (HeaderTextFilter headerTextFilter: headersTextFilters.values()){
if (!headerTextFilter.Validate(object))
return false;
}
return true;
}
public boolean ApplyFilters(D object) {
//могут быть и другие фильтры ( например свои/активные). перенести их сюда и обобщить
return applyFiltersMenus(object)&&applyHeadersFilters(object);
for (DBbjectFilter_ filterInterface: allFilters){
if (!filterInterface.Validate(object))
return false;
}
return true;
}
@Override
protected void redrawControl() {
@@ -353,10 +353,10 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
}
@Override
public void Show() {
for (DataSetFiltersMenu filterMenu : filtersMenus) filterMenu.Drop();
for (DBbjectFilter_ filter_ : allFilters) filter_.DropMatchesCount();
super.Show();
if (f_ui != null) f_ui.ShowMatchesCount(getRowCount());
for (DataSetFiltersMenu filterMenu : filtersMenus) filterMenu.Refresh();
for (DBbjectFilter_ filter_ : allFilters) filter_.ShowMatchesCount();
}
public void Show(Object pk) {
Show();