/**
* Copyright (c) 2006-2007 IBM Corporation 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:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.ecore.xmi.impl;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.xmi.XMLResource;
/**
* This is the basic implementation of the {@link XMLResource.URIHandler URIHandler} interface.
* Implementations should extend this class to implement a specialized URI handler.
*/
public class URIHandlerImpl implements XMLResource.URIHandler
{
public static class PlatformSchemeAware extends URIHandlerImpl
{
@Override
public URI deresolve(URI uri)
{
return !uri.isPlatform() || (uri.segmentCount() > 0 && baseURI.segmentCount() > 0 && uri.segment(0).equals(baseURI.segment(0))) ?
super.deresolve(uri) : uri;
}
}
protected URI baseURI;
protected boolean resolve;
public void setBaseURI(URI uri)
{
baseURI = uri;
resolve = uri != null && uri.isHierarchical() && !uri.isRelative();
}
public URI resolve(URI uri)
{
return resolve && uri.isRelative() && uri.hasRelativePath() ? uri.resolve(baseURI) : uri;
}
public URI deresolve(URI uri)
{
if (resolve && !uri.isRelative())
{
URI deresolvedURI = uri.deresolve(baseURI, true, true, false);
if (deresolvedURI.hasRelativePath())
{
uri = deresolvedURI;
}
}
return uri;
}
}