提交 0c1a24b7 编写于 作者: S serge-rider

#91 Objects move up/move down commands

上级 815d1902
......@@ -226,6 +226,8 @@
<command id="org.jkiss.dbeaver.core.object.open" name="%command.org.jkiss.dbeaver.core.object.open.name" description="%command.org.jkiss.dbeaver.core.object.open.description" categoryId="org.jkiss.dbeaver.core.database"/>
<command id="org.jkiss.dbeaver.core.object.create" name="%command.org.jkiss.dbeaver.core.object.create.name" description="%command.org.jkiss.dbeaver.core.object.create.description" categoryId="org.jkiss.dbeaver.core.database"/>
<command id="org.jkiss.dbeaver.core.object.delete" name="%command.org.jkiss.dbeaver.core.object.delete.name" description="%command.org.jkiss.dbeaver.core.object.delete.description" categoryId="org.jkiss.dbeaver.core.database"/>
<command id="org.jkiss.dbeaver.core.object.move.up" name="%command.org.jkiss.dbeaver.core.object.move.up.name" description="%command.org.jkiss.dbeaver.core.object.move.up.description" categoryId="org.jkiss.dbeaver.core.database"/>
<command id="org.jkiss.dbeaver.core.object.move.down" name="%command.org.jkiss.dbeaver.core.object.move.down.name" description="%command.org.jkiss.dbeaver.core.object.move.down.description" categoryId="org.jkiss.dbeaver.core.database"/>
<command id="org.jkiss.dbeaver.core.object.goto" name="%command.org.jkiss.dbeaver.core.object.goto.name" description="%command.org.jkiss.dbeaver.core.object.goto.description" categoryId="org.jkiss.dbeaver.core.database"/>
<command id="org.jkiss.dbeaver.core.object.filter.config" name="%command.org.jkiss.dbeaver.core.object.filter.config.name" description="%command.org.jkiss.dbeaver.core.object.filter.config.description" categoryId="org.jkiss.dbeaver.core.database"/>
......@@ -332,6 +334,9 @@
<image commandId="org.jkiss.dbeaver.core.object.open" icon="icons/edit.png"/>
<image commandId="org.jkiss.dbeaver.core.object.create" icon="IMG_TOOL_NEW_WIZARD"/>
<image commandId="org.jkiss.dbeaver.core.object.delete" icon="IMG_ETOOL_DELETE"/>
<image commandId="org.jkiss.dbeaver.core.object.move.up" icon="icons/misc/arrow_up.png"/>
<image commandId="org.jkiss.dbeaver.core.object.move.down" icon="icons/misc/arrow_down.png"/>
<image commandId="org.jkiss.dbeaver.core.object.filter.config" icon="icons/misc/filter.png"/>
<image commandId="org.jkiss.dbeaver.core.object.filter.add.exclude" icon="icons/misc/filter_add.png"/>
<image commandId="org.jkiss.dbeaver.core.object.filter.add.include" icon="icons/misc/filter_add.png"/>
......@@ -723,6 +728,8 @@
<handler commandId="org.jkiss.dbeaver.core.txn.log" class="org.jkiss.dbeaver.ui.actions.datasource.DataSourceTransactionLogHandler"/>
<handler commandId="org.jkiss.dbeaver.core.txn.pending" class="org.jkiss.dbeaver.ui.actions.datasource.DataSourcePendingTransactionsHandler"/>
<!-- Navigator handlers -->
<handler commandId="org.jkiss.dbeaver.core.object.open" class="org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen">
<enabledWhen>
<with variable="selection">
......@@ -872,6 +879,34 @@
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.object.move.up" class="org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectMove">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.navigator.part"/></activeWhen>
<enabledWhen>
<with variable="selection">
<count value="1"/>
<iterate operator="and">
<and>
<instanceof value="org.jkiss.dbeaver.model.navigator.DBNNode"/>
<test property="org.jkiss.dbeaver.core.object.canMoveUp"/>
</and>
</iterate>
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.object.move.down" class="org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectMove">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.navigator.part"/></activeWhen>
<enabledWhen>
<with variable="selection">
<count value="1"/>
<iterate operator="and">
<and>
<instanceof value="org.jkiss.dbeaver.model.navigator.DBNNode"/>
<test property="org.jkiss.dbeaver.core.object.canMoveDown"/>
</and>
</iterate>
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.object.goto" class="org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectGoto">
<activeWhen>
......@@ -882,6 +917,8 @@
</activeWhen>
</handler>
<!-- SQL editor handlers -->
<handler commandId="org.jkiss.dbeaver.core.sql.editor.open" class="org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler">
<activeWhen>
<or>
......
......@@ -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";
......
......@@ -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;
......
......@@ -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<Class<?>> 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
}
}
......
......@@ -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<MySQLTableColumn, MySQLTableBase> implements DBEObjectRenamer<MySQLTableColumn> {
public class MySQLTableColumnManager extends SQLTableColumnManager<MySQLTableColumn, MySQLTableBase>
implements DBEObjectRenamer<MySQLTableColumn>, DBEObjectReorderer<MySQLTableColumn>
{
protected final ColumnModifier<MySQLTableColumn> MySQLDataTypeModifier = new ColumnModifier<MySQLTableColumn>() {
@Override
......@@ -144,4 +147,21 @@ public class MySQLTableColumnManager extends SQLTableColumnManager<MySQLTableCol
getNestedDeclaration(column.getTable(), command)));
}
///////////////////////////////////////////////
// Reorder
@Override
public int getMinimumOrdinalPosition(MySQLTableColumn object) {
return 1;
}
@Override
public int getMaximumOrdinalPosition(MySQLTableColumn object) {
return object.getTable().getCachedAttributes().size();
}
@Override
public void setObjectOrdinalPosition(DBECommandContext commandContext, MySQLTableColumn object, int newPosition) throws DBException {
}
}
......@@ -40,6 +40,8 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* MySQLTable base
......@@ -105,6 +107,15 @@ public abstract class MySQLTableBase extends JDBCTable<MySQLDataSource, MySQLCat
return getContainer().tableCache.getChild(monitor, getContainer(), this, attributeName);
}
public List<MySQLTableColumn> getCachedAttributes()
{
DBSObjectCache<MySQLTableBase, MySQLTableColumn> childrenCache = getContainer().tableCache.getChildrenCache(this);
if (childrenCache != null) {
return childrenCache.getCachedObjects();
}
return Collections.emptyList();
}
@Override
public DBSObject refreshObject(@NotNull DBRProgressMonitor monitor) throws DBException
{
......
......@@ -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<MySQLTableBase> implements DBSTableColumn, DBPNamedObject2
public class MySQLTableColumn extends JDBCTableColumn<MySQLTableBase> implements DBSTableColumn, DBPNamedObject2, DBPOrderedObject
{
private static final Log log = Log.getLog(MySQLTableColumn.class);
......
......@@ -27,8 +27,6 @@ public interface DBPOrderedObject
{
int getOrdinalPosition();
int getMaximumOrdinalPosition();
void setOrdinalPosition(int position);
}
......@@ -27,8 +27,12 @@ import org.jkiss.dbeaver.model.struct.DBSObject;
*/
public interface DBEObjectReorderer<OBJECT_TYPE extends DBSObject & DBPOrderedObject> extends DBEObjectManager<OBJECT_TYPE> {
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册