| /* |
| * Copyright 2009 Niclas Hedhman. |
| * |
| * Licensed 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.zest.sample.rental.web; |
| |
| import java.io.BufferedInputStream; |
| import java.io.FileNotFoundException; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.util.Properties; |
| import javax.xml.parsers.DocumentBuilder; |
| import org.w3c.dom.DOMImplementation; |
| import org.w3c.dom.bootstrap.DOMImplementationRegistry; |
| import org.w3c.dom.ls.DOMImplementationLS; |
| import org.w3c.dom.ls.LSInput; |
| import org.w3c.dom.ls.LSResourceResolver; |
| import org.xml.sax.EntityResolver; |
| import org.xml.sax.InputSource; |
| import org.xml.sax.SAXException; |
| |
| public class QuikitResolver |
| implements LSResourceResolver, EntityResolver |
| { |
| private Properties local; |
| private final DocumentBuilder builder; |
| |
| public QuikitResolver( DocumentBuilder builder ) |
| { |
| this.builder = builder; |
| local = new Properties(); |
| try |
| { |
| InputStream stream = getClass().getClassLoader().getResourceAsStream( "resolve.properties" ); |
| BufferedInputStream in = new BufferedInputStream( stream ); |
| local.load( in ); |
| } |
| catch( FileNotFoundException e ) |
| { |
| e.printStackTrace(); |
| } |
| catch( IOException e ) |
| { |
| e.printStackTrace(); |
| } |
| } |
| |
| public InputSource resolveEntity( String publicId, String systemId ) |
| throws SAXException, IOException |
| { |
| String resourceName = local.getProperty( publicId ); |
| if( resourceName == null ) |
| { |
| System.out.println( "Not locally available: " + publicId + " " + systemId ); |
| return null; |
| } |
| InputStream in = getClass().getClassLoader().getResourceAsStream( resourceName ); |
| return new InputSource( in ); |
| } |
| |
| public LSInput resolveResource( String type, String namespaceURI, String publicId, String systemId, String baseURI ) |
| { |
| String resourceName = local.getProperty( systemId ); |
| if( resourceName == null ) |
| { |
| System.out.println( "type: " + type ); |
| System.out.println( "namespaceURI: " + namespaceURI ); |
| System.out.println( "publicId: " + publicId ); |
| System.out.println( "systemId: " + systemId ); |
| System.out.println( "baseURI: " + baseURI ); |
| return null; |
| } |
| |
| InputStream resource = getClass().getClassLoader().getResourceAsStream( resourceName ); |
| LSInput input; |
| try |
| { |
| input = getLSInput(); |
| } |
| catch( Exception e ) |
| { |
| throw new UnsupportedOperationException( "Internal problem. Please report to qi4j-dev forum at Google Groups.", e ); |
| } |
| input.setBaseURI( baseURI ); |
| input.setByteStream( resource ); |
| input.setPublicId( publicId ); |
| input.setSystemId( systemId ); |
| return input; |
| } |
| |
| private LSInput getLSInput() throws Exception { |
| DOMImplementationLS impl; |
| DOMImplementation docImpl = builder.getDOMImplementation(); |
| // Try to get the DOMImplementation from doc first before |
| // defaulting to the sun implementation. |
| if (docImpl != null && docImpl.hasFeature("LS", "3.0")) { |
| impl = (DOMImplementationLS)docImpl.getFeature("LS", "3.0"); |
| } else { |
| DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); |
| impl = (DOMImplementationLS)registry.getDOMImplementation("LS"); |
| if (impl == null) { |
| System.setProperty(DOMImplementationRegistry.PROPERTY, |
| "com.sun.org.apache.xerces.internal.dom.DOMImplementationSourceImpl"); |
| registry = DOMImplementationRegistry.newInstance(); |
| impl = (DOMImplementationLS)registry.getDOMImplementation("LS"); |
| } |
| } |
| return impl.createLSInput(); |
| } |
| |
| |
| } |