/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core.util; import java.io.File; import org.eclipse.emf.common.util.URI; import org.teiid.core.designer.id.UUID; import org.teiid.core.designer.util.CoreArgCheck; /** * @since 8.0 */ public class UriHelper { // ================================================================================== // C O N S T R U C T O R S // ================================================================================== /** * @since 5.0 */ private UriHelper() { super(); } // ================================================================================== // P U B L I C M E T H O D S // ================================================================================== public static URI makeAbsoluteUri(final URI baseUri, final URI theImportUri) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUri); String importUriString = URI.decode(theImportUri.toString()); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return theImportUri; } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return theImportUri; } // Take the import URI and resolve it against the base URI URI importUri = theImportUri; if (baseUri.isHierarchical() && !baseUri.isRelative() && importUri.isRelative()) { importUri = importUri.resolve(baseUri); } return importUri; } public static URI makeAbsoluteUri(final URI baseUri, final String theImportUriString) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUriString); String importUriString = URI.decode(theImportUriString); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return URI.createURI(importUriString); } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return URI.createURI(importUriString); } // If the import URI represents a file-type absolute URI then return it // after removing the "file:" prefix if (importUriString.startsWith("file:")) { //$NON-NLS-1$ return URI.createURI(importUriString); } // Take the import URI and resolve it against the base URI return makeAbsoluteUri(baseUri,URI.createFileURI(importUriString)); } public static String makeAbsolutePath(final URI baseUri, final URI theImportUri) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUri); String importUriString = URI.decode(theImportUri.toString()); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return importUriString; } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return importUriString; } URI importUri = makeAbsoluteUri(baseUri,theImportUri); // Normalize the format of the returned string File f = new File(importUri.toFileString()); return f.getAbsolutePath(); } public static String makeAbsolutePath(final URI baseUri, final String theImportUriString) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUriString); return makeAbsolutePath(baseUri.toFileString(),theImportUriString); } public static String makeAbsolutePath(final String theBaseUriString, final String theImportUriString) { CoreArgCheck.isNotNull(theBaseUriString); CoreArgCheck.isNotNull(theImportUriString); String baseUriString = URI.decode(theBaseUriString); String importUriString = URI.decode(theImportUriString); // Assume that the base URI string represents the absolute path to a file URI baseUri = URI.createFileURI(baseUriString); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return importUriString; } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return importUriString; } // If the import URI represents a file-type absolute URI then return it // after removing the "file:" prefix if (importUriString.startsWith("file:")) { //$NON-NLS-1$ return URI.createURI(importUriString).toFileString(); } // Take the import URI and resolve it against the base URI URI importUri = URI.createFileURI(importUriString); if (baseUri.isHierarchical() && !baseUri.isRelative() && importUri.isRelative()) { importUri = importUri.resolve(baseUri); } // Normalize the format of the returned string File f = new File(importUri.toFileString()); return f.getAbsolutePath(); } public static URI makeRelativeUri(final URI baseUri, final URI theImportUri) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUri); String importUriString = URI.decode(theImportUri.toString()); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return theImportUri; } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return theImportUri; } // Take the import URI and resolve it against the base URI URI importUri = theImportUri; if (importUri.isFile() && !importUri.isRelative()) { if (baseUri != null && !baseUri.isRelative() && baseUri.isHierarchical()) { URI deresolvedURI = importUri.deresolve(baseUri, true, true, false); if (deresolvedURI.hasRelativePath()) { importUri = deresolvedURI; } } } else { importUri = URI.createURI(importUriString); } return importUri; } public static URI makeRelativeUri(final URI baseUri, final String theImportUriString) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUriString); String importUriString = URI.decode(theImportUriString); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return URI.createURI(importUriString); } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return URI.createURI(importUriString); } // Create the appropriate URI for the import string URI importUri = null; if (importUriString.startsWith("file:")) { //$NON-NLS-1$ importUri = URI.createURI(importUriString); } else { importUri = URI.createFileURI(importUriString); } return makeRelativeUri(baseUri,importUri); } public static String makeRelativePath(final URI baseUri, final URI theImportUri) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUri); String importUriString = URI.decode(theImportUri.toString()); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return importUriString; } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return importUriString; } URI importUri = makeRelativeUri(baseUri,theImportUri); return URI.decode(importUri.toString()); } public static String makeRelativePath(final URI baseUri, final String theImportUriString) { CoreArgCheck.isNotNull(baseUri); CoreArgCheck.isNotNull(theImportUriString); return makeRelativePath(baseUri.toFileString(),theImportUriString); } public static String makeRelativePath(final String theBaseUriString, final String theImportUriString) { CoreArgCheck.isNotNull(theBaseUriString); CoreArgCheck.isNotNull(theImportUriString); String baseUriString = URI.decode(theBaseUriString); String importUriString = URI.decode(theImportUriString); // Assume that the base URI string represents the absolute path to a file URI baseUri = URI.createFileURI(baseUriString); // If the import URI represents a remote URL then return it unaltered if (importUriString.startsWith("http:")) { //$NON-NLS-1$ return importUriString; } // If the import URI represents a UUID then return it unaltered if (importUriString.startsWith(UUID.PROTOCOL)) { return importUriString; } // Create the appropriate URI for the import string URI importUri = null; if (importUriString.startsWith("file:")) { //$NON-NLS-1$ importUri = URI.createURI(importUriString); } else { importUri = URI.createFileURI(importUriString); } // Take the import URI and resolve it against the base URI if (importUri.isFile() && !importUri.isRelative()) { if (baseUri != null && !baseUri.isRelative() && baseUri.isHierarchical()) { URI deresolvedURI = importUri.deresolve(baseUri, true, true, false); if (deresolvedURI.hasRelativePath()) { importUri = deresolvedURI; } } } return URI.decode(importUri.toString()); } }