src/core/net/sf/basedb/util/bfs/MatrixModel.java

Code
Comments
Other
Rev Date Author Line
5194 04 Dec 09 nicklas 1 /**
5194 04 Dec 09 nicklas 2   $Id$
5194 04 Dec 09 nicklas 3
5194 04 Dec 09 nicklas 4   Copyright (C) 2009 Nicklas Nordborg
5194 04 Dec 09 nicklas 5
5194 04 Dec 09 nicklas 6   This file is part of BASE - BioArray Software Environment.
5194 04 Dec 09 nicklas 7   Available at http://base.thep.lu.se/
5194 04 Dec 09 nicklas 8
5194 04 Dec 09 nicklas 9   BASE is free software; you can redistribute it and/or
5194 04 Dec 09 nicklas 10   modify it under the terms of the GNU General Public License
5194 04 Dec 09 nicklas 11   as published by the Free Software Foundation; either version 3
5194 04 Dec 09 nicklas 12   of the License, or (at your option) any later version.
5194 04 Dec 09 nicklas 13
5194 04 Dec 09 nicklas 14   BASE is distributed in the hope that it will be useful,
5194 04 Dec 09 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
5194 04 Dec 09 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5194 04 Dec 09 nicklas 17   GNU General Public License for more details.
5194 04 Dec 09 nicklas 18
5194 04 Dec 09 nicklas 19   You should have received a copy of the GNU General Public License
5194 04 Dec 09 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5194 04 Dec 09 nicklas 21 */
5194 04 Dec 09 nicklas 22 package net.sf.basedb.util.bfs;
5194 04 Dec 09 nicklas 23
5194 04 Dec 09 nicklas 24 import java.util.ArrayList;
5194 04 Dec 09 nicklas 25 import java.util.List;
5194 04 Dec 09 nicklas 26
5194 04 Dec 09 nicklas 27 /**
5194 04 Dec 09 nicklas 28   A model container for BFS data files. This class is primarily
5194 04 Dec 09 nicklas 29   intended to be used when parsing small data files. It is not
5194 04 Dec 09 nicklas 30   recommended to use this class with large files since it may use too
5194 04 Dec 09 nicklas 31   much memory.
5194 04 Dec 09 nicklas 32   <p>
5194 04 Dec 09 nicklas 33   After parsing data is available as
5194 04 Dec 09 nicklas 34
5194 04 Dec 09 nicklas 35   @author Nicklas
5194 04 Dec 09 nicklas 36   @version 2.15
5194 04 Dec 09 nicklas 37   @base.modified $Date$
5194 04 Dec 09 nicklas 38 */
5194 04 Dec 09 nicklas 39 public class MatrixModel
5194 04 Dec 09 nicklas 40   implements EventHandler
5194 04 Dec 09 nicklas 41 {
5194 04 Dec 09 nicklas 42   
5194 04 Dec 09 nicklas 43   private List<String[]> data;
5194 04 Dec 09 nicklas 44   private int numColumns = -1;
5194 04 Dec 09 nicklas 45
5194 04 Dec 09 nicklas 46   /**
5194 04 Dec 09 nicklas 47     Create a new annotation model.
5194 04 Dec 09 nicklas 48   */
5194 04 Dec 09 nicklas 49   public MatrixModel()
5194 04 Dec 09 nicklas 50   {
5194 04 Dec 09 nicklas 51     this.data = new ArrayList<String[]>();
5194 04 Dec 09 nicklas 52   }
5194 04 Dec 09 nicklas 53   
5194 04 Dec 09 nicklas 54   /*
5194 04 Dec 09 nicklas 55     From the EventHandler interface
5194 04 Dec 09 nicklas 56     --------------------------------
5194 04 Dec 09 nicklas 57   */
5194 04 Dec 09 nicklas 58   @Override
5224 27 Jan 10 nicklas 59   public <T> void handleEvent(EventType<T> eventType, T eventData, BfsParser parser)
5194 04 Dec 09 nicklas 60   {
5194 04 Dec 09 nicklas 61     if (eventType == DataParser.DATA_EVENT)
5194 04 Dec 09 nicklas 62     {
5194 04 Dec 09 nicklas 63       addRow((String[])eventData);
5194 04 Dec 09 nicklas 64     }
5194 04 Dec 09 nicklas 65   }
5194 04 Dec 09 nicklas 66   // ------------------------------------
5194 04 Dec 09 nicklas 67
5194 04 Dec 09 nicklas 68   /**
5194 04 Dec 09 nicklas 69     Add a row of data to the model. The number of array elements
5194 04 Dec 09 nicklas 70     in the array should be the same as the number of columns.
5194 04 Dec 09 nicklas 71   */
5194 04 Dec 09 nicklas 72   public void addRow(String... row)
5194 04 Dec 09 nicklas 73   {
5194 04 Dec 09 nicklas 74     data.add(row);
5194 04 Dec 09 nicklas 75     if (numColumns == -1) numColumns = row.length;
5194 04 Dec 09 nicklas 76   }
5194 04 Dec 09 nicklas 77   
5194 04 Dec 09 nicklas 78   /**
5194 04 Dec 09 nicklas 79     Get the number of columns.
5194 04 Dec 09 nicklas 80   */
5194 04 Dec 09 nicklas 81   public int getColumnCount()
5194 04 Dec 09 nicklas 82   {
5194 04 Dec 09 nicklas 83     return numColumns;
5194 04 Dec 09 nicklas 84   }
5194 04 Dec 09 nicklas 85   
5194 04 Dec 09 nicklas 86   /**
5194 04 Dec 09 nicklas 87     Get the number of rows.
5194 04 Dec 09 nicklas 88   */
5194 04 Dec 09 nicklas 89   public int getRowCount()
5194 04 Dec 09 nicklas 90   {
5194 04 Dec 09 nicklas 91     return data.size();
5194 04 Dec 09 nicklas 92   }
5194 04 Dec 09 nicklas 93   
5194 04 Dec 09 nicklas 94   /**
5194 04 Dec 09 nicklas 95     Get the data element at a given row and column index.
5194 04 Dec 09 nicklas 96     @param rowIndex The row index, a value between 0 and 
5194 04 Dec 09 nicklas 97       {@link #getRowCount()}-1
5194 04 Dec 09 nicklas 98     @param colIndex The column index, a value between
5194 04 Dec 09 nicklas 99       0 and {@link #getColumnCount()}-1
5194 04 Dec 09 nicklas 100     @return The data at the given location
5194 04 Dec 09 nicklas 101   */
5194 04 Dec 09 nicklas 102   public String getData(int rowIndex, int colIndex)
5194 04 Dec 09 nicklas 103   {
5194 04 Dec 09 nicklas 104     String[] row = getRowByIndex(rowIndex);
5194 04 Dec 09 nicklas 105     return row[colIndex];
5194 04 Dec 09 nicklas 106   }
5194 04 Dec 09 nicklas 107   
5194 04 Dec 09 nicklas 108   public String[] getRowByIndex(int rowIndex)
5194 04 Dec 09 nicklas 109   {
5194 04 Dec 09 nicklas 110     return data.get(rowIndex);
5194 04 Dec 09 nicklas 111   }
5194 04 Dec 09 nicklas 112
5194 04 Dec 09 nicklas 113
5194 04 Dec 09 nicklas 114 }