Skip to content

Commit

Permalink
dbeaver#7768 Smart content proposals
Browse files Browse the repository at this point in the history
  • Loading branch information
serge-rider committed Feb 7, 2020
1 parent 6328fd4 commit c22bb6e
Show file tree
Hide file tree
Showing 22 changed files with 271 additions and 153 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
*/
package org.jkiss.dbeaver.ui.preferences;

import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
Expand All @@ -30,6 +28,9 @@
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.contentassist.ContentAssistUtils;
import org.jkiss.dbeaver.ui.contentassist.SmartTextContentAdapter;
import org.jkiss.dbeaver.ui.contentassist.StringContentProposalProvider;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.dbeaver.utils.SystemVariablesResolver;

Expand Down Expand Up @@ -113,10 +114,10 @@ public void widgetSelected(SelectionEvent e) {
});
clientApplicationNameText = UIUtils.createLabelText(clientNameGroup, CoreMessages.pref_page_database_label_client_application_name, ""); //$NON-NLS-1$

UIUtils.installContentProposal(
ContentAssistUtils.installContentProposal(
clientApplicationNameText,
new TextContentAdapter(),
new SimpleContentProposalProvider(ALLOWED_VARIABLES));
new SmartTextContentAdapter(),
new StringContentProposalProvider(ALLOWED_VARIABLES));
UIUtils.setContentProposalToolTip(clientApplicationNameText, CoreMessages.pref_page_connections_application_name_text, ALLOWED_VARIABLES);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
*/
package org.jkiss.dbeaver.ui.preferences;

import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbench;
Expand All @@ -28,6 +26,9 @@
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.contentassist.ContentAssistUtils;
import org.jkiss.dbeaver.ui.contentassist.SmartTextContentAdapter;
import org.jkiss.dbeaver.ui.contentassist.StringContentProposalProvider;
import org.jkiss.dbeaver.ui.controls.TextWithOpenFile;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.PrefUtils;
Expand Down Expand Up @@ -62,13 +63,12 @@ protected Control createContents(Composite parent)
CoreMessages.pref_page_ui_general_label_enable_debug_logs_tip, false, 2);
UIUtils.createControlLabel(groupLogs, CoreMessages.pref_page_ui_general_label_log_file_location);
logsDebugLocation = new TextWithOpenFile(groupLogs, CoreMessages.pref_page_ui_general_label_open_file_text, new String[] { "*.log", "*.txt" } );
UIUtils.installContentProposal(
ContentAssistUtils.installContentProposal(
logsDebugLocation.getTextControl(),
new TextContentAdapter(),
new SimpleContentProposalProvider(new String[] {
new SmartTextContentAdapter(),
new StringContentProposalProvider(
GeneralUtils.variablePattern(SystemVariablesResolver.VAR_WORKSPACE),
GeneralUtils.variablePattern(SystemVariablesResolver.VAR_HOME)
}));
GeneralUtils.variablePattern(SystemVariablesResolver.VAR_HOME)));
logsDebugLocation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

Label tipLabel = UIUtils.createLabel(groupLogs, CoreMessages.pref_page_ui_general_label_options_take_effect_after_restart);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
*/
package org.jkiss.dbeaver.tools.transfer.ui.pages.stream;

import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
Expand All @@ -29,6 +27,9 @@
import org.jkiss.dbeaver.tools.transfer.stream.StreamTransferConsumer;
import org.jkiss.dbeaver.tools.transfer.ui.wizard.DataTransferWizard;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.contentassist.ContentAssistUtils;
import org.jkiss.dbeaver.ui.contentassist.SmartTextContentAdapter;
import org.jkiss.dbeaver.ui.contentassist.StringContentProposalProvider;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
Expand Down Expand Up @@ -112,19 +113,18 @@ public void widgetSelected(SelectionEvent e) {
settings.setOutputFilePattern(fileNameText.getText());
updatePageCompletion();
});
UIUtils.installContentProposal(
ContentAssistUtils.installContentProposal(
fileNameText,
new TextContentAdapter(),
new SimpleContentProposalProvider(new String[] {
new SmartTextContentAdapter(),
new StringContentProposalProvider(
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_DATASOURCE),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_CATALOG),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_SCHEMA),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_TABLE),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_TIMESTAMP),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_DATE),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_INDEX),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_PROJECT)
}));
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_PROJECT)));

