/*! * 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 (c) 2002-2016 Pentaho Corporation.. All rights reserved. */ package org.pentaho.platform.dataaccess.datasource.wizard.models; import org.pentaho.database.model.IDatabaseConnection; import org.pentaho.metadata.model.LogicalModel; import org.pentaho.ui.xul.XulEventSourceAdapter; import org.pentaho.ui.xul.stereotype.Bindable; import java.util.ArrayList; import java.util.List; import java.util.Collections; /** * @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<IDatabaseConnection> connections = new ArrayList<IDatabaseConnection>(); 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<IDatabaseConnection> getConnections() { return connections; } public void addConnection( IDatabaseConnection connection ) { List<IDatabaseConnection> previousValue = getPreviousValue(); connections.add( connection ); this.firePropertyChange( "connections", previousValue, connections ); //$NON-NLS-1$ } public void updateConnection( String oldName, IDatabaseConnection connection ) { List<IDatabaseConnection> previousValue = getPreviousValue(); IDatabaseConnection conn = getConnectionByName( oldName ); if ( conn == null ) { return; } String newName = connection.getName(); conn.setName( newName ); conn.setAccessType( connection.getAccessType() ); conn.setConnectionPoolingProperties( connection.getConnectionPoolingProperties() ); conn.setConnectSql( connection.getConnectSql() ); conn.setDatabaseName( connection.getDatabaseName() ); conn.setDatabasePort( connection.getDatabasePort() ); conn.setDatabaseType( connection.getDatabaseType() ); conn.setDataTablespace( connection.getDataTablespace() ); conn.setForcingIdentifiersToLowerCase( connection.isForcingIdentifiersToLowerCase() ); conn.setForcingIdentifiersToUpperCase( connection.isForcingIdentifiersToUpperCase() ); conn.setHostname( connection.getHostname() ); conn.setIndexTablespace( connection.getIndexTablespace() ); conn.setInformixServername( connection.getInformixServername() ); conn.setInitialPoolSize( connection.getInitialPoolSize() ); conn.setMaximumPoolSize( connection.getMaximumPoolSize() ); conn.setPartitioned( connection.isPartitioned() ); conn.setPartitioningInformation( connection.getPartitioningInformation() ); conn.setPassword( connection.getPassword() ); conn.setQuoteAllFields( connection.isQuoteAllFields() ); conn.setExtraOptions( connection.getExtraOptions() ); conn.setExtraOptionsOrder( connection.getExtraOptionsOrder() ); conn.setStreamingResults( connection.isStreamingResults() ); conn.setUsername( connection.getUsername() ); conn.setUsingConnectionPool( connection.isUsingConnectionPool() ); conn.setUsingDoubleDecimalAsSchemaTableSeparator( connection.isUsingDoubleDecimalAsSchemaTableSeparator() ); //Force an update of any views on the connection list. if ( !oldName.equals( newName ) ) { this.firePropertyChange( "connections", previousValue, Collections.emptyList() ); //$NON-NLS-1$ previousValue = Collections.emptyList(); } this.firePropertyChange( "connections", previousValue, connections ); //$NON-NLS-1$ } public void updateConnection( IDatabaseConnection connection ) { updateConnection( connection.getName(), connection ); } @Bindable private List<IDatabaseConnection> getPreviousValue() { List<IDatabaseConnection> previousValue = new ArrayList<IDatabaseConnection>(); for ( IDatabaseConnection conn : connections ) { previousValue.add( conn ); } return previousValue; } public void deleteConnection( IDatabaseConnection connection ) { List<IDatabaseConnection> previousValue = getPreviousValue(); connections.remove( connections.indexOf( connection ) ); this.firePropertyChange( "connections", previousValue, connections ); //$NON-NLS-1$ } public void deleteConnection( String name ) { for ( IDatabaseConnection connection : connections ) { if ( connection.getName().equals( name ) ) { deleteConnection( connection ); break; } } } @Bindable public void setConnections( List<IDatabaseConnection> value ) { List<IDatabaseConnection> 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 IDatabaseConnection getConnectionByName( String name ) { for ( IDatabaseConnection connection : connections ) { if ( connection.getName().equals( name ) ) { return connection; } } return null; } public Integer getConnectionIndex( IDatabaseConnection conn ) { IDatabaseConnection 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 ); } }