|
From: <lh...@us...> - 2008-11-19 13:47:50
|
Revision: 210
http://tinytim.svn.sourceforge.net/tinytim/?rev=210&view=rev
Author: lheuer
Date: 2008-11-19 13:47:44 +0000 (Wed, 19 Nov 2008)
Log Message:
-----------
- Fixed bug in LiteralNormalizer for decimals "9.3" was reported as illegal value
- Added more tests for LiteralNormalizer
Modified Paths:
--------------
tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java
tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java
tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java
tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java
tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java
Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java
===================================================================
--- tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java 2008-11-19 13:45:23 UTC (rev 209)
+++ tinytim/trunk/src/main/java/org/tinytim/core/value/DecimalLiteral.java 2008-11-19 13:47:44 UTC (rev 210)
@@ -101,7 +101,7 @@
*/
@Override
public int hashCode() {
- return _decimal.hashCode();
+ return _lexicalForm.hashCode();
}
/* (non-Javadoc)
Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java
===================================================================
--- tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java 2008-11-19 13:45:23 UTC (rev 209)
+++ tinytim/trunk/src/main/java/org/tinytim/core/value/IntegerLiteral.java 2008-11-19 13:47:44 UTC (rev 210)
@@ -105,7 +105,7 @@
*/
@Override
public int hashCode() {
- return _integer.hashCode();
+ return _lexicalForm.hashCode();
}
/* (non-Javadoc)
Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java
===================================================================
--- tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java 2008-11-19 13:45:23 UTC (rev 209)
+++ tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java 2008-11-19 13:47:44 UTC (rev 210)
@@ -46,28 +46,14 @@
private final Locator _datatype;
private Literal(final String value, final Locator datatype) {
- if (value == null) {
- throw new IllegalArgumentException("The value must not be null");
- }
_value = LiteralNormalizer.normalize(value, datatype);
_datatype = datatype;
}
- /* (non-Javadoc)
- * @see org.tinytim.internal.api.ILiteral#getDatatype()
- */
- public Locator getDatatype() {
- return _datatype;
- }
-
- /* (non-Javadoc)
- * @see org.tinytim.internal.api.ILiteral#getValue()
- */
- public String getValue() {
- return _value;
- }
-
public static synchronized ILiteral get(String value) {
+ if (value == null) {
+ throw new IllegalArgumentException("The value must not be null");
+ }
return _STRINGS.get(new Literal(value, XSD.STRING));
}
@@ -108,7 +94,7 @@
return lit;
}
- public static synchronized ILiteral create(final String value, final Locator datatype) {
+ public static ILiteral create(final String value, final Locator datatype) {
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
@@ -133,7 +119,7 @@
return _registerIfAbsent(_OTHERS, new Literal(value, datatype));
}
- public static synchronized ILiteral create(String value) {
+ public static ILiteral create(String value) {
return _registerIfAbsent(_STRINGS, new Literal(value, XSD.STRING));
}
@@ -164,35 +150,35 @@
return (ILocator) value;
}
- public static synchronized ILocator createIRI(String value) {
+ public static ILocator createIRI(String value) {
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
return _registerIfAbsent(_IRIS, new LocatorImpl(value));
}
- public static synchronized ILiteral createDecimal(String value) {
+ public static ILiteral createDecimal(String value) {
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
return _registerIfAbsent(_OTHERS, new DecimalLiteral(value));
}
- public static synchronized ILiteral createDecimal(BigDecimal value) {
+ public static ILiteral createDecimal(BigDecimal value) {
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
return _registerIfAbsent(_OTHERS, new DecimalLiteral(value));
}
- public static synchronized ILiteral createInteger(String value) {
+ public static ILiteral createInteger(String value) {
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
return _registerIfAbsent(_OTHERS, new IntegerLiteral(value));
}
- public static synchronized ILiteral createInteger(BigInteger value) {
+ public static ILiteral createInteger(BigInteger value) {
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
@@ -204,22 +190,51 @@
: BooleanLiteral.FALSE;
}
+ /* (non-Javadoc)
+ * @see org.tinytim.internal.api.ILiteral#getDatatype()
+ */
+ public Locator getDatatype() {
+ return _datatype;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tinytim.internal.api.ILiteral#getValue()
+ */
+ public String getValue() {
+ return _value;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tinytim.internal.api.ILiteral#decimalValue()
+ */
public BigDecimal decimalValue() {
return new BigDecimal(_value);
}
+ /* (non-Javadoc)
+ * @see org.tinytim.internal.api.ILiteral#integerValue()
+ */
public BigInteger integerValue() {
return new BigInteger(_value);
}
+ /* (non-Javadoc)
+ * @see org.tinytim.internal.api.ILiteral#floatValue()
+ */
public float floatValue() {
return Float.valueOf(_value);
}
+ /* (non-Javadoc)
+ * @see org.tinytim.internal.api.ILiteral#intValue()
+ */
public int intValue() {
return Integer.valueOf(_value);
}
+ /* (non-Javadoc)
+ * @see org.tinytim.internal.api.ILiteral#longValue()
+ */
public long longValue() {
return Long.valueOf(_value);
}
Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java
===================================================================
--- tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java 2008-11-19 13:45:23 UTC (rev 209)
+++ tinytim/trunk/src/main/java/org/tinytim/core/value/LiteralNormalizer.java 2008-11-19 13:47:44 UTC (rev 210)
@@ -66,9 +66,9 @@
public static String normalizeInteger(final String value) {
final String val = value.trim();
- int len = value.length();
+ int len = val.length();
if (len == 0) {
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException("Illegal integer value: " + value);
}
int idx = 0;
boolean negative = false;
@@ -93,7 +93,7 @@
// Check if everything is a digit
for (int i = 0; i < len; i++) {
if (!Character.isDigit(normalized.charAt(i))) {
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException("Illegal integer value: " + value);
}
}
return negative && normalized.charAt(0) != 0 ? '-' + normalized : normalized;
@@ -101,9 +101,9 @@
public static String normalizeDecimal(final String value) {
final String val = value.trim();
- int len = value.length();
+ int len = val.length();
if (len == 0) {
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException("Illegal decimal value: " + value);
}
int idx = 0;
boolean negative = false;
@@ -142,11 +142,13 @@
while (len >= idx && val.charAt(len) == '0') {
len--;
}
- if (len == idx || len < idx) {
+ if (len <= idx) {
normalized.append('0');
}
else {
- while (idx < len) {
+ // idx points to the '.', increment it
+ idx++;
+ while (idx <= len) {
char c = val.charAt(idx);
if (!Character.isDigit(c)) {
throw new IllegalArgumentException("Illegal decimal value: " + value);
Modified: tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java
===================================================================
--- tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java 2008-11-19 13:45:23 UTC (rev 209)
+++ tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteralNormalizer.java 2008-11-19 13:47:44 UTC (rev 210)
@@ -46,6 +46,7 @@
assertEquals("1", LiteralNormalizer.normalizeInteger("00001"));
assertEquals("-1", LiteralNormalizer.normalizeInteger("-1"));
assertEquals("-1", LiteralNormalizer.normalizeInteger("-00001"));
+ assertEquals("-1", LiteralNormalizer.normalizeInteger(" -00001 "));
try {
LiteralNormalizer.normalizeInteger("invalid");
fail("Expected an IllegalArgumentException");
@@ -57,6 +58,7 @@
public void testNormalizeDecimal() {
assertEquals("0.0", LiteralNormalizer.normalizeDecimal("0"));
+ assertEquals("0.0", LiteralNormalizer.normalizeDecimal(" 0 "));
assertEquals("0.0", LiteralNormalizer.normalizeDecimal("-0"));
assertEquals("0.0", LiteralNormalizer.normalizeDecimal("-0.0"));
assertEquals("0.0", LiteralNormalizer.normalizeDecimal("+0.0"));
@@ -65,6 +67,9 @@
assertEquals("10.0", LiteralNormalizer.normalizeDecimal("10"));
assertEquals("-10.0", LiteralNormalizer.normalizeDecimal("-10.00"));
assertEquals("10.0", LiteralNormalizer.normalizeDecimal("+10.00"));
+ assertEquals("9.3", LiteralNormalizer.normalizeDecimal("+9.3"));
+ assertEquals("9.3", LiteralNormalizer.normalizeDecimal("9.3"));
+ assertEquals("-9.3", LiteralNormalizer.normalizeDecimal("-9.3"));
try {
LiteralNormalizer.normalizeDecimal("invalid");
fail("Expected an IllegalArgumentException");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|