Files
VisualSapfor/src/Common/Database/Tables/DataSet.java

292 lines
9.8 KiB
Java
Raw Normal View History

package Common.Database.Tables;
2024-10-09 23:37:58 +03:00
import Common.Current_;
2024-10-14 15:19:13 +03:00
import Common.Database.Objects.DBObject;
2024-10-14 20:17:29 +03:00
import Common.MainModule_;
import Common.Passes.PassCode_;
2024-10-14 15:19:13 +03:00
import Common.Utils.TextLog;
import Common.Visual.DataSetControlForm;
2024-10-14 15:19:13 +03:00
import Common.Visual.DataSetFilter;
2024-10-09 20:35:18 +03:00
import Common.Visual.Menus.DataMenuBar;
import Common.Visual.Tables.ColumnFilter;
import Common.Visual.UI;
2024-10-08 22:33:49 +03:00
import Common.Visual.Windows.Dialog.DBObjectDialog;
import Common.Visual.Windows.Dialog.DialogFields;
2023-09-17 22:13:42 +03:00
import javax.swing.*;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Vector;
import java.util.stream.Collectors;
public class DataSet<K, D extends DBObject> extends DataSetAnchestor {
//-
public LinkedHashMap<Class, Object> selections = new LinkedHashMap<>();
//---
2023-09-17 22:13:42 +03:00
public String Name;
public Class<K> k; //класс первичного ключа.
public Class<D> d; //класс объектов.
public LinkedHashMap<K, D> Data = new LinkedHashMap<>(); //наполнение
//-
public LinkedHashMap<Integer, ColumnFilter> columnsFilters = new LinkedHashMap<>(); //текстовые фильтры столбцов
//-
protected DataSetControlForm ui = null;
//--
protected Vector<DataSetFilter<D>> filters = new Vector<>();
//--
2023-09-17 22:13:42 +03:00
public DataSet(Class<K> k_in, Class<D> d_in) {
k = k_in;
d = d_in;
Name = d.getSimpleName();
}
public DataSetControlForm getUI() {
return ui;
}
protected void createFilters() {
2024-10-15 13:35:33 +03:00
}
public void mountUI(JPanel mountPanel_in) {
UI.Clear(mountPanel_in);
ui = createUI(mountPanel_in);
createFilters();
if (!filters.isEmpty()) {
2024-10-14 20:17:29 +03:00
DataMenuBar menuBar = MainModule_.instance.getUI().menuBars.get(getClass());
for (DataSetFilter<D> filter : filters)
menuBar.addMenus(filter.menu);
}
2023-09-17 22:13:42 +03:00
}
public void ClearUI() {
if ((ui != null) && ui.isShown()) {
ui.ClearSelection();
ui.Clear();
2023-09-17 22:13:42 +03:00
}
}
public void RefreshUI() {
if (ui != null) ui.Refresh();
2023-09-17 22:13:42 +03:00
}
public int getRowCountUI() {
return ui.getRowCount();
2023-09-17 22:13:42 +03:00
}
public void SetCurrentObjectUI(Object pk) {
if (ui != null) {
2023-09-17 22:13:42 +03:00
//todo возможно проверить, что текущий объект уже соответствует ключу, и если да, то ничего делать.
ui.ClearSelection(); //сброс текущего объекта и всего что с ним связано.
ui.Select(pk);
2023-09-17 22:13:42 +03:00
}
}
public String[] getUIColumnNames() {
return new String[]{};
}
protected DataSetControlForm createUI(JPanel mountPanel) {
2023-09-17 22:13:42 +03:00
return null;
}
public boolean hasUI() {
return ui != null;
2023-09-17 22:13:42 +03:00
}
2024-10-16 22:13:47 +03:00
public void SelectAll(boolean flag) {
2023-09-17 22:13:42 +03:00
for (D object : Data.values()) {
if (object.isVisible())
object.Select(flag);
}
RefreshUI();
}
public D getFirstRecord() {
return Data.values().stream().findFirst().orElse(null);
}
public Vector<D> getOrderedRecords(Comparator<D> comparator) {
Vector<D> res = new Vector<>(Data.values());
res.sort(comparator);
return res;
}
@SuppressWarnings("unchecked")
public DBObjectDialog<D, ? extends DialogFields> getDialog() {
return null;
}
public boolean ShowAddObjectDialog(DBObject object) {
return getDialog().ShowDialog(getSingleDescription() + ": добавление", object);
}
public boolean ShowEditObjectDialog(DBObject object) {
DBObjectDialog dialog = getDialog();
dialog.edit = true;
dialog.SetEditLimits();
return dialog.ShowDialog(getSingleDescription() + ": редактирование", object);
}
public boolean ViewObject(DBObject object) {
DBObjectDialog dialog = getDialog();
dialog.SetReadonly();
dialog.ShowDialog(getSingleDescription() + ": просмотр", object);
return false;
}
public boolean ShowDeleteObjectDialog(DBObject object) {
return UI.Warning(getSingleDescription() + " " + object.getBDialogName() + " будет удален(а)");
2023-09-17 22:13:42 +03:00
}
public boolean ShowDeleteObjectsDialog(int toDeleteCount) {
return UI.Warning(getPluralDescription() + " в количестве " + toDeleteCount + " будут удалены)");
}
2023-09-17 22:13:42 +03:00
public String QName() {
return "\"" + Name + "\"";
}
public String getPKName() {
return "";
} //получить имя ключевого поля. нужно для таблиц.
public String getPluralDescription() {
return "";
}
public String getSingleDescription() {
return "";
}
//-
public void put(Object key, D object) {
Data.put((K) key, object);
}
public D get(Object key) {
return Data.get(key);
}
public Object getFieldAt(D object, int columnIndex) {
return null;
}
public void clear() {
Data.clear();
}
public int size() {
return Data.size();
}
public boolean containsKey(Object key) {
return Data.containsKey(key);
}
//-
public Vector<K> getVisibleKeys() {
Comparator<D> comparator = getComparator();
Vector<K> res = new Vector<>();
if (comparator == null) {
for (K key : Data.keySet())
if (Data.get(key).isVisible())
res.add(key);
} else {
Vector<D> raw = new Vector<>();
for (D object : Data.values()) {
if (object.isVisible())
raw.add(object);
}
raw.sort(comparator);
for (D object : raw)
res.add((K) object.getPK());
}
return res;
}
protected Comparator<D> getComparator() {
return null;
}
public int getSelectedCount() {
2023-09-17 22:13:42 +03:00
return (int) Data.values().stream().filter(d -> d.isVisible() && d.isSelected()).count();
}
public Vector<D> getSelectedItems() {
2023-09-17 22:13:42 +03:00
return Data.values().stream().filter(d -> d.isVisible() && d.isSelected()).collect(Collectors.toCollection(Vector::new));
}
public Vector<K> getSelectedKeys() {
2023-09-17 22:13:42 +03:00
return Data.values().stream().filter(DBObject::isSelected).map(d -> (K) d.getPK()).collect(Collectors.toCollection(Vector::new));
}
//--
// применить значение фильтра к фильру объекта напирмер Message.filterValue = text;
public void changeColumnFilterValue(int columnIndex, String text) {
}
public Object getColumnFilterValue(int columnIndex) {
return "";
}
//--
public void ShowUI() {
for (DataSetFilter<D> filter : filters)
filter.Drop();
//--
if (ui != null) {
ui.Show();
}
//--
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);
}
//--
for (DataSetFilter<D> filter : filters)
filter.Refresh();
}
public boolean applyFilters(D object) {
for (DataSetFilter<D> filter : filters) {
if (!filter.Validate(object))
return false;
}
return true;
}
//------------------------------------------------------------------------------------
2024-10-09 23:37:58 +03:00
public Current_ CurrentName() {
return null;
}
public boolean CheckCurrent(TextLog log) {
2024-10-16 00:13:09 +03:00
return MainModule_.instance.Check(log, CurrentName());
}
public boolean CheckSelectedOrCurrent(TextLog log) {
if ((getSelectedCount() == 0) && (CurrentName() == null || (getCurrent() == null))) {
log.Writeln_(getPluralDescription() + ":");
log.Writeln_("Отсутствуют отмеченные объекты, или текущий объект!");
return false;
}
return true;
}
public void dropCurrent() {
2024-10-16 00:13:09 +03:00
MainModule_.instance.set(CurrentName(), null);
}
public D getCurrent() {
2024-10-16 00:13:09 +03:00
return (D) MainModule_.instance.get(CurrentName());
}
public void setCurrent(D o) {
2024-10-16 00:13:09 +03:00
MainModule_.instance.set(CurrentName(), o);
}
public Vector<D> getSelectedOrCurrent() {
Vector<D> res = new Vector<>();
if (getSelectedCount() > 0)
res = getSelectedItems();
else {
if ((CurrentName() != null) && (getCurrent() != null)) {
res.add(getCurrent());
}
}
return res;
}
public Vector<K> getSelectedOrCurrentKeys() {
Vector<K> res = new Vector<>();
if (getSelectedCount() > 0)
res = getSelectedKeys();
else {
if ((CurrentName() != null) && (getCurrent() != null)) {
res.add((K) getCurrent().getPK());
}
}
return res;
}
public void SaveLastSelections() {
if (hasUI()) {
Object lastPk = null;
if ((CurrentName() != null) && (getCurrent() != null))
lastPk = getCurrent().getPK();
if (!selections.containsKey(getClass()))
selections.put(getClass(), lastPk);
else selections.replace(getClass(), lastPk);
}
}
public void RestoreLastSelections() {
if (hasUI()) {
Object lastPk = selections.get(getClass());
if ((CurrentName() != null) && (lastPk != null)) {
ui.Select(lastPk);
}
}
}
//-------------------------------------------------------------------------------------
public PassCode_ getDeletePassCode() {
return null;
}
2023-09-17 22:13:42 +03:00
}