From 0c1a24b7240e99f66283e13fcf10acdfff604922 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Fri, 17 Feb 2017 14:36:56 +0300 Subject: [PATCH] #91 Objects move up/move down commands --- plugins/org.jkiss.dbeaver.core/plugin.xml | 37 +++++++++++++++++++ .../org/jkiss/dbeaver/core/CoreCommands.java | 2 + .../ui/actions/ObjectPropertyTester.java | 14 +++++-- .../ui/controls/itemlist/ItemListControl.java | 31 ++++++++++++++-- .../mysql/edit/MySQLTableColumnManager.java | 22 ++++++++++- .../ext/mysql/model/MySQLTableBase.java | 11 ++++++ .../ext/mysql/model/MySQLTableColumn.java | 3 +- .../jkiss/dbeaver/model/DBPOrderedObject.java | 2 - .../model/edit/DBEObjectReorderer.java | 6 ++- 9 files changed, 115 insertions(+), 13 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/plugin.xml b/plugins/org.jkiss.dbeaver.core/plugin.xml index 2f685ad69e..13ced8614f 100644 --- a/plugins/org.jkiss.dbeaver.core/plugin.xml +++ b/plugins/org.jkiss.dbeaver.core/plugin.xml @@ -226,6 +226,8 @@ + + @@ -332,6 +334,9 @@ + + + @@ -723,6 +728,8 @@ + + @@ -872,6 +879,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -882,6 +917,8 @@ + + diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreCommands.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreCommands.java index 72f6c31e5b..3280ae19a7 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreCommands.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/CoreCommands.java @@ -27,6 +27,8 @@ public interface CoreCommands String CMD_OBJECT_OPEN = "org.jkiss.dbeaver.core.object.open"; //$NON-NLS-1$ String CMD_OBJECT_CREATE = "org.jkiss.dbeaver.core.object.create"; //$NON-NLS-1$ String CMD_OBJECT_DELETE = "org.jkiss.dbeaver.core.object.delete"; //$NON-NLS-1$ + String CMD_OBJECT_MOVE_UP = "org.jkiss.dbeaver.core.object.move.up"; //$NON-NLS-1$ + String CMD_OBJECT_MOVE_DOWN = "org.jkiss.dbeaver.core.object.move.down"; //$NON-NLS-1$ String GROUP_TOOLS = "tools"; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java index 792c79c057..594787b086 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/ObjectPropertyTester.java @@ -23,6 +23,7 @@ import org.jkiss.dbeaver.model.DBPOrderedObject; import org.jkiss.dbeaver.model.edit.DBEObjectMaker; import org.jkiss.dbeaver.model.edit.DBEObjectManager; import org.jkiss.dbeaver.model.edit.DBEObjectRenamer; +import org.jkiss.dbeaver.model.edit.DBEObjectReorderer; import org.jkiss.dbeaver.model.navigator.*; import org.jkiss.dbeaver.model.app.DBPResourceHandler; import org.jkiss.dbeaver.model.struct.DBSObject; @@ -54,6 +55,7 @@ public class ObjectPropertyTester extends PropertyTester super(); } + @SuppressWarnings("unchecked") @Override public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { @@ -65,6 +67,7 @@ public class ObjectPropertyTester extends PropertyTester return false; } DBNNode node = (DBNNode)receiver; +//System.out.println("TEST " + property + " ON " + node.getName()); switch (property) { case PROP_CAN_OPEN: @@ -166,11 +169,14 @@ public class ObjectPropertyTester extends PropertyTester if (node instanceof DBNDatabaseNode) { DBSObject object = ((DBNDatabaseNode) node).getObject(); if (object instanceof DBPOrderedObject) { - final int position = ((DBPOrderedObject) object).getOrdinalPosition(); - if (property.equals(PROP_CAN_MOVE_UP)) { - return position > 0; + DBEObjectReorderer objectReorderer = getObjectManager(object.getClass(), DBEObjectReorderer.class); + if (objectReorderer != null) { + final int position = ((DBPOrderedObject) object).getOrdinalPosition(); + if (property.equals(PROP_CAN_MOVE_UP)) { + return position > objectReorderer.getMinimumOrdinalPosition(object); + } + return position < objectReorderer.getMaximumOrdinalPosition(object); } - return position < ((DBPOrderedObject) object).getMaximumOrdinalPosition(); } } break; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ItemListControl.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ItemListControl.java index 91a6e0ef79..b9a239970c 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ItemListControl.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/itemlist/ItemListControl.java @@ -28,6 +28,9 @@ import org.eclipse.ui.IWorkbenchCommandConstants; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.part.MultiPageEditorPart; import org.eclipse.ui.part.MultiPageEditorSite; +import org.jkiss.dbeaver.core.CoreCommands; +import org.jkiss.dbeaver.model.edit.DBEObjectManager; +import org.jkiss.dbeaver.model.edit.DBEObjectReorderer; import org.jkiss.dbeaver.model.navigator.DBNDatabaseFolder; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; import org.jkiss.dbeaver.model.navigator.DBNNode; @@ -36,6 +39,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService; import org.jkiss.dbeaver.model.sql.SQLUtils; import org.jkiss.dbeaver.model.struct.DBSWrapper; +import org.jkiss.dbeaver.registry.editor.EntityEditorsRegistry; import org.jkiss.dbeaver.runtime.properties.ObjectPropertyDescriptor; import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerFilterConfig; @@ -81,7 +85,8 @@ public class ItemListControl extends NodeListControl protected void fillCustomActions(IContributionManager contributionManager) { super.fillCustomActions(contributionManager); - if (getRootNode() instanceof DBNDatabaseFolder && ((DBNDatabaseFolder)getRootNode()).getItemsMeta() != null) { + final DBNNode rootNode = getRootNode(); + if (rootNode instanceof DBNDatabaseFolder && ((DBNDatabaseFolder) rootNode).getItemsMeta() != null) { contributionManager.add(new Action( "Filter", DBeaverIcons.getImageDescriptor(UIIcon.FILTER)) @@ -89,7 +94,7 @@ public class ItemListControl extends NodeListControl @Override public void run() { - NavigatorHandlerFilterConfig.configureFilters(getShell(), getRootNode()); + NavigatorHandlerFilterConfig.configureFilters(getShell(), rootNode); } }); } @@ -97,7 +102,26 @@ public class ItemListControl extends NodeListControl if (workbenchSite != null) { contributionManager.add(ActionUtils.makeCommandContribution(workbenchSite, IWorkbenchCommandConstants.FILE_REFRESH)); } - //contributionManager.add(new PackColumnsAction()); + + if (rootNode instanceof DBNDatabaseNode) { + boolean hasReorder = false; + List> childrenTypes = ((DBNDatabaseNode) rootNode).getChildrenTypes(null); + for (Class chilType : childrenTypes) { + if (EntityEditorsRegistry.getInstance().getObjectManager(chilType, DBEObjectReorderer.class) != null) { + hasReorder = true; + break; + } + } + if (hasReorder) { + contributionManager.add(new Separator()); + contributionManager.add(ActionUtils.makeCommandContribution( + workbenchSite, + CoreCommands.CMD_OBJECT_MOVE_UP)); + contributionManager.add(ActionUtils.makeCommandContribution( + workbenchSite, + CoreCommands.CMD_OBJECT_MOVE_DOWN)); + } + } if (workbenchSite instanceof MultiPageEditorSite) { final MultiPageEditorPart editor = ((MultiPageEditorSite) workbenchSite).getMultiPageEditor(); @@ -118,7 +142,6 @@ public class ItemListControl extends NodeListControl null, true)); } - //if (((IEditorSite) site).getPart() instanceof } } diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java index d11276f520..d242ecc7ea 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/edit/MySQLTableColumnManager.java @@ -27,6 +27,7 @@ import org.jkiss.dbeaver.model.DBPEvaluationContext; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.model.edit.DBEObjectRenamer; +import org.jkiss.dbeaver.model.edit.DBEObjectReorderer; import org.jkiss.dbeaver.model.edit.DBEPersistAction; import org.jkiss.dbeaver.model.impl.DBSObjectCache; import org.jkiss.dbeaver.model.impl.edit.DBECommandAbstract; @@ -46,7 +47,9 @@ import java.util.Locale; /** * MySQL table column manager */ -public class MySQLTableColumnManager extends SQLTableColumnManager implements DBEObjectRenamer { +public class MySQLTableColumnManager extends SQLTableColumnManager + implements DBEObjectRenamer, DBEObjectReorderer +{ protected final ColumnModifier MySQLDataTypeModifier = new ColumnModifier() { @Override @@ -144,4 +147,21 @@ public class MySQLTableColumnManager extends SQLTableColumnManager getCachedAttributes() + { + DBSObjectCache childrenCache = getContainer().tableCache.getChildrenCache(this); + if (childrenCache != null) { + return childrenCache.getCachedObjects(); + } + return Collections.emptyList(); + } + @Override public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBException { diff --git a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLTableColumn.java b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLTableColumn.java index 7d33ca502a..641f84b1a1 100644 --- a/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLTableColumn.java +++ b/plugins/org.jkiss.dbeaver.ext.mysql/src/org/jkiss/dbeaver/ext/mysql/model/MySQLTableColumn.java @@ -23,6 +23,7 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.ext.mysql.MySQLConstants; import org.jkiss.dbeaver.ext.mysql.MySQLUtils; import org.jkiss.dbeaver.model.DBPNamedObject2; +import org.jkiss.dbeaver.model.DBPOrderedObject; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils; import org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCColumnKeyType; @@ -44,7 +45,7 @@ import java.util.regex.Pattern; /** * MySQLTableColumn */ -public class MySQLTableColumn extends JDBCTableColumn implements DBSTableColumn, DBPNamedObject2 +public class MySQLTableColumn extends JDBCTableColumn implements DBSTableColumn, DBPNamedObject2, DBPOrderedObject { private static final Log log = Log.getLog(MySQLTableColumn.class); diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPOrderedObject.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPOrderedObject.java index 8c4dd2e7d0..b36fca54c2 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPOrderedObject.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPOrderedObject.java @@ -27,8 +27,6 @@ public interface DBPOrderedObject { int getOrdinalPosition(); - int getMaximumOrdinalPosition(); - void setOrdinalPosition(int position); } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/edit/DBEObjectReorderer.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/edit/DBEObjectReorderer.java index c5d15c716d..fa42959ca1 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/edit/DBEObjectReorderer.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/edit/DBEObjectReorderer.java @@ -27,8 +27,12 @@ import org.jkiss.dbeaver.model.struct.DBSObject; */ public interface DBEObjectReorderer extends DBEObjectManager { + int getMinimumOrdinalPosition(OBJECT_TYPE object); + + int getMaximumOrdinalPosition(OBJECT_TYPE object); + /** - * Describes object + * Changes object ordinal position * * @param commandContext command context. Implementation should add new command to it. * @param object object -- GitLab