package org.pentaho.platform.dataaccess.datasource.wizard.sources.query; import org.pentaho.metadata.model.Domain; import org.pentaho.platform.dataaccess.datasource.wizard.IDatasourceSummary; import org.pentaho.platform.dataaccess.datasource.wizard.IWizardDatasource; import org.pentaho.platform.dataaccess.datasource.wizard.IWizardStep; import org.pentaho.platform.dataaccess.datasource.wizard.controllers.MessageHandler; import org.pentaho.platform.dataaccess.datasource.wizard.models.*; import org.pentaho.platform.dataaccess.datasource.wizard.service.IXulAsyncDatasourceService; import org.pentaho.platform.dataaccess.datasource.wizard.service.impl.DatasourceServiceGwtImpl; import org.pentaho.ui.xul.XulDomContainer; import org.pentaho.ui.xul.XulException; import org.pentaho.ui.xul.XulServiceCallback; import org.pentaho.ui.xul.impl.AbstractXulEventHandler; import org.pentaho.ui.xul.stereotype.Bindable; import java.util.Collections; import java.util.List; /** * User: nbaker * Date: 3/26/11 */ public class QueryDatasource extends AbstractXulEventHandler implements IWizardDatasource { private boolean finishable; private QueryPhysicalStep queryStep; private DatasourceModel datasourceModel; private IXulAsyncDatasourceService datasourceService; private IWizardModel wizardModel; public QueryDatasource(IXulAsyncDatasourceService datasourceService, DatasourceModel datasourceModel){ this.datasourceModel = datasourceModel; this.datasourceService = datasourceService; } @Override public void activating() throws XulException { queryStep.activating(); } @Override public void deactivating() { queryStep.deactivate(); } @Override @Bindable public String getName() { return "SQL Query"; //TODO: i18n } @Override public List<IWizardStep> getSteps() { return Collections.singletonList((IWizardStep) queryStep); } @Override public void onFinish(XulServiceCallback<IDatasourceSummary> callback) { String name = datasourceModel.getDatasourceName().replace(".", "_").replace(" ", "_"); String query = datasourceModel.getQuery(); datasourceService.generateQueryDomain(name, query, datasourceModel.getSelectedRelationalConnection(), DatasourceDTOUtil.generateDTO(datasourceModel), callback); } @Override public void init(XulDomContainer container, IWizardModel wizardModel) throws XulException { this.wizardModel = wizardModel; queryStep = new QueryPhysicalStep(datasourceModel, this); container.addEventHandler(queryStep); queryStep.init(wizardModel); } @Override public String getId() { return "SQL-DS"; //To change body of implemented methods use File | Settings | File Templates. } @Override @Bindable public boolean isFinishable() { return finishable; } public void setFinishable(boolean finishable){ boolean prevFinishable = this.finishable; this.finishable = finishable; firePropertyChange("finishable", prevFinishable, finishable); } @Override public void restoreSavedDatasource(Domain previousDomain, final XulServiceCallback<Void> callback) { String serializedDatasource = (String) previousDomain.getLogicalModels().get(0).getProperty("datasourceModel"); datasourceService.deSerializeModelState(serializedDatasource, new XulServiceCallback<DatasourceDTO>() { public void success(DatasourceDTO datasourceDTO) { DatasourceDTO.populateModel(datasourceDTO, datasourceModel); datasourceModel.getGuiStateModel().setDirty(false); // initialize connections if (datasourceModel.getGuiStateModel().getConnections() == null || datasourceModel.getGuiStateModel().getConnections().size() <= 0) { queryStep.reloadConnections(); } wizardModel.setEditing(true); callback.success(null); } public void error(String s, Throwable throwable) { MessageHandler.getInstance().showErrorDialog(MessageHandler.getString("ERROR"), MessageHandler.getString( "DatasourceEditor.ERROR_0002_UNABLE_TO_SHOW_DIALOG", throwable.getLocalizedMessage())); callback.error(s, throwable); } }); } @Override public void reset() { datasourceModel.clearModel(); } }