106 lines
3.5 KiB
Java
106 lines
3.5 KiB
Java
/* ====================================================================
|
|
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;
|
|
}
|
|
}
|