001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.xbean.osgi.bundle.util.jar; 018 019 import java.io.IOException; 020 import java.net.URL; 021 import java.security.cert.Certificate; 022 import java.util.jar.Attributes; 023 import java.util.jar.JarEntry; 024 import java.util.jar.Manifest; 025 import java.util.zip.ZipEntry; 026 027 /** 028 * @version $Rev: 937957 $ $Date: 2010-04-26 10:00:08 +0200 (Mon, 26 Apr 2010) $ 029 */ 030 public class BundleJarEntry extends JarEntry { 031 private final URL entryURL; 032 private final Manifest manifest; 033 034 public BundleJarEntry(String name, URL entryURL, Manifest manifest) { 035 super(removeSlash(name)); 036 this.entryURL = entryURL; 037 this.manifest = manifest; 038 } 039 040 private static String removeSlash(String name) { 041 if (name.startsWith("/")) { 042 name = name.substring(1); 043 } 044 return name; 045 } 046 047 public URL getEntryURL() { 048 return entryURL; 049 } 050 051 public Attributes getAttributes() throws IOException { 052 if (manifest == null) { 053 return null; 054 } 055 return manifest.getAttributes(getName()); 056 } 057 058 public Certificate[] getCertificates() { 059 return null; 060 } 061 062 public void setTime(long time) throws UnsupportedOperationException { 063 throw new UnsupportedOperationException("Can not change the time of unpacked jar entry"); 064 } 065 066 public long getTime() { 067 return -1; 068 } 069 070 public void setSize(long size) throws UnsupportedOperationException { 071 throw new UnsupportedOperationException("Can not change the size of unpacked jar entry"); 072 } 073 074 public long getSize() { 075 return -1; 076 } 077 078 public long getCompressedSize() { 079 return getSize(); 080 } 081 082 public void setCompressedSize(long compressedSize) { 083 throw new UnsupportedOperationException("Can not change the compressed size of unpacked jar entry"); 084 } 085 086 public long getCrc() { 087 return super.getCrc(); 088 } 089 090 public void setCrc(long crc) { 091 throw new UnsupportedOperationException("Can not change the crc of unpacked jar entry"); 092 } 093 094 public int getMethod() { 095 return ZipEntry.STORED; 096 } 097 098 public void setMethod(int method) { 099 throw new UnsupportedOperationException("Can not change the method of unpacked jar entry"); 100 } 101 102 public byte[] getExtra() { 103 return null; 104 } 105 106 public void setExtra(byte[] extra) { 107 throw new UnsupportedOperationException("Can not change the extra data of unpacked jar entry"); 108 } 109 110 public String getComment() { 111 return null; 112 } 113 114 public void setComment(String comment) { 115 throw new UnsupportedOperationException("Can not change the comment of unpacked jar entry"); 116 } 117 118 public boolean isDirectory() { 119 return entryURL.getPath().endsWith("/"); 120 } 121 122 }