package Common.Database.Tables; import Common.Current_; import Common.Database.Objects.DBObject; import Common.MainModule_; import Common.Passes.PassCode_; import Common.Utils.TextLog; import Common.Visual.DataSetControlForm; import Common.Visual.UI; import Common.Visual.Windows.Dialog.DBObjectDialog; import Common.Visual.Windows.Dialog.DialogFields; import javax.swing.*; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Vector; import java.util.stream.Collectors; public class DataSet extends DataSetAnchestor { public String Name; public Class k; //класс первичного ключа. public Class d; //класс объектов. public LinkedHashMap Data = new LinkedHashMap<>(); //наполнение //- protected DataSetControlForm ui = null; //-- public DataSet(Class k_in, Class d_in) { k = k_in; d = d_in; Name = d.getSimpleName(); } public DataSetControlForm getUI() { return ui; } public void mountUI(JPanel mountPanel_in) { UI.Clear(mountPanel_in); ui = createUI(mountPanel_in); } public void ClearUI() { if ((ui != null) && ui.isShown()) { ui.ClearSelection(); ui.Clear(); } } public void RefreshUI() { if (ui != null) ui.Refresh(); } public int getRowCountUI() { return ui.getRowCount(); } public void SetCurrentObjectByUI(Object pk) { if (ui != null) { ui.ClearSelection(); //сброс текущего объекта и всего что с ним связано. ui.SetCurrentByPK(pk); } } protected DataSetControlForm createUI(JPanel mountPanel) { return null; } public void SelectAll(boolean flag) { for (D object : Data.values()) { if (getUI().isObjectVisible(object)) object.Select(flag); } RefreshUI(); } public D getFirstRecord() { return Data.values().stream().findFirst().orElse(null); } public Vector getOrderedRecords(Comparator comparator) { Vector res = new Vector<>(Data.values()); res.sort(comparator); return res; } @SuppressWarnings("unchecked") public DBObjectDialog 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() + " будет удален(а)"); } public boolean ShowDeleteObjectsDialog(int toDeleteCount) { return UI.Warning(getPluralDescription() + " в количестве " + toDeleteCount + " будут удалены)"); } 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 void clear() { Data.clear(); } public int size() { return Data.size(); } public boolean containsKey(Object key) { return Data.containsKey(key); } //- public int getSelectedCount() { return (int) Data.values().stream().filter(d -> getUI().isObjectVisible(d) && d.isSelected()).count(); } public Vector getSelectedItems() { return Data.values().stream().filter(d -> getUI().isObjectVisible(d) && d.isSelected()).collect(Collectors.toCollection(Vector::new)); } public Vector getSelectedKeys() { return Data.values().stream().filter(DBObject::isSelected).map(d -> (K) d.getPK()).collect(Collectors.toCollection(Vector::new)); } //-- public void ShowUI() { if (ui != null) { ui.Show(); } } public void ShowUI(Object key) { if (ui != null) { ui.Show(key); } } //------------------------------------------------------------------------------------ public Current_ CurrentName() { return null; } public boolean CheckCurrent(TextLog log) { 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() { MainModule_.instance.set(CurrentName(), null); } public D getCurrent() { return (D) MainModule_.instance.get(CurrentName()); } public void setCurrent(D o) { MainModule_.instance.set(CurrentName(), o); } public Vector getSelectedOrCurrent() { Vector res = new Vector<>(); if (getSelectedCount() > 0) res = getSelectedItems(); else { if ((CurrentName() != null) && (getCurrent() != null)) { res.add(getCurrent()); } } return res; } public Vector getSelectedOrCurrentKeys() { Vector res = new Vector<>(); if (getSelectedCount() > 0) res = getSelectedKeys(); else { if ((CurrentName() != null) && (getCurrent() != null)) { res.add((K) getCurrent().getPK()); } } return res; } //------------------------------------------------------------------------------------- public PassCode_ getDeletePassCode() { return null; } }