/* * 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. */ package org.pentaho.pac.client.datasources; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; import org.pentaho.pac.client.PacServiceFactory; import org.pentaho.pac.client.PentahoAdminConsole; import org.pentaho.pac.client.i18n.Messages; import org.pentaho.pac.common.datasources.PentahoDataSource; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.ListBox; public class DataSourcesList extends ListBox { List<PentahoDataSource> dataSources = new ArrayList<PentahoDataSource>(); boolean isInitialized = false; public DataSourcesList() { super(true); } public PentahoDataSource[] getDataSources() { return (PentahoDataSource[])dataSources.toArray(new PentahoDataSource[0]); } public void setDataSources(PentahoDataSource[] dataSources) { if(dataSources != null) { this.dataSources.clear(); this.dataSources.addAll(Arrays.asList(dataSources)); clear(); for (int i = 0; i < dataSources.length; i++) { addItem(dataSources[i].getName()); } isInitialized = true; } } public void setDataSource(int index, PentahoDataSource dataSource) { dataSources.set(index, dataSource); setItemText(index, dataSource.getName()); } public PentahoDataSource[] getSelectedDataSources() { List<PentahoDataSource> selectedDataSources = new ArrayList<PentahoDataSource>(); int itemCount = getItemCount(); for (int i = 0; i < itemCount; i++) { if (isItemSelected(i)) { selectedDataSources.add(dataSources.get(i)); } } return (PentahoDataSource[])selectedDataSources.toArray(new PentahoDataSource[0]); } public void setSelectedDataSource(PentahoDataSource dataSource) { setSelectedDataSources(new PentahoDataSource[]{dataSource}); } public void setSelectedDataSources(PentahoDataSource[] dataSources) { List<String> dataSourceNames = new ArrayList<String>(); for (int i = 0; i < dataSources.length; i++) { dataSourceNames.add(dataSources[i].getName()); } int itemCount = getItemCount(); for (int i = 0; i < itemCount; i++) { setItemSelected(i, dataSourceNames.contains(getItemText(i))); } } public void removeSelectedDataSources() { int numDataSourcesDeleted = 0; int selectedIndex = -1; for (int i = getItemCount() - 1; i >= 0; i--) { if (isItemSelected(i)) { dataSources.remove(i); removeItem(i); numDataSourcesDeleted++; selectedIndex = i; } } if (numDataSourcesDeleted == 1) { if (selectedIndex >= getItemCount()) { selectedIndex = getItemCount() - 1; } if (selectedIndex >= 0) { setItemSelected(selectedIndex, true); } } } public void removeDataSources(PentahoDataSource[] dataSourcesToRemove) { int numDataSourcesDeleted = 0; int selectedIndex = -1; for (int i = getItemCount() - 1; i >= 0; i--) { if (isItemSelected(i)) { selectedIndex = i; } for (int j = 0; j < dataSourcesToRemove.length; j++) { if (dataSources.get(i).equals(dataSourcesToRemove[j])) { dataSources.remove(i); removeItem(i); numDataSourcesDeleted++; } } } if (numDataSourcesDeleted == 1) { if (selectedIndex >= getItemCount()) { selectedIndex = getItemCount() - 1; } if (selectedIndex >= 0) { setItemSelected(selectedIndex, true); } } } public void refresh() { setDataSources(new PentahoDataSource[0]); isInitialized = false; AsyncCallback<PentahoDataSource[]> callback = new AsyncCallback<PentahoDataSource[]>() { public void onSuccess(PentahoDataSource[] result) { setDataSources(result); isInitialized = true; } public void onFailure(Throwable caught) { setDataSources(null); MessageDialogBox errorDialog = new MessageDialogBox(Messages.getString("errorLoadingDataSources"), Messages.getString("dataSourcesRefreshError", caught.getMessage()), false, false, true); //$NON-NLS-1$//$NON-NLS-2$ errorDialog.center(); } }; PacServiceFactory.getPacService().getDataSources(callback); } public boolean addDataSource(PentahoDataSource dataSource) { boolean result = false; boolean dataSourceNameExists = false; for (Iterator<PentahoDataSource> iter = dataSources.iterator(); iter.hasNext() && !dataSourceNameExists;) { PentahoDataSource tmpDataSource = (PentahoDataSource)iter.next(); dataSourceNameExists = tmpDataSource.getName().equals(dataSource.getName()); } if (!dataSourceNameExists) { dataSources.add(dataSource); addItem(dataSource.getName()); result = true; } return result; } public boolean isInitialized() { return isInitialized; } public void clearDataSourcesCache() { setDataSources(new PentahoDataSource[0]); isInitialized = false; } }