/* * Copyright 2007 Pentaho Corporation. All rights reserved. * This software was developed by Pentaho Corporation and is provided under the terms * of the Mozilla Public License, Version 1.1, or any later version. You may not use * this file except in compliance with the license. If you need a copy of the license, * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho * BI Platform. The Initial Developer is Pentaho Corporation. * * Software distributed under the Mozilla Public License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to * the license for the specific language governing your rights and limitations. * * @created Aug 15, 2010 * @author wseyler */ package org.pentaho.platform.dataaccess.datasource.wizard.models; import java.util.ArrayList; import java.util.List; import org.pentaho.metadata.model.Category; import org.pentaho.metadata.model.LogicalColumn; import org.pentaho.metadata.model.LogicalModel; import org.pentaho.platform.dataaccess.datasource.IConnection; import org.pentaho.platform.dataaccess.datasource.wizard.service.IXulAsyncConnectionService; import org.pentaho.ui.xul.XulEventSourceAdapter; import org.pentaho.ui.xul.stereotype.Bindable; /** * @author wseyler * */ //TODO: move this to the Relational Datasource public class GuiStateModel extends XulEventSourceAdapter { private boolean relationalValidated; private boolean relationalPreviewValidated; private boolean relationalApplyValidated; private List<IConnection> connections = new ArrayList<IConnection>(); private String previewLimit = "10"; //$NON-NLS-1$ private List<LogicalModel> logicalModels; private String localeCode; private boolean dataStagingComplete; private FileInfo selectedCsvFile; private boolean dirty = true; private RelationalModelValidationListenerCollection relationalModelValidationListeners; @Bindable public List<IConnection> getConnections() { return connections; } public void addConnection(IConnection connection) { List<IConnection> previousValue = getPreviousValue(); connections.add(connection); this.firePropertyChange("connections", previousValue, connections); //$NON-NLS-1$ } public void updateConnection(IConnection connection) { List<IConnection> previousValue = getPreviousValue(); IConnection conn = getConnectionByName(connection.getName()); conn.setDriverClass(connection.getDriverClass()); conn.setPassword(connection.getPassword()); conn.setUrl(connection.getUrl()); conn.setUsername(connection.getUsername()); this.firePropertyChange("connections", previousValue, connections); //$NON-NLS-1$ } @Bindable private List<IConnection> getPreviousValue() { List<IConnection> previousValue = new ArrayList<IConnection>(); for (IConnection conn : connections) { previousValue.add(conn); } return previousValue; } public void deleteConnection(IConnection connection) { List<IConnection> previousValue = getPreviousValue(); connections.remove(connections.indexOf(connection)); this.firePropertyChange("connections", previousValue, connections); //$NON-NLS-1$ } public void deleteConnection(String name) { for (IConnection connection : connections) { if (connection.getName().equals(name)) { deleteConnection(connection); break; } } } @Bindable public void setConnections(List<IConnection> value) { List<IConnection> previousValue = getPreviousValue(); this.connections = value; this.firePropertyChange("connections", previousValue, value); //$NON-NLS-1$ } @Bindable public String getPreviewLimit() { return previewLimit; } @Bindable public void setPreviewLimit(String value) { String previousVal = this.previewLimit; this.previewLimit = value; this.firePropertyChange("previewLimit", previousVal, value); //$NON-NLS-1$ } public IConnection getConnectionByName(String name) { for (IConnection connection : connections) { if (connection.getName().equals(name)) { return connection; } } return null; } public Integer getConnectionIndex(IConnection conn) { IConnection connection = getConnectionByName(conn.getName()); return connections.indexOf(connection); } @Bindable public boolean isRelationalValidated() { return relationalValidated; } @Bindable private void setRelationalValidated(boolean value) { if(value != this.relationalValidated) { this.relationalValidated = value; this.firePropertyChange("relationalValidated", !value, value); } } public void validateRelational() { setRelationalPreviewValidated(true); setRelationalApplyValidated(true); setRelationalValidated(true); fireRelationalModelValid(); } public void invalidateRelational() { setRelationalPreviewValidated(false); setRelationalApplyValidated(false); setRelationalValidated(false); fireRelationalModelInValid(); } /* * Clears out the model */ @Bindable public void clearModel() { setPreviewLimit("10"); setSelectedCsvFile(null); } public void addRelationalModelValidationListener(IRelationalModelValidationListener listener) { if (relationalModelValidationListeners == null) { relationalModelValidationListeners = new RelationalModelValidationListenerCollection(); } relationalModelValidationListeners.add(listener); } public void removeRelationalListener(IRelationalModelValidationListener listener) { if (relationalModelValidationListeners != null) { relationalModelValidationListeners.remove(listener); } } /** * Fire all current {@link IRelationalModelValidationListener}. */ void fireRelationalModelValid() { if (relationalModelValidationListeners != null) { relationalModelValidationListeners.fireRelationalModelValid(); } } /** * Fire all current {@link IRelationalModelValidationListener}. */ void fireRelationalModelInValid() { if (relationalModelValidationListeners != null) { relationalModelValidationListeners.fireRelationalModelInValid(); } } public void setRelationalPreviewValidated(boolean value) { if (value != this.relationalPreviewValidated) { this.relationalPreviewValidated = value; this.firePropertyChange("relationalPreviewValidated", !value, this.relationalPreviewValidated); } } public boolean isRelationalPreviewValidated() { return this.relationalPreviewValidated; } public boolean isRelationalApplyValidated() { return relationalApplyValidated; } public void setRelationalApplyValidated(boolean value) { if (value != this.relationalApplyValidated) { this.relationalApplyValidated = value; this.firePropertyChange("relationalApplyValidated", !value, this.relationalApplyValidated); } } public List<LogicalModel> getLogicalModels() { return logicalModels; } public void setLogicalModels(List<LogicalModel> logicalModels) { this.logicalModels = logicalModels; } public String getLocaleCode() { return localeCode; } public void setLocaleCode(String localeCode) { this.localeCode = localeCode; } public void setDataStagingComplete(boolean status) { dataStagingComplete = status; } public boolean isDataStagingComplete() { return dataStagingComplete; } public FileInfo getSelectedCsvFile() { return selectedCsvFile; } public void setSelectedCsvFile(FileInfo selectedCsvFile) { this.selectedCsvFile = selectedCsvFile; } @Bindable public boolean isDirty() { return dirty; } @Bindable public void setDirty(boolean dirty) { this.dirty = dirty; firePropertyChange("dirty", null, dirty); } }