/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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. * * Copyright 2008 - 2009 Pentaho Corporation. All rights reserved. * * * Created April 21, 2009 * @author rmansoor */ package org.pentaho.platform.dataaccess.datasource.wizard.service.impl; import java.util.List; import org.pentaho.gwt.widgets.login.client.AuthenticatedGwtServiceUtil; import org.pentaho.gwt.widgets.login.client.IAuthenticatedGwtCommand; import org.pentaho.metadata.model.Domain; import org.pentaho.platform.dataaccess.datasource.IConnection; import org.pentaho.platform.dataaccess.datasource.beans.BusinessData; import org.pentaho.platform.dataaccess.datasource.beans.LogicalModelSummary; import org.pentaho.platform.dataaccess.datasource.beans.SerializedResultSet; import org.pentaho.platform.dataaccess.datasource.wizard.IDatasourceSummary; import org.pentaho.platform.dataaccess.datasource.wizard.models.DatasourceDTO; import org.pentaho.platform.dataaccess.datasource.wizard.service.IXulAsyncDatasourceService; import org.pentaho.platform.dataaccess.datasource.wizard.service.gwt.IGwtDatasourceServiceAsync; import org.pentaho.ui.xul.XulServiceCallback; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.ServiceDefTarget; public class DatasourceServiceGwtImpl implements IXulAsyncDatasourceService { final static String ERROR = "ERROR:"; static IGwtDatasourceServiceAsync SERVICE; static { SERVICE = (org.pentaho.platform.dataaccess.datasource.wizard.service.gwt.IGwtDatasourceServiceAsync) GWT .create(org.pentaho.platform.dataaccess.datasource.wizard.service.gwt.IGwtDatasourceService.class); ServiceDefTarget endpoint = (ServiceDefTarget) SERVICE; endpoint.setServiceEntryPoint(getBaseUrl()); } /** * Returns the context-aware URL to the rpc service */ private static String getBaseUrl() { String moduleUrl = GWT.getModuleBaseURL(); // //Set the base url appropriately based on the context in which we are running this client // if (moduleUrl.indexOf("content") > -1) { //we are running the client in the context of a BI Server plugin, so //point the request to the GWT rpc proxy servlet String baseUrl = moduleUrl.substring(0, moduleUrl.indexOf("content")); //NOTE: the dispatch URL ("connectionService") must match the bean id for //this service object in your plugin.xml. "gwtrpc" is the servlet //that handles plugin gwt rpc requests in the BI Server. return baseUrl + "gwtrpc/DatasourceService"; } //we are running this client in hosted mode, so point to the servlet //defined in war/WEB-INF/web.xml return moduleUrl + "DatasourceService"; } /** * Override the service entry point (use only if you know what you are doing) */ public static void setServiceEntryPoint(String serviceEntryPointBase) { ServiceDefTarget endpoint = (ServiceDefTarget) SERVICE; endpoint.setServiceEntryPoint(serviceEntryPointBase + "gwtrpc/DatasourceService"); } public DatasourceServiceGwtImpl() { } public void doPreview(final String connectionName, final String query, final String previewLimit, final XulServiceCallback<SerializedResultSet> xulCallback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.doPreview(connectionName, query, previewLimit, callback); } }, new AsyncCallback<SerializedResultSet>() { public void onFailure(Throwable arg0) { xulCallback.error(arg0.getLocalizedMessage(), arg0);//$NON-NLS-1$ } public void onSuccess(SerializedResultSet arg0) { xulCallback.success(arg0); } }); } public void generateLogicalModel(final String modelName, final String connectionName, final String dbType, final String query, final String previewLimit, final XulServiceCallback<BusinessData> xulCallback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.generateLogicalModel(modelName, connectionName, dbType, query, previewLimit, callback); } }, new AsyncCallback<BusinessData>() { public void onFailure(Throwable arg0) { xulCallback.error(arg0.getLocalizedMessage(), arg0);//$NON-NLS-1$ } public void onSuccess(BusinessData arg0) { xulCallback.success(arg0); } }); } public void saveLogicalModel(final Domain domain, final boolean overwrite, final XulServiceCallback<Boolean> xulCallback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.saveLogicalModel(domain, overwrite, callback); } }, new AsyncCallback<Boolean>() { public void onFailure(Throwable arg0) { xulCallback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(Boolean arg0) { xulCallback.success(arg0); } }); } public void hasPermission(final XulServiceCallback<Boolean> xulCallback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.hasPermission(callback); } }, new AsyncCallback<Boolean>() { public void onFailure(Throwable arg0) { xulCallback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(Boolean arg0) { xulCallback.success(arg0); } }); } public void deleteLogicalModel(final String domainId, final String modelName, final XulServiceCallback<Boolean> xulCallback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.deleteLogicalModel(domainId, modelName, callback); } }, new AsyncCallback<Boolean>() { public void onFailure(Throwable arg0) { xulCallback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(Boolean arg0) { xulCallback.success(arg0); } }); } public void getLogicalModels(final XulServiceCallback<List<LogicalModelSummary>> xulCallback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.getLogicalModels(callback); } },new AsyncCallback<List<LogicalModelSummary>>() { public void onFailure(Throwable arg0) { xulCallback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(List<LogicalModelSummary> arg0) { xulCallback.success(arg0); } }); } public void loadBusinessData(final String domainId, final String modelId, final XulServiceCallback<BusinessData> xulCallback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.loadBusinessData(domainId, modelId, callback); } },new AsyncCallback<BusinessData>() { public void onFailure(Throwable arg0) { xulCallback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(BusinessData arg0) { xulCallback.success(arg0); } }); } public void serializeModelState(final DatasourceDTO dto, final XulServiceCallback<String> callback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.serializeModelState(dto, callback); } },new AsyncCallback<String>() { public void onFailure(Throwable arg0) { callback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(String arg0) { callback.success(arg0); } }); } public void deSerializeModelState(final String dtoStr, final XulServiceCallback<DatasourceDTO> callback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.deSerializeModelState(dtoStr, callback); } },new AsyncCallback<DatasourceDTO>() { public void onFailure(Throwable arg0) { callback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(DatasourceDTO arg0) { callback.success(arg0); } }); } @Override public void listDatasourceNames(final XulServiceCallback<List<String>> callback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.listDatasourceNames(callback); } },new AsyncCallback<List<String>>() { public void onFailure(Throwable arg0) { callback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(List<String> arg0) { callback.success(arg0); } }); } @Override public void generateQueryDomain(final String name, final String query, final IConnection connection, final DatasourceDTO datasourceDTO, final XulServiceCallback<IDatasourceSummary> callback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.generateQueryDomain(name, query, connection, datasourceDTO, callback); } },new AsyncCallback<IDatasourceSummary>() { public void onFailure(Throwable arg0) { callback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(IDatasourceSummary arg0) { callback.success(arg0); } }); } @Override public void getDatasourceIllegalCharacters(final XulServiceCallback<String> callback) { AuthenticatedGwtServiceUtil.invokeCommand(new IAuthenticatedGwtCommand() { public void execute(AsyncCallback callback) { SERVICE.getDatasourceIllegalCharacters(callback); } },new AsyncCallback<String>() { public void onFailure(Throwable arg0) { callback.error(arg0.getLocalizedMessage(), arg0); //$NON-NLS-1$ } public void onSuccess(String arg0) { callback.success(arg0); } }); } }