diff --git a/plugins/org.jkiss.dbeaver.core/plugin.xml b/plugins/org.jkiss.dbeaver.core/plugin.xml
index 2f685ad69eda87ea35c0f8fd4b6fdef8d703d6b4..13ced8614fd4a83b931d667365b988bc3c9c484b 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 72f6c31e5bac7ad2570d46587977c84cc0642bf5..3280ae19a7aa4a10036b1243e87058c91c57ce67 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 792c79c05704bcef6da9a79ba3f116a87736d3c6..594787b0862761c5b364d5d8a025a0615eeaa3b0 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 91a6e0ef795c5a582792150225243077db3596cf..b9a239970c69e18be5863e7b993f7646d60922dc 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 d11276f520ddc020645060918133ecbe99278200..d242ecc7ea1af3046142f0c4ab1ed05c2c2e53f8 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 7d33ca502a33bdc9cd1d918baaafdf889d335820..641f84b1a19d3b40536f4053f11a28c0fe2b9592 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 8c4dd2e7d0d1af9543b26e668723a2ea7279a923..b36fca54c2a83aa4bb85440e46887e2ef07a9585 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 c5d15c716db313fb0362bcc07730f0814e340847..fa42959ca14cdbbb9827eb8f84fe5e4ee9969161 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