@Override
    public void addClipboardData(CopyMode mode, ClipboardData clipboardData) {
        String selectedText;
        if (mode == CopyMode.ADVANCED) {
            // Multiple rows selected
            // Copy all of them in tsv format
            selectedText = copyGridToText();
            if (!CommonUtils.isEmpty(selectedText)) {
                clipboardData.addTransfer(TextTransfer.getInstance(), selectedText);
            }
        } else {
            IStructuredSelection selection = itemsViewer.getStructuredSelection();
            if (selection.size() > 1) {
                StringBuilder buf = new StringBuilder();
                for (Object o : selection) {
                    Object object = getObjectValue((OBJECT_TYPE) o);

                    ObjectColumn nameColumn = null;
                    int columnsCount = columnController.getColumnsCount();
                    for (int i = 0; i < columnsCount; i++) {
                        ObjectColumn column = getColumnByIndex(i);
                        if (column.isNameColumn(object)) {
                            nameColumn = column;
                            break;
                        }
                    }

                    String objectName = null;
                    if (nameColumn != null) {
                        try {
                            ObjectPropertyDescriptor nameProperty = nameColumn.getProperty(object);
                            if (nameProperty != null) {
                                objectName = CommonUtils.toString(nameProperty.readValue(object, null, true));
                            }
                        } catch (Throwable e) {
                            log.debug(e);
                        }
                    }
                    if (objectName == null) {
                        if (object instanceof DBPNamedObject) {
                            objectName = ((DBPNamedObject) object).getName();
                        } else {
                            objectName = DBValueFormatting.getDefaultValueDisplayString(object, DBDDisplayFormat.UI);
                        }
                    }
                    if (buf.length() > 0) buf.append("\n");
                    if (selection instanceof TreeSelection) {
                        final TreePath[] paths = ((TreeSelection) selection).getPathsFor(o);
                        if (!ArrayUtils.isEmpty(paths)) {
                            final int count = paths[0].getSegmentCount();
                            for (int i = 1; i < count; i++) {
                                buf.append('\t');
                            }
                        }
                    }
                    buf.append(objectName);
                }
                selectedText = buf.toString();
            } else {
                selectedText = getRenderer().getSelectedText();
            }
        }
        if (!CommonUtils.isEmpty(selectedText)) {
            clipboardData.addTransfer(TextTransfer.getInstance(), selectedText);
        }
    }
Creates service for object loading.
@param forUpdate true if it is update/merge operation. I.e. existing object modifications should remain.
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/navigator/itemlist/ObjectListControl.java