private RefreshResult refreshPart(final Object source, boolean force, boolean showConfirmation) {
        if (getContainer() == null || getContainer().isDisposed() || saveInProgress) {
            return RefreshResult.IGNORED;
        }

        DBSObject databaseObject = getEditorInput().getDatabaseObject();
        boolean isPersistedObject = databaseObject != null && databaseObject.isPersisted();

        if (force && isPersistedObject && isDirty() && showConfirmation) {
            if (ConfirmationDialog.confirmAction(
                null,
                NavigatorPreferences.CONFIRM_ENTITY_REVERT,
                ConfirmationDialog.QUESTION,
                getTitle()) != IDialogConstants.YES_ID)
            {
                return RefreshResult.CANCELED;
            }
        }

        boolean isRename = false;
        if (source instanceof DBNEvent) {
            if (((DBNEvent) source).getNodeChange() == DBNEvent.NodeChange.REFRESH) {
                // This may happen if editor was refreshed indirectly (it is a child of refreshed node)
                //force = true;
            }
            Object source2 = ((DBNEvent) source).getSource();
            if (source2 instanceof DBPEvent) {
                if (((DBPEvent) source2).getData() == DBPEvent.RENAME) {
                    Map<String, Object> options = ((DBPEvent) source2).getOptions();
                    Object uiSource = options.get(DBEObjectManager.OPTION_UI_SOURCE);
                    if (uiSource != null && !(uiSource instanceof CustomFormEditor)) {
                        isRename = true;
                    }
                }
            }
        }

        if (force) {
            if (isPersistedObject) {
                // Lists and commands should be refreshed only if we make real refresh from remote storage
                // Otherwise just update object's properties
                DBECommandContext commandContext = getCommandContext();
                if (commandContext != null && commandContext.isDirty()) {
                    // Just clear command context. Do not undo because object state was already refreshed
                    commandContext.resetChanges(true);
                }
            }
        }

        if (databaseObject != null) {
            // Refresh visual content in parts
            for (IEditorPart editor : editorMap.values()) {
                if (editor instanceof IRefreshablePart) {
                    // If it is a rename event then force refresh
                    boolean refreshNestedPart = force;
                    if (!refreshNestedPart && editor instanceof ObjectPropertiesEditor && isRename) {
                        refreshNestedPart = true;
                    }
                    ((IRefreshablePart)editor).refreshPart(source, refreshNestedPart);
                }
            }
        }

        setPartName(getEditorInput().getName());
        setTitleImage(getEditorInput().getImageDescriptor());

        if (hasPropertiesEditor) {
            // Update main editor image
            DBNDatabaseNode navigatorNode = getEditorInput().getNavigatorNode();
            if (navigatorNode != null) {
                setPageImage(0, DBeaverIcons.getImage(navigatorNode.getNodeIconDefault()));
            }
        }

        firePropertyChange(IWorkbenchPartConstants.PROP_DIRTY);

        return RefreshResult.REFRESHED;
    }
Saves data in all nested editors
@param monitor progress monitor
plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java