Source for org.jfree.data.xy.MatrixSeries

   1: /* ===========================================================
   2:  * JFreeChart : a free chart library for the Java(tm) platform
   3:  * ===========================================================
   4:  *
   5:  * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   6:  *
   7:  * Project Info:  http://www.jfree.org/jfreechart/index.html
   8:  *
   9:  * This library is free software; you can redistribute it and/or modify it 
  10:  * under the terms of the GNU Lesser General Public License as published by 
  11:  * the Free Software Foundation; either version 2.1 of the License, or 
  12:  * (at your option) any later version.
  13:  *
  14:  * This library is distributed in the hope that it will be useful, but 
  15:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  16:  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
  17:  * License for more details.
  18:  *
  19:  * You should have received a copy of the GNU Lesser General Public
  20:  * License along with this library; if not, write to the Free Software
  21:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
  22:  * USA.  
  23:  *
  24:  * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
  25:  * in the United States and other countries.]
  26:  *
  27:  * -----------------
  28:  * MatrixSeries.java
  29:  * -----------------
  30:  * (C) Copyright 2003-2005, by Barak Naveh and Contributors.
  31:  *
  32:  * Original Author:  Barak Naveh;;
  33:  * Contributor(s):   David Gilbert (for Object Refinery Limited);
  34:  *                   Zhitao Wang;
  35:  *
  36:  * $Id: MatrixSeries.java,v 1.5.2.1 2005/10/25 21:36:51 mungady Exp $
  37:  *
  38:  * Changes
  39:  * -------
  40:  * 10-Jul-2003 : Version 1 contributed by Barak Naveh (DG);
  41:  * 10-Feb-2004 : Fixed Checkstyle complaints (DG);
  42:  * 21-May-2004 : Fixed bug 940188 - problem in getItemColumn() and 
  43:  *               getItemRow() (DG);
  44:  *
  45:  */
  46: 
  47: package org.jfree.data.xy;
  48: 
  49: import java.io.Serializable;
  50: 
  51: import org.jfree.data.general.Series;
  52: 
  53: /**
  54:  * Represents a dense matrix M[i,j] where each Mij item of the matrix has a
  55:  * value (default is 0).
  56:  *
  57:  * @author Barak Naveh
  58:  */
  59: public class MatrixSeries extends Series implements Serializable {
  60:     
  61:     /** For serialization. */
  62:     private static final long serialVersionUID = 7934188527308315704L;    
  63:     
  64:     /** Series matrix values */
  65:     protected double[][] data;
  66: 
  67:     /**
  68:      * Constructs a new matrix series.
  69:      * <p>
  70:      * By default, all matrix items are initialzed to 0.
  71:      * </p>
  72:      *
  73:      * @param name  series name (<code>null</code> not permitted).
  74:      * @param rows  the number of rows.
  75:      * @param columns  the number of columns.
  76:      */
  77:     public MatrixSeries(String name, int rows, int columns) {
  78:         super(name);
  79:         this.data = new double[rows][columns];
  80:         zeroAll();
  81:     }
  82: 
  83:     /**
  84:      * Returns the number of columns in this matrix series.
  85:      *
  86:      * @return The number of columns in this matrix series.
  87:      */
  88:     public int getColumnsCount() {
  89:         return this.data[0].length;
  90:     }
  91: 
  92: 
  93:     /**
  94:      * Return the matrix item at the specified index.
  95:      *
  96:      * @param itemIndex item index.
  97:      *
  98:      * @return The matrix item at the specified index.
  99:      */
 100:     public Number getItem(int itemIndex) {
 101:         int i = getItemRow(itemIndex);
 102:         int j = getItemColumn(itemIndex);
 103: 
 104:         Number n = new Double(get(i, j));
 105: 
 106:         return n;
 107:     }
 108: 
 109: 
 110:     /**
 111:      * Returns the column of the specified item.
 112:      *
 113:      * @param itemIndex the index of the item.
 114:      *
 115:      * @return The column of the specified item.
 116:      */
 117:     public int getItemColumn(int itemIndex) {
 118:         //assert itemIndex >= 0 && itemIndex < getItemCount();
 119:         return itemIndex % getColumnsCount();
 120:     }
 121: 
 122: 
 123:     /**
 124:      * Returns the number of items in the series.
 125:      *
 126:      * @return The item count.
 127:      */
 128:     public int getItemCount() {
 129:         return getRowCount() * getColumnsCount();
 130:     }
 131: 
 132: 
 133:     /**
 134:      * Returns the row of the specified item.
 135:      *
 136:      * @param itemIndex the index of the item.
 137:      *
 138:      * @return The row of the specified item.
 139:      */
 140:     public int getItemRow(int itemIndex) {
 141:         //assert itemIndex >= 0 && itemIndex < getItemCount();
 142:         return itemIndex / getColumnsCount();
 143:     }
 144: 
 145: 
 146:     /**
 147:      * Returns the number of rows in this matrix series.
 148:      *
 149:      * @return The number of rows in this matrix series.
 150:      */
 151:     public int getRowCount() {
 152:         return this.data.length;
 153:     }
 154: 
 155: 
 156:     /**
 157:      * Returns the value of the specified item in this matrix series.
 158:      *
 159:      * @param i the row of the item.
 160:      * @param j the column of the item.
 161:      *
 162:      * @return The value of the specified item in this matrix series.
 163:      */
 164:     public double get(int i, int j) {
 165:         return this.data[i][j];
 166:     }
 167: 
 168: 
 169:     /**
 170:      * Updates the value of the specified item in this matrix series.
 171:      *
 172:      * @param i the row of the item.
 173:      * @param j the column of the item.
 174:      * @param mij the new value for the item.
 175:      */
 176:     public void update(int i, int j, double mij) {
 177:         this.data[i][j] = mij;
 178:         fireSeriesChanged();
 179:     }
 180: 
 181: 
 182:     /**
 183:      * Sets all matrix values to zero and sends a 
 184:      * {@link org.jfree.data.general.SeriesChangeEvent} to all registered 
 185:      * listeners.
 186:      */
 187:     public void zeroAll() {
 188:         int rows = getRowCount();
 189:         int columns = getColumnsCount();
 190: 
 191:         for (int row = 0; row < rows; row++) {
 192:             for (int column = 0; column < columns; column++) {
 193:                 this.data[row][column] = 0.0;
 194:             }
 195:         }
 196:         fireSeriesChanged();
 197:     }
 198:     
 199:     /**
 200:      * Tests this object instance for equality with an arbitrary object.
 201:      * 
 202:      * @param obj  the object (<code>null</code> permitted).
 203:      * 
 204:      * @return A boolean.
 205:      */
 206:     public boolean equals(Object obj) {
 207:         if (obj == this) {
 208:             return true;   
 209:         }
 210:         if (obj instanceof MatrixSeries && super.equals(obj)) {
 211:             MatrixSeries m = (MatrixSeries) obj;
 212:             if (!(getRowCount() == m.getRowCount())) {
 213:                 return false;
 214:             }
 215:             if (!(getColumnsCount() == m.getColumnsCount())) {
 216:                 return false;   
 217:             }
 218:             return true;   
 219:         }
 220:         return false;
 221:     }
 222:     
 223: }