| /******************************************************************************* |
| * Copyright (c) 2000, 2010 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.update.core; |
| |
| import java.io.*; |
| import java.net.*; |
| import java.util.jar.*; |
| |
| /** |
| * .jar file entry content reference. |
| * <p> |
| * This class may be instantiated or subclassed by clients. |
| * </p> |
| * <p> |
| * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to |
| * change significantly before reaching stability. It is being made available at this early stage to solicit feedback |
| * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken |
| * (repeatedly) as the API evolves. |
| * </p> |
| * @see org.eclipse.update.core.ContentReference |
| * @see org.eclipse.update.core.JarContentReference |
| * @since 2.0 |
| * @deprecated The org.eclipse.update component has been replaced by Equinox p2. |
| * This API will be deleted in a future release. See bug 311590 for details. |
| */ |
| public class JarEntryContentReference extends ContentReference { |
| |
| private JarContentReference jarContentReference; |
| private JarEntry entry; |
| |
| /** |
| * Create jar entry content reference. |
| * |
| * @param id "symbolic" path identifier |
| * @param jarContentReference jar file content reference |
| * @param entry jar entry |
| * @since 2.0 |
| */ |
| public JarEntryContentReference( |
| String id, |
| JarContentReference jarContentReference, |
| JarEntry entry) { |
| super(id, (File) null); |
| this.jarContentReference = jarContentReference; |
| this.entry = entry; |
| } |
| |
| /** |
| * Creates an input stream for the reference. |
| * |
| * @return input stream |
| * @exception IOException unable to create stream |
| * @since 2.0 |
| */ |
| public InputStream getInputStream() throws IOException { |
| return jarContentReference.asJarFile().getInputStream(entry); |
| } |
| |
| /** |
| * Returns the size of the referenced entry. |
| * |
| * @return input size |
| * @since 2.0 |
| */ |
| public long getInputSize() { |
| return entry.getSize(); |
| } |
| |
| /** |
| * Indicates whether the reference is to a an entry within a local jar. |
| * |
| * @return <code>true</code> if the reference is local, |
| * otherwise <code>false</code> |
| * @since 2.0 |
| */ |
| public boolean isLocalReference() { |
| return jarContentReference.isLocalReference(); |
| } |
| |
| /** |
| * Returns the content reference as a URL. |
| * |
| * @return reference as URL |
| * @exception IOException reference cannot be returned as URL |
| * @since 2.0 |
| */ |
| public URL asURL() throws IOException { |
| String fileName = |
| jarContentReference.asFile().getAbsolutePath().replace(File.separatorChar, '/'); |
| return new URL("jar:file:" + fileName + "!/" + entry.getName()); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| |
| /** |
| * Return string representation of this reference. |
| * |
| * @return string representation |
| * @since 2.0 |
| */ |
| public String toString() { |
| URL url; |
| try { |
| url = asURL(); |
| } catch (IOException e) { |
| url = null; |
| } |
| if (url != null) |
| return url.toExternalForm(); |
| else |
| return getClass().getName() + "@" + hashCode(); //$NON-NLS-1$ |
| } |
| } |