提交 dc39f9f3 编写于 作者: S serge-rider

#1712 Batch objects processing support

上级 d7f6631a
...@@ -31,10 +31,10 @@ import org.eclipse.swt.graphics.Font; ...@@ -31,10 +31,10 @@ import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchCommandConstants; import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.IWorkbenchSite;
import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBException;
...@@ -62,6 +62,7 @@ import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; ...@@ -62,6 +62,7 @@ import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorLabelProvider; import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorLabelProvider;
import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTree; import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTree;
import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTreeFilter; import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTreeFilter;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.*; import java.util.*;
...@@ -80,6 +81,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P ...@@ -80,6 +81,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
private PostgrePermission currentPermission; private PostgrePermission currentPermission;
private DBSObject currentObject; private DBSObject currentObject;
private Map<String, PostgrePermission> permissionMap = new HashMap<>(); private Map<String, PostgrePermission> permissionMap = new HashMap<>();
private Text objectDescriptionText;
public void createPartControl(Composite parent) { public void createPartControl(Composite parent) {
this.pageControl = new PageControl(parent); this.pageControl = new PageControl(parent);
...@@ -87,7 +89,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P ...@@ -87,7 +89,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
SashForm composite = UIUtils.createPartDivider(getSite().getPart(), this.pageControl, SWT.HORIZONTAL); SashForm composite = UIUtils.createPartDivider(getSite().getPart(), this.pageControl, SWT.HORIZONTAL);
composite.setLayoutData(new GridData(GridData.FILL_BOTH)); composite.setLayoutData(new GridData(GridData.FILL_BOTH));
roleOrObjectTable = new DatabaseNavigatorTree(composite, DBeaverCore.getInstance().getNavigatorModel().getRoot(), SWT.FULL_SELECTION, false, new DatabaseNavigatorTreeFilter()); roleOrObjectTable = new DatabaseNavigatorTree(composite, DBeaverCore.getInstance().getNavigatorModel().getRoot(), SWT.MULTI | SWT.FULL_SELECTION, false, new DatabaseNavigatorTreeFilter());
roleOrObjectTable.setLayoutData(new GridData(GridData.FILL_BOTH)); roleOrObjectTable.setLayoutData(new GridData(GridData.FILL_BOTH));
final TreeViewer treeViewer = roleOrObjectTable.getViewer(); final TreeViewer treeViewer = roleOrObjectTable.getViewer();
treeViewer.setLabelProvider(new DatabaseNavigatorLabelProvider(treeViewer) { treeViewer.setLabelProvider(new DatabaseNavigatorLabelProvider(treeViewer) {
...@@ -110,11 +112,11 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P ...@@ -110,11 +112,11 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
} }
}); });
treeViewer.addSelectionChangedListener(event -> { treeViewer.addSelectionChangedListener(event -> {
DBSObject selectedObject = NavigatorUtils.getSelectedObject(treeViewer.getSelection()); List<DBSObject> selectedObjects = NavigatorUtils.getSelectedObjects(treeViewer.getSelection());
if (selectedObject == null) { if (CommonUtils.isEmpty(selectedObjects)) {
updateObjectPermissions(null, null); updateObjectPermissions(null);
} else { } else {
updateObjectPermissions(getObjectPermissions(selectedObject), selectedObject); updateObjectPermissions(selectedObjects);
} }
}); });
treeViewer.addFilter(new ViewerFilter() { treeViewer.addFilter(new ViewerFilter() {
...@@ -199,10 +201,13 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P ...@@ -199,10 +201,13 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
} }
}); });
objectDescriptionText = new Text(permEditPanel, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
objectDescriptionText.setLayoutData(new GridData(GridData.FILL_BOTH));
} }
pageControl.createOrSubstituteProgressPanel(getSite()); pageControl.createOrSubstituteProgressPanel(getSite());
updateObjectPermissions(null, null); updateObjectPermissions(null);
} }
private PostgrePermission getObjectPermissions(DBSObject object) { private PostgrePermission getObjectPermissions(DBSObject object) {
...@@ -265,16 +270,34 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P ...@@ -265,16 +270,34 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
}); });
} }
private void updateObjectPermissions(PostgrePermission data, DBSObject curObject) { private void updateObjectPermissions(List<DBSObject> objects) {
this.currentPermission = data; boolean hasBadObjects = CommonUtils.isEmpty(objects);
if (curObject instanceof PostgreTableBase || curObject instanceof PostgreRole) { StringBuilder objectNames = new StringBuilder();
this.currentObject = curObject; if (!hasBadObjects) {
for (DBSObject object : objects) {
if (!(object instanceof PostgreTableBase) && !(object instanceof PostgreRole)) {
hasBadObjects = true;
break;
}
if (objectNames.length() > 0) objectNames.append(", ");
objectNames.append(DBUtils.getObjectFullName(object.getDataSource(), object, DBPEvaluationContext.DML));
}
}
if (hasBadObjects) {
objectDescriptionText.setText("<no objects>");
this.currentPermission = null;
this.currentObject = null;
} else { } else {
this.currentObject = curObject = null; objectDescriptionText.setText(objectNames.toString());
this.currentObject = objects.get(0);
this.currentPermission = getObjectPermissions(this.currentObject);
} }
if (data == null) { if (currentPermission == null) {
permissionTable.setEnabled(curObject != null); // We have object(s) but no permissions for them
permissionTable.setEnabled(!CommonUtils.isEmpty(objects));
for (TableItem item : permissionTable.getItems()) { for (TableItem item : permissionTable.getItems()) {
item.setChecked(false); item.setChecked(false);
item.setText(1, ""); item.setText(1, "");
...@@ -284,7 +307,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P ...@@ -284,7 +307,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
permissionTable.setEnabled(true); permissionTable.setEnabled(true);
for (TableItem item : permissionTable.getItems()) { for (TableItem item : permissionTable.getItems()) {
PostgrePrivilegeType privType = (PostgrePrivilegeType) item.getData(); PostgrePrivilegeType privType = (PostgrePrivilegeType) item.getData();
short perm = data.getPermission(privType); short perm = currentPermission.getPermission(privType);
item.setChecked((perm & PostgrePermission.GRANTED) != 0); item.setChecked((perm & PostgrePermission.GRANTED) != 0);
if ((perm & PostgrePermission.WITH_GRANT_OPTION) != 0) { if ((perm & PostgrePermission.WITH_GRANT_OPTION) != 0) {
item.setText(1, "X"); item.setText(1, "X");
...@@ -351,7 +374,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P ...@@ -351,7 +374,7 @@ public class PostgresRolePrivilegesEditor extends AbstractDatabaseObjectEditor<P
{ {
isLoaded = false; isLoaded = false;
DBeaverUI.syncExec(() -> { DBeaverUI.syncExec(() -> {
updateObjectPermissions(null, null); updateObjectPermissions(null);
}); });
activatePart(); activatePart();
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册