/* * 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; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.metadata.model.Domain; import org.pentaho.platform.dataaccess.datasource.IConnection; import org.pentaho.platform.dataaccess.datasource.wizard.controllers.ConnectionController; import org.pentaho.platform.dataaccess.datasource.wizard.controllers.CsvDatasourceController; import org.pentaho.platform.dataaccess.datasource.wizard.controllers.DatasourceController; import org.pentaho.platform.dataaccess.datasource.wizard.controllers.RelationalDatasourceController; import org.pentaho.platform.dataaccess.datasource.wizard.models.DatasourceModel; import org.pentaho.platform.dataaccess.datasource.wizard.service.IXulAsyncDatasourceService; import org.pentaho.platform.dataaccess.datasource.wizard.service.IXulAsyncConnectionService; import org.pentaho.platform.dataaccess.datasource.wizard.service.impl.ConnectionServiceDebugImpl; import org.pentaho.platform.dataaccess.datasource.wizard.service.impl.DatasourceServiceDebugImpl; import org.pentaho.ui.xul.XulDomContainer; import org.pentaho.ui.xul.XulException; import org.pentaho.ui.xul.XulRunner; import org.pentaho.ui.xul.XulServiceCallback; import org.pentaho.ui.xul.binding.BindingFactory; import org.pentaho.ui.xul.binding.DefaultBindingFactory; import org.pentaho.ui.xul.swing.SwingXulLoader; import org.pentaho.ui.xul.swing.SwingXulRunner; public class SwingDatasourceEditor implements IDatasourceEditor { private static Log log = LogFactory.getLog(SwingDatasourceEditor.class); private XulRunner runner; private DatasourceController datasourceController; public SwingDatasourceEditor(final IXulAsyncDatasourceService datasourceService, final IXulAsyncConnectionService connectionService) { try{ XulDomContainer container = new SwingXulLoader().loadXul("org/pentaho/platform/dataaccess/datasource/wizard/public/datasourceEditorDialog.xul"); runner = new SwingXulRunner(); runner.addContainer(container); BindingFactory bf = new DefaultBindingFactory(); bf.setDocument(container.getDocumentRoot()); datasourceController = new DatasourceController(); datasourceController.setBindingFactory(bf); container.addEventHandler(datasourceController); final CsvDatasourceController csvDatasourceController = new CsvDatasourceController(); csvDatasourceController.setBindingFactory(bf); container.addEventHandler(csvDatasourceController); final RelationalDatasourceController relationalDatasourceController = new RelationalDatasourceController(); relationalDatasourceController.setBindingFactory(bf); container.addEventHandler(relationalDatasourceController); final ConnectionController connectionController = new ConnectionController(); container.addEventHandler(connectionController); connectionController.setService(connectionService); datasourceController.setService(datasourceService); connectionService.getConnections(new XulServiceCallback<List<IConnection>>(){ public void error(String message, Throwable error) { System.out.println(error.getLocalizedMessage()); } public void success(List<IConnection> connections) { DatasourceModel datasourceModel = new DatasourceModel(); datasourceModel.getRelationalModel().setConnections(connections); datasourceController.setDatasourceModel(datasourceModel); connectionController.setDatasourceModel(datasourceModel); csvDatasourceController.setDatasourceModel(datasourceModel); relationalDatasourceController.setDatasourceModel(datasourceModel); try{ runner.initialize(); } catch(XulException e){ log.error("error starting Xul application", e); } } }); } catch(XulException e){ log.error("error loading Xul application", e); } } public static void main(String[] args) throws XulException { IXulAsyncConnectionService connectionService = new ConnectionServiceDebugImpl(); IXulAsyncDatasourceService datasourceService = new DatasourceServiceDebugImpl(); SwingDatasourceEditor editor = new SwingDatasourceEditor(datasourceService, connectionService); editor.runner.start(); // shows the root window editor.showDialog(); } /** * Specified by <code>DialogController</code>. */ public void addDialogListener(org.pentaho.ui.xul.util.DialogController.DialogListener<Domain> listener) { datasourceController.addDialogListener(listener); } /** * Specified by <code>DialogController</code>. */ public void hideDialog() { datasourceController.hideDialog(); } /** * Specified by <code>DialogController</code>. */ public void removeDialogListener(org.pentaho.ui.xul.util.DialogController.DialogListener<Domain> listener) { datasourceController.removeDialogListener(listener); } /** * Specified by <code>DialogController</code>. */ public void showDialog() { datasourceController.showDialog(); } public void showEditDialog(String domainId, String modelId) { datasourceController.showEditDialog(domainId, modelId); datasourceController.showDialog(); } }