|
From: <lh...@us...> - 2008-11-27 14:14:23
|
Revision: 239
http://tinytim.svn.sourceforge.net/tinytim/?rev=239&view=rev
Author: lheuer
Date: 2008-11-27 14:14:16 +0000 (Thu, 27 Nov 2008)
Log Message:
-----------
Fixed bug #2353673 -- Locator.resolve returns new Locator objects
Modified Paths:
--------------
tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java
tinytim/trunk/src/main/java/org/tinytim/core/value/LocatorImpl.java
tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteral.java
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-26 16:26:07 UTC (rev 238)
+++ tinytim/trunk/src/main/java/org/tinytim/core/value/Literal.java 2008-11-27 14:14:16 UTC (rev 239)
@@ -38,7 +38,6 @@
*/
public final class Literal implements ILiteral {
- private static final WeakObjectRegistry<LocatorImpl> _IRIS = new WeakObjectRegistry<LocatorImpl>(IConstant.LITERAL_IRI_SIZE);
private static final WeakObjectRegistry<ILiteral> _STRINGS = new WeakObjectRegistry<ILiteral>(IConstant.LITERAL_STRING_SIZE);
private static final WeakObjectRegistry<ILiteral> _OTHERS = new WeakObjectRegistry<ILiteral>(IConstant.LITERAL_OTHER_SIZE);
@@ -57,11 +56,11 @@
return _STRINGS.get(new Literal(value, XSD.STRING));
}
- public static synchronized ILiteral getIRI(String value) {
+ public static ILiteral getIRI(String value) {
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
- return _IRIS.get(new LocatorImpl(value));
+ return LocatorImpl.get(value);
}
public static synchronized ILiteral get(String value, Locator datatype) {
@@ -154,7 +153,7 @@
if (value == null) {
throw new IllegalArgumentException("The value must not be null");
}
- return _registerIfAbsent(_IRIS, new LocatorImpl(value));
+ return LocatorImpl.create(value);
}
public static ILiteral createDecimal(String value) {
Modified: tinytim/trunk/src/main/java/org/tinytim/core/value/LocatorImpl.java
===================================================================
--- tinytim/trunk/src/main/java/org/tinytim/core/value/LocatorImpl.java 2008-11-26 16:26:07 UTC (rev 238)
+++ tinytim/trunk/src/main/java/org/tinytim/core/value/LocatorImpl.java 2008-11-27 14:14:16 UTC (rev 239)
@@ -26,7 +26,10 @@
import java.net.URI;
import java.net.URLDecoder;
+import org.tinytim.internal.api.IConstant;
+import org.tinytim.internal.api.ILiteral;
import org.tinytim.internal.api.ILocator;
+import org.tinytim.internal.utils.WeakObjectRegistry;
import org.tinytim.voc.XSD;
import org.tmapi.core.Locator;
@@ -44,10 +47,11 @@
*/
final class LocatorImpl implements ILocator {
+ private static final WeakObjectRegistry<ILocator> _IRIS = new WeakObjectRegistry<ILocator>(IConstant.LITERAL_IRI_SIZE);
private final URI _uri;
private final String _reference;
- LocatorImpl(String reference) {
+ private LocatorImpl(String reference) {
try {
_reference = URLDecoder.decode(reference, "utf-8");
}
@@ -127,7 +131,7 @@
* @see org.tmapi.core.Locator#resolve(java.lang.String)
*/
public Locator resolve(String reference) {
- return new LocatorImpl(_uri.resolve(reference));
+ return create(_uri.resolve(reference));
}
/* (non-Javadoc)
@@ -161,4 +165,28 @@
return _uri.toString();
}
+ static synchronized ILiteral get(String value) {
+ return _IRIS.get(new LocatorImpl(value));
+ }
+
+ private static synchronized ILocator create(URI value) {
+ ILocator loc = new LocatorImpl(value);
+ final ILocator existing = _IRIS.get(loc);
+ if (existing != null) {
+ return existing;
+ }
+ _IRIS.add(loc);
+ return loc;
+ }
+
+ static synchronized ILocator create(String value) {
+ ILocator loc = new LocatorImpl(value);
+ final ILocator existing = _IRIS.get(loc);
+ if (existing != null) {
+ return existing;
+ }
+ _IRIS.add(loc);
+ return loc;
+ }
+
}
Modified: tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteral.java
===================================================================
--- tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteral.java 2008-11-26 16:26:07 UTC (rev 238)
+++ tinytim/trunk/src/test/java/org/tinytim/core/value/TestLiteral.java 2008-11-27 14:14:16 UTC (rev 239)
@@ -28,6 +28,12 @@
*/
public class TestLiteral extends TinyTimTestCase {
+ public void testLocatorResolve() {
+ Locator base = Literal.createIRI("http://www.semagia.com/");
+ Locator loc1 = base.resolve("#iid");
+ Locator loc2 = base.resolve("#iid");
+ assertSame(loc1, loc2);
+ }
public void testStringGet() {
final String value = "tiny tiny tiny";
@@ -63,7 +69,7 @@
}
public void testIRIEquality() {
- final String value = "http://www.semagia.com/";
+ final String value = "http://www.semagia.com/test-iri-eq";
assertNull(Literal.get(value, XSD.ANY_URI));
final Locator loc = _sys.createLocator(value);
ILiteral lit1 = Literal.create(loc);
@@ -72,7 +78,7 @@
}
public void testIRIEquality2() {
- final String value = "http://www.semagia.net/";
+ final String value = "http://www.semagia.net/test-iri-eq2";
assertNull(Literal.get(value, XSD.ANY_URI));
final Locator loc = _sys.createLocator(value);
ILiteral lit1 = Literal.create(loc);
@@ -81,7 +87,7 @@
}
public void testIRIEquality3() {
- final String value = "http://www.semagia.de/";
+ final String value = "http://www.semagia.de/test-iri-eq3";
assertNull(Literal.get(value, XSD.ANY_URI));
final Locator loc = _sys.createLocator(value);
ILiteral lit1 = Literal.create(value, XSD.ANY_URI);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|