001: package com.calipso.reportgenerator.reportcalculator;
002:
003: import com.calipso.reportgenerator.common.InfoException;
004:
005: import java.util.Iterator;
006: import java.util.ArrayList;
007: import java.util.Collection;
008:
009: /**
010: * User: jbassino
011: * Date: 14-sep-2005
012: * Time: 13:50:44
013: * Esta clase
014: */
015: public class BlockMatrix extends CollectionMatrix {
016:
017: private int size;
018: private String baseFileName;
019: private ArrayList blocksFileNames = new ArrayList();
020: private CollectionMatrix usedPart = new CollectionMatrix();
021: private int blockSize;
022: private int index;
023: //Este valor indica si la matriz que se esta tratando como usedPart esta serializada o no.
024: //En la carga, queda la última matriz sin serializar, y hay que bajarla al empezar a trabajar.
025: private boolean isSerialized = false;
026:
027: public BlockMatrix(int blockSize, String baseFileName) {
028: this .blockSize = blockSize;
029: this .baseFileName = baseFileName;
030: }
031:
032: public int size() {
033: return size;
034: }
035:
036: public void add(Object[] row) throws InfoException {
037: size++;
038: if (usedPart.size() < blockSize) {
039: usedPart.add(row);
040: } else {
041: serialize(usedPart);
042: usedPart = new CollectionMatrix();
043: usedPart.add(row);
044: }
045: }
046:
047: private void serialize(CollectionMatrix usedPart) {
048: String fileName = getFileName();
049: blocksFileNames.add(index, fileName);
050: BlockSerializerThread blockSerializerThread = new BlockSerializerThread(
051: fileName, usedPart);
052: blockSerializerThread.setPriority(Thread.NORM_PRIORITY - 2);
053: blockSerializerThread.start();
054: index++;
055: }
056:
057: private String getFileName() {
058: return baseFileName + "_" + index;
059: }
060:
061: public Iterator iterator() throws InfoException {
062: try {
063: if (!isSerialized) {
064: serialize(usedPart);
065: isSerialized = true;
066: }
067: System.gc();
068: return new BlockMatrixIterator(this );
069: } catch (Exception e) {
070: throw new InfoException(e);
071: }
072: }
073:
074: public boolean isEmpty() {
075: return blocksFileNames.size() == 0;
076: }
077:
078: public ArrayList getFileNames() {
079: return blocksFileNames;
080: }
081:
082: public String getFileName(int index) {
083: return (String) blocksFileNames.get(index);
084: }
085:
086: public int getRowCount() {
087: return size;
088: }
089:
090: public Object getValueAt(int i, int i1)
091: throws IndexOutOfBoundsException {
092: //Este metodo no es implementado porque no se utiliza.
093: throw new NoSuchMethodError();
094: }
095:
096: public Collection getColumValues(int i)
097: throws IndexOutOfBoundsException {
098: //Este metodo no es implementado porque no se utiliza.
099: throw new NoSuchMethodError();
100: }
101:
102: public Collection getRowValues(int i)
103: throws IndexOutOfBoundsException {
104: //Este metodo no es implementado porque no se utiliza.
105: throw new NoSuchMethodError();
106: }
107:
108: public void updateValueAt(int i, int i1, Object object)
109: throws IndexOutOfBoundsException {
110: //Este metodo no es implementado porque no se utiliza.
111: throw new NoSuchMethodError();
112: }
113:
114: }
|