
ModeShape Distribution 3.0.0.Beta4  
PREV CLASS NEXT CLASS  FRAMES NO FRAMES  
SUMMARY: NESTED  FIELD  CONSTR  METHOD  DETAIL: FIELD  CONSTR  METHOD 
java.lang.Object org.modeshape.jcr.query.lucene.FieldUtil
public class FieldUtil
Utility for working with Lucene field values.
Method Summary  

static String 
decimalToString(BigDecimal value)
Creates a canonical string representation of the supplied BigDecimal value, whereby all string representations are
lexicographically sortable. 
protected static String 
negate(String value)
Compute the "negated" string, which replaces the digits (0 becomes 9, 1 becomes 8, ... and 9 becomes 0). 
protected static StringBuilder 
negate(StringBuilder value)
Compute the "negated" string, which replaces the digits (0 becomes 9, 1 becomes 8, ... and 9 becomes 0). 
protected static void 
removeTralingZeros(StringBuilder sb)
Utility to remove the trailing 0's. 
static BigDecimal 
stringToDecimal(String value)
Converts the canonical string representation of a BigDecimal value into the object form. 
Methods inherited from class java.lang.Object 

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 
Method Detail 

public static String decimalToString(BigDecimal value)
BigDecimal
value, whereby all string representations are
lexicographically sortable. This makes it possible to store the wide range of values that can be represented by BigDecimal,
while still enabling sorting and range queries.
This canonical form represents all decimal values using a prescribed format, which is based upon Steven Rowe's suggestion but with modifications to handle variablelength exponents (per his suggestion in the last sentence), use spaces between fields on where required (for minimal length), and utilize an optimized (e.g., shorter) form when the value is '0' or the exponent is '0'. Thus, this format contains only digits (e.g., '0'..'9') and the '' and 'A' characters.
<significandsign><exponentsign><exponentlength> <exponent><significand>where:
BigDecimal.unscaledValue()
;value.precision()  value.scale()  1
;<significandsign>
is '' if the significand is negative, '0' if equal to zero, or '1' if positive;
<exponentsign>
is '' if the exponent is negative, '0' if equal to zero, or '1' if positive; if
'0', then the <exponentlength>
and <exponent>
fields are not written;<exponentlength>
is the postive value representing the length of the <exponent>
,
and is not included when the <exponentsign>
is '0';<exponent>
is the integer used to define the number of factors of 10 that are applied to the
significand, obtained by computing value.precision()  value.scale()  1
;<significand>
is the part of the number containing the significant figures, and is a (big) integer
value obtained from the BigDecimal using BigDecimal.unscaledValue()
;<exponentlength>
field is negated such that each digit is replaced
with (base  digit  1)
.
In the case of a negative significand, the <significand>
field is negated such that each digit is replaced
with (base  digit  1)
and appended by 'A' (which is greater than all other digits) to ensure that
significands with greater precision are ordered before those that share significand prefixes but have lesser precision. In
this case, the <exponentlength>
and <exponent>
parts are also negated (unless they already
are).
Thus, the format for a negative BigDecimal value becomes:
<reversedexponentsign><negatedexponentlength> <negatedexponent><significand><sentinel>where the
<sentinel>
is always 'A'. Note that the exponent length field is also negated.
Here are several examples that show BigDecimal values and their corresponding canonical string representation:
+5.E3 => 18 65 +1.E2 => 18 71 +1.0E2 => 18 71 +1.0000E2 => 18 71 +1.1E2 => 18 711 +1.11E2 => 18 7111 +1.2E2 => 18 712 +5.E2 => 18 75 +7.3E+2 => 111 273 +7.4E+2 => 111 274 +7.45E+2 => 111 2745 +8.7654E+3 => 111 387654Here is how a BigDecimal value of
zero
is represented:
0.0E0 => 0BigDecimal values with an exponent of '0' are represented as follows:
+1.2E0 => 1012 1.2E0 => 087AAnd here are some negative value examples:
8.7654E+3 => 8 612345A 7.45E+2 => 8 7254A 7.4E+2 => 8 725A 7.3E+2 => 8 726A 5.E2 => 18 24A 1.2E2 => 18 287A 1.11E2 => 18 2888A 1.1E2 => 18 288A 1.0000E2 => 18 28A 1.0E2 => 18 28A 1.E2 => 18 28A 5.E3 => 18 34A 5.E4 => 18 44A
This canonical form is valid for all values of BigDecimal
.
value
 the value to be converted into its canonical form; may not be null
stringToDecimal(String)
public static BigDecimal stringToDecimal(String value)
BigDecimal
value into the object form.
See decimalToString(BigDecimal)
to documentation of the canonical form.
value
 the canonical string representation; may not be null or empty
decimalToString(BigDecimal)
protected static String negate(String value)
value
 the input string; may not be null
negate(StringBuilder)
protected static StringBuilder negate(StringBuilder value)
value
 the input string; may not be null
negate(String)
protected static void removeTralingZeros(StringBuilder sb)
sb
 the input string builder; may not be null

ModeShape Distribution 3.0.0.Beta4  
PREV CLASS NEXT CLASS  FRAMES NO FRAMES  
SUMMARY: NESTED  FIELD  CONSTR  METHOD  DETAIL: FIELD  CONSTR  METHOD 