Merge branch 'release/5.45.0'
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / jaxb / CdmResourceResolver.java
1 /**
2 * Copyright (C) 2008 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.io.jaxb;
11
12 import java.io.IOException;
13 import java.util.Properties;
14
15 import org.apache.logging.log4j.LogManager;
16 import org.apache.logging.log4j.Logger;
17 import org.apache.xml.resolver.CatalogManager;
18 import org.apache.xml.resolver.tools.CatalogResolver;
19 import org.w3c.dom.ls.LSInput;
20 import org.w3c.dom.ls.LSResourceResolver;
21 import org.xml.sax.InputSource;
22
23 /**
24 * Copied from CATE (@author ben.clark). Not used at this point.
25 */
26 public class CdmResourceResolver implements LSResourceResolver {
27
28 private static final Logger logger = LogManager.getLogger();
29
30 private final CatalogResolver catalogResolver;
31
32 public CdmResourceResolver() throws IOException {
33 Properties properties = new Properties();
34 if(logger.isInfoEnabled()) {
35 logger.info("Loading /CatalogManager.properties");
36 }
37 properties.load(this.getClass().getResourceAsStream("/CatalogManager.properties"));
38
39 String[] catalogFileNames = properties.getProperty("catalogs").split(",");
40
41 CatalogManager catalogManager = new CatalogManager();
42 catalogManager.setRelativeCatalogs(true);
43 catalogResolver = new CatalogResolver(catalogManager);
44
45 for(String catalogFileName : catalogFileNames) {
46 if(logger.isInfoEnabled()) {
47 logger.info("Parsing " + catalogFileName);
48 }
49 catalogResolver.getCatalog().parseCatalog(this.getClass().getResource(catalogFileName));
50 }
51 }
52
53 @Override
54 public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) {
55
56 if(logger.isInfoEnabled()) {
57 logger.info("Resolving " + namespaceURI + " with systemId " + systemId + ", trying " + systemId);
58 }
59 InputSource inputSource = catalogResolver.resolveEntity( publicId, systemId );
60 if ( inputSource == null ) {
61 if(logger.isInfoEnabled()) {
62 logger.info("Not found in filesystem: Looking in jar files for /schema/cdm/" + systemId);
63 }
64 inputSource = new InputSource(this.getClass().getResourceAsStream("/schema/cdm/" + systemId));
65
66 if(inputSource == null) {
67 if(logger.isWarnEnabled()) {
68 logger.warn(namespaceURI + " not found");
69 }
70 return null;
71 }
72 }
73
74 if(logger.isInfoEnabled()) {
75 // log.info("Resource found");
76 }
77 LsInputImpl lsInput = new LsInputImpl();
78 lsInput.setByteStream( inputSource.getByteStream() );
79 lsInput.setCharacterStream( inputSource.getCharacterStream() );
80 lsInput.setPublicId( inputSource.getPublicId() );
81 lsInput.setSystemId( inputSource.getSystemId() );
82 lsInput.setEncoding( inputSource.getEncoding() );
83 return lsInput;
84 }
85
86 }