001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Apr 9, 2003
005     * Time: 4:30:17 PM
006     */
007    
008    package EVolve;
009    
010    import java.util.ArrayList;
011    
012    import EVolve.data.DataManager;
013    import EVolve.data.DataSource;
014    
015    public class DataSourceManager {
016        private ArrayList dataManagerList;
017        private ArrayList filterList;
018        private int currentDataSource;
019        private DataManager currentDataManager;
020        private Filter currentFilter;
021    
022        public DataSourceManager(ArrayList dsList) {
023            dataManagerList = new ArrayList();
024            for (int i=0; i<dsList.size(); i++) {
025                DataSource dataSource = (DataSource)dsList.get(i);
026                dataManagerList.add(new DataManager(dataSource));
027            }
028            filterList = new ArrayList();
029            currentDataSource = -1;
030        }
031    
032        public void init() {
033            for (int i=0; i<dataManagerList.size(); i++) {
034                filterList.add(new Filter());
035            }
036            switchDataSource(0);
037        }
038    
039        public int getCurrentDataSourceId() {
040            return currentDataSource;
041        }
042    
043        public void switchDataSource(int selectedDataSourceIndex) {
044            if (currentDataSource == selectedDataSourceIndex) return;
045    
046            currentDataSource = selectedDataSourceIndex;
047            currentDataManager = (DataManager)dataManagerList.get(selectedDataSourceIndex);
048            currentFilter = (Filter)filterList.get(selectedDataSourceIndex);
049            Scene.selectDataSource(currentDataManager, currentFilter);
050        }
051    
052        public ArrayList getDataManagerList() {
053            return dataManagerList;
054        }
055    
056        public boolean addDataSource(String name) {
057            boolean success = false;
058            Object dsource = EVolve.Main.instanciateDataSource(name);
059    
060            if (dsource == null) {
061                Scene.showErrorMessage("EVolve failed to instanciate data source: \"" + name + "\"");
062            } else if (dsource instanceof DataSource) {
063                dataManagerList.add(new DataManager((DataSource)dsource));
064                filterList.add(new Filter());
065                success = true;
066            } else {
067                Scene.showErrorMessage("EVolve> \"" + name + "\" is not a DataSource");
068            }
069            return success;
070        }
071    
072        public String getUsedDataSourceName(int dataSourceId) {
073            DataManager dm = (DataManager)dataManagerList.get(dataSourceId);
074            return dm.getDatasourceName();
075        }
076    
077        public String getCurrentDataSourceName() {
078            return currentDataManager.getDatasourceName();
079        }
080    
081        public DataManager getDataManager(int index) {
082            if (index >= dataManagerList.size()) return null;
083    
084            return (DataManager)dataManagerList.get(index);
085        }
086    
087        public void removeDataSource(int[] tobeMoved) {
088            ArrayList newDMList = new ArrayList();
089            ArrayList newFilterList = new ArrayList();
090    
091            for (int i=0; i<dataManagerList.size(); i++) {
092                boolean remove = false;
093                for (int j=0; j<tobeMoved.length; j++) {
094                    if (i == tobeMoved[j]) {
095                        remove = true;
096                        break;
097                    }
098                }
099                if (!remove) {
100                    newDMList.add(dataManagerList.get(i));
101                    newFilterList.add(filterList.get(i));
102                }
103            }
104    
105            dataManagerList = newDMList;
106            filterList = newFilterList;
107            currentDataSource = 0;
108            currentDataManager = (DataManager)dataManagerList.get(0);
109            currentFilter = (Filter)filterList.get(0);
110            Scene.selectDataSource(currentDataManager, currentFilter);
111        }
112    }