/*
* 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.
*
*/
/*
* Row created on 10 décembre 2005
*/
package org.jopendocument.dom.spreadsheet;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Element;
import org.jopendocument.dom.ODDocument;
/**
* A row in a Calc document. This class will only break "repeated" attributes on demand (eg for
* setting a value).
*
* @author Sylvain
* @param <D> type of document
*/
public class Row<D extends ODDocument> extends TableCalcNode<RowStyle, D> {
private final Table<D> parent;
private final int index;
// the same immutable cell instance is repeated, but each MutableCell is only once
// ATTN MutableCell have their index as attribute
private final List<Cell<D>> cells;
Row(Table<D> parent, Element tableRowElem, int index) {
super(parent.getODDocument(), tableRowElem, RowStyle.class);
this.parent = parent;
this.index = index;
this.cells = new ArrayList<>();
for (final Element cellElem : this.getCellElements()) {
addCellElem(cellElem);
}
}
protected final Table<D> getSheet() {
return this.parent;
}
final int getY() { // NO_UCD
return this.index;
}
private void addCellElem(final Element cellElem) {
final Cell<D> cell = new Cell<>(this, cellElem);
this.cells.add(cell);
final String repeatedS = cellElem.getAttributeValue("number-columns-repeated", this.getSheet().getTABLE());
if (repeatedS != null) {
final int toRepeat = Integer.parseInt(repeatedS) - 1;
for (int i = 0; i < toRepeat; i++) {
this.cells.add(cell);
}
}
}
/**
* All cells of this row.
*
* @return cells of this row, only "table-cell" and "covered-table-cell".
*/
@SuppressWarnings("unchecked")
private List<Element> getCellElements() {
// seuls table-cell et covered-table-cell sont légaux
return this.getElement().getChildren();
}
protected final Cell<D> getCellAt(int col) { // NO_UCD
return this.cells.get(col);
}
}