import java.util.*;
import java.util.zip.*;
import java.util.List;
import java.util.regex.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.util.concurrent.locks.*;
import java.util.function.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.table.*;
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
import java.lang.ref.*;
import java.lang.management.*;
import java.security.*;
import java.security.spec.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.*;
import javax.imageio.*;
import java.math.*;
import java.awt.datatransfer.*;
import java.awt.datatransfer.StringSelection;
import java.text.NumberFormat;
import javax.swing.undo.UndoManager;
import javax.imageio.metadata.*;
import javax.imageio.stream.*;
import java.awt.geom.*;
import java.text.SimpleDateFormat;
import java.nio.charset.Charset;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import static x30_pkg.x30_util.DynamicObject;
import javax.swing.Icon;
class main {
static class JObjectTable implements Swingable {
List data = new ArrayList();
transient IF1 itemToMap;
transient Set hideFields;
transient boolean debug, fieldsInOrder = true, withSearcher;
final public JObjectTable setDefaultAction(IVF1 defaultAction){ return defaultAction(defaultAction); }
public JObjectTable defaultAction(IVF1 defaultAction) { this.defaultAction = defaultAction; return this; } final public IVF1 getDefaultAction(){ return defaultAction(); }
public IVF1 defaultAction() { return defaultAction; }
IVF1 defaultAction;
final public JTable getTable(){ return table(); }
public JTable table() { return table; }
transient JTable table;
transient TableSearcher searcher;
transient boolean useStruct = false; // possible breaking change for older modules
transient Set onListChanged;
public JObjectTable onListChanged(Runnable r) { onListChanged = createOrAddToSyncLinkedHashSet(onListChanged, r); return this; }
public JObjectTable removeListChangedListener(Runnable r) { main.remove(onListChanged, r); return this; }
public void listChanged() { pcallFAll(onListChanged); }
JObjectTable() {
itemToMap = a -> {
if (a instanceof String) return litorderedmap("" , (String) a);
Map map = humanizeKeys(fieldsInOrder ? objectToMap_inOrder_withoutFields(a, hideFields) : objectToMap(a));
if (!useStruct) map = mapValues(__25 -> strOrEmpty(__25), map);
return map;
};
}
void onListChangedAndNow(Runnable r) {
if (r == null) return;
onListChanged(r);
r.run();
}
public transient JComponent visualize_cache;
public JComponent visualize() { if (visualize_cache == null) visualize_cache = visualize_load(); return visualize_cache;}
public JComponent visualize_load() { return markVisualizer(this, visualize_impl()); }
JComponent visualize_impl() {
List