{
UIUtils.createControlLabel(generalSettings, DTMessages.data_transfer_wizard_output_label_encoding);
Expand Down Expand Up @@ -224,15 +224,15 @@ public void widgetSelected(SelectionEvent e) {
StreamTransferConsumer.VARIABLE_TIMESTAMP,
StreamTransferConsumer.VARIABLE_DATE,
StreamTransferConsumer.VARIABLE_PROJECT);
UIUtils.installContentProposal(
ContentAssistUtils.installContentProposal(
execProcessText,
new TextContentAdapter(),
new SimpleContentProposalProvider(new String[] {
new SmartTextContentAdapter(),
new StringContentProposalProvider(
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_TABLE),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_TIMESTAMP),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_DATE),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_PROJECT),
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_FILE)}));
GeneralUtils.variablePattern(StreamTransferConsumer.VARIABLE_FILE)));

showFinalMessageCheckbox = UIUtils.createCheckbox(resultsSettings, "Show finish message", null, getWizard().getSettings().isShowFinalMessage(), 4);
showFinalMessageCheckbox.addSelectionListener(new SelectionAdapter() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
*/
package org.jkiss.dbeaver.ext.mysql.tools;

import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
Expand All @@ -29,6 +27,9 @@
import org.jkiss.dbeaver.ext.mysql.ui.internal.MySQLUIMessages;
import org.jkiss.dbeaver.tasks.nativetool.NativeToolUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.contentassist.ContentAssistUtils;
import org.jkiss.dbeaver.ui.contentassist.SmartTextContentAdapter;
import org.jkiss.dbeaver.ui.contentassist.StringContentProposalProvider;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
Expand Down Expand Up @@ -114,17 +115,15 @@ public void widgetSelected(SelectionEvent e) {
NativeToolUtils.VARIABLE_TABLE,
NativeToolUtils.VARIABLE_DATE,
NativeToolUtils.VARIABLE_TIMESTAMP);
UIUtils.installContentProposal(
ContentAssistUtils.installContentProposal(
outputFileText,
new TextContentAdapter(),
new SimpleContentProposalProvider(new String[] {
new SmartTextContentAdapter(),
new StringContentProposalProvider(
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_HOST),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATABASE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TABLE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP),
}
));
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP)));

createExtraArgsInput(outputGroup);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
*/
package org.jkiss.dbeaver.ext.postgresql.tools;

import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
Expand All @@ -28,6 +26,9 @@
import org.jkiss.dbeaver.ext.postgresql.tasks.PostgreDatabaseBackupSettings;
import org.jkiss.dbeaver.tasks.nativetool.NativeToolUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.contentassist.ContentAssistUtils;
import org.jkiss.dbeaver.ui.contentassist.SmartTextContentAdapter;
import org.jkiss.dbeaver.ui.contentassist.StringContentProposalProvider;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
Expand Down Expand Up @@ -133,16 +134,15 @@ public void widgetSelected(SelectionEvent e) {
NativeToolUtils.VARIABLE_TABLE,
NativeToolUtils.VARIABLE_DATE,
NativeToolUtils.VARIABLE_TIMESTAMP);
UIUtils.installContentProposal(
ContentAssistUtils.installContentProposal(
outputFileText,
new TextContentAdapter(),
new SimpleContentProposalProvider(new String[]{
new SmartTextContentAdapter(),
new StringContentProposalProvider(
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_HOST),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATABASE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TABLE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP),
}));
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP)));
outputFileText.addModifyListener(e -> wizard.getSettings().setOutputFilePattern(outputFileText.getText()));

