| /* ==================================================================== |
| 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.format; |
| |
| import org.apache.poi.ss.format.CellNumberFormatter.Special; |
| import org.apache.poi.util.Internal; |
| |
| /** |
| * Internal helper class for CellNumberFormatter |
| * |
| * This class represents a single modification to a result string. The way |
| * this works is complicated, but so is numeric formatting. In general, for |
| * most formats, we use a DecimalFormat object that will put the string out |
| * in a known format, usually with all possible leading and trailing zeros. |
| * We then walk through the result and the original format, and note any |
| * modifications that need to be made. Finally, we go through and apply |
| * them all, dealing with overlapping modifications. |
| */ |
| @Internal |
| public class CellNumberStringMod implements Comparable<CellNumberStringMod> { |
| public static final int BEFORE = 1; |
| public static final int AFTER = 2; |
| public static final int REPLACE = 3; |
| |
| private final Special special; |
| private final int op; |
| private CharSequence toAdd; |
| private Special end; |
| private boolean startInclusive; |
| private boolean endInclusive; |
| |
| public CellNumberStringMod(Special special, CharSequence toAdd, int op) { |
| this.special = special; |
| this.toAdd = toAdd; |
| this.op = op; |
| } |
| |
| public CellNumberStringMod(Special start, boolean startInclusive, Special end, boolean endInclusive, char toAdd) { |
| this(start, startInclusive, end, endInclusive); |
| this.toAdd = toAdd + ""; |
| } |
| |
| public CellNumberStringMod(Special start, boolean startInclusive, Special end, boolean endInclusive) { |
| special = start; |
| this.startInclusive = startInclusive; |
| this.end = end; |
| this.endInclusive = endInclusive; |
| op = REPLACE; |
| toAdd = ""; |
| } |
| |
| @Override |
| public int compareTo(CellNumberStringMod that) { |
| int diff = special.pos - that.special.pos; |
| return (diff != 0) ? diff : (op - that.op); |
| } |
| |
| @Override |
| public boolean equals(Object that) { |
| return (that instanceof CellNumberStringMod) && compareTo((CellNumberStringMod) that) == 0; |
| } |
| |
| @Override |
| public int hashCode() { |
| return special.hashCode() + op; |
| } |
| |
| public Special getSpecial() { |
| return special; |
| } |
| |
| public int getOp() { |
| return op; |
| } |
| |
| public CharSequence getToAdd() { |
| return toAdd; |
| } |
| |
| public Special getEnd() { |
| return end; |
| } |
| |
| public boolean isStartInclusive() { |
| return startInclusive; |
| } |
| |
| public boolean isEndInclusive() { |
| return endInclusive; |
| } |
| } |