Loading TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/Column.java +3 −7 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ import it.inaf.oats.ia2.tapschemamanager.datalayer.TapSchemaHandler; * * @author Sonia Zorba <zorba at oats.inaf.it> */ public class Column extends EntityWrapper { public class Column extends EntityWrapper<ColumnEntity> { public static final String UTYPE = "utype"; public static final String UCD = "ucd"; Loading Loading @@ -40,14 +40,14 @@ public class Column extends EntityWrapper { addValue(STD, columnEntity.getStd() + ""); addValue(PRINCIPAL, columnEntity.getPrincipal() + ""); String tableName = columnEntity.getTableName(); String tableName = columnEntity.getFullTableName(); String schemaName = columnEntity.getTable().getSchemaName(); foreignKeyReference = tapSchemaHandler.getForeignKeyReference(schemaName, tableName, columnEntity.getName()); } @Override protected void afterSetValue(String key, String value) { ColumnEntity columnEntity = getColumnEntity(); ColumnEntity columnEntity = getEntity(); if (key.equals(UTYPE)) { columnEntity.setUtype(value); } else if (key.equals(UCD)) { Loading @@ -63,10 +63,6 @@ public class Column extends EntityWrapper { } } protected ColumnEntity getColumnEntity() { return (ColumnEntity) getEntity(); } public boolean isHidden() { return hidden; } Loading TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/EntityWrapper.java +5 −4 Original line number Diff line number Diff line Loading @@ -9,16 +9,17 @@ import java.util.Map; /** * * @author Sonia Zorba <zorba at oats.inaf.it> * @param <T> */ public abstract class EntityWrapper { public abstract class EntityWrapper<T extends TapSchemaEntity> { private final TapSchemaEntity entity; private final T entity; private final Map<String, String> originalValues; private final Map<String, String> editedValues; private final List<String> supportedKeys; private Status status; public EntityWrapper(TapSchemaEntity entity, String... supportedKeys) { public EntityWrapper(T entity, String... supportedKeys) { this.entity = entity; this.supportedKeys = Arrays.asList(supportedKeys); originalValues = new HashMap<String, String>(); Loading Loading @@ -81,7 +82,7 @@ public abstract class EntityWrapper { this.status = status; } public TapSchemaEntity getEntity() { public T getEntity() { return entity; } Loading TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/EntityWrapperContainer.java +8 −3 Original line number Diff line number Diff line Loading @@ -6,16 +6,21 @@ import java.util.List; /** * * @author Sonia Zorba <zorba at oats.inaf.it> * @param <T> */ public interface EntityWrapperContainer { public interface EntityWrapperContainer<T extends EntityWrapper> { public EntityWrapper getSelectedEntity(); public T getEntity(String name); public T getSelectedEntity(); public void selectEntity(String entityName); public List<String> getEntitiesNames(); public List<String> getAddables(); public List<EntityWrapper> getAllEntityWrappers(); public List<T> getAllEntityWrappers(); public void addEntityWrapper(String name) throws SQLException; Loading TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/Schema.java +17 −30 Original line number Diff line number Diff line Loading @@ -5,16 +5,16 @@ import it.inaf.oats.ia2.tapschemamanager.datalayer.TableEntity; import it.inaf.oats.ia2.tapschemamanager.datalayer.TapSchemaHandler; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; /** * * @author Sonia Zorba <zorba at oats.inaf.it> */ public class Schema extends EntityWrapper implements EntityWrapperContainer { public class Schema extends EntityWrapper<SchemaEntity> implements EntityWrapperContainer<Table> { public static final String UTYPE = "utype"; public static final String DESCRIPTION = "description"; Loading @@ -24,10 +24,6 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { private String selectedTable; private final Map<String, Table> tables; // public Schema(TapSchemaHandler tapSchemaHandler, String schemaName) throws SQLException { // this(tapSchemaHandler, tapSchemaHandler.getNewSchema(schemaName)); // setStatus(Status.ADDED_NOT_PERSISTED); // } public Schema(TapSchemaHandler tapSchemaHandler, SchemaEntity schemaEntity) throws SQLException { super(schemaEntity, UTYPE, DESCRIPTION); Loading @@ -36,10 +32,10 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { addValue(UTYPE, schemaEntity.getUtype()); addValue(DESCRIPTION, schemaEntity.getDescription()); tables = new HashMap<String, Table>(); tables = new TreeMap<String, Table>(String.CASE_INSENSITIVE_ORDER); for (TableEntity tableEntity : schemaEntity.getTables().values()) { String tableName = tableEntity.getTableName(); for (TableEntity tableEntity : schemaEntity.getTables()) { String tableName = tableEntity.getShortTableName(); tables.put(tableName, new Table(tapSchemaHandler, getName(), tableName, tableEntity)); } Loading @@ -48,7 +44,7 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { @Override protected void afterSetValue(String key, String value) { SchemaEntity schemaEntity = getSchemaEntity(); SchemaEntity schemaEntity = getEntity(); if (key.equals(UTYPE)) { schemaEntity.setUtype(value); } else if (key.equals(DESCRIPTION)) { Loading @@ -56,7 +52,8 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } } public List<String> getTablesNames() { @Override public List<String> getEntitiesNames() { return Util.setToList(tables.keySet()); } Loading @@ -80,7 +77,7 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } selectedTable = name; tapSchemaHandler.addTable(getName(), table.getTableEntity()); tapSchemaHandler.addTable(getName(), table.getEntity()); } @Override Loading @@ -93,17 +90,14 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } selectedTable = tables.isEmpty() ? null : tables.keySet().iterator().next(); tapSchemaHandler.removeTable(getSchemaEntity(), table.getTableEntity()); tapSchemaHandler.removeTable(getEntity(), table.getEntity()); } public Table getTable(String name) { @Override public Table getEntity(String name) { return tables.get(name); } protected SchemaEntity getSchemaEntity() { return (SchemaEntity) getEntity(); } @Override protected void setPersisted() { super.setPersisted(); Loading @@ -124,29 +118,22 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } @Override public List<EntityWrapper> getAllEntityWrappers() { public List<Table> getAllEntityWrappers() { return new ArrayList(tables.values()); } public Table getSelectedTable() { return selectedTable == null ? null : tables.get(selectedTable); } @Override public void selectEntity(String entityName) { selectedTable = entityName; Table table = tables.get(entityName); List<String> columns = table.getColumnsNames(); List<String> columns = table.getEntitiesNames(); if (!columns.isEmpty()) { table.selectEntity(Util.getFirstInAlphabeticalOrder(columns)); table.selectEntity(columns.get(0)); } } @Override public EntityWrapper getSelectedEntity() { if (selectedTable == null) { return null; } return tables.get(selectedTable); public Table getSelectedEntity() { return selectedTable == null ? null : tables.get(selectedTable); } } TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/Table.java +25 −34 Original line number Diff line number Diff line Loading @@ -2,20 +2,20 @@ package it.inaf.oats.ia2.tapschemamanager.businesslayer; import it.inaf.oats.ia2.tapschemamanager.datalayer.ColumnEntity; import it.inaf.oats.ia2.tapschemamanager.datalayer.ColumnInfo; import it.inaf.oats.ia2.tapschemamanager.datalayer.DLUtil; import it.inaf.oats.ia2.tapschemamanager.datalayer.TableEntity; import it.inaf.oats.ia2.tapschemamanager.datalayer.TapSchemaHandler; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; /** * * @author Sonia Zorba <zorba at oats.inaf.it> */ public class Table extends EntityWrapper implements EntityWrapperContainer { public class Table extends EntityWrapper<TableEntity> implements EntityWrapperContainer<Column> { public static final String UTYPE = "utype"; public static final String DESCRIPTION = "description"; Loading @@ -38,8 +38,8 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { this.tableName = tableName; // Load all ColumnEntity map columns = new HashMap<String, Column>(); Set<String> alreadyLoadedColumns = tableEntity.getColumns().keySet(); columns = new TreeMap<String, Column>(String.CASE_INSENSITIVE_ORDER); List<String> alreadyLoadedColumns = DLUtil.getEntitiesNames(tableEntity.getColumns()); for (ColumnInfo columnInfo : tapSchemaHandler.getColumnInfo(schemaName, tableName)) { ColumnEntity columnEntity = columnInfo.getColumnEntity(); Column column = new Column(tapSchemaHandler, columnEntity, columnInfo.isPrimaryKey()); Loading @@ -54,9 +54,17 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { setStatus(Status.ADDED_PERSISTED); } public String getSchemaName() { return schemaName; } public String getFullName() { return getEntity().getName(); } @Override protected void afterSetValue(String key, String value) { TableEntity tableEntity = getTableEntity(); TableEntity tableEntity = getEntity(); if (key.equals(UTYPE)) { tableEntity.setUtype(value); } else if (key.equals(DESCRIPTION)) { Loading @@ -64,10 +72,6 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } } protected TableEntity getTableEntity() { return (TableEntity) getEntity(); } @Override public List<String> getAddables() { List<String> addables = new ArrayList<String>(); Loading @@ -92,7 +96,7 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } selectedColumn = name; tapSchemaHandler.addColumn(getTableEntity(), column.getColumnEntity()); tapSchemaHandler.addColumn(getEntity(), column.getEntity()); } @Override Loading @@ -104,17 +108,19 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } else { column.setStatus(Status.TO_REMOVE); } List<String> visibleColumns = getColumnsNames(); List<String> visibleColumns = getEntitiesNames(); selectedColumn = visibleColumns.isEmpty() ? null : visibleColumns.get(0); tapSchemaHandler.removeColumn(getTableEntity(), name); tapSchemaHandler.removeColumn(getEntity(), name); } public Column getColumn(String name) { @Override public Column getEntity(String name) { return columns.get(name); } public List<String> getColumnsNames() { @Override public List<String> getEntitiesNames() { List<String> columnsNames = new ArrayList<String>(); for (Column column : columns.values()) { if (!column.isHidden()) { Loading Loading @@ -147,8 +153,8 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } @Override public List<EntityWrapper> getAllEntityWrappers() { List<EntityWrapper> list = new ArrayList<EntityWrapper>(); public List<Column> getAllEntityWrappers() { List<Column> list = new ArrayList<Column>(); for (Column column : columns.values()) { if (!column.isHidden()) { list.add(column); Loading @@ -157,33 +163,18 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { return list; } public Column getSelectedColumn() { return selectedColumn == null ? null : columns.get(selectedColumn); } @Override public void selectEntity(String entityName) { selectedColumn = entityName; } public String getSchemaName() { return schemaName; } public String getFullName() { return getEntity().getName(); } @Override public String getName() { return tableName; } @Override public EntityWrapper getSelectedEntity() { if (selectedColumn == null) { return null; } return columns.get(selectedColumn); public Column getSelectedEntity() { return selectedColumn == null ? null : columns.get(selectedColumn); } } Loading
TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/Column.java +3 −7 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ import it.inaf.oats.ia2.tapschemamanager.datalayer.TapSchemaHandler; * * @author Sonia Zorba <zorba at oats.inaf.it> */ public class Column extends EntityWrapper { public class Column extends EntityWrapper<ColumnEntity> { public static final String UTYPE = "utype"; public static final String UCD = "ucd"; Loading Loading @@ -40,14 +40,14 @@ public class Column extends EntityWrapper { addValue(STD, columnEntity.getStd() + ""); addValue(PRINCIPAL, columnEntity.getPrincipal() + ""); String tableName = columnEntity.getTableName(); String tableName = columnEntity.getFullTableName(); String schemaName = columnEntity.getTable().getSchemaName(); foreignKeyReference = tapSchemaHandler.getForeignKeyReference(schemaName, tableName, columnEntity.getName()); } @Override protected void afterSetValue(String key, String value) { ColumnEntity columnEntity = getColumnEntity(); ColumnEntity columnEntity = getEntity(); if (key.equals(UTYPE)) { columnEntity.setUtype(value); } else if (key.equals(UCD)) { Loading @@ -63,10 +63,6 @@ public class Column extends EntityWrapper { } } protected ColumnEntity getColumnEntity() { return (ColumnEntity) getEntity(); } public boolean isHidden() { return hidden; } Loading
TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/EntityWrapper.java +5 −4 Original line number Diff line number Diff line Loading @@ -9,16 +9,17 @@ import java.util.Map; /** * * @author Sonia Zorba <zorba at oats.inaf.it> * @param <T> */ public abstract class EntityWrapper { public abstract class EntityWrapper<T extends TapSchemaEntity> { private final TapSchemaEntity entity; private final T entity; private final Map<String, String> originalValues; private final Map<String, String> editedValues; private final List<String> supportedKeys; private Status status; public EntityWrapper(TapSchemaEntity entity, String... supportedKeys) { public EntityWrapper(T entity, String... supportedKeys) { this.entity = entity; this.supportedKeys = Arrays.asList(supportedKeys); originalValues = new HashMap<String, String>(); Loading Loading @@ -81,7 +82,7 @@ public abstract class EntityWrapper { this.status = status; } public TapSchemaEntity getEntity() { public T getEntity() { return entity; } Loading
TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/EntityWrapperContainer.java +8 −3 Original line number Diff line number Diff line Loading @@ -6,16 +6,21 @@ import java.util.List; /** * * @author Sonia Zorba <zorba at oats.inaf.it> * @param <T> */ public interface EntityWrapperContainer { public interface EntityWrapperContainer<T extends EntityWrapper> { public EntityWrapper getSelectedEntity(); public T getEntity(String name); public T getSelectedEntity(); public void selectEntity(String entityName); public List<String> getEntitiesNames(); public List<String> getAddables(); public List<EntityWrapper> getAllEntityWrappers(); public List<T> getAllEntityWrappers(); public void addEntityWrapper(String name) throws SQLException; Loading
TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/Schema.java +17 −30 Original line number Diff line number Diff line Loading @@ -5,16 +5,16 @@ import it.inaf.oats.ia2.tapschemamanager.datalayer.TableEntity; import it.inaf.oats.ia2.tapschemamanager.datalayer.TapSchemaHandler; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; /** * * @author Sonia Zorba <zorba at oats.inaf.it> */ public class Schema extends EntityWrapper implements EntityWrapperContainer { public class Schema extends EntityWrapper<SchemaEntity> implements EntityWrapperContainer<Table> { public static final String UTYPE = "utype"; public static final String DESCRIPTION = "description"; Loading @@ -24,10 +24,6 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { private String selectedTable; private final Map<String, Table> tables; // public Schema(TapSchemaHandler tapSchemaHandler, String schemaName) throws SQLException { // this(tapSchemaHandler, tapSchemaHandler.getNewSchema(schemaName)); // setStatus(Status.ADDED_NOT_PERSISTED); // } public Schema(TapSchemaHandler tapSchemaHandler, SchemaEntity schemaEntity) throws SQLException { super(schemaEntity, UTYPE, DESCRIPTION); Loading @@ -36,10 +32,10 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { addValue(UTYPE, schemaEntity.getUtype()); addValue(DESCRIPTION, schemaEntity.getDescription()); tables = new HashMap<String, Table>(); tables = new TreeMap<String, Table>(String.CASE_INSENSITIVE_ORDER); for (TableEntity tableEntity : schemaEntity.getTables().values()) { String tableName = tableEntity.getTableName(); for (TableEntity tableEntity : schemaEntity.getTables()) { String tableName = tableEntity.getShortTableName(); tables.put(tableName, new Table(tapSchemaHandler, getName(), tableName, tableEntity)); } Loading @@ -48,7 +44,7 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { @Override protected void afterSetValue(String key, String value) { SchemaEntity schemaEntity = getSchemaEntity(); SchemaEntity schemaEntity = getEntity(); if (key.equals(UTYPE)) { schemaEntity.setUtype(value); } else if (key.equals(DESCRIPTION)) { Loading @@ -56,7 +52,8 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } } public List<String> getTablesNames() { @Override public List<String> getEntitiesNames() { return Util.setToList(tables.keySet()); } Loading @@ -80,7 +77,7 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } selectedTable = name; tapSchemaHandler.addTable(getName(), table.getTableEntity()); tapSchemaHandler.addTable(getName(), table.getEntity()); } @Override Loading @@ -93,17 +90,14 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } selectedTable = tables.isEmpty() ? null : tables.keySet().iterator().next(); tapSchemaHandler.removeTable(getSchemaEntity(), table.getTableEntity()); tapSchemaHandler.removeTable(getEntity(), table.getEntity()); } public Table getTable(String name) { @Override public Table getEntity(String name) { return tables.get(name); } protected SchemaEntity getSchemaEntity() { return (SchemaEntity) getEntity(); } @Override protected void setPersisted() { super.setPersisted(); Loading @@ -124,29 +118,22 @@ public class Schema extends EntityWrapper implements EntityWrapperContainer { } @Override public List<EntityWrapper> getAllEntityWrappers() { public List<Table> getAllEntityWrappers() { return new ArrayList(tables.values()); } public Table getSelectedTable() { return selectedTable == null ? null : tables.get(selectedTable); } @Override public void selectEntity(String entityName) { selectedTable = entityName; Table table = tables.get(entityName); List<String> columns = table.getColumnsNames(); List<String> columns = table.getEntitiesNames(); if (!columns.isEmpty()) { table.selectEntity(Util.getFirstInAlphabeticalOrder(columns)); table.selectEntity(columns.get(0)); } } @Override public EntityWrapper getSelectedEntity() { if (selectedTable == null) { return null; } return tables.get(selectedTable); public Table getSelectedEntity() { return selectedTable == null ? null : tables.get(selectedTable); } }
TapSchemaManager/src/main/java/it/inaf/oats/ia2/tapschemamanager/businesslayer/Table.java +25 −34 Original line number Diff line number Diff line Loading @@ -2,20 +2,20 @@ package it.inaf.oats.ia2.tapschemamanager.businesslayer; import it.inaf.oats.ia2.tapschemamanager.datalayer.ColumnEntity; import it.inaf.oats.ia2.tapschemamanager.datalayer.ColumnInfo; import it.inaf.oats.ia2.tapschemamanager.datalayer.DLUtil; import it.inaf.oats.ia2.tapschemamanager.datalayer.TableEntity; import it.inaf.oats.ia2.tapschemamanager.datalayer.TapSchemaHandler; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; /** * * @author Sonia Zorba <zorba at oats.inaf.it> */ public class Table extends EntityWrapper implements EntityWrapperContainer { public class Table extends EntityWrapper<TableEntity> implements EntityWrapperContainer<Column> { public static final String UTYPE = "utype"; public static final String DESCRIPTION = "description"; Loading @@ -38,8 +38,8 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { this.tableName = tableName; // Load all ColumnEntity map columns = new HashMap<String, Column>(); Set<String> alreadyLoadedColumns = tableEntity.getColumns().keySet(); columns = new TreeMap<String, Column>(String.CASE_INSENSITIVE_ORDER); List<String> alreadyLoadedColumns = DLUtil.getEntitiesNames(tableEntity.getColumns()); for (ColumnInfo columnInfo : tapSchemaHandler.getColumnInfo(schemaName, tableName)) { ColumnEntity columnEntity = columnInfo.getColumnEntity(); Column column = new Column(tapSchemaHandler, columnEntity, columnInfo.isPrimaryKey()); Loading @@ -54,9 +54,17 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { setStatus(Status.ADDED_PERSISTED); } public String getSchemaName() { return schemaName; } public String getFullName() { return getEntity().getName(); } @Override protected void afterSetValue(String key, String value) { TableEntity tableEntity = getTableEntity(); TableEntity tableEntity = getEntity(); if (key.equals(UTYPE)) { tableEntity.setUtype(value); } else if (key.equals(DESCRIPTION)) { Loading @@ -64,10 +72,6 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } } protected TableEntity getTableEntity() { return (TableEntity) getEntity(); } @Override public List<String> getAddables() { List<String> addables = new ArrayList<String>(); Loading @@ -92,7 +96,7 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } selectedColumn = name; tapSchemaHandler.addColumn(getTableEntity(), column.getColumnEntity()); tapSchemaHandler.addColumn(getEntity(), column.getEntity()); } @Override Loading @@ -104,17 +108,19 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } else { column.setStatus(Status.TO_REMOVE); } List<String> visibleColumns = getColumnsNames(); List<String> visibleColumns = getEntitiesNames(); selectedColumn = visibleColumns.isEmpty() ? null : visibleColumns.get(0); tapSchemaHandler.removeColumn(getTableEntity(), name); tapSchemaHandler.removeColumn(getEntity(), name); } public Column getColumn(String name) { @Override public Column getEntity(String name) { return columns.get(name); } public List<String> getColumnsNames() { @Override public List<String> getEntitiesNames() { List<String> columnsNames = new ArrayList<String>(); for (Column column : columns.values()) { if (!column.isHidden()) { Loading Loading @@ -147,8 +153,8 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { } @Override public List<EntityWrapper> getAllEntityWrappers() { List<EntityWrapper> list = new ArrayList<EntityWrapper>(); public List<Column> getAllEntityWrappers() { List<Column> list = new ArrayList<Column>(); for (Column column : columns.values()) { if (!column.isHidden()) { list.add(column); Loading @@ -157,33 +163,18 @@ public class Table extends EntityWrapper implements EntityWrapperContainer { return list; } public Column getSelectedColumn() { return selectedColumn == null ? null : columns.get(selectedColumn); } @Override public void selectEntity(String entityName) { selectedColumn = entityName; } public String getSchemaName() { return schemaName; } public String getFullName() { return getEntity().getName(); } @Override public String getName() { return tableName; } @Override public EntityWrapper getSelectedEntity() { if (selectedColumn == null) { return null; } return columns.get(selectedColumn); public Column getSelectedEntity() { return selectedColumn == null ? null : columns.get(selectedColumn); } }