View Javadoc
1   /*
2    * The baseCode project
3    * 
4    * Copyright (c) 2006 University of British Columbia
5    * 
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *       http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   *
18   */
19  package ubic.basecode.dataStructure.matrix;
20  
21  import java.util.List;
22  
23  import org.apache.commons.lang3.StringUtils;
24  
25  import cern.colt.matrix.ObjectMatrix1D;
26  import cern.colt.matrix.impl.DenseObjectMatrix2D;
27  
28  /**
29   * A NamedMatrix containing String objects.
30   * 
31   * @author Paul Pavlidis
32   * 
33   */
34  public class StringMatrix<R, C> extends AbstractMatrix<R, C, String> implements ObjectMatrix<R, C, String> {
35  
36      /**
37       * @param columns
38       * @return
39       */
40      @Override
41      public ObjectMatrix<R, C, String> subsetColumns( List<C> columns ) {
42          StringMatrix<R, C> returnval = new StringMatrix<R, C>( this.rows(), columns.size() );
43          returnval.setRowNames( this.getRowNames() );
44          for ( int i = 0; i < this.rows(); i++ ) {
45              int currentColumn = 0;
46              for ( C c : columns ) {
47                  int j = this.getColIndexByName( c );
48  
49                  returnval.set( i, currentColumn, this.get( i, j ) );
50  
51                  if ( i == 0 ) {
52                      returnval.setColumnName( c, currentColumn );
53                  }
54                  currentColumn++;
55  
56              }
57          }
58          return returnval;
59      }
60  
61      /**
62       * 
63       */
64      private static final long serialVersionUID = -7369003979104984162L;
65      private DenseObjectMatrix2D matrix;
66  
67      public StringMatrix( int x, int y ) {
68          super();
69          matrix = new DenseObjectMatrix2D( x, y );
70      }
71  
72      /**
73       * @return
74       */
75      @Override
76      public int columns() {
77          return matrix.columns();
78      }
79  
80      /**
81       * @param row
82       * @param column
83       * @return
84       */
85      @Override
86      public String get( int row, int column ) {
87          return ( String ) matrix.get( row, column );
88      }
89  
90      /*
91       * (non-Javadoc)
92       * 
93       * @see ubic.basecode.dataStructure.matrix.NamedObjectMatrix#get(java.lang.Object, java.lang.Object)
94       */
95      public String get( R row, C column ) {
96          return this.get( this.getRowIndexByName( row ), this.getColIndexByName( column ) );
97      }
98  
99      @Override
100     public String getByKeys( R r, C c ) {
101         return this.get( getRowIndexByName( r ), getColIndexByName( c ) );
102     }
103 
104     public String[] getColObj( int col ) {
105         String[] result = new String[rows()];
106         for ( int i = 0; i < rows(); i++ ) {
107             result[i] = get( i, col );
108         }
109         return result;
110     }
111 
112     @Override
113     public String[] getColumn( int col ) {
114         String[] result = new String[rows()];
115         for ( int i = 0; i < rows(); i++ ) {
116             result[i] = get( i, col );
117         }
118         return result;
119     }
120 
121     @Override
122     public String getEntry( int row, int column ) {
123         return get( row, column );
124     }
125 
126     public String getObject( int row, int col ) {
127         return get( row, col );
128     }
129 
130     @Override
131     public String[] getRow( int row ) {
132         String[] result = new String[columns()];
133         for ( int i = 0; i < columns(); i++ ) {
134             result[i] = get( row, i );
135         }
136         return result;
137     }
138 
139     /**
140      * Strings are considered missing if they are whitespace, null or empty.
141      */
142     @Override
143     public boolean isMissing( int i, int j ) {
144         return StringUtils.isBlank( get( i, j ) );
145     }
146 
147     /**
148      * @return
149      */
150     @Override
151     public int rows() {
152         return matrix.rows();
153     }
154 
155     /**
156      * @param row
157      * @param column
158      * @param value
159      */
160     @Override
161     public void set( int row, int column, String value ) {
162         matrix.set( row, column, value );
163     }
164 
165     /*
166      * (non-Javadoc)
167      * 
168      * @see ubic.basecode.dataStructure.matrix.NamedMatrix#set(java.lang.Object, java.lang.Object, java.lang.Object)
169      */
170     @Override
171     public void setByKeys( R r, C c, String v ) {
172         this.set( getRowIndexByName( r ), getColIndexByName( c ), v );
173     }
174 
175     /**
176      * @return
177      */
178     @Override
179     public int size() {
180         return matrix.size();
181     }
182 
183     @Override
184     public ObjectMatrix<R, C, String> subset( int startRow, int startCol, int numRow, int numCol ) {
185         int endRow = startRow + numRow - 1;
186         super.checkRowRange( startRow, endRow );
187         int endCol = startCol + numCol - 1;
188         super.checkColRange( startCol, endCol );
189         ObjectMatrix<R, C, String> result = new StringMatrix<R, C>( numRow, numCol );
190         int r = 0;
191         for ( int i = startRow; i <= endRow; i++ ) {
192             int c = 0;
193             result.setRowName( this.getRowName( i ), r );
194             for ( int j = startCol; j <= endCol; j++ ) {
195                 if ( r == 0 ) {
196                     result.setColumnName( this.getColName( j ), c );
197                 }
198                 result.set( r, c++, this.get( i, j ) );
199             }
200             r++;
201         }
202 
203         return result;
204 
205     }
206 
207     /**
208      * @return java.lang.String
209      */
210     @Override
211     public String toString() {
212         StringBuffer buf = new StringBuffer();
213         buf.append( "label" );
214         for ( int i = 0; i < columns(); i++ ) {
215             buf.append( "\t" + getColName( i ) );
216         }
217         buf.append( "\n" );
218 
219         for ( int i = 0; i < rows(); i++ ) {
220             buf.append( getRowName( i ) );
221             for ( int j = 0; j < columns(); j++ ) {
222                 buf.append( "\t" + get( i, j ) );
223             }
224             buf.append( "\n" );
225         }
226         return buf.toString();
227     }
228 
229     /**
230      * @param column
231      * @return
232      */
233     public ObjectMatrix1D viewColumn( int column ) {
234         return matrix.viewColumn( column );
235     }
236 
237     /**
238      * @param row
239      * @return
240      */
241     public ObjectMatrix1D viewRow( int row ) {
242         return matrix.viewRow( row );
243     }
244 
245 }