рефакторинг фильтров. обобщил их от интерфейса
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user