From 6082b1d5132b2c626052c05c8c7c69b76b62f4d6 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Sun, 30 Sep 2018 20:06:42 +0300 Subject: [PATCH] #1687 BigQuery bundle Former-commit-id: f7c4ef18647d7e6369be65f020c3db38bbd4bcb0 --- .../feature.xml | 1 + .../org.jkiss.dbeaver.ext.bigquery/.classpath | 7 + .../org.jkiss.dbeaver.ext.bigquery/.project | 28 +++ .../LICENSE.txt | 202 +++++++++++++++++ .../META-INF/MANIFEST.MF | 15 ++ .../OSGI-INF/l10n/bundle.properties | 5 + .../build.properties | 8 + .../icons/google_bigquery.png | Bin .../icons/google_bigquery@2x.png | Bin .../org.jkiss.dbeaver.ext.bigquery/plugin.xml | 58 +++++ .../org.jkiss.dbeaver.ext.bigquery/pom.xml | 14 ++ .../ext/bigquery/BigQueryActivator.java | 41 ++-- .../bigquery/BigQueryDataSourceProvider.java | 53 +++++ .../ext/bigquery/model/BigQueryConstants.java | 32 +++ .../bigquery/model/BigQueryDataSource.java | 52 +++++ .../views/BigQueryConnectionPage.java | 203 ++++++++++++++++++ .../plugin.properties | 2 - .../org.jkiss.dbeaver.ext.generic/plugin.xml | 16 -- plugins/pom.xml | 1 + 19 files changed, 700 insertions(+), 38 deletions(-) create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/.classpath create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/.project create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/LICENSE.txt create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/META-INF/MANIFEST.MF create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/OSGI-INF/l10n/bundle.properties create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/build.properties rename plugins/{org.jkiss.dbeaver.ext.generic => org.jkiss.dbeaver.ext.bigquery}/icons/google_bigquery.png (100%) rename plugins/{org.jkiss.dbeaver.ext.generic => org.jkiss.dbeaver.ext.bigquery}/icons/google_bigquery@2x.png (100%) create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/plugin.xml create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/pom.xml create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryDataSourceProvider.java create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryConstants.java create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryDataSource.java create mode 100644 plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/views/BigQueryConnectionPage.java delete mode 100644 plugins/org.jkiss.dbeaver.ext.es.ui/plugin.properties diff --git a/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml b/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml index 99cfd0e52a..0f39b719ea 100644 --- a/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml +++ b/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml @@ -23,6 +23,7 @@ + diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/.classpath b/plugins/org.jkiss.dbeaver.ext.bigquery/.classpath new file mode 100644 index 0000000000..43b986286a --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/.project b/plugins/org.jkiss.dbeaver.ext.bigquery/.project new file mode 100644 index 0000000000..8f39c26180 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/.project @@ -0,0 +1,28 @@ + + + org.jkiss.dbeaver.ext.bigquery + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/LICENSE.txt b/plugins/org.jkiss.dbeaver.ext.bigquery/LICENSE.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/META-INF/MANIFEST.MF b/plugins/org.jkiss.dbeaver.ext.bigquery/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..aa1716a662 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/META-INF/MANIFEST.MF @@ -0,0 +1,15 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: BigQuery extension +Bundle-SymbolicName: org.jkiss.dbeaver.ext.bigquery;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Release-Date: 20181008 +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.jkiss.dbeaver.core, + org.jkiss.dbeaver.ext.generic +Bundle-Activator: org.jkiss.dbeaver.ext.bigquery.BigQueryActivator +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-Vendor: Rider Soft +Bundle-Localization: plugin diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/OSGI-INF/l10n/bundle.properties b/plugins/org.jkiss.dbeaver.ext.bigquery/OSGI-INF/l10n/bundle.properties new file mode 100644 index 0000000000..c3cce9dca6 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/OSGI-INF/l10n/bundle.properties @@ -0,0 +1,5 @@ +Bundle-Vendor = Rider Soft +Bundle-Name = DBeaver Google BigQuery Extension +datasource.bq.description = BigQuery datasource + +bigquery.dialog.connection.header=Google BigQuery Connection Settings diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/build.properties b/plugins/org.jkiss.dbeaver.ext.bigquery/build.properties new file mode 100644 index 0000000000..61b6e80af5 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/build.properties @@ -0,0 +1,8 @@ +source.. = src/ +output.. = target/classes/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + icons/,\ + LICENSE.txt,\ + plugin.properties diff --git a/plugins/org.jkiss.dbeaver.ext.generic/icons/google_bigquery.png b/plugins/org.jkiss.dbeaver.ext.bigquery/icons/google_bigquery.png similarity index 100% rename from plugins/org.jkiss.dbeaver.ext.generic/icons/google_bigquery.png rename to plugins/org.jkiss.dbeaver.ext.bigquery/icons/google_bigquery.png diff --git a/plugins/org.jkiss.dbeaver.ext.generic/icons/google_bigquery@2x.png b/plugins/org.jkiss.dbeaver.ext.bigquery/icons/google_bigquery@2x.png similarity index 100% rename from plugins/org.jkiss.dbeaver.ext.generic/icons/google_bigquery@2x.png rename to plugins/org.jkiss.dbeaver.ext.bigquery/icons/google_bigquery@2x.png diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/plugin.xml b/plugins/org.jkiss.dbeaver.ext.bigquery/plugin.xml new file mode 100644 index 0000000000..a39a4f25a4 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/plugin.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/pom.xml b/plugins/org.jkiss.dbeaver.ext.bigquery/pom.xml new file mode 100644 index 0000000000..58ec107470 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + org.jkiss.dbeaver + dbeaver + 1.0.0-SNAPSHOT + ../../ + + org.jkiss.dbeaver.ext.bigquery + 1.0.0-SNAPSHOT + eclipse-plugin + diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryActivator.java b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryActivator.java index b094bd3a9e..4364fc90f8 100644 --- a/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryActivator.java +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryActivator.java @@ -25,32 +25,33 @@ import org.osgi.framework.BundleContext; */ public class BigQueryActivator extends AbstractUIPlugin { - // The plug-in ID - public static final String PLUGIN_ID = "org.jkiss.dbeaver.ext.bigquery"; + // The plug-in ID + public static final String PLUGIN_ID = "org.jkiss.dbeaver.ext.bigquery"; - // The shared instance - private static Activator plugin; + // The shared instance + private static BigQueryActivator plugin; - public BigQueryActivator() { - } + public BigQueryActivator() { - @Override + } + + @Override public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } + super.start(context); + plugin = this; + } - @Override + @Override public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } + plugin = null; + super.stop(context); + } - public static Activator getDefault() { - return plugin; - } + public static BigQueryActivator getDefault() { + return plugin; + } - public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); - } + public static ImageDescriptor getImageDescriptor(String path) { + return imageDescriptorFromPlugin(PLUGIN_ID, path); + } } diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryDataSourceProvider.java b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryDataSourceProvider.java new file mode 100644 index 0000000000..ff7a201ca3 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/BigQueryDataSourceProvider.java @@ -0,0 +1,53 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ext.bigquery; + +import org.jkiss.code.NotNull; +import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.ext.bigquery.model.BigQueryDataSource; +import org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider; +import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel; +import org.jkiss.dbeaver.model.DBPDataSource; +import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.app.DBPPlatform; +import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; + +public class BigQueryDataSourceProvider extends GenericDataSourceProvider { + + private static final Log log = Log.getLog(BigQueryDataSourceProvider.class); + + public BigQueryDataSourceProvider() + { + } + + @Override + public void init(@NotNull DBPPlatform platform) { + + } + + @NotNull + @Override + public DBPDataSource openDataSource( + @NotNull DBRProgressMonitor monitor, + @NotNull DBPDataSourceContainer container) + throws DBException + { + return new BigQueryDataSource(monitor, container, new GenericMetaModel()); + } + +} diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryConstants.java b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryConstants.java new file mode 100644 index 0000000000..e239751962 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryConstants.java @@ -0,0 +1,32 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ext.bigquery.model; + +import org.jkiss.dbeaver.model.DBConstants; + +/** + * Snowflake constants + */ +public class BigQueryConstants +{ + public static final String PROP_AUTHENTICATOR = DBConstants.INTERNAL_PROP_PREFIX + "authenticator@"; + + public static final String PROP_OAUTH_TYPE = DBConstants.INTERNAL_PROP_PREFIX + "oauth-type@"; + + public static final String DEFAULT_HOST_NAME = "https://www.googleapis.com/bigquery/v2"; + public static final int DEFAULT_PORT = 433; +} diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryDataSource.java b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryDataSource.java new file mode 100644 index 0000000000..743d3a8f68 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/model/BigQueryDataSource.java @@ -0,0 +1,52 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ext.bigquery.model; + +import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.ext.generic.model.GenericDataSource; +import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect; +import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel; +import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; +import org.jkiss.dbeaver.model.connection.DBPDriver; +import org.jkiss.dbeaver.model.exec.DBCException; +import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; +import org.jkiss.utils.CommonUtils; + +import java.util.HashMap; +import java.util.Map; + +public class BigQueryDataSource extends GenericDataSource { + + public BigQueryDataSource(DBRProgressMonitor monitor, DBPDataSourceContainer container, GenericMetaModel metaModel) + throws DBException + { + super(monitor, container, metaModel, new GenericSQLDialect()); + } + + @Override + protected Map getInternalConnectionProperties(DBRProgressMonitor monitor, DBPDriver driver, String purpose, DBPConnectionConfiguration connectionInfo) throws DBCException { + Map props = new HashMap<>(); + String authProp = connectionInfo.getProviderProperty(BigQueryConstants.PROP_AUTHENTICATOR); + if (!CommonUtils.isEmpty(authProp)) { + //props.put("authenticator", authProp); + } + + return props; + } + +} diff --git a/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/views/BigQueryConnectionPage.java b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/views/BigQueryConnectionPage.java new file mode 100644 index 0000000000..cb901176bc --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.bigquery/src/org/jkiss/dbeaver/ext/bigquery/views/BigQueryConnectionPage.java @@ -0,0 +1,203 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ext.bigquery.views; + +import org.eclipse.jface.dialogs.IDialogPage; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; +import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.ext.bigquery.BigQueryActivator; +import org.jkiss.dbeaver.ext.bigquery.model.BigQueryConstants; +import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; +import org.jkiss.dbeaver.ui.ICompositeDialogPage; +import org.jkiss.dbeaver.ui.UIUtils; +import org.jkiss.dbeaver.ui.controls.TextWithOpenFile; +import org.jkiss.dbeaver.ui.dialogs.connection.ConnectionPageAbstract; +import org.jkiss.dbeaver.ui.dialogs.connection.DriverPropertiesDialogPage; +import org.jkiss.utils.CommonUtils; + +import java.util.Locale; + +/** + * BigQueryConnectionPage + */ +public class BigQueryConnectionPage extends ConnectionPageAbstract implements ICompositeDialogPage +{ + private static final Log log = Log.getLog(BigQueryConnectionPage.class); + + private Text projectText; + private Text extraProjectsText; + private Text usernameText; + private Combo authTypeCombo; + private TextWithOpenFile authCertFile; + + private Text hostText; + private Text portText; + + private static ImageDescriptor logoImage = BigQueryActivator.getImageDescriptor("icons/google_bigquery_logo.png"); + + @Override + public void dispose() + { + super.dispose(); + } + + @Override + public void createControl(Composite composite) + { + setImageDescriptor(logoImage); + + Composite control = new Composite(composite, SWT.NONE); + control.setLayout(new GridLayout(1, false)); + control.setLayoutData(new GridData(GridData.FILL_BOTH)); + ModifyListener textListener = e -> site.updateButtons(); + + { + Composite addrGroup = UIUtils.createControlGroup(control, "Connection", 2, 0, 0); + + projectText = UIUtils.createLabelText(addrGroup, "Project", ""); + projectText.addModifyListener(textListener); + + extraProjectsText = UIUtils.createLabelText(addrGroup, "Additional project(s)", ""); + extraProjectsText.setToolTipText("Coma-separated list of projects (optional)"); + extraProjectsText.addModifyListener(textListener); + } + + { + Composite addrGroup = UIUtils.createControlGroup(control, "Security", 4, 0, 0); + addrGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + UIUtils.createControlLabel(addrGroup, "OAuth type"); + authTypeCombo = new Combo(addrGroup, SWT.BORDER | SWT.DROP_DOWN | SWT.READ_ONLY); + authTypeCombo.add("Service-based"); + authTypeCombo.add("User-based"); + GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL); + authTypeCombo.setLayoutData(gd); + authTypeCombo.addModifyListener(textListener); + authTypeCombo.select(0); + + usernameText = UIUtils.createLabelText(addrGroup, "Account", ""); + usernameText.addModifyListener(textListener); + + UIUtils.createControlLabel(addrGroup, "Key path"); + authCertFile = new TextWithOpenFile(addrGroup, "Private key path (p12 or JSON)", new String[] { "*", "*.p12", "*.json" } ); + } + + + { + // Def host/port + Composite addrGroup = UIUtils.createControlGroup(control, "Server info", 4, 0, 0); + addrGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + hostText = UIUtils.createLabelText(addrGroup, "Host", BigQueryConstants.DEFAULT_HOST_NAME); + hostText.addModifyListener(textListener); + + portText = UIUtils.createLabelText(addrGroup, "Port", String.valueOf(BigQueryConstants.DEFAULT_PORT)); + GridData gd = (GridData) portText.getLayoutData(); + gd.widthHint = 40; + portText.addVerifyListener(UIUtils.getIntegerVerifyListener(Locale.getDefault())); + portText.addModifyListener(textListener); + } + + createDriverPanel(control); + setControl(control); + } + + @Override + public boolean isComplete() + { + return hostText != null && + !CommonUtils.isEmpty(hostText.getText()); + } + + @Override + public void loadSettings() + { + super.loadSettings(); + + // Load values from new connection info + DBPConnectionConfiguration connectionInfo = site.getActiveDataSource().getConnectionConfiguration(); + if (projectText != null) { + String databaseName = connectionInfo.getDatabaseName(); + if (CommonUtils.isEmpty(databaseName)) { + databaseName = ""; + } + projectText.setText(databaseName); + } + if (usernameText != null) { + usernameText.setText(CommonUtils.notEmpty(connectionInfo.getUserName())); + } + if (authTypeCombo != null) { + authTypeCombo.select(CommonUtils.toInt(connectionInfo.getProviderProperty(BigQueryConstants.PROP_OAUTH_TYPE))); + } + + if (hostText != null) { + if (CommonUtils.isEmpty(connectionInfo.getHostName())) { + hostText.setText(BigQueryConstants.DEFAULT_HOST_NAME); + } else { + hostText.setText(connectionInfo.getHostName()); + } + } + if (portText != null) { + if (!CommonUtils.isEmpty(connectionInfo.getHostPort())) { + portText.setText(String.valueOf(connectionInfo.getHostPort())); + } else if (site.getDriver().getDefaultPort() != null) { + portText.setText(site.getDriver().getDefaultPort()); + } else { + portText.setText(""); + } + } + } + + @Override + public void saveSettings(DBPDataSourceContainer dataSource) + { + DBPConnectionConfiguration connectionInfo = dataSource.getConnectionConfiguration(); + if (projectText != null) { + connectionInfo.setDatabaseName(projectText.getText().trim()); + } + if (usernameText != null) { + connectionInfo.setUserName(usernameText.getText().trim()); + } + if (authTypeCombo != null) { + connectionInfo.setProviderProperty(BigQueryConstants.PROP_OAUTH_TYPE, String.valueOf(authTypeCombo.getSelectionIndex())); + } + if (hostText != null) { + connectionInfo.setHostName(hostText.getText().trim()); + } + if (portText != null) { + connectionInfo.setHostPort(portText.getText().trim()); + } + super.saveSettings(dataSource); + } + + @Override + public IDialogPage[] getSubPages() + { + return new IDialogPage[] { + new DriverPropertiesDialogPage(this) + }; + } + +} diff --git a/plugins/org.jkiss.dbeaver.ext.es.ui/plugin.properties b/plugins/org.jkiss.dbeaver.ext.es.ui/plugin.properties deleted file mode 100644 index f486325980..0000000000 --- a/plugins/org.jkiss.dbeaver.ext.es.ui/plugin.properties +++ /dev/null @@ -1,2 +0,0 @@ - -es.dialog.connection.header=Snowlfake Connection Settings diff --git a/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml b/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml index a2d4859383..a71797be72 100644 --- a/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ext.generic/plugin.xml @@ -1080,22 +1080,6 @@ webURL="https://documentation.progress.com/output/ua/OpenEdge_latest/dmsdv/connecting-from-a-java-application-using-a-url.html#"> - - - diff --git a/plugins/pom.xml b/plugins/pom.xml index 9b0dafd059..cab8384e92 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -24,6 +24,7 @@ org.jkiss.dbeaver.core.application org.jkiss.dbeaver.core.eclipse org.jkiss.dbeaver.ext.db2 + org.jkiss.dbeaver.ext.bigquery org.jkiss.dbeaver.ext.derby org.jkiss.dbeaver.ext.erd org.jkiss.dbeaver.ext.es.ui -- GitLab