提交 b777a8b6 编写于 作者: J jurgen

RSV/spreadsheet refactoring

Former-commit-id: 796a607e
上级 e97f07a6
......@@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jkiss.dbeaver.ui.controls.spreadsheet;
package org.jkiss.dbeaver.ui.controls.resultset;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.preference.IPreferenceStore;
......@@ -29,7 +29,10 @@ import org.jkiss.dbeaver.ui.controls.lightgrid.GridCell;
/**
* GridDataProvider
*/
public interface ISpreadsheetController {
public interface IResultSetController {
@NotNull
ResultSetModel getModel();
boolean hasData();
......
......@@ -22,7 +22,7 @@ package org.jkiss.dbeaver.ui.controls.resultset;
/**
* Result set provider
*/
public interface ResultSetListener {
public interface IResultSetListener {
void handleResultSetChange();
}
......@@ -26,7 +26,7 @@ import org.eclipse.swt.widgets.Control;
* Result set renderer.
* Visualizes result set viewer/editor.
*/
public interface ResultSetRenderer {
public interface IResultSetPresentation {
void createRenderer(ResultSetViewer viewer, Composite parent);
......
......@@ -24,7 +24,7 @@ import org.jkiss.dbeaver.model.struct.DBSDataContainer;
/**
* Result set provider
*/
public interface ResultSetProvider {
public interface IResultSetProvider {
ResultSetViewer getResultSetViewer();
......
......@@ -35,8 +35,8 @@ public class ResultSetAdapterFactory implements IAdapterFactory
if (adapterType == ResultSetViewer.class) {
if (adaptableObject instanceof ResultSetViewer) {
return adaptableObject;
} else if (adaptableObject instanceof ResultSetProvider) {
return ((ResultSetProvider) adaptableObject).getResultSetViewer();
} else if (adaptableObject instanceof IResultSetProvider) {
return ((IResultSetProvider) adaptableObject).getResultSetViewer();
}
if (adaptableObject instanceof IPageChangeProvider) {
return getAdapter(((IPageChangeProvider) adaptableObject).getSelectedPage(), ResultSetViewer.class);
......
......@@ -100,8 +100,8 @@ public class ResultSetCommandHandler extends SpreadsheetCommandHandler {
public static ResultSetViewer getActiveResultSet(IWorkbenchPart activePart) {
//IWorkbenchPart activePart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart();
if (activePart instanceof ResultSetProvider) {
return ((ResultSetProvider) activePart).getResultSetViewer();
if (activePart instanceof IResultSetProvider) {
return ((IResultSetProvider) activePart).getResultSetViewer();
} else if (activePart instanceof MultiPageAbstractEditor) {
return getActiveResultSet(((MultiPageAbstractEditor) activePart).getActiveEditor());
}
......
......@@ -34,8 +34,8 @@ public class ResultSetModeToggleModeHandler extends ResultSetCommandHandler impl
{
if (element.getServiceLocator() instanceof IWorkbenchPartSite) {
IWorkbenchPartSite partSite = (IWorkbenchPartSite) element.getServiceLocator();
if (partSite.getPart() instanceof ResultSetProvider) {
ResultSetViewer rsv = ((ResultSetProvider) partSite.getPart()).getResultSetViewer();
if (partSite.getPart() instanceof IResultSetProvider) {
ResultSetViewer rsv = ((IResultSetProvider) partSite.getPart()).getResultSetViewer();
if (rsv != null) {
if (!rsv.isRecordMode()) {
element.setText("Switch to record mode");
......
......@@ -21,7 +21,6 @@ package org.jkiss.dbeaver.ui.controls.resultset;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.commands.IElementUpdater;
import org.eclipse.ui.menus.UIElement;
import org.jkiss.dbeaver.ui.DBIcon;
import java.util.Map;
......@@ -35,8 +34,8 @@ public class ResultSetModeTogglePreviewHandler extends ResultSetCommandHandler i
{
if (element.getServiceLocator() instanceof IWorkbenchPartSite) {
IWorkbenchPartSite partSite = (IWorkbenchPartSite) element.getServiceLocator();
if (partSite.getPart() instanceof ResultSetProvider) {
ResultSetViewer rsv = ((ResultSetProvider) partSite.getPart()).getResultSetViewer();
if (partSite.getPart() instanceof IResultSetProvider) {
ResultSetViewer rsv = ((IResultSetProvider) partSite.getPart()).getResultSetViewer();
if (rsv != null) {
if (rsv.isPreviewVisible()) {
element.setText("Hide value view panel");
......
......@@ -89,7 +89,6 @@ import org.jkiss.dbeaver.ui.controls.lightgrid.GridCell;
import org.jkiss.dbeaver.ui.controls.lightgrid.GridPos;
import org.jkiss.dbeaver.ui.controls.lightgrid.IGridContentProvider;
import org.jkiss.dbeaver.ui.controls.lightgrid.IGridLabelProvider;
import org.jkiss.dbeaver.ui.controls.spreadsheet.ISpreadsheetController;
import org.jkiss.dbeaver.ui.controls.spreadsheet.Spreadsheet;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardDialog;
import org.jkiss.dbeaver.ui.dialogs.ConfirmationDialog;
......@@ -118,7 +117,7 @@ import java.util.List;
*
*/
public class ResultSetViewer extends Viewer
implements IDataSourceProvider, ISpreadsheetController, ISaveablePart2, IAdaptable
implements IDataSourceProvider, IResultSetController, ISaveablePart2, IAdaptable
{
static final Log log = Log.getLog(ResultSetViewer.class);
private final IPropertyChangeListener themeChangeListener;
......@@ -170,7 +169,7 @@ public class ResultSetViewer extends Viewer
private final ViewValuePanel previewPane;
@NotNull
private final ResultSetProvider resultSetProvider;
private final IResultSetProvider resultSetProvider;
@NotNull
private final ResultSetDataReceiver dataReceiver;
@NotNull
......@@ -187,7 +186,7 @@ public class ResultSetViewer extends Viewer
private int columnOrder = SWT.NONE;
private final Map<ResultSetValueController, DBDValueEditorStandalone> openEditors = new HashMap<ResultSetValueController, DBDValueEditorStandalone>();
private final List<ResultSetListener> listeners = new ArrayList<ResultSetListener>();
private final List<IResultSetListener> listeners = new ArrayList<IResultSetListener>();
// UI modifiers
private final Color colorRed;
......@@ -217,7 +216,7 @@ public class ResultSetViewer extends Viewer
private ToolItem historyBackButton;
private ToolItem historyForwardButton;
public ResultSetViewer(@NotNull Composite parent, @NotNull IWorkbenchPartSite site, @NotNull ResultSetProvider resultSetProvider)
public ResultSetViewer(@NotNull Composite parent, @NotNull IWorkbenchPartSite site, @NotNull IResultSetProvider resultSetProvider)
{
super();
......@@ -673,14 +672,14 @@ public class ResultSetViewer extends Viewer
return null;
}
public void addListener(ResultSetListener listener)
public void addListener(IResultSetListener listener)
{
synchronized (listeners) {
listeners.add(listener);
}
}
public void removeListener(ResultSetListener listener)
public void removeListener(IResultSetListener listener)
{
synchronized (listeners) {
listeners.remove(listener);
......@@ -1041,6 +1040,9 @@ public class ResultSetViewer extends Viewer
return true;
}
///////////////////////////////////////
// History
public StateItem getCurrentState() {
return curState;
}
......@@ -1085,6 +1087,9 @@ public class ResultSetViewer extends Viewer
runDataPump(state.dataContainer, state.filter, 0, segmentSize, state.rowNumber, null);
}
///////////////////////////////////////
// Misc
@Nullable
public RowData getCurrentRow()
{
......@@ -1107,6 +1112,9 @@ public class ResultSetViewer extends Viewer
(RowData) spreadsheet.getFocusRowElement();
}
///////////////////////////////////////
// Status
public void setStatus(String status)
{
setStatus(status, false);
......@@ -1759,6 +1767,7 @@ public class ResultSetViewer extends Viewer
return site;
}
@Override
@NotNull
public ResultSetModel getModel()
{
......@@ -2434,7 +2443,7 @@ public class ResultSetViewer extends Viewer
void fireResultSetChange() {
synchronized (listeners) {
if (!listeners.isEmpty()) {
for (ResultSetListener listener : listeners) {
for (IResultSetListener listener : listeners) {
listener.handleResultSetChange();
}
}
......
......@@ -28,7 +28,6 @@ import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbenchActionConstants;
......@@ -38,6 +37,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.lightgrid.*;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetController;
/**
* ResultSetControl
......@@ -60,7 +60,7 @@ public class Spreadsheet extends LightGrid implements Listener {
@NotNull
private final IWorkbenchPartSite site;
@NotNull
private final ISpreadsheetController spreadsheetController;
private final IResultSetController spreadsheetController;
@NotNull
private final IGridContentProvider contentProvider;
@NotNull
......@@ -74,7 +74,7 @@ public class Spreadsheet extends LightGrid implements Listener {
@NotNull final Composite parent,
final int style,
@NotNull final IWorkbenchPartSite site,
@NotNull final ISpreadsheetController spreadsheetController,
@NotNull final IResultSetController spreadsheetController,
@NotNull final IGridContentProvider contentProvider,
@NotNull final IGridLabelProvider labelProvider)
{
......@@ -129,7 +129,7 @@ public class Spreadsheet extends LightGrid implements Listener {
}
}
public ISpreadsheetController getController()
public IResultSetController getController()
{
return spreadsheetController;
}
......
......@@ -41,14 +41,14 @@ import org.jkiss.dbeaver.model.exec.DBCStatistics;
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.controls.resultset.ResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.dialogs.ConfirmationDialog;
/**
* TextViewDialog
*/
public class CursorViewDialog extends ValueViewDialog implements ResultSetProvider {
public class CursorViewDialog extends ValueViewDialog implements IResultSetProvider {
private DBDCursor value;
private ResultSetViewer resultSetViewer;
......@@ -76,8 +76,8 @@ public class CursorViewDialog extends ValueViewDialog implements ResultSetProvid
DBeaverPreferences.CONFIRM_KEEP_STATEMENT_OPEN,
ConfirmationDialog.QUESTION) == IDialogConstants.YES_ID) {
globalPreferenceStore.setValue(DBeaverPreferences.KEEP_STATEMENT_OPEN, true);
if (valueController.getValueSite().getPart() instanceof ResultSetProvider) {
((ResultSetProvider)valueController.getValueSite().getPart()).getResultSetViewer().refresh();
if (valueController.getValueSite().getPart() instanceof IResultSetProvider) {
((IResultSetProvider)valueController.getValueSite().getPart()).getResultSetViewer().refresh();
}
}
dialogGroup.getDisplay().asyncExec(new Runnable()
......
......@@ -27,8 +27,8 @@ import org.jkiss.dbeaver.ext.IDatabaseEditorInput;
import org.jkiss.dbeaver.model.data.DBDDataFilter;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetListener;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetListener;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.editors.AbstractDatabaseObjectEditor;
import org.jkiss.utils.CommonUtils;
......@@ -37,7 +37,7 @@ import org.jkiss.utils.CommonUtils;
* DatabaseDataEditor
*/
public class DatabaseDataEditor extends AbstractDatabaseObjectEditor<DBSDataContainer>
implements ResultSetProvider,ResultSetListener
implements IResultSetProvider,IResultSetListener
{
public static final String ATTR_SUSPEND_QUERY = "suspendQuery";
public static final String ATTR_DATA_FILTER = "dataFilter";
......
......@@ -38,7 +38,6 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.texteditor.DefaultRangeIndicator;
import org.eclipse.ui.texteditor.rulers.IColumnSupport;
import org.eclipse.ui.texteditor.rulers.RulerColumnDescriptor;
......@@ -77,7 +76,7 @@ import org.jkiss.dbeaver.tools.transfer.database.DatabaseTransferProducer;
import org.jkiss.dbeaver.tools.transfer.wizard.DataTransferWizard;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.actions.datasource.DataSourceConnectHandler;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardDialog;
import org.jkiss.dbeaver.ui.editors.DatabaseEditorUtils;
......@@ -101,7 +100,7 @@ import java.util.concurrent.atomic.AtomicInteger;
*/
public class SQLEditor extends SQLEditorBase
implements IDataSourceContainerProviderEx,
DBPEventListener, ISaveablePart2, ResultSetProvider, DBPDataSourceUser, DBPDataSourceHandler
DBPEventListener, ISaveablePart2, IResultSetProvider, DBPDataSourceUser, DBPDataSourceHandler
{
private static final long SCRIPT_UI_UPDATE_PERIOD = 100;
......@@ -1122,7 +1121,7 @@ public class SQLEditor extends SQLEditorBase
}
public class QueryResultsProvider implements DBSDataContainer, ResultSetProvider {
public class QueryResultsProvider implements DBSDataContainer, IResultSetProvider {
private final QueryProcessor queryProcessor;
private final CTabItem tabItem;
......
/*
* Copyright (C) 2010-2015 Serge Rieder
* serge@jkiss.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jkiss.dbeaver.ui.search.data;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.texteditor.FindReplaceAction;
import org.jkiss.dbeaver.core.DBeaverActivator;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.runtime.RuntimeUtils;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetListener;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.editors.AbstractDatabaseObjectEditor;
/**
* DatabaseDataEditor
*/
public class SearchDataEditor extends AbstractDatabaseObjectEditor<DBSDataContainer>
implements ResultSetProvider,ResultSetListener
{
private ResultSetViewer resultSetView;
private boolean loaded = false;
//private boolean running = false;
private Composite parent;
@Override
public void createPartControl(Composite parent)
{
this.parent = parent;
}
@Override
public void activatePart()
{
createResultSetView();
// FindReplaceAction action = (FindReplaceAction)getEditorSite().getActionBars().getGlobalActionHandler(ActionFactory.FIND.getId());
// if (action != null) {
// action.update();
// }
if (!loaded) {
if (getDatabaseObject() != null && getDatabaseObject().isPersisted()) {
resultSetView.setStatus("Query data from '" + getEditorInput().getDatabaseObject().getName() + "'...");
resultSetView.refresh();
loaded = true;
}
}
//resultSetView.setSelection(resultSetView.getSelection());
}
private void createResultSetView()
{
if (resultSetView == null) {
resultSetView = new ResultSetViewer(parent, getSite(), this);
resultSetView.addListener(this);
parent.layout();
resultSetView.getControl().setFocus();
// Set selection provider from resultset
getSite().setSelectionProvider(resultSetView);
}
}
@Override
public void deactivatePart()
{
}
@Override
public void dispose() {
if (resultSetView != null) {
resultSetView.removeListener(this);
resultSetView = null;
}
super.dispose();
}
@Override
public ResultSetViewer getResultSetViewer()
{
return resultSetView;
}
@Override
public DBSDataContainer getDataContainer()
{
return (DBSDataContainer)getEditorInput().getDatabaseObject();
}
@Override
public boolean isReadyToRun()
{
return true;
}
@Override
public void setFocus()
{
createResultSetView();
if (resultSetView != null) {
resultSetView.getSpreadsheet().setFocus();
}
// Register find/replace action
// We do it in setFocus because each entity editor registers it's own action - and they
// share a single action bars instance. To avoid mess just update handler every time editor activated
FindReplaceAction findReplaceAction = new FindReplaceAction(DBeaverActivator.getResourceBundle(), "Editor.FindReplace.", this); //$NON-NLS-1$
findReplaceAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_FIND_AND_REPLACE);
IActionBars actionBars = getEditorSite().getActionBars();
actionBars.setGlobalActionHandler("dde_findReplace", findReplaceAction);
actionBars.updateActionBars();
}
@Override
public void refreshPart(Object source, boolean force)
{
if (loaded) {
//resultSetView.refresh();
}
}
@Override
public boolean isDirty()
{
return resultSetView != null && !resultSetView.getControl().isDisposed() && resultSetView.isDirty();
}
@Override
public void doSave(IProgressMonitor monitor)
{
if (resultSetView != null && resultSetView.isDirty()) {
resultSetView.applyChanges(RuntimeUtils.makeMonitor(monitor));
}
}
@Override
public void handleResultSetChange()
{
firePropertyChange(IEditorPart.PROP_DIRTY);
}
@Override
public Object getAdapter(Class required)
{
if (resultSetView != null) {
Object adapter = resultSetView.getAdapter(required);
if (adapter != null) {
return adapter;
}
}
return super.getAdapter(required);
}
}
......@@ -30,11 +30,9 @@ import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.NavigatorUtils;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetProvider;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer;
import org.jkiss.dbeaver.ui.editors.DatabaseEditorInput;
import org.jkiss.dbeaver.ui.editors.data.DatabaseDataEditor;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditor;
import org.jkiss.dbeaver.ui.search.AbstractSearchResultsPage;
import java.util.ArrayList;
......@@ -90,8 +88,8 @@ public class SearchDataResultsPage extends AbstractSearchResultsPage<SearchDataO
if (entityEditor instanceof MultiPageEditorPart) {
Object selectedPage = ((MultiPageEditorPart) entityEditor).getSelectedPage();
if (selectedPage instanceof ResultSetProvider) {
ResultSetViewer resultSetViewer = ((ResultSetProvider) selectedPage).getResultSetViewer();
if (selectedPage instanceof IResultSetProvider) {
ResultSetViewer resultSetViewer = ((IResultSetProvider) selectedPage).getResultSetViewer();
if (!resultSetViewer.isRefreshInProgress() && !object.getFilter().equals(resultSetViewer.getModel().getDataFilter())) {
// Set filter directly
resultSetViewer.refreshWithFilter(object.getFilter());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册