12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You 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.poi.ss.formula;
-
- /**
- * Used to help optimise cell evaluation result caching by allowing applications to specify which
- * parts of a workbook are <em>final</em>.<br>
- * The term <b>final</b> is introduced here to denote immutability or 'having constant definition'.
- * This classification refers to potential actions (on the evaluated workbook) by the evaluating
- * application. It does not refer to operations performed by the evaluator ({@link
- * WorkbookEvaluator}).<br>
- * <br>
- * <b>General guidelines</b>:
- * <ul>
- * <li>a plain value cell can be marked as 'final' if it will not be changed after the first call
- * to {@link WorkbookEvaluator#evaluate(EvaluationCell)}.
- * </li>
- * <li>a formula cell can be marked as 'final' if its formula will not be changed after the first
- * call to {@link WorkbookEvaluator#evaluate(EvaluationCell)}. This remains true even if changes
- * in dependent values may cause the evaluated value to change.</li>
- * <li>plain value cells should be marked as 'not final' if their plain value value may change.
- * </li>
- * <li>formula cells should be marked as 'not final' if their formula definition may change.</li>
- * <li>cells which may switch between plain value and formula should also be marked as 'not final'.
- * </li>
- * </ul>
- * <b>Notes</b>:
- * <ul>
- * <li>If none of the spreadsheet cells is expected to have its definition changed after evaluation
- * begins, every cell can be marked as 'final'. This is the most efficient / least resource
- * intensive option.</li>
- * <li>To retain freedom to change any cell definition at any time, an application may classify all
- * cells as 'not final'. This freedom comes at the expense of greater memory consumption.</li>
- * <li>For the purpose of these classifications, setting the cached formula result of a cell (for
- * example in {@link org.apache.poi.ss.usermodel.FormulaEvaluator#evaluateFormulaCell(org.apache.poi.ss.usermodel.Cell)})
- * does not constitute changing the definition of the cell.</li>
- * <li>Updating cells which have been classified as 'final' will cause the evaluator to behave
- * unpredictably (typically ignoring the update).</li>
- * </ul>
- *
- * @author Josh Micich
- */
- public interface IStabilityClassifier {
-
- /**
- * Convenience implementation for situations where all cell definitions remain fixed after
- * evaluation begins.
- */
- IStabilityClassifier TOTALLY_IMMUTABLE = new IStabilityClassifier() {
- public boolean isCellFinal(int sheetIndex, int rowIndex, int columnIndex) {
- return true;
- }
- };
-
- /**
- * Checks if a cell's value(/formula) is fixed - in other words - not expected to be modified
- * between calls to the evaluator. (Note - this is an independent concept from whether a
- * formula cell's evaluated value may change during successive calls to the evaluator).
- *
- * @param sheetIndex zero based index into workbook sheet list
- * @param rowIndex zero based row index of cell
- * @param columnIndex zero based column index of cell
- * @return <code>false</code> if the evaluating application may need to modify the specified
- * cell between calls to the evaluator.
- */
- boolean isCellFinal(int sheetIndex, int rowIndex, int columnIndex);
- }
|