/*! * 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.ui.importing; import java.util.ArrayList; import java.util.List; import org.pentaho.database.model.IDatabaseConnection; import org.pentaho.platform.dataaccess.datasource.utils.DataSourceInfoUtil; import org.pentaho.ui.xul.XulEventSourceAdapter; import org.pentaho.ui.xul.stereotype.Bindable; public class AnalysisImportDialogModel extends XulEventSourceAdapter { private List<IDatabaseConnection> connectionList; private List<ParameterDialogModel> analysisParameters; private String uploadedFile; private IDatabaseConnection connection; private boolean isParameterMode; private ParameterDialogModel selectedAnalysisParameter; public AnalysisImportDialogModel() { connectionList = new ArrayList<IDatabaseConnection>(); analysisParameters = new ArrayList<ParameterDialogModel>(); } public void addParameter( String name, String value ) { if ( selectedAnalysisParameter == null ) { if ( !containsParameter( name ) ) { analysisParameters.add( new ParameterDialogModel( name, value ) ); } } else { selectedAnalysisParameter.setName( name ); selectedAnalysisParameter.setValue( value ); } this.firePropertyChange( "analysisParameters", null, analysisParameters ); } public void removeParameter( int paramIndex ) { selectedAnalysisParameter = null; analysisParameters.remove( paramIndex ); this.firePropertyChange( "analysisParameters", null, analysisParameters ); } public void removeAllParameters() { analysisParameters.clear(); this.firePropertyChange( "analysisParameters", null, analysisParameters ); } public String getUploadedFile() { return uploadedFile; } public void setUploadedFile( String uploadedFile ) { this.uploadedFile = uploadedFile; } @Bindable public List<ParameterDialogModel> getAnalysisParameters() { return analysisParameters; } @Bindable public void setAnalysisParameters( List<ParameterDialogModel> value ) { List<ParameterDialogModel> previousValue = analysisParameters; this.analysisParameters = value; this.firePropertyChange( "analysisParameters", previousValue, value ); } @Bindable public List<IDatabaseConnection> getConnectionList() { return connectionList; } @Bindable public void setConnectionList( List<IDatabaseConnection> value ) { List<IDatabaseConnection> previousValue = connectionList; this.connectionList = value; this.firePropertyChange( "connectionList", previousValue, value ); } @Bindable public IDatabaseConnection getConnection() { return connection; } @Bindable public void setConnection( IDatabaseConnection value ) { IDatabaseConnection previousValue = connection; connection = value; firePropertyChange( "connection", previousValue, value ); } public String getParameters() { String result = ""; if ( isParameterMode ) { String sep = ";"; String eq = "="; String quot = "\""; String value; for ( ParameterDialogModel currentParameter : analysisParameters ) { //add separator if necessary if ( !result.isEmpty() ) { result += sep; } //add name / value pair //Escape is used, because value can contain quotes and it is parse-unsafe. value = DataSourceInfoUtil.escapeQuotes( currentParameter.getValue() ); if ( //if the value is not quoted ( !( value.startsWith( quot ) && value.endsWith( quot ) ) ) //and the value contains the separator && value.contains( sep ) ) { //then quote the value: value = quot + value + quot; } result = result + currentParameter.getName() + eq + value; } } return result; } private boolean containsParameter( String name ) { boolean containsParameter = false; for ( ParameterDialogModel parameter : analysisParameters ) { if ( parameter.getName().equalsIgnoreCase( name ) ) { containsParameter = true; break; } } return containsParameter; } public void setParameterMode( boolean value ) { isParameterMode = value; } public boolean isValid() { boolean isValid = true; if ( isParameterMode ) { isValid = analysisParameters.size() > 0; } return isValid && uploadedFile != null && connection != null; } public void setSelectedAnalysisParameter( int index ) { if ( index > -1 ) { selectedAnalysisParameter = analysisParameters.get( index ); } else { selectedAnalysisParameter = null; } } public ParameterDialogModel getSelectedAnalysisParameter() { return selectedAnalysisParameter; } }