From 56e1fdff987eafd3a123f20f00e2ad875e12b1a5 Mon Sep 17 00:00:00 2001 From: Stian Soiland-Reyes Date: Mon, 12 Jan 2015 00:50:38 +0000 Subject: [PATCH 1/2] Added IRIFactoryI.create(java.net.URI) --- .../java/org/apache/jena/iri/IRIFactoryI.java | 16 +++++ .../jena/iri/impl/AbsIRIFactoryImpl.java | 13 ++++ .../test/java/org/apache/jena/iri/TS_IRI.java | 2 + .../org/apache/jena/iri/TestIRIFactory.java | 64 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 jena-iri/src/test/java/org/apache/jena/iri/TestIRIFactory.java diff --git a/jena-iri/src/main/java/org/apache/jena/iri/IRIFactoryI.java b/jena-iri/src/main/java/org/apache/jena/iri/IRIFactoryI.java index 506c1f21716..efdd74bba9f 100644 --- a/jena-iri/src/main/java/org/apache/jena/iri/IRIFactoryI.java +++ b/jena-iri/src/main/java/org/apache/jena/iri/IRIFactoryI.java @@ -18,6 +18,8 @@ package org.apache.jena.iri; +import java.net.URI; + /** * This interface is used for * making new {@link IRI} objects. @@ -103,5 +105,19 @@ public interface IRIFactoryI { * */ IRI create(String s); + /** + * Make a new IRI object (possibly + * including IRI resolution), + * and check it for violations + * of the standards being enforced by the factory. + * This method does not throw exceptions, but + * records all errors and warnings found + * to be queried later using {@link IRI#hasViolation(boolean)} + * and {@link IRI#violations(boolean)}. + * @param uri The URI to use (relative or absolute). + * @return A new IRI object. + * + */ + IRI create(URI uri); } diff --git a/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java b/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java index 4a048bbab69..79d43b6bcc3 100644 --- a/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java +++ b/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java @@ -19,6 +19,8 @@ package org.apache.jena.iri.impl; +import java.net.URI; + import org.apache.jena.iri.IRI ; import org.apache.jena.iri.IRIException ; import org.apache.jena.iri.IRIFactoryI ; @@ -42,6 +44,17 @@ public IRI create(String s) { ); } + @Override + public IRI create(URI uri) { +// TODO: Should a relative URI remain relative IRI? + if (! uri.isAbsolute()) { + IRI relative = create(uri.toASCIIString()); + return create(relative); + } + return create(uri.toASCIIString()); + } + + //@Override @Override public IRI construct(String s) throws IRIException { diff --git a/jena-iri/src/test/java/org/apache/jena/iri/TS_IRI.java b/jena-iri/src/test/java/org/apache/jena/iri/TS_IRI.java index 594cfdac810..03b69bd81f8 100644 --- a/jena-iri/src/test/java/org/apache/jena/iri/TS_IRI.java +++ b/jena-iri/src/test/java/org/apache/jena/iri/TS_IRI.java @@ -31,6 +31,8 @@ public static TestSuite suite() { rslt.addTest(TestMoreExamples.suite()); rslt.addTest(MoreTests.suite()); rslt.addTest(Additional.suite()); + rslt.addTest(TestIRIFactory.suite()); + return rslt; } } diff --git a/jena-iri/src/test/java/org/apache/jena/iri/TestIRIFactory.java b/jena-iri/src/test/java/org/apache/jena/iri/TestIRIFactory.java new file mode 100644 index 00000000000..347b7987623 --- /dev/null +++ b/jena-iri/src/test/java/org/apache/jena/iri/TestIRIFactory.java @@ -0,0 +1,64 @@ +/* + * 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.jena.iri; + +import static org.junit.Assert.assertEquals; + +import java.net.URI; + +import junit.framework.JUnit4TestAdapter; + +import org.junit.Test; + +public class TestIRIFactory { + static public junit.framework.Test suite() { + return new JUnit4TestAdapter(TestIRIFactory.class); + } + + private static IRIFactory iriFactory = IRIFactory.jenaImplementation(); + + @Test + public void createFromURI() throws Exception { + URI uri = URI.create("http://johndoe:secret@example.com:81/page?2#hash"); + IRI iri = iriFactory.create(uri); + assertEquals("http", iri.getScheme()); + assertEquals("johndoe:secret", iri.getRawUserinfo()); + assertEquals("example.com", iri.getRawHost()); + assertEquals(81, iri.getPort()); + assertEquals("/page", iri.getRawPath()); + assertEquals("2", iri.getRawQuery()); + assertEquals("hash", iri.getRawFragment()); + } + + @Test + public void createFromRelativeURI() throws Exception { + URI relative = URI.create("page/deeper.txt?q"); + IRI relativeIri = iriFactory.create(relative); + assertEquals("page/deeper.txt", relativeIri.getRawPath()); + + IRI base = iriFactory.create("http://example.com/relative/path?q=somethingelse"); + IRI absolute = base.create(relative); + assertEquals("http://example.com/relative/page/deeper.txt?q", absolute.toString()); + + URI other = URI.create("http://other.example.net/"); + IRI otherIri = base.create(other); + assertEquals("http://other.example.net/", otherIri.toASCIIString()); + } + + +} From d0c4669a04cdb208759c888d1f0af1520538461e Mon Sep 17 00:00:00 2001 From: Stian Soiland-Reyes Date: Mon, 12 Jan 2015 00:51:27 +0000 Subject: [PATCH 2/2] Probably no need for uri.isAbsolute() special case --- .../java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java b/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java index 79d43b6bcc3..ddd23602f9c 100644 --- a/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java +++ b/jena-iri/src/main/java/org/apache/jena/iri/impl/AbsIRIFactoryImpl.java @@ -46,11 +46,6 @@ public IRI create(String s) { @Override public IRI create(URI uri) { -// TODO: Should a relative URI remain relative IRI? - if (! uri.isAbsolute()) { - IRI relative = create(uri.toASCIIString()); - return create(relative); - } return create(uri.toASCIIString()); }