root/src/jomdoc/trunk/src/jomdoc/org/omdoc/jomdoc/util/resolver/JOMDocURIResolvers.java

Revision 2288, 4.0 KB (checked in by dmisev, 17 months ago)

fix warn message

Line 
1/*
2 * JOMDoc - A Java library for OMDoc documents (http://omdoc.org/jomdoc).
3 *
4 * Original author    Dimitar Misev <d.misev@jacobs-university.de>
5 * Web                http://kwarc.info/dmisev/
6 * Created            Feb 6, 2010, 1:48:42 PM
7 *
8 * Filename           $Id$
9 * Revision           $Revision$
10 * Last modified on   $Date$
11 *               by   $Author$
12 *
13 * Copyright (C) 2007,2008 the KWARC group (http://kwarc.info)
14 * Licensed under the GNU Public License v3 (GPL3).
15 * For other licensing contact Michael Kohlhase <m.kohlhase@jacobs-university.de>
16 */
17
18package org.omdoc.jomdoc.util.resolver;
19
20import java.io.InputStream;
21import java.net.URI;
22import java.util.ArrayList;
23import java.util.List;
24import javax.xml.transform.Source;
25import javax.xml.transform.TransformerException;
26import nu.xom.Document;
27import org.omdoc.jomdoc.util.etc.Log;
28import org.omdoc.jomdoc.util.types.Pair;
29
30/**
31 * Register multiple resolvers.
32 *
33 * @author <a href="mailto:d.misev@jacobs-university.de">Dimitar Misev</a>
34 */
35public class JOMDocURIResolvers extends AbstractJOMDocURIResolver {
36
37    private List<JOMDocURIResolver> uriResolvers = new ArrayList<JOMDocURIResolver>();
38
39    private interface Resolve {
40        Object resolve(String href, String base, JOMDocURIResolver resolver) throws ResolveException, TransformerException;
41    }
42
43    public JOMDocURIResolvers(JOMDocURIResolver... resolvers) {
44        super("");
45        for (JOMDocURIResolver r : resolvers) {
46            this.uriResolvers.add(r);
47        }
48    }
49
50    public Pair<? extends InputStream, URI> resolveInputStream(String href, String base) throws ResolveException {
51        try {
52            return (Pair<? extends InputStream, URI>) resolve(href, base, new Resolve() {
53                public Object resolve(String href, String base, JOMDocURIResolver resolver) throws ResolveException {
54                    return resolver.resolveInputStream(href, base);
55                }
56            });
57        } catch (TransformerException ex) {
58            return null;
59        }
60    }
61
62    @Override
63    public Source resolve(String href, String base) throws TransformerException {
64        try {
65            return (Source) resolve(href, base, new Resolve() {
66                public Object resolve(String href, String base, JOMDocURIResolver resolver) throws ResolveException, TransformerException {
67                    return resolver.resolve(href, base);
68                }
69            });
70        } catch (ResolveException ex) {
71            return null;
72        }
73    }
74
75    public Document resolveDocument(String href, String base) throws ResolveException {
76        try {
77            return (Document) resolve(href, base, new Resolve() {
78                public Object resolve(String href, String base, JOMDocURIResolver resolver) throws ResolveException {
79                    return resolver.resolveDocument(href, base);
80                }
81            });
82        } catch (TransformerException ex) {
83            return null;
84        }
85    }
86
87    private Object resolve(String href, String base, Resolve resolve) throws ResolveException, TransformerException {
88        boolean supported = false;
89        for (JOMDocURIResolver resolver : uriResolvers) {
90            if (resolver.isSchemaSupported(href, base, false)) {
91                supported = true;
92                Object res = resolve.resolve(href, base, resolver);
93                if (res != null) {
94                    return res;
95                }
96            }
97        }
98        log(supported, href, base);
99        return null;
100    }
101
102    private void log(boolean supported, String href, String base) {
103        if (!supported) {
104            String uri = base;
105            if (uri == null) {
106                uri = href;
107            }
108            log.warn("URI schema of " + uri + "\nis not supported by these URI resolvers");
109        }
110    }
111
112    public List<JOMDocURIResolver> getUriResolvers() {
113        return uriResolvers;
114    }
115
116    public void setUriResolvers(List<JOMDocURIResolver> uriResolvers) {
117        this.uriResolvers = uriResolvers;
118    }
119}
Note: See TracBrowser for help on using the browser.