From d9491993e332545377a8c2429ad579c655827aec Mon Sep 17 00:00:00 2001 From: Vladimir Date: Thu, 3 Aug 2017 17:29:37 +0200 Subject: [PATCH 1/2] Rewrite/Redirect corrections, fixes #10 --- .../protege/xmlcatalog/CatalogUtilities.java | 3 -- .../redirect/UriRedirectVisitor.java | 37 ++++++++----------- .../org/protege/xmlcatalog/ResolveTest.java | 6 +-- src/test/resources/catalog06.xml | 4 +- 4 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/protege/xmlcatalog/CatalogUtilities.java b/src/main/java/org/protege/xmlcatalog/CatalogUtilities.java index f98c095..3913960 100644 --- a/src/main/java/org/protege/xmlcatalog/CatalogUtilities.java +++ b/src/main/java/org/protege/xmlcatalog/CatalogUtilities.java @@ -63,9 +63,6 @@ public static URI getRedirect(URI original, XMLCatalog catalog) { UriRedirectVisitor visitor = new UriRedirectVisitor(original); for (Entry subEntry : catalog.getEntries()) { subEntry.accept(visitor); - if (visitor.getRedirect() != null) { - break; - } } return visitor.getRedirect() == null ? null : visitor.getRedirect(); } diff --git a/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java b/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java index e7b198a..b380b98 100644 --- a/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java +++ b/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java @@ -6,37 +6,26 @@ import org.apache.log4j.Logger; import org.protege.xmlcatalog.EntryVisitor; import org.protege.xmlcatalog.XMLCatalog; -import org.protege.xmlcatalog.entry.DelegatePublicEntry; -import org.protege.xmlcatalog.entry.DelegateSystemEntry; -import org.protege.xmlcatalog.entry.DelegateUriEntry; -import org.protege.xmlcatalog.entry.Entry; -import org.protege.xmlcatalog.entry.GroupEntry; -import org.protege.xmlcatalog.entry.NextCatalogEntry; -import org.protege.xmlcatalog.entry.PublicEntry; -import org.protege.xmlcatalog.entry.RewriteSystemEntry; -import org.protege.xmlcatalog.entry.RewriteUriEntry; -import org.protege.xmlcatalog.entry.SystemEntry; -import org.protege.xmlcatalog.entry.UriEntry; +import org.protege.xmlcatalog.entry.*; public class UriRedirectVisitor implements EntryVisitor { private static Logger log = Logger.getLogger(UriRedirectVisitor.class); private URI original; private URI redirect; + private URI rewritedUri; + private int rewriteBestSize = 0; public UriRedirectVisitor(URI original) { this.original = original; } public URI getRedirect() { - return redirect; + return rewritedUri == null ? redirect : rewritedUri; } public void visit(GroupEntry entry) { for (Entry subEntry : entry.getEntries()) { subEntry.accept(this); - if (redirect != null) { - break; - } } } @@ -68,10 +57,17 @@ public void visit(UriEntry entry) { public void visit(RewriteUriEntry entry) { try { - String originalString = original.toString(); - if (originalString.startsWith(entry.getUriStartString())) { - String suffix = originalString.substring(entry.getUriStartString().length()); - redirect = URI.create(entry.getRewritePrefix().toString() + suffix); + String redirectedUri = redirect == null ? null : redirect.toString(); + if(redirectedUri == null){ + return; + } + if (redirectedUri.startsWith(entry.getUriStartString()) && entry.getUriStartString().length() > rewriteBestSize) { + String suffix = redirectedUri.substring(entry.getUriStartString().length()); + rewritedUri = URI.create(entry.getRewritePrefix().toString() + suffix); + if(!rewritedUri.isAbsolute()){ + rewritedUri = AbstractUriEntry.resolveUriAgainstXmlBase(rewritedUri, entry.getXmlBaseContext()); + } + rewriteBestSize = entry.getUriStartString().length(); } } catch (Throwable e) { @@ -105,9 +101,6 @@ public void visit(NextCatalogEntry entry) { private void visitCatalog(XMLCatalog catalog) { for (Entry subEntry : catalog.getEntries()) { subEntry.accept(this); - if (redirect != null) { - break; - } } } diff --git a/src/test/java/org/protege/xmlcatalog/ResolveTest.java b/src/test/java/org/protege/xmlcatalog/ResolveTest.java index ad197b3..2e7ef27 100644 --- a/src/test/java/org/protege/xmlcatalog/ResolveTest.java +++ b/src/test/java/org/protege/xmlcatalog/ResolveTest.java @@ -70,9 +70,9 @@ public void test05() throws MalformedURLException, IOException, TransformerExcep public void test06() throws MalformedURLException, IOException, TransformerException { readCatalog("src/test/resources/catalog06.xml"); - URI u = URI.create("http://www.tigraworld.com/protege/pizza.owl"); - // Predicting redirect is hard because it's system dependent. Windows adds a "C:". - checkBothAlgorithmsSame(u, true); + URI u = URI.create("http://www.co-ode.org/ontologies/pizza/pizza.owl"); + URI redirect = URI.create("file:/home/tredmond/Shared/ontologies/protege/pizza.owl"); + assertTrue(CatalogUtilities.getRedirect(u, catalog).equals(redirect)); } public void test07() throws TransformerException, MalformedURLException, IOException { diff --git a/src/test/resources/catalog06.xml b/src/test/resources/catalog06.xml index 77b17d8..9ee625b 100644 --- a/src/test/resources/catalog06.xml +++ b/src/test/resources/catalog06.xml @@ -1,6 +1,8 @@ - + + From e570bbf01ca5a4d1b31e8a4d4777aed87eb2b7f0 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Thu, 12 Oct 2017 13:23:20 +0200 Subject: [PATCH 2/2] redirect all URLs, not only UriEntries --- .../org/protege/xmlcatalog/redirect/UriRedirectVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java b/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java index b380b98..e4b21fa 100644 --- a/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java +++ b/src/main/java/org/protege/xmlcatalog/redirect/UriRedirectVisitor.java @@ -59,7 +59,7 @@ public void visit(RewriteUriEntry entry) { try { String redirectedUri = redirect == null ? null : redirect.toString(); if(redirectedUri == null){ - return; + redirectedUri = original.toString(); } if (redirectedUri.startsWith(entry.getUriStartString()) && entry.getUriStartString().length() > rewriteBestSize) { String suffix = redirectedUri.substring(entry.getUriStartString().length());