diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java index b1d52ad3e01dbcb4fd6c2697283e86626e80ff96..16fb09726295cf7e29510adf6f10791daa232205 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/editor/ERDEditorEmbedded.java @@ -40,6 +40,7 @@ import org.jkiss.dbeaver.ui.IActiveWorkbenchPart; import org.jkiss.dbeaver.ui.LoadingJob; import org.jkiss.dbeaver.ui.editors.IDatabaseEditor; import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput; +import org.jkiss.dbeaver.ui.editors.entity.IEntityStructureEditor; import org.jkiss.dbeaver.utils.RuntimeUtils; import java.lang.reflect.InvocationTargetException; @@ -48,7 +49,7 @@ import java.util.*; /** * Embedded ERD editor */ -public class ERDEditorEmbedded extends ERDEditorPart implements IDatabaseEditor, IActiveWorkbenchPart { +public class ERDEditorEmbedded extends ERDEditorPart implements IDatabaseEditor, IEntityStructureEditor, IActiveWorkbenchPart { private static final Log log = Log.getLog(ERDEditorEmbedded.class); @@ -331,6 +332,8 @@ public class ERDEditorEmbedded extends ERDEditorPart implements IDatabaseEditor, String diagramState = DiagramLoader.serializeDiagram(RuntimeUtils.makeMonitor(monitor), getDiagramPart(), getDiagram(), false, true); diagramStateMap.put(PROPS_DIAGRAM_SERIALIZED, diagramState); + vEntity.persistConfiguration(); + getCommandStack().markSaveLocation(); } catch (Exception e) { log.error("Error saving diagram", e); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/DiagramLoader.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/DiagramLoader.java index caf4835715ad41e9201f39e7a20dc431b9904027..ef35a852181f289433e12cdeb4e057d1c4a02ffa 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/DiagramLoader.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/DiagramLoader.java @@ -443,7 +443,7 @@ public class DiagramLoader // Save as XML StringWriter out = new StringWriter(1000); - XMLBuilder xml = new XMLBuilder(out, GeneralUtils.UTF8_ENCODING); + XMLBuilder xml = new XMLBuilder(out, GeneralUtils.UTF8_ENCODING, !compact); xml.setButify(!compact); if (verbose) { xml.addContent( @@ -473,7 +473,9 @@ public class DiagramLoader if (diagram != null) { xml.addAttribute(ATTR_NAME, diagram.getName()); } - xml.addAttribute(ATTR_TIME, RuntimeUtils.getCurrentTimeStamp()); + if (compact) { + xml.addAttribute(ATTR_TIME, RuntimeUtils.getCurrentTimeStamp()); + } if (diagram != null) { xml.startElement(TAG_ENTITIES); @@ -527,31 +529,33 @@ public class DiagramLoader } xml.endElement(); - // Notes - xml.startElement(TAG_NOTES); - for (ERDNote note : diagram.getNotes()) { - NotePart notePart = diagramPart == null ? null : diagramPart.getNotePart(note); - - xml.startElement(TAG_NOTE); - if (notePart != null) { - ElementSaveInfo info = new ElementSaveInfo(note, notePart, elementCounter++); - elementInfoMap.put(note, info); - xml.addAttribute(ATTR_ID, info.objectId); - - saveColorAndOrder(allNodeFigures, xml, notePart); - - Rectangle noteBounds = notePart.getBounds(); - if (noteBounds != null) { - xml.addAttribute(ATTR_X, noteBounds.x); - xml.addAttribute(ATTR_Y, noteBounds.y); - xml.addAttribute(ATTR_W, noteBounds.width); - xml.addAttribute(ATTR_H, noteBounds.height); + if (!CommonUtils.isEmpty(diagram.getNotes())) { + // Notes + xml.startElement(TAG_NOTES); + for (ERDNote note : diagram.getNotes()) { + NotePart notePart = diagramPart == null ? null : diagramPart.getNotePart(note); + + xml.startElement(TAG_NOTE); + if (notePart != null) { + ElementSaveInfo info = new ElementSaveInfo(note, notePart, elementCounter++); + elementInfoMap.put(note, info); + xml.addAttribute(ATTR_ID, info.objectId); + + saveColorAndOrder(allNodeFigures, xml, notePart); + + Rectangle noteBounds = notePart.getBounds(); + if (noteBounds != null) { + xml.addAttribute(ATTR_X, noteBounds.x); + xml.addAttribute(ATTR_Y, noteBounds.y); + xml.addAttribute(ATTR_W, noteBounds.width); + xml.addAttribute(ATTR_H, noteBounds.height); + } } + xml.addText(note.getObject()); + xml.endElement(); } - xml.addText(note.getObject()); xml.endElement(); } - xml.endElement(); // Relations xml.startElement(TAG_RELATIONS); diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditor.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditor.java index 2fb94c47c51f329de858771574157928493c9823..9347b3b24031a2997b7261ec97615149b4d89f46 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditor.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditor.java @@ -51,7 +51,7 @@ import org.jkiss.dbeaver.ui.data.registry.ValueManagerRegistry; import org.jkiss.dbeaver.ui.dialogs.DialogUtils; import org.jkiss.dbeaver.ui.editors.MultiPageAbstractEditor; import org.jkiss.dbeaver.ui.editors.entity.EntityEditor; -import org.jkiss.dbeaver.ui.editors.entity.IEntityDataContainer; +import org.jkiss.dbeaver.ui.editors.entity.IEntityDataEditor; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -265,7 +265,7 @@ public class ContentEditor extends MultiPageAbstractEditor implements IValueEdit if (parentEditorSite instanceof MultiPageEditorSite) { parentEditor = ((MultiPageEditorSite) parentEditorSite).getMultiPageEditor(); if (parentEditor instanceof EntityEditor) { - ((EntityEditor) parentEditor).setActiveEditor(IEntityDataContainer.class); + ((EntityEditor) parentEditor).setActiveEditor(IEntityDataEditor.class); } } else { parentEditor = parentEditorSite.getPart(); diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/data/AbstractDataEditor.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/data/AbstractDataEditor.java index 8a751492f15f569155625ffa30a6414de4bce35a..9cfa74adb116ea0a197955f45a56a80eaff84840 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/data/AbstractDataEditor.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/data/AbstractDataEditor.java @@ -35,7 +35,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSDataContainer; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.ui.UIUtils; -import org.jkiss.dbeaver.ui.editors.entity.IEntityDataContainer; +import org.jkiss.dbeaver.ui.editors.entity.IEntityDataEditor; import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerObjectOpen; import org.jkiss.dbeaver.ui.controls.resultset.*; import org.jkiss.dbeaver.ui.editors.AbstractDatabaseObjectEditor; @@ -47,7 +47,7 @@ import java.util.Collections; * AbstractDataEditor */ public abstract class AbstractDataEditor extends AbstractDatabaseObjectEditor - implements IResultSetContainer,IResultSetListener,IEntityDataContainer + implements IResultSetContainer,IResultSetListener,IEntityDataEditor { private static final Log log = Log.getLog(AbstractDataEditor.class); diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java index e759a8dda253c7e74981347e520178c8973e7bba..e81d390ca8b1c605987a332595a2939c96cbdc0d 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/EntityEditor.java @@ -238,7 +238,7 @@ public class EntityEditor extends MultiPageDatabaseEditor // Flush all nested object editors and result containers for (IEditorPart editor : editorMap.values()) { - if (editor instanceof ObjectPropertiesEditor || editor instanceof IEntityDataContainer) { + if (editor instanceof IEntityStructureEditor || editor instanceof IEntityDataEditor) { if (editor.isDirty()) { editor.doSave(monitor); } diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityDataContainer.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityDataEditor.java similarity index 95% rename from plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityDataContainer.java rename to plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityDataEditor.java index f7568e5c4816b2d94276e515f2b383c61c2e886d..f246d61349c35633e54e88207ce378fb9d518027 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityDataContainer.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityDataEditor.java @@ -21,6 +21,6 @@ package org.jkiss.dbeaver.ui.editors.entity; * Entity data container. * Implementors are EntityEditor sub-editors which contain soem data which must be saved before context save. */ -public interface IEntityDataContainer { +public interface IEntityDataEditor { } diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityStructureEditor.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityStructureEditor.java new file mode 100644 index 0000000000000000000000000000000000000000..b344761854490d10b7afe5277776d46e4ad66d26 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/IEntityStructureEditor.java @@ -0,0 +1,26 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jkiss.dbeaver.ui.editors.entity; + +/** + * Entity structure editor. + * Implementors are EntityEditor sub-editors which contain soem data which must be saved before context save. + */ +public interface IEntityStructureEditor { + +} diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/properties/ObjectPropertiesEditor.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/properties/ObjectPropertiesEditor.java index 7a9c06965eedb611630f5d62bd3c2dc040f0a6fa..a0850eb77828262a68e744498478ca7d3c139c70 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/properties/ObjectPropertiesEditor.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/editors/entity/properties/ObjectPropertiesEditor.java @@ -33,8 +33,7 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.navigator.*; import org.jkiss.dbeaver.ui.editors.*; -import org.jkiss.dbeaver.ui.editors.entity.EntityEditorDescriptor; -import org.jkiss.dbeaver.ui.editors.entity.EntityEditorsRegistry; +import org.jkiss.dbeaver.ui.editors.entity.*; import org.jkiss.dbeaver.ui.internal.UINavigatorMessages; import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.model.navigator.meta.DBXTreeItem; @@ -55,8 +54,6 @@ import org.jkiss.dbeaver.ui.controls.ProgressPageControl; import org.jkiss.dbeaver.ui.controls.folders.*; import org.jkiss.dbeaver.ui.css.CSSUtils; import org.jkiss.dbeaver.ui.css.DBStyles; -import org.jkiss.dbeaver.ui.editors.entity.GlobalContributorManager; -import org.jkiss.dbeaver.ui.editors.entity.IEntityEditorContext; import org.jkiss.dbeaver.ui.navigator.INavigatorModelView; import org.jkiss.dbeaver.ui.navigator.NavigatorPreferences; import org.jkiss.utils.CommonUtils; @@ -70,8 +67,14 @@ import java.util.Map; /** * ObjectPropertiesEditor */ -public class ObjectPropertiesEditor extends AbstractDatabaseObjectEditor - implements IRefreshablePart, IProgressControlProvider, ITabbedFolderContainer, ISearchContextProvider, INavigatorModelView, IEntityEditorContext, IDatabasePostSaveProcessor +public class ObjectPropertiesEditor extends AbstractDatabaseObjectEditor implements IEntityStructureEditor, + IRefreshablePart, + IProgressControlProvider, + ITabbedFolderContainer, + ISearchContextProvider, + INavigatorModelView, + IEntityEditorContext, + IDatabasePostSaveProcessor { private static final Log log = Log.getLog(ObjectPropertiesEditor.class);