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. |