001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.cocoon.components.elementprocessor.impl.poi.hssf.elements;
019:
020: import java.io.IOException;
021: import java.text.NumberFormat;
022: import java.text.ParseException;
023: import java.util.Locale;
024:
025: import org.apache.cocoon.CascadingIOException;
026:
027: import org.apache.poi.hssf.usermodel.HSSFCell;
028: import org.apache.poi.hssf.usermodel.HSSFCellStyle;
029:
030: /**
031: * internal representation of a Cell
032: *
033: * @author Marc Johnson (marc_johnson27591@hotmail.com)
034: * @version CVS $Id: Cell.java 433543 2006-08-22 06:22:54Z crossley $
035: */
036: // package scope
037: class Cell {
038: private HSSFCell _cell;
039:
040: // original CellType value
041: private int _celltype;
042: private Locale locale;
043:
044: /**
045: * Constructor Cell.
046: * Only a hack as long as the POI stuff is not maintained in the POI CVS:
047: * Setting the encoding to UTF-16 for internationalization
048: * (<a href="http://jakarta.apache.org/poi/javadocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getEncoding()">POI API</a>).
049: *
050: * @param cell
051: */
052: Cell(final HSSFCell cell, final int cellType) {
053: _cell = cell;
054: _celltype = cellType;
055: _cell.setEncoding(HSSFCell.ENCODING_UTF_16);
056: }
057:
058: /**
059: * if there is a locale that can be used for validation it is
060: * set here. Cell expects a fully constructed locale. It must
061: * be passed in before SetContent can be called.
062: */
063: void setLocale(Locale locale) {
064: this .locale = locale;
065: }
066:
067: /**
068: * set content
069: *
070: * @param content the value of the cell, as a string
071: *
072: * @exception IOException
073: */
074: void setContent(final String content) throws IOException {
075: if (_cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
076: try {
077: if (_celltype == CellType.CELL_TYPE_FLOAT) {
078: // if there is a locale set then we'll use it to parse the
079: // string form of the number... otherwise we'll use the default.
080: NumberFormat form = null;
081: if (locale == null) {
082: form = NumberFormat.getInstance();
083: } else {
084: form = NumberFormat.getInstance(locale);
085: }
086: _cell.setCellValue(form.parse(content)
087: .doubleValue());
088: } else {
089: _cell.setCellValue(Integer.parseInt(content));
090: }
091: } catch (NumberFormatException e) {
092: throw new CascadingIOException(
093: "Invalid value for a numeric cell: " + content,
094: e);
095: } catch (ParseException e) {
096: throw new CascadingIOException(
097: "Invalid value for a numeric cell: " + content,
098: e);
099: }
100: } else if (_cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
101: _cell.setCellValue(content);
102: } else if (_cell.getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
103: _cell.setCellFormula(content.toUpperCase().substring(1));
104: }
105: }
106:
107: void setStyle(HSSFCellStyle style) {
108: if (style != null) {
109: _cell.setCellStyle(style);
110: }
111: }
112:
113: /**
114: * @return cell type
115: */
116: int getCellType() {
117: return _cell.getCellType();
118: }
119:
120: /**
121: * @return string value
122: */
123: String getStringValue() {
124: return _cell.getStringCellValue();
125: }
126:
127: /**
128: * @return numeric value
129: */
130: double getNumericValue() {
131: return _cell.getNumericCellValue();
132: }
133: } // end package scope class Cell
|