1 /* 2 * Copyright 2012 Olivier Godineau 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at http://www.apache.org/licenses/LICENSE-2.0 7 * 8 * Unless required by applicable law or agreed to in writing, software 9 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 10 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 11 * License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 package olg.csv.base.ods; 15 16 import java.util.List; 17 18 import olg.csv.base.AbstractSheetSettings; 19 import olg.csv.base.ods.ODSReader.ODSCellFormatter; 20 import olg.csv.base.ods.ODSWriter.ODSParser; 21 import olg.csv.bean.formatter.Formatter; 22 import olg.csv.bean.parser.AbstractParser; 23 24 import org.odftoolkit.odfdom.doc.table.OdfTableCell; 25 26 /** 27 * Settings Class for ODS document reading and writing. 28 * 29 * @author Olivier Godineau 30 * 31 * @see ODSWriter 32 * @see ODSReader 33 */ 34 public class ODSSettings extends AbstractSheetSettings<ODSSettings> { 35 /** 36 * Default Emptying row value. 37 * <p> 38 * There's two ways to rewrite an ODS file when rows which are passed are 39 * non-consecutive : 40 * <ul> 41 * <li>Intermediate lines are left as</li> 42 * <li>Intermediate lines are emptied (default behavior)</li> 43 * </ul> 44 * </p> 45 * 46 * @see #setEmptyingRow(boolean) 47 */ 48 public static final boolean DEFAULT_EMPTYINGROW = true; 49 50 /** 51 * Default Emptying cell value. 52 * <p> 53 * There's two ways to rewrite an ODS file when cells which are passed on a 54 * row are non-consecutive : 55 * <ul> 56 * <li>Intermediate cells are left as</li> 57 * <li>Intermediate cells are emptied</li> 58 * </ul> 59 * </p> 60 * 61 * @see #setEmptyingCell(boolean) 62 */ 63 public static final boolean DEFAULT_EMPTYINGCELL = true; 64 65 /** 66 * 67 */ 68 private Formatter<OdfTableCell> cellFormatter = null; 69 /** 70 * 71 */ 72 private AbstractParser<List<String>> stringParser = null; 73 /** 74 * Emptying row value. If true intermediate rows will be emptied. 75 */ 76 private boolean emptyingRow = DEFAULT_EMPTYINGROW; 77 /** 78 * Emptying cell value. If true intermediate cells will be emptied. 79 */ 80 private boolean emptyingCell = DEFAULT_EMPTYINGCELL; 81 82 /** 83 * Purpose default settings. 84 * <ul> 85 * <li>sheetNum = 0</li> 86 * <li>withHeaders = true</li> 87 * <li>beginAtRow = 1</li> 88 * <li>endAtRow = null</li> 89 * <li>beginAtColumn=null</li> 90 * <li><endAtColumn = null</li> 91 * <li>cellFormatter = ODSCellFormatter(\n)</li> 92 * </ul> 93 * 94 * @see ODSReader.ODSCellFormatter 95 */ 96 public ODSSettings() { 97 super(); 98 this.cellFormatter = new ODSCellFormatter("\n"); 99 this.stringParser = new ODSParser(); 100 101 } 102 103 /** 104 * Defines settings for writing process. 105 * 106 * @param sheetName 107 * The name of the Spreadsheet to write on. If the file on which 108 * to write exists and contains a sheet with the specified name, 109 * the writer will write on it otherwise the writer will write on 110 * a new sheet. If the file doesn't exist, the writer create it 111 * and its specified sheet. 112 * @param beginAtRow 113 * specify the first line to begin writing. May be 114 * <code>null</code> 115 * @param beginAtColumn 116 * specify the first column where to begin writing. May be 117 * <code>null</code> 118 * @see ODSReader.ODSCellFormatter ODS Cell Formatter for reading process 119 * which use'\n' character as line separator 120 * @see ODSParser String Parser used for writing process. Define how to 121 * interpret a value as a ODS Cell content. For each line returned by 122 * this parser a paragraph will be created into the cell. 123 */ 124 public ODSSettings(String sheetName, Integer beginAtRow, String beginAtColumn) { 125 super(0, ODSSettings.DEFAULT_WITHHEADERS, beginAtRow, null, beginAtColumn, null, sheetName); 126 this.cellFormatter = new ODSCellFormatter("\n"); 127 this.stringParser = new ODSParser(); 128 } 129 130 /** 131 * Defines settings for writing process. 132 * 133 * @param sheetName 134 * The name of the Spreadsheet to write on. If the file on which 135 * to write exists and contains a sheet with the specified name, 136 * the writer will write on it otherwise the writer will write on 137 * a new sheet. If the file doesn't exist, the writer create it 138 * and its specified sheet. 139 * @see ODSReader.ODSCellFormatter ODS Cell Formatter for reading process 140 * which use'\n' character as line separator 141 * @see ODSParser String Parser used for writing process. Define how to 142 * interpret a value as a ODS Cell content. For each line returned by 143 * this parser a paragraph will be created into the cell. 144 */ 145 public ODSSettings(String sheetName) { 146 super(0, ODSSettings.DEFAULT_WITHHEADERS, null, null, null, null, sheetName); 147 this.cellFormatter = new ODSCellFormatter("\n"); 148 this.stringParser = new ODSParser(); 149 } 150 151 /** 152 * Defines settings for Reading process. 153 * 154 * @param sheetNum 155 * the table name in the document.First is 0. 156 * @param beginAtRow 157 * specify the first line to begin reading. May be 158 * <code>null</code> 159 * @param endAtRow 160 * specify the last line to read. May be <code>null</code> 161 * @param beginAtColumn 162 * specify the first column where to begin reading. May be 163 * <code>null</code> 164 * @param endAtColumn 165 * specify the last column where to end traitment. May be 166 * <code>null</code> 167 * @param withHeaders 168 * indicate if the table has headers. 169 * @see ODSCellFormatter 170 * @see ODSParser 171 */ 172 public ODSSettings(int sheetNum, Integer beginAtRow, Integer endAtRow, String beginAtColumn, String endAtColumn, 173 boolean withHeaders) { 174 super(sheetNum, withHeaders, beginAtRow, endAtRow, beginAtColumn, endAtColumn, null); 175 this.cellFormatter = new ODSCellFormatter("\n"); 176 this.stringParser = new ODSParser(); 177 } 178 179 /** 180 * Defines settings for Reading process. 181 * 182 * @param sheetNum 183 * the table name in the document.First is 0. 184 * @param withHeaders 185 * indicate if the table has headers. 186 * @see ODSCellFormatter 187 * @see ODSParser 188 */ 189 public ODSSettings(int sheetNum, boolean withHeaders) { 190 super(sheetNum, withHeaders, null, null, null, null, null); 191 this.cellFormatter = new ODSCellFormatter("\n"); 192 this.stringParser = new ODSParser(); 193 } 194 195 /** 196 * Returns a cell formatter. This formatter defines how extract cell content 197 * as a string. Especially when cell is composed with paragraphs or line 198 * breaks; Only for reading. 199 * 200 * @see ODSReader.ODSCellFormatter 201 * @return the cell formatter. 202 */ 203 public Formatter<OdfTableCell> getCellFormatter() { 204 return cellFormatter; 205 } 206 207 /** 208 * Sets the cell formatter to use. This formatter define how extract cell 209 * content as a string. Especially when cell is composed with paragraphs or 210 * line breaks; Only for reading. 211 * 212 * @param cellFormatter 213 * the formatter 214 * @return this instance 215 */ 216 public ODSSettings setCellFormatter(Formatter<OdfTableCell> cellFormatter) { 217 this.cellFormatter = cellFormatter; 218 return this; 219 } 220 221 /** 222 * Returns the String parser. This parser defines how to interpret breakline 223 * characters found into a string and returns lines extracted from this 224 * string. {@link ODSWriter} uses this parser to create for each returned 225 * line a paragraph in the ODS Cell(where line breaks are not interpreted), 226 * target of the original string. Only for writing 227 * 228 * @see ODSWriter.ODSParser 229 * @return the string parser 230 */ 231 public AbstractParser<List<String>> getStringParser() { 232 return stringParser; 233 } 234 235 /** 236 * Set the String parser. This parser defines how to interpret breakline 237 * characters found into a string and returns lines extracted from this 238 * string. {@link ODSWriter} uses this parser to create for each returned 239 * line a paragraph in the ODS Cell target of the original string. Only for 240 * writing 241 * 242 * @param stringParser 243 * the parser. 244 * @return this instance 245 * @see ODSWriter.ODSParser 246 */ 247 public ODSSettings setStringParser(AbstractParser<List<String>> stringParser) { 248 this.stringParser = stringParser; 249 return this; 250 } 251 252 /** 253 * Returns the policy on rows rewriting. 254 * 255 * @return true if intermediate lines are emptied 256 * @see #setEmptyingRow(boolean) 257 */ 258 public boolean isEmptyingRow() { 259 return emptyingRow; 260 } 261 262 /** 263 * Sets the policy on rows rewriting. There's two ways to rewrite an ODS 264 * file when rows which are passed are non-consecutive : 265 * <ul> 266 * <li>Intermediate lines are left as</li> 267 * <li>Intermediate lines are emptied (default behavior)</li> 268 * </ul> 269 * Applied only when an existing file is overridden. 270 * 271 * @param emptyingRow 272 * the value to set. 273 * @return the ODSSettings instance. 274 * 275 */ 276 public ODSSettings setEmptyingRow(boolean emptyingRow) { 277 this.emptyingRow = emptyingRow; 278 return this; 279 } 280 281 /** 282 * Returns the policy on cells rewriting. 283 * 284 * @return true if intermediate cells are emptied 285 * @see #setEmptyingCell(boolean) 286 */ 287 public boolean isEmptyingCell() { 288 return emptyingCell; 289 } 290 291 /** 292 * Sets the policy on cells rewriting. There's two ways to rewrite an ODS 293 * file when cells which are passed on a row are non-consecutive : 294 * <ul> 295 * <li>Intermediate cells are left as</li> 296 * <li>Intermediate cells are emptied (default behavior)</li> 297 * </ul> 298 * Applied only when an existing file is overridden. 299 * 300 * @param emptyingCell 301 * the value to set. 302 * @return this instance 303 * 304 */ 305 public ODSSettings setEmptyingCell(boolean emptyingCell) { 306 this.emptyingCell = emptyingCell; 307 return this; 308 } 309 310 }