1 19 20 package edu.umd.cs.findbugs.classfile.impl; 21 22 import java.io.File ; 23 import java.io.IOException ; 24 import java.io.InputStream ; 25 26 import edu.umd.cs.findbugs.classfile.ClassDescriptor; 27 import edu.umd.cs.findbugs.classfile.ICodeBase; 28 import edu.umd.cs.findbugs.classfile.ICodeBaseEntry; 29 import edu.umd.cs.findbugs.classfile.InvalidClassFileFormatException; 30 31 36 public class DirectoryCodeBaseEntry extends AbstractScannableCodeBaseEntry implements ICodeBaseEntry { 37 private final DirectoryCodeBase codeBase; 38 private final String realResourceName; 39 40 public DirectoryCodeBaseEntry(DirectoryCodeBase codeBase, String realResourceName) { 41 this.codeBase = codeBase; 42 this.realResourceName = realResourceName; 43 } 44 45 48 public int getNumBytes() { 49 File fullPath = codeBase.getFullPathOfResource(realResourceName); 50 if (!fullPath.exists()) { 51 return -1; 52 } 53 return (int) fullPath.length(); 54 } 55 56 59 public InputStream openResource() throws IOException { 60 return codeBase.openFile(realResourceName); 61 } 62 63 66 @Override 67 public AbstractScannableCodeBase getCodeBase() { 68 return codeBase; 69 } 70 71 74 @Override 75 public String getRealResourceName() { 76 return realResourceName; 77 } 78 79 82 public ClassDescriptor getClassDescriptor() throws InvalidClassFileFormatException { 83 return ClassDescriptor.fromResourceName(getResourceName()); 84 } 85 86 89 @Override 90 public boolean equals(Object obj) { 91 if (obj == null || obj.getClass() != this.getClass()) { 92 return false; 93 } 94 DirectoryCodeBaseEntry other = (DirectoryCodeBaseEntry) obj; 95 return this.codeBase.equals(other.codeBase) 96 && this.realResourceName.equals(other.realResourceName); 97 } 98 99 102 @Override 103 public int hashCode() { 104 return 7919 * codeBase.hashCode() + realResourceName.hashCode(); 105 } 106 107 110 @Override 111 public String toString() { 112 return getCodeBase() + ":" + getResourceName(); 113 } 114 } 115 | Popular Tags |