/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008 jOpenDocument, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU
* General Public License Version 3 only ("GPL").
* You may not use this file except in compliance with the License.
* You can obtain a copy of the License at http://www.gnu.org/licenses/gpl-3.0.html
* See the License for the specific language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*
*/
package org.jopendocument.model.table;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.jopendocument.model.style.StyleStyle;
/**
*
*/
public class TableTableRow {
static int count = 0;
ArrayList<TableTableCell> allCells;
TableTableCell[] cachedCellsInRange;
int cachedFromCol, cachedToCol = -1;
Vector<TableTableCell> cells = new Vector<TableTableCell>();
int id = 0;
private TableTable table;
protected String tableDefaultCellStyleName;
protected int tableNumberRowsRepeated = 1;
protected String tableStyleName;
protected List<Object> tableTableCellOrTableCoveredTableCell;
protected String tableVisibility;
public TableTableRow() {
this.id = count;
count++;
}
public void addCell(final TableTableCell c) {
this.cells.add(c);
}
/**
* Compute AllCell except the last one
*/
void computeAllCells() {
this.allCells = new ArrayList<TableTableCell>();
for (int index = 0; index < this.cells.size(); index++) {
final TableTableCell c = this.cells.get(index);
// for (TableTableCell c : cells) {
final int colPosition = this.allCells.size();
int repeated = c.getTableNumberColumnsRepeated();
// la derniere colonne n'est repétée que dans la limite de la zone d'impression
// sinon, on s'en coltine des milliers
if (index == this.cells.size() - 1) {
repeated = this.getTable().getPrintStopCol() - this.allCells.size() + 1;
}
for (int i = 0; i < repeated; i++) {
final TableTableColumn col = this.table.getColumnAtPosition(colPosition + i);
final TableTableCell cc = c.cloneCell();
cc.setRowAndColumn(this, col);
this.allCells.add(cc);
}
}
// }}
// System.err.println("Computed:" + allCells.size() + " :" + allCells);
}
public TableTableCell[] getCellsInRange(final int fromCol, final int toCol) {
// System.err.println(this + " " + fromCol + " >" + toCol);
if (this.allCells == null) {
this.computeAllCells();
}
if (this.cachedFromCol == fromCol && this.cachedToCol == toCol) {
return this.cachedCellsInRange;
}
final TableTableCell[] result = new TableTableCell[toCol - fromCol + 1];
int index = 0;
try {
for (int i = fromCol; i <= toCol; i++) {
final TableTableCell e = this.allCells.get(i);
result[index] = e;
index++;
}
} catch (Exception e) {
// TODO: handle exception
}
this.cachedCellsInRange = result;
this.cachedFromCol = fromCol;
this.cachedToCol = toCol;
return result;
}
public int getHeight() {
// FIXME: need to be implemented !!!!!!!!
if (this.getStyle() == null) {
return 4200; // 4.2mm
}
return this.getStyle().getStyleTableRowProperties().getHeight();
}
public StyleStyle getStyle() {
if (this.tableStyleName == null) {
return null;
}
return this.table.getRowStyle(this.tableStyleName);
}
public TableTable getTable() {
return this.table;
}
/**
* Gets the value of the tableDefaultCellStyleName property.
*
* @return possible object is {@link String }
*
*/
public String getTableDefaultCellStyleName() {
return this.tableDefaultCellStyleName;
}
/**
* Gets the value of the tableNumberRowsRepeated property.
*
* @return possible object is {@link String }
*
*/
public int getTableNumberRowsRepeated() {
return this.tableNumberRowsRepeated;
}
/**
* Gets the value of the tableStyleName property.
*
* @return possible object is {@link String }
*
*/
public String getTableStyleName() {
return this.tableStyleName;
}
/**
* Gets the value of the tableTableCellOrTableCoveredTableCell property.
*
* <p>
* This accessor method returns a reference to the live list, not a snapshot. Therefore any
* modification you make to the returned list will be present inside the JAXB object. This is
* why there is not a <CODE>set</CODE> method for the tableTableCellOrTableCoveredTableCell
* property.
*
* <p>
* For example, to add a new item, do as follows:
*
* <pre>
* getTableTableCellOrTableCoveredTableCell().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list {@link TableTableCell }
* {@link TableCoveredTableCell }
*
*
*/
public List<Object> getTableTableCellOrTableCoveredTableCell() {
if (this.tableTableCellOrTableCoveredTableCell == null) {
this.tableTableCellOrTableCoveredTableCell = new ArrayList<Object>();
}
return this.tableTableCellOrTableCoveredTableCell;
}
// public List<TableTableCell> getCells() {
// return cells;
// }
/**
* Gets the value of the tableVisibility property.
*
* @return possible object is {@link String }
*
*/
public String getTableVisibility() {
if (this.tableVisibility == null) {
return "visible";
}
return this.tableVisibility;
}
public String getText() {
String t = "";
for (int index = 0; index < this.cells.size(); index++) {
final TableTableCell c = this.cells.get(index);
t += c.getTextP();
}
return t;
}
public void setTable(final TableTable t) {
this.table = t;
}
/**
* Sets the value of the tableDefaultCellStyleName property.
*
* @param value allowed object is {@link String }
*
*/
public void setTableDefaultCellStyleName(final String value) {
this.tableDefaultCellStyleName = value;
}
/**
* Sets the value of the tableNumberRowsRepeated property.
*
* @param value allowed object is {@link String }
*
*/
public void setTableNumberRowsRepeated(final String value) {
if (value != null) {
this.tableNumberRowsRepeated = Integer.valueOf(value).intValue();
}
}
/**
* Sets the value of the tableStyleName property.
*
* @param value allowed object is {@link String }
*
*/
public void setTableStyleName(final String value) {
this.tableStyleName = value;
}
/**
* Sets the value of the tableVisibility property.
*
* @param value allowed object is {@link String }
*
*/
public void setTableVisibility(final String value) {
this.tableVisibility = value;
}
@Override
public String toString() {
return "TableRow" + this.id;
}
}