All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.odftoolkit.odfxsltrunner.ODFURIResolver Maven / Gradle / Ivy

There is a newer version: 1.0.0-BETA1
Show newest version
/**
 * **********************************************************************
 *
 * 

DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * *

Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved. * *

Use is subject to license terms. * *

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. You can also obtain a copy of the License at * http://odftoolkit.org/docs/license.txt * *

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.odftoolkit.odfxsltrunner; import java.net.URI; import java.net.URISyntaxException; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; import javax.xml.transform.stream.StreamSource; import org.odftoolkit.odfdom.pkg.OdfPackage; class ODFURIResolver implements URIResolver { private Logger m_aLogger; private String m_aPackageBase; private String m_aFileEntryPath; private OdfPackage m_aPackage; /** * Creates a new instance of ODFURIResolver * * @param aPackage the package in which the to be resolved URIs are included * @param aPackageBase the package base URI * @param aFileEntryPath the path of the file within the package in which the to be resolved URIs * are included * @param aLogger the logger for error messages */ public ODFURIResolver( OdfPackage aPackage, String aPackageBase, String aFileEntryPath, Logger aLogger) { m_aPackage = aPackage; m_aPackageBase = aPackageBase; m_aFileEntryPath = aFileEntryPath; m_aLogger = aLogger; } /** * resolve an URI * * @param aHRef the URI to be resolved * @param aBase the base URI that is provied by the XSLT transformation */ public Source resolve(String aHRef, String aBase) throws TransformerException { if (aBase.startsWith(m_aPackageBase) && !aHRef.contains(":") && !aHRef.startsWith("/")) { if (aHRef.length() == 0) { try { return new StreamSource( m_aPackage.getInputStream(m_aFileEntryPath), m_aPackageBase + '/' + m_aFileEntryPath); } catch (Exception ex) { m_aLogger.logError(ex.getMessage()); return null; } } StringBuffer aHRefBuffer = new StringBuffer(aHRef); StringBuffer aFileEntryBuffer = new StringBuffer(); if (m_aFileEntryPath.contains("/")) aFileEntryBuffer.append( m_aFileEntryPath.substring(0, m_aFileEntryPath.lastIndexOf('/') + 1)); do { if (aHRefBuffer.substring(0, 2).equals("./")) { aHRefBuffer.delete(0, 2); } else if (aHRefBuffer.toString().equals(".") || aHRefBuffer.toString().equals("..")) { m_aLogger.logError("URIs resolving to directories cannot be resolved: " + aHRef); return null; } else if (aHRefBuffer.substring(0, 3).equals("../")) { aFileEntryBuffer.delete(0, 3); if (aFileEntryBuffer.length() == 0) { aHRefBuffer.insert(0, "./"); try { URI aURI; aURI = new URI(aBase); aURI.resolve(aHRefBuffer.toString()); m_aLogger.logInfo("Resolving " + aHRef + " to " + aURI.toString()); return new StreamSource(aURI.toString()); } catch (URISyntaxException ex) { m_aLogger.logError(ex.getMessage()); return null; } } else { aFileEntryBuffer.delete(0, aFileEntryBuffer.indexOf("/" + 1)); } } else { aHRefBuffer.insert(0, aFileEntryBuffer.toString()); try { String aFileEntryPath = aHRefBuffer.toString(); m_aLogger.logInfo("Resolving " + aHRef + " to package file entry " + aFileEntryPath); return new StreamSource( m_aPackage.getInputStream(aFileEntryPath), m_aPackageBase + '/' + aFileEntryPath); } catch (Exception ex) { m_aLogger.logError(ex.getMessage()); return null; } } } while (true); } return null; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy