/******************************************************************************* * Copyright (c) 2005, 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 Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jee.archive.internal; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.impl.URIConverterImpl; import org.eclipse.jst.jee.archive.IArchive; import org.eclipse.jst.jee.archive.IArchiveResource; public class ArchiveURIConverter extends URIConverterImpl { private IArchive archive = null; public ArchiveURIConverter(IArchive archive) { this.archive = archive; } public IArchive getArchive() { return archive; } protected Map <URI, IPath> uriToPathMap = new HashMap <URI, IPath>(); protected Map <IPath, URI> pathToURIMap = new HashMap <IPath, URI>(); public final URI getURI(IPath path) { if (!pathToURIMap.containsKey(path)) { URI uri = convertPathToURI(path); uriToPathMap.put(uri, path); pathToURIMap.put(path, uri); return uri; } else { return pathToURIMap.get(path); } } protected URI convertPathToURI(IPath path) { return URI.createURI(path.toString()); } protected IPath convertURIToPath(URI uri) { return new Path(uri.toString()); } public final IPath getPath(URI uri) { if (!uriToPathMap.containsKey(uri)) { IPath path = convertURIToPath(uri); uriToPathMap.put(uri, path); pathToURIMap.put(path, uri); return path; } else { return uriToPathMap.get(uri); } } @Override public InputStream createInputStream(URI uri) throws IOException { IPath path = getPath(uri); IArchiveResource archiveResource = getArchive().getArchiveResource(path); return archiveResource.getInputStream(); } }