blob: 4381fbd22a9713352d5246b25467590640cb6ff6 [file] [log] [blame]
/************************************************************************
*
* 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.odfdom.pkg.rdfa;
import java.net.URI;
import java.net.URISyntaxException;
import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
public class Util {
private static final String SLASH = "/";
/**
* Test whether two QNames are equal to each other. This is a bug fix for
* java-rdfa library. "xhtml:about" and "about" should be considered as
* RDFa, while java-rdfa recognizes only the later one.
*
* @param at
* , the QName of an Attribute
* @param name
* , the QName to be compared
* @return
*/
public static boolean qNameEquals(QName at, QName name) {
if (!name.getNamespaceURI().equals(XMLConstants.DEFAULT_NS_PREFIX)) {
if (at.equals(name)) {
return true;
}
} else if (at.getLocalPart().equals(name.getLocalPart())) {
return true;
}
return false;
}
/**
* Get the RDF base uri of the given internalPath. Note that there would be
* a SLASH at the end of the RDF base uri
*
* @param pkgBaseUri
* , the base uri of the package
* @param internalPath
* , the internalPath relative to the root document
* @return
*/
public static String getRDFBaseUri(String pkgBaseUri, String internalPath) {
String subDirectory = internalPath.lastIndexOf(SLASH) == -1 ? "" : SLASH + internalPath.substring(0, internalPath.lastIndexOf(SLASH));
String baseUri = pkgBaseUri + subDirectory + SLASH;
return baseUri;
}
/**
* To test whether the subPath is a sut path of superPath
*
* @param subPath
* , an internal path in the ODF package
* @param superPath
* , an internal path in the ODF package
* @return
*/
public static boolean isSubPathOf(String subPath, String superPath) {
if (superPath == null || subPath == null) {
return false;
}
return SLASH.equals(superPath) || (subPath.length() > superPath.length() && subPath.startsWith(superPath));
}
/**
* To fix the 3 slashes bug for File URI: For example:
* file:/C:/work/test.txt -> file:///C:/work/test.txt
*
* @param u - the File URI
* @return the String of the URI
*/
public static String toExternalForm(URI u) throws URISyntaxException {
StringBuilder sb = new StringBuilder();
if (u.getScheme() != null) {
sb.append(u.getScheme());
sb.append(':');
}
if (u.isOpaque()) {
sb.append(u.getSchemeSpecificPart());
} else {
if (u.getHost() != null) {
sb.append("//");
if (u.getUserInfo() != null) {
sb.append(u.getUserInfo());
sb.append('@');
}
boolean needBrackets = ((u.getHost().indexOf(':') >= 0) && !u.getHost().startsWith("[") && !u.getHost().endsWith("]"));
if (needBrackets)
sb.append('[');
sb.append(u.getHost());
if (needBrackets)
sb.append(']');
if (u.getPort() != -1) {
sb.append(':');
sb.append(u.getPort());
}
} else if (u.getRawAuthority() != null) {
sb.append("//");
sb.append(u.getRawAuthority());
} else {
sb.append("//");
}
if (u.getRawPath() != null)
sb.append(u.getRawPath());
if (u.getRawQuery() != null) {
sb.append('?');
sb.append(u.getRawQuery());
}
}
if (u.getFragment() != null) {
sb.append('#');
sb.append(u.getFragment());
}
String ret = new URI(sb.toString()).toASCIIString();
return ret;
}
}