blob: fe8de077bee0183ff5ce5136bca41c5dea270c0a [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.cocoon.components.elementprocessor.impl.poi.hssf.elements;
import java.io.IOException;
import java.util.Locale;
import org.apache.cocoon.components.elementprocessor.ElementProcessor;
import org.apache.cocoon.components.elementprocessor.LocaleAware;
import org.apache.cocoon.components.elementprocessor.types.Attribute;
import org.apache.cocoon.components.elementprocessor.types.NumericConverter;
import org.apache.cocoon.components.elementprocessor.types.NumericResult;
import org.apache.cocoon.components.elementprocessor.types.Validator;
/**
* Implementation of ElementProcessor to handle the "Cell" tag.
* This element has several attributes and may contain other elements.
*
* @author Marc Johnson (marc_johnson27591@hotmail.com)
* @version CVS $Id: EPCell.java,v 1.5 2004/03/05 13:02:03 bdelacretaz Exp $
*/
public class EPCell extends BaseElementProcessor implements LocaleAware {
private Cell _cell;
private NumericResult _col;
private NumericResult _row;
private NumericResult _expr_id;
private NumericResult _cols;
private NumericResult _rows;
private NumericResult _value_type;
private String _value_format;
private boolean _expr_id_fetched;
private boolean _cols_fetched;
private boolean _rows_fetched;
private boolean _value_type_fetched;
private boolean _value_format_fetched;
private static final String _col_attribute = "Col";
private static final String _row_attribute = "Row";
private static final String _expr_id_attribute = "ExprID";
private static final String _cols_attribute = "Cols";
private static final String _rows_attribute = "Rows";
private static final String _value_type_attribute = "ValueType";
private static final String _value_format_attribute = "ValueFormat";
private String locale; // the locale for this EPCell
private static final Validator _cell_type_validator = new Validator() {
public IOException validate(final Number number) {
return CellType.isValid(number.intValue()) ? null : new IOException("\"" + number + "\" is not a legal value");
}
};
/**
* constructor
*/
public EPCell() {
super(null);
_cell = null;
_col = null;
_row = null;
_expr_id = null;
_cols = null;
_rows = null;
_value_type = null;
_value_format = null;
_expr_id_fetched = false;
_cols_fetched = false;
_rows_fetched = false;
_value_type_fetched = false;
_value_format_fetched = false;
}
/**
* @return column
*
* @exception IOException
*/
public int getColumn() throws IOException {
if (_col == null) {
_col = NumericConverter.extractNonNegativeInteger(getValue(_col_attribute));
}
return _col.intValue();
}
/**
* @return row
*
* @exception IOException
*/
public int getRow() throws IOException {
if (_row == null) {
_row = NumericConverter.extractNonNegativeInteger(getValue(_row_attribute));
}
return _row.intValue();
}
/**
* @return expression id
*
* @exception IOException
* @exception NullPointerException
*/
public int getExpressionId() throws IOException, NullPointerException {
if (!_expr_id_fetched) {
String valueString = getValue(_expr_id_attribute);
if (valueString != null) {
_expr_id = NumericConverter.extractPositiveInteger(valueString);
}
_expr_id_fetched = true;
}
return _expr_id.intValue();
}
/**
* @return columns
*
* @exception IOException
* @exception NullPointerException
*/
public int getColumns() throws IOException, NullPointerException {
if (!_cols_fetched) {
String valueString = getValue(_cols_attribute);
if (valueString != null) {
_cols = NumericConverter.extractPositiveInteger(valueString);
}
_cols_fetched = true;
}
return _cols.intValue();
}
/**
* @return rows
*
* @exception IOException
* @exception NullPointerException
*/
public int getRows() throws IOException, NullPointerException {
if (!_rows_fetched) {
String valueString = getValue(_rows_attribute);
if (valueString != null) {
_rows = NumericConverter.extractPositiveInteger(valueString);
}
_rows_fetched = true;
}
return _rows.intValue();
}
/**
* @return cell type as a public member of CellType
*
* @exception IOException
* @exception NullPointerException
*/
public int getCellType() throws IOException, NullPointerException {
if (!_value_type_fetched) {
String valueString = getValue(_value_type_attribute);
if (valueString != null) {
_value_type = NumericConverter.extractInteger(valueString, _cell_type_validator);
}
_value_type_fetched = true;
}
return _value_type.intValue();
}
/**
* @return format string; null if no such attribute
*
* @exception IOException
*/
public String getFormat() throws IOException {
if (!_value_format_fetched) {
_value_format = getValue(_value_format_attribute);
_value_format_fetched = true;
}
return _value_format;
}
/**
* Override of initialize() implementation
*
* @param attributes the array of Attribute instances; may be
* empty, will never be null
* @param parent the parent ElementProcessor; may be null
*
* @exception IOException if anything is wrong
*/
public void initialize(final Attribute[] attributes, final ElementProcessor parent) throws IOException {
super.initialize(attributes, parent);
// default value (when <gmr:Cell> has no ValueType attribute)
int cellType = CellType.CELL_TYPE_FORMULA;
try {
cellType = getCellType();
} catch (NullPointerException ignored) {
}
_cell = getSheet().getRow(getRow()).createCell(getColumn(), cellType);
}
public String getContent() {
String content = getData();
return content;
}
/**
* end processing -- apply content to the cell.
*
* @exception IOException
*/
public void endProcessing() throws IOException {
String content = getContent();
if (content != null && locale != null) {
// if there is a locale then set it (otherwise the default locale
// will be used)
getCell().setLocale(new Locale(locale, locale.toUpperCase()));
}
if (content != null && !content.trim().equals("")) {
getCell().setContent(getContent());
}
}
/**
* override of getCell()
*
* @return the cell
*/
protected Cell getCell() {
return _cell;
}
// from LocaleAware - set the locale for a cell
public void setLocale(String locale) {
this.locale = locale;
}
} // end public class EPCell