/*******************************************************************************
* Copyright (c) 2007, 2013 Symbian Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Andrew Ferguson (Symbian) - Initial implementation
*******************************************************************************/
package org.eclipse.cdt.core.index;
import java.net.URI;
import org.eclipse.cdt.internal.core.index.IndexFileLocation;
import org.eclipse.core.filesystem.URIUtil;
/**
* A IIndexLocationConverter for converting relative paths within an index, by prefixing them
* with the supplied base URI.<p>
* <em>Note: The supplied base URI must end with a forward slash</em>
* <br>
* This location converter is internal-representation-compatible with ResourceContainerRelativeLocationConverter
* @since 4.0
*/
/*
* The associated internal PDOM representation is the relative path (non encoded form)
*/
public class URIRelativeLocationConverter implements IIndexLocationConverter {
private URI baseURI;
/**
* Constructs an URIRelativeLocationConverter which will relative paths
* by prefixing the supplied base URI.
* @param baseURI the URI which will form the absolute base that relative paths
* are concatenated to. <em>Note: It must end with a forward slash</em>.
*/
public URIRelativeLocationConverter(URI baseURI) {
this.baseURI = baseURI;
}
@Override
public IIndexFileLocation fromInternalFormat(String raw) {
String rawPath = URIUtil.toURI(raw).getRawPath();
if (rawPath.length() > 0 && rawPath.charAt(0) == '/')
rawPath= rawPath.substring(1);
URI uri= baseURI.resolve(rawPath);
return new IndexFileLocation(uri, null);
}
@Override
public String toInternalFormat(IIndexFileLocation location) {
URI relative = baseURI.relativize(location.getURI());
return relative.isAbsolute() ? null : relative.getPath();
}
}