提交 a6a7c802 编写于 作者: J jurgen

Search pages + jdbc dumper fix

上级 8bdb2b7b
/*
* Copyright (C) 2010-2014 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;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.navigator.DBNModel;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.ui.views.navigator.database.DatabaseNavigatorTree;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
public abstract class AbstractSearchPage extends DialogPage implements IObjectSearchPage {
static final protected Log log = LogFactory.getLog(AbstractSearchPage.class);
protected IObjectSearchContainer container;
protected AbstractSearchPage(String title) {
super(title);
}
@Override
public void setSearchContainer(IObjectSearchContainer container)
{
this.container = container;
}
@Override
public void setVisible(boolean visible)
{
super.setVisible(visible);
if (visible) {
updateEnablement();
}
}
protected abstract void updateEnablement();
protected static List<DBNNode> loadTreeState(IPreferenceStore store, String propName)
{
final List<DBNNode> result = new ArrayList<DBNNode>();
final String sources = store.getString(propName);
if (!CommonUtils.isEmpty(sources)) {
try {
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
{
StringTokenizer st = new StringTokenizer(sources, "|"); //$NON-NLS-1$
while (st.hasMoreTokens()) {
String nodePath = st.nextToken();
try {
DBNNode node = DBNModel.getInstance().getNodeByPath(monitor, nodePath);
if (node != null) {
result.add(node);
}
} catch (DBException e) {
log.error(e);
}
}
}
});
} catch (InvocationTargetException e) {
log.error(e.getTargetException());
} catch (InterruptedException e) {
// ignore
}
}
return result;
}
protected static void saveTreeState(IPreferenceStore store, String propName, DatabaseNavigatorTree tree)
{
// Object sources
StringBuilder sourcesString = new StringBuilder();
IStructuredSelection ss = (IStructuredSelection) tree.getViewer().getSelection();
for (Iterator<?> iter = ss.iterator(); iter.hasNext(); ) {
DBNNode node = (DBNNode) iter.next();
if (sourcesString.length() > 0) {
sourcesString.append("|"); //$NON-NLS-1$
}
sourcesString.append(node.getNodeItemPath());
}
store.setValue(propName, sourcesString.toString());
}
}
......@@ -18,56 +18,56 @@
*/
package org.jkiss.dbeaver.ui.search.data;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.*;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.model.struct.DBSWrapper;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.search.IObjectSearchContainer;
import org.jkiss.dbeaver.ui.search.IObjectSearchPage;
import org.jkiss.dbeaver.ui.search.AbstractSearchPage;
import org.jkiss.dbeaver.ui.views.navigator.database.DatabaseNavigatorTree;
import org.jkiss.dbeaver.ui.views.navigator.database.load.TreeLoadNode;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class SearchDataPage extends DialogPage implements IObjectSearchPage {
static final Log log = LogFactory.getLog(SearchDataPage.class);
public class SearchDataPage extends AbstractSearchPage {
private static final String PROP_MASK = "search.data.mask"; //$NON-NLS-1$
private static final String PROP_CASE_SENSITIVE = "search.data.case-sensitive"; //$NON-NLS-1$
private static final String PROP_MAX_RESULT = "search.data.max-results"; //$NON-NLS-1$
private static final String PROP_MATCH_INDEX = "search.data.match-index"; //$NON-NLS-1$
private static final String PROP_FAST_SEARCH = "search.data.fast-search"; //$NON-NLS-1$
private static final String PROP_SEARCH_NUMBERS = "search.data.search-numbers"; //$NON-NLS-1$
private static final String PROP_SEARCH_LOBS = "search.data.search-lobs"; //$NON-NLS-1$
private static final String PROP_HISTORY = "search.data.history"; //$NON-NLS-1$
private static final String PROP_SOURCES = "search.data.object-source"; //$NON-NLS-1$
private IObjectSearchContainer container;
private Combo searchText;
private DatabaseNavigatorTree dataSourceTree;
private String searchString;
private boolean caseSensitive;
private boolean fastSearch; // Indexed
private boolean searchNumbers;
private boolean searchLOBs;
private int maxResults;
private int matchTypeIndex;
private Set<String> searchHistory = new LinkedHashSet<String>();
private List<DBNNode> sourceNodes = new ArrayList<DBNNode>();
......@@ -184,7 +184,7 @@ public class SearchDataPage extends DialogPage implements IObjectSearchPage {
}
});
final Button fastSearchCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Fast search (indexed)", caseSensitive);
final Button fastSearchCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Fast search (indexed)", fastSearch);
fastSearchCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
fastSearchCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
......@@ -195,23 +195,23 @@ public class SearchDataPage extends DialogPage implements IObjectSearchPage {
});
final Button searchNumbersCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Search in numbers", caseSensitive);
final Button searchNumbersCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Search in numbers", searchNumbers);
searchNumbersCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
searchNumbersCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
// fastSearch = searchNumbersCheckbox.getSelection();
searchNumbers = searchNumbersCheckbox.getSelection();
}
});
final Button searchLOBCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Search in LOBs", caseSensitive);
final Button searchLOBCheckbox = UIUtils.createLabelCheckbox(optionsGroup2, "Search in LOBs", searchLOBs);
searchLOBCheckbox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
searchLOBCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
// fastSearch = searchNumbersCheckbox.getSelection();
searchLOBs = searchNumbersCheckbox.getSelection();
}
});
}
......@@ -224,48 +224,10 @@ public class SearchDataPage extends DialogPage implements IObjectSearchPage {
}
}
private List<DBSObject> getSelectedSources()
{
List<DBSObject> result = new ArrayList<DBSObject>();
for (Object sel : ((CheckboxTreeViewer)dataSourceTree.getViewer()).getCheckedElements()) {
if (sel instanceof DBSWrapper) {
DBSObject object = ((DBSWrapper) sel).getObject();
if (object != null && object.getDataSource() != null) {
result.add(object);
}
}
}
return result;
}
private void updateEnablement()
{
boolean enabled = false;
if (!getSelectedSources().isEmpty()) {
enabled = true;
}
container.setSearchEnabled(enabled);
}
@Override
public void setSearchContainer(IObjectSearchContainer container)
{
this.container = container;
}
@Override
public void setVisible(boolean visible)
{
super.setVisible(visible);
if (visible) {
updateEnablement();
}
}
@Override
public SearchDataQuery createQuery() throws DBException
{
List<DBSObject> selectedSources = getSelectedSources();
List<DBSObject> selectedSources = getCheckedSources();
String dataSearchString = searchString;
......@@ -289,8 +251,10 @@ public class SearchDataPage extends DialogPage implements IObjectSearchPage {
{
searchString = store.getString(PROP_MASK);
caseSensitive = store.getBoolean(PROP_CASE_SENSITIVE);
fastSearch = store.getBoolean(PROP_FAST_SEARCH);
searchNumbers = store.getBoolean(PROP_SEARCH_NUMBERS);
searchLOBs = store.getBoolean(PROP_SEARCH_LOBS);
maxResults = store.getInt(PROP_MAX_RESULT);
matchTypeIndex = store.getInt(PROP_MATCH_INDEX);
for (int i = 0; ;i++) {
String history = store.getString(PROP_HISTORY + "." + i); //$NON-NLS-1$
if (CommonUtils.isEmpty(history)) {
......@@ -298,35 +262,7 @@ public class SearchDataPage extends DialogPage implements IObjectSearchPage {
}
searchHistory.add(history);
}
{
final String sources = store.getString(PROP_SOURCES);
if (!CommonUtils.isEmpty(sources)) {
try {
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
{
StringTokenizer st = new StringTokenizer(sources, "|"); //$NON-NLS-1$
while (st.hasMoreTokens()) {
String nodePath = st.nextToken();
try {
DBNNode node = DBNModel.getInstance().getNodeByPath(monitor, nodePath);
if (node != null) {
sourceNodes.add(node);
}
} catch (DBException e) {
log.error(e);
}
}
}
});
} catch (InvocationTargetException e) {
log.error(e.getTargetException());
} catch (InterruptedException e) {
// ignore
}
}
}
sourceNodes = loadTreeState(store, PROP_SOURCES);
}
@Override
......@@ -335,20 +271,10 @@ public class SearchDataPage extends DialogPage implements IObjectSearchPage {
store.setValue(PROP_MASK, searchString);
store.setValue(PROP_CASE_SENSITIVE, caseSensitive);
store.setValue(PROP_MAX_RESULT, maxResults);
store.setValue(PROP_MATCH_INDEX, matchTypeIndex);
{
// Object sources
StringBuilder sourcesString = new StringBuilder();
IStructuredSelection ss = (IStructuredSelection) dataSourceTree.getViewer().getSelection();
for (Iterator<?> iter = ss.iterator(); iter.hasNext(); ) {
DBNNode node = (DBNNode) iter.next();
if (sourcesString.length() > 0) {
sourcesString.append("|"); //$NON-NLS-1$
}
sourcesString.append(node.getNodeItemPath());
}
store.setValue(PROP_SOURCES, sourcesString.toString());
}
store.setValue(PROP_FAST_SEARCH, fastSearch);
store.setValue(PROP_SEARCH_NUMBERS, searchNumbers);
store.setValue(PROP_SEARCH_LOBS, searchLOBs);
saveTreeState(store, PROP_SOURCES, dataSourceTree);
{
// Search history
......@@ -363,4 +289,27 @@ public class SearchDataPage extends DialogPage implements IObjectSearchPage {
}
}
protected List<DBSObject> getCheckedSources()
{
List<DBSObject> result = new ArrayList<DBSObject>();
for (Object sel : ((CheckboxTreeViewer)dataSourceTree.getViewer()).getCheckedElements()) {
if (sel instanceof DBSWrapper) {
DBSObject object = ((DBSWrapper) sel).getObject();
if (object != null && object.getDataSource() != null) {
result.add(object);
}
}
}
return result;
}
protected void updateEnablement()
{
boolean enabled = false;
if (!getCheckedSources().isEmpty()) {
enabled = true;
}
container.setSearchEnabled(enabled);
}
}
......@@ -18,10 +18,7 @@
*/
package org.jkiss.dbeaver.ui.search.metadata;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
......@@ -33,28 +30,21 @@ import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.runtime.DBRProcessListener;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.search.IObjectSearchContainer;
import org.jkiss.dbeaver.ui.search.IObjectSearchPage;
import org.jkiss.dbeaver.ui.search.AbstractSearchPage;
import org.jkiss.dbeaver.ui.views.navigator.database.DatabaseNavigatorTree;
import org.jkiss.dbeaver.ui.views.navigator.database.load.TreeLoadNode;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.List;
public class SearchMetadataPage extends DialogPage implements IObjectSearchPage {
static final Log log = LogFactory.getLog(SearchMetadataPage.class);
public class SearchMetadataPage extends AbstractSearchPage {
private static final String PROP_MASK = "search.metadata.mask"; //$NON-NLS-1$
private static final String PROP_CASE_SENSITIVE = "search.metadata.case-sensitive"; //$NON-NLS-1$
......@@ -64,7 +54,6 @@ public class SearchMetadataPage extends DialogPage implements IObjectSearchPage
private static final String PROP_OBJECT_TYPE = "search.metadata.object-type"; //$NON-NLS-1$
private static final String PROP_SOURCES = "search.metadata.object-source"; //$NON-NLS-1$
private IObjectSearchContainer container;
private Table typesTable;
private Combo searchText;
private DatabaseNavigatorTree dataSourceTree;
......@@ -346,34 +335,6 @@ public class SearchMetadataPage extends DialogPage implements IObjectSearchPage
updateEnablement();
}
private void updateEnablement()
{
boolean enabled = false;
if (getSelectedDataSource() != null) {
enabled = !checkedTypes.isEmpty();
}
if (CommonUtils.isEmpty(nameMask)) {
enabled = false;
}
container.setSearchEnabled(enabled);
}
@Override
public void setSearchContainer(IObjectSearchContainer container)
{
this.container = container;
}
@Override
public void setVisible(boolean visible)
{
super.setVisible(visible);
if (visible) {
updateEnablement();
}
}
@Override
public SearchMetadataQuery createQuery() throws DBException
{
......@@ -439,35 +400,7 @@ public class SearchMetadataPage extends DialogPage implements IObjectSearchPage
}
searchHistory.add(history);
}
{
final String sources = store.getString(PROP_SOURCES);
if (!CommonUtils.isEmpty(sources)) {
try {
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
{
StringTokenizer st = new StringTokenizer(sources, "|"); //$NON-NLS-1$
while (st.hasMoreTokens()) {
String nodePath = st.nextToken();
try {
DBNNode node = DBNModel.getInstance().getNodeByPath(monitor, nodePath);
if (node != null) {
sourceNodes.add(node);
}
} catch (DBException e) {
log.error(e);
}
}
}
});
} catch (InvocationTargetException e) {
log.error(e.getTargetException());
} catch (InterruptedException e) {
// ignore
}
}
}
sourceNodes = loadTreeState(store, PROP_SOURCES);
{
String type = store.getString(PROP_OBJECT_TYPE);
......@@ -487,19 +420,7 @@ public class SearchMetadataPage extends DialogPage implements IObjectSearchPage
store.setValue(PROP_CASE_SENSITIVE, caseSensitive);
store.setValue(PROP_MAX_RESULT, maxResults);
store.setValue(PROP_MATCH_INDEX, matchTypeIndex);
{
// Object sources
StringBuilder sourcesString = new StringBuilder();
IStructuredSelection ss = (IStructuredSelection) dataSourceTree.getViewer().getSelection();
for (Iterator<?> iter = ss.iterator(); iter.hasNext(); ) {
DBNNode node = (DBNNode) iter.next();
if (sourcesString.length() > 0) {
sourcesString.append("|"); //$NON-NLS-1$
}
sourcesString.append(node.getNodeItemPath());
}
store.setValue(PROP_SOURCES, sourcesString.toString());
}
saveTreeState(store, PROP_SOURCES, dataSourceTree);
{
// Search history
......@@ -525,4 +446,17 @@ public class SearchMetadataPage extends DialogPage implements IObjectSearchPage
}
}
protected void updateEnablement()
{
boolean enabled = false;
if (getSelectedDataSource() != null) {
enabled = !checkedTypes.isEmpty();
}
if (CommonUtils.isEmpty(nameMask)) {
enabled = false;
}
container.setSearchEnabled(enabled);
}
}
......@@ -18,7 +18,6 @@
*/
package org.jkiss.tools.jdbc.dumper;
import javax.xml.transform.Result;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
......@@ -126,9 +125,9 @@ public class JDBCDumper
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("\Primary Keys:");
System.out.println("\tPrimary Keys:");
try {
dumpResultSet(null, "\t\t", metaData.getPrimaryKeys(catalogName, schema, tableName), null);
dumpResultSet(null, "\t\t", metaData.getPrimaryKeys(catName, schema, tableName), null);
} catch (Throwable e) {
e.printStackTrace();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册