未验证 提交 29fe5714 编写于 作者: S Serge Rider 提交者: GitHub

Merge pull request #13077 from dbeaver/datatransfer-columns-table-ordering#12001

#12001 Allow changing order of table columns in columns mapping dialog
...@@ -47,6 +47,7 @@ import org.jkiss.dbeaver.ui.SharedTextColors; ...@@ -47,6 +47,7 @@ import org.jkiss.dbeaver.ui.SharedTextColors;
import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.CustomComboBoxCellEditor; import org.jkiss.dbeaver.ui.controls.CustomComboBoxCellEditor;
import org.jkiss.dbeaver.ui.controls.ListContentProvider; import org.jkiss.dbeaver.ui.controls.ListContentProvider;
import org.jkiss.dbeaver.ui.controls.ViewerColumnController;
import org.jkiss.dbeaver.ui.dialogs.BaseDialog; import org.jkiss.dbeaver.ui.dialogs.BaseDialog;
import org.jkiss.utils.CommonUtils; import org.jkiss.utils.CommonUtils;
...@@ -135,199 +136,174 @@ class ColumnsMappingDialog extends BaseDialog { ...@@ -135,199 +136,174 @@ class ColumnsMappingDialog extends BaseDialog {
} }
}); });
{ final ViewerColumnController<?, ?> columnController = new ViewerColumnController<>(getClass().getName(), mappingViewer);
TableViewerColumn columnSource = new TableViewerColumn(mappingViewer, SWT.LEFT);
columnSource.setLabelProvider(new CellLabelProvider() { columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_source_text, null, SWT.LEFT, true, false, new ColumnLabelProvider() {
@Override @Override
public void update(ViewerCell cell) public void update(ViewerCell cell) {
{ DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement();
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) cell.getElement(); cell.setText(DBUtils.getObjectFullName(mapping.getSource(), DBPEvaluationContext.UI));
cell.setText(DBUtils.getObjectFullName(attrMapping.getSource(), DBPEvaluationContext.UI)); if (mapping.getIcon() != null) {
if (attrMapping.getIcon() != null) { cell.setImage(DBeaverIcons.getImage(mapping.getIcon()));
cell.setImage(DBeaverIcons.getImage(attrMapping.getIcon()));
}
}
});
columnSource.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_source_text);
columnSource.getColumn().setWidth(170);
}
{
TableViewerColumn columnSourceType = new TableViewerColumn(mappingViewer, SWT.LEFT);
columnSourceType.setLabelProvider(new CellLabelProvider() {
@Override
public void update(ViewerCell cell)
{
cell.setText(((DatabaseMappingAttribute) cell.getElement()).getSourceType());
} }
}); }
columnSourceType.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_source_type_text); });
columnSourceType.getColumn().setWidth(100);
}
{ columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_source_type_text, null, SWT.LEFT, true, false, new ColumnLabelProvider() {
TableViewerColumn columnTarget = new TableViewerColumn(mappingViewer, SWT.LEFT); @Override
columnTarget.setLabelProvider(new CellLabelProvider() { public void update(ViewerCell cell) {
@Override cell.setText(((DatabaseMappingAttribute) cell.getElement()).getSourceType());
public void update(ViewerCell cell) }
{ });
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement();
cell.setText(mapping.getTargetName()); columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_target_text, null, SWT.LEFT, true, false, false, null, new ColumnLabelProvider() {
if (mapping.getMappingType() == DatabaseMappingType.unspecified) { @Override
cell.setBackground(UIUtils.getSharedTextColors().getColor(SharedTextColors.COLOR_WARNING)); public void update(ViewerCell cell) {
} else { DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement();
cell.setBackground(null); cell.setText(mapping.getTargetName());
} if (mapping.getMappingType() == DatabaseMappingType.unspecified) {
cell.setFont(boldFont); cell.setBackground(UIUtils.getSharedTextColors().getColor(SharedTextColors.COLOR_WARNING));
} else {
cell.setBackground(null);
} }
}); cell.setFont(boldFont);
columnTarget.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_target_text); }
columnTarget.getColumn().setWidth(170); }, new EditingSupport(mappingViewer) {
columnTarget.setEditingSupport(new EditingSupport(mappingViewer) { @Override
@Override protected CellEditor getCellEditor(Object element)
protected CellEditor getCellEditor(Object element) {
{ try {
try { java.util.List<String> items = new ArrayList<>();
java.util.List<String> items = new ArrayList<>(); DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) element;
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) element; if (mapping.getParent().getMappingType() == DatabaseMappingType.existing &&
if (mapping.getParent().getMappingType() == DatabaseMappingType.existing && mapping.getParent().getTarget() instanceof DBSEntity)
mapping.getParent().getTarget() instanceof DBSEntity) {
{ DBSEntity parentEntity = (DBSEntity)mapping.getParent().getTarget();
DBSEntity parentEntity = (DBSEntity)mapping.getParent().getTarget(); for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) {
for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) { items.add(attr.getName());
items.add(attr.getName());
}
} }
items.add(DatabaseMappingAttribute.TARGET_NAME_SKIP);
return new CustomComboBoxCellEditor(
mappingViewer,
mappingViewer.getTable(),
items.toArray(new String[0]),
SWT.DROP_DOWN);
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target column", e);
return null;
} }
}
@Override items.add(DatabaseMappingAttribute.TARGET_NAME_SKIP);
protected boolean canEdit(Object element) return new CustomComboBoxCellEditor(
{ mappingViewer,
return true; mappingViewer.getTable(),
items.toArray(new String[0]),
SWT.DROP_DOWN);
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target column", e);
return null;
} }
}
@Override @Override
protected Object getValue(Object element) protected boolean canEdit(Object element)
{ {
return ((DatabaseMappingAttribute)element).getTargetName(); return true;
} }
@Override @Override
protected void setValue(Object element, Object value) protected Object getValue(Object element)
{ {
try { return ((DatabaseMappingAttribute)element).getTargetName();
String name = CommonUtils.toString(value); }
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
if (DatabaseMappingAttribute.TARGET_NAME_SKIP.equals(name)) { @Override
attrMapping.setMappingType(DatabaseMappingType.skip); protected void setValue(Object element, Object value)
} else { {
if (attrMapping.getParent().getMappingType() == DatabaseMappingType.existing && try {
attrMapping.getParent().getTarget() instanceof DBSEntity) String name = CommonUtils.toString(value);
{ DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
DBSEntity parentEntity = (DBSEntity)attrMapping.getParent().getTarget(); if (DatabaseMappingAttribute.TARGET_NAME_SKIP.equals(name)) {
for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) { attrMapping.setMappingType(DatabaseMappingType.skip);
if (name.equalsIgnoreCase(attr.getName())) { } else {
attrMapping.setTarget(attr); if (attrMapping.getParent().getMappingType() == DatabaseMappingType.existing &&
attrMapping.setMappingType(DatabaseMappingType.existing); attrMapping.getParent().getTarget() instanceof DBSEntity)
attrMapping.setTargetName(name); {
return; DBSEntity parentEntity = (DBSEntity)attrMapping.getParent().getTarget();
} for (DBSEntityAttribute attr : CommonUtils.safeCollection(parentEntity.getAttributes(new VoidProgressMonitor()))) {
if (name.equalsIgnoreCase(attr.getName())) {
attrMapping.setTarget(attr);
attrMapping.setMappingType(DatabaseMappingType.existing);
attrMapping.setTargetName(name);
return;
} }
} }
attrMapping.setMappingType(DatabaseMappingType.create);
attrMapping.setTargetName(name);
} }
} catch (DBException e) { attrMapping.setMappingType(DatabaseMappingType.create);
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target", e); attrMapping.setTargetName(name);
} finally {
mappingViewer.refresh();
} }
} catch (DBException e) {
DBWorkbench.getPlatformUI().showError("Bad value", "Wrong target", e);
} finally {
mappingViewer.refresh();
} }
}); }
} });
{ columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_target_type_text, null, SWT.LEFT, true, false, false, null, new ColumnLabelProvider() {
TableViewerColumn columnTargetType = new TableViewerColumn(mappingViewer, SWT.LEFT); @Override
columnTargetType.setLabelProvider(new CellLabelProvider() { public void update(ViewerCell cell) {
@Override DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) cell.getElement();
public void update(ViewerCell cell) DBPDataSource dataSource = settings.getTargetDataSource(attrMapping);
{ cell.setText(attrMapping.getTargetType(dataSource, true));
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) cell.getElement(); cell.setFont(boldFont);
DBPDataSource dataSource = settings.getTargetDataSource(attrMapping); }
cell.setText(attrMapping.getTargetType(dataSource, true)); }, new EditingSupport(mappingViewer) {
cell.setFont(boldFont); @Override
} protected CellEditor getCellEditor(Object element)
}); {
columnTargetType.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_target_type_text); DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
columnTargetType.getColumn().setWidth(100);
columnTargetType.setEditingSupport(new EditingSupport(mappingViewer) {
@Override
protected CellEditor getCellEditor(Object element)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
Set<String> types = new TreeSet<>(); Set<String> types = new TreeSet<>();
DBPDataTypeProvider dataTypeProvider = DBUtils.getParentOfType(DBPDataTypeProvider.class, settings.getContainer()); DBPDataTypeProvider dataTypeProvider = DBUtils.getParentOfType(DBPDataTypeProvider.class, settings.getContainer());
if (dataTypeProvider != null) { if (dataTypeProvider != null) {
for (DBSDataType type : dataTypeProvider.getLocalDataTypes()) { for (DBSDataType type : dataTypeProvider.getLocalDataTypes()) {
types.add(type.getName()); types.add(type.getName());
}
} }
types.add(attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true));
return new CustomComboBoxCellEditor(mappingViewer, mappingViewer.getTable(), types.toArray(new String[0]), SWT.BORDER);
}
@Override
protected boolean canEdit(Object element)
{
return true;
}
@Override
protected Object getValue(Object element)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
return attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true);
}
@Override
protected void setValue(Object element, Object value)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
attrMapping.setTargetType(CommonUtils.toString(value));
mappingViewer.refresh(element);
} }
}); types.add(attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true));
}
{ return new CustomComboBoxCellEditor(mappingViewer, mappingViewer.getTable(), types.toArray(new String[0]), SWT.BORDER);
TableViewerColumn columnType = new TableViewerColumn(mappingViewer, SWT.LEFT); }
columnType.setLabelProvider(new CellLabelProvider() { @Override
@Override protected boolean canEdit(Object element)
public void update(ViewerCell cell) {
{ return true;
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) cell.getElement(); }
String text = ""; @Override
switch (mapping.getMappingType()) { protected Object getValue(Object element)
case unspecified: text = "?"; break; {
case existing: text = DTUIMessages.columns_mapping_dialog_cell_text_existing; break; DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
case create: text = DTUIMessages.columns_mapping_dialog_cell_text_new; break; return attrMapping.getTargetType(settings.getTargetDataSource(attrMapping), true);
case skip: text = DTUIMessages.columns_mapping_dialog_cell_text_skip; break; }
} @Override
cell.setText(text); protected void setValue(Object element, Object value)
{
DatabaseMappingAttribute attrMapping = (DatabaseMappingAttribute) element;
attrMapping.setTargetType(CommonUtils.toString(value));
mappingViewer.refresh(element);
}
});
columnController.addColumn(DTUIMessages.columns_mapping_dialog_column_type_text_mapping, null, SWT.LEFT, true, false, new ColumnLabelProvider() {
@Override
public String getText(Object element) {
DatabaseMappingAttribute mapping = (DatabaseMappingAttribute) element;
switch (mapping.getMappingType()) {
case existing:
return DTUIMessages.columns_mapping_dialog_cell_text_existing;
case create:
return DTUIMessages.columns_mapping_dialog_cell_text_new;
case skip:
return DTUIMessages.columns_mapping_dialog_cell_text_skip;
default:
return "?";
} }
}); }
columnType.getColumn().setText(DTUIMessages.columns_mapping_dialog_column_type_text_mapping); });
columnType.getColumn().setWidth(60);
} columnController.createColumns();
mappingViewer.setInput(attributeMappings); mappingViewer.setInput(attributeMappings);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册