createExtraArgsInput(outputGroup);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ public class SQLConstants {
public static final String KEYWORD_ON = "ON";
public static final String KEYWORD_AND = "AND";
public static final String KEYWORD_OR = "OR";
public static final String KEYWORD_IS = "IS";
public static final String KEYWORD_NOT = "NOT";
public static final String KEYWORD_NULL = "NULL";

public static final String[] TABLE_KEYWORDS = {
KEYWORD_FROM,
Expand Down Expand Up @@ -185,7 +188,7 @@ public class SQLConstants {
"INTERSECTION",
"INTERVAL",
"INTO",
"IS",
KEYWORD_IS,
"JOIN",
"LANGUAGE",
"LARGE",
Expand Down Expand Up @@ -214,8 +217,8 @@ public class SQLConstants {
"NO",
"NONE",
"NORMALIZE",
"NOT",
"NULL",
KEYWORD_NOT,
KEYWORD_NULL,
"NULLIF",
"NUMERIC",
"OF",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,16 @@

package org.jkiss.dbeaver.tasks.ui.nativetool;

import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.contentassist.ContentAssistUtils;
import org.jkiss.dbeaver.ui.contentassist.SmartTextContentAdapter;
import org.jkiss.dbeaver.ui.contentassist.StringContentProposalProvider;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;

public abstract class AbstractToolWizardPage<WIZARD extends AbstractToolWizard> extends ActiveWizardPage {
Expand Down Expand Up @@ -55,10 +56,10 @@ protected void createCheckButtons(Composite buttonsPanel, final Table table) {
protected void createExtraArgsInput(Composite outputGroup) {
extraCommandArgsText = UIUtils.createLabelText(outputGroup, "Extra command args", wizard.getSettings().getExtraCommandArgs());
extraCommandArgsText.setToolTipText("Set extra command args for tool executable.");
UIUtils.installContentProposal(
ContentAssistUtils.installContentProposal(
extraCommandArgsText,
new TextContentAdapter(),
new SimpleContentProposalProvider(new String[]{}));
new SmartTextContentAdapter(),
new StringContentProposalProvider(new String[]{}));
extraCommandArgsText.addModifyListener(e -> wizard.getSettings().setExtraCommandArgs(extraCommandArgsText.getText()));

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.model.runtime.SystemJob;
import org.jkiss.dbeaver.model.sql.SQLConstants;
import org.jkiss.dbeaver.model.sql.SQLSyntaxManager;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.sql.parser.SQLWordPartDetector;
Expand All @@ -56,7 +57,8 @@
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ui.UIServiceSQL;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.controls.StyledTextContentAdapter;
import org.jkiss.dbeaver.ui.contentassist.ContentAssistUtils;
import org.jkiss.dbeaver.ui.contentassist.SmartStyledTextContentAdapter;
import org.jkiss.dbeaver.ui.controls.StyledTextUtils;
import org.jkiss.dbeaver.ui.controls.resultset.handler.ResultSetHandlerMain;
import org.jkiss.dbeaver.ui.controls.resultset.internal.ResultSetMessages;
Expand Down Expand Up @@ -231,26 +233,11 @@ public void keyPressed(KeyEvent e) {
}
});

StyledTextContentAdapter contentAdapter = new StyledTextContentAdapter(filtersText) {
@Override
public void setControlContents(Control control, String text, int cursorPosition) {
// We need to set selection in the beginning of current word
Point selection = filtersText.getSelection();
String curText = filtersText.getText();
int insertPosition = selection.x;
for (int i = selection.x - 1; i >= 0; i--) {
if (Character.isUnicodeIdentifierPart(curText.charAt(i))) {
insertPosition = i;
} else {
break;
}
}
filtersText.setSelection(insertPosition, selection.y);
insertControlContents(control, text, cursorPosition);
}
};
filtersProposalAdapter = UIUtils.installContentProposal(
filtersText, contentAdapter, this, false, false);
filtersProposalAdapter = ContentAssistUtils.installContentProposal(
filtersText,
new SmartStyledTextContentAdapter(),
this,
true);
}

// Handle all shortcuts by filters editor, not by host editor
Expand Down Expand Up @@ -639,6 +626,13 @@ public IContentProposal[] getProposals(String contents, int position) {
searchJob.schedule();
UIUtils.waitJobCompletion(searchJob);

String[] filterKeywords = { SQLConstants.KEYWORD_AND, SQLConstants.KEYWORD_OR, SQLConstants.KEYWORD_IS, SQLConstants.KEYWORD_NOT, SQLConstants.KEYWORD_NULL };
for (String kw : filterKeywords) {
if (word.isEmpty() || kw.startsWith(word.toUpperCase())) {
proposals.add(new ContentProposal(kw + " ", kw + ": SQL expression keyword"));
}
}

return proposals.toArray(new IContentProposal[0]);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
package org.jkiss.dbeaver.ui.controls.resultset.panel.grouping;

import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.data.DBDAttributeBinding;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.contentassist.StringContentProposalProvider;
import org.jkiss.dbeaver.ui.controls.StringEditorTable;
import org.jkiss.dbeaver.ui.dialogs.BaseDialog;

Expand Down Expand Up @@ -63,7 +63,7 @@ protected Composite createDialogArea(Composite parent)
for (DBDAttributeBinding attr : resultsContainer.getOwnerPresentation().getController().getModel().getAttributes()) {
proposals.add(attr.getName());
}
SimpleContentProposalProvider proposalProvider = new SimpleContentProposalProvider(new String[0]);
StringContentProposalProvider proposalProvider = new StringContentProposalProvider(new String[0]);
proposalProvider.setFiltering(true);
proposalProvider.setProposals(proposals.toArray(new String[0]));
columnsTable = StringEditorTable.createEditableList(composite, "Columns", resultsContainer.getGroupAttributes(), DBIcon.TREE_ATTRIBUTE, proposalProvider);
Expand Down
Loading

0 comments on commit c22bb6e

Please sign in to comment.