1 21 package proguard; 22 23 import proguard.io.*; 24 import proguard.util.*; 25 26 27 34 public class DataEntryReaderFactory 35 { 36 45 public static DataEntryReader createDataEntryReader(String messagePrefix, 46 ClassPathEntry classPathEntry, 47 DataEntryReader reader) 48 { 49 String entryName = classPathEntry.getName(); 50 boolean isJar = endsWithIgnoreCase(entryName, ".jar"); 51 boolean isWar = endsWithIgnoreCase(entryName, ".war"); 52 boolean isEar = endsWithIgnoreCase(entryName, ".ear"); 53 boolean isZip = endsWithIgnoreCase(entryName, ".zip"); 54 55 String filter = classPathEntry.getFilter(); 56 String jarFilter = classPathEntry.getJarFilter(); 57 String warFilter = classPathEntry.getWarFilter(); 58 String earFilter = classPathEntry.getEarFilter(); 59 String zipFilter = classPathEntry.getZipFilter(); 60 61 System.out.println(messagePrefix + 62 (isJar ? "jar" : 63 isWar ? "war" : 64 isEar ? "ear" : 65 isZip ? "zip" : 66 "directory") + 67 " [" + classPathEntry.getName() + "]" + 68 (filter != null || 69 jarFilter != null || 70 warFilter != null || 71 earFilter != null || 72 zipFilter != null ? " (filtered)" : "")); 73 74 if (filter != null) 76 { 77 reader = new FilteredDataEntryReader(new DataEntryNameFilter(new FileNameListMatcher(filter)), 78 reader); 79 } 80 81 reader = wrapInJarReader(reader, isJar, jarFilter, ".jar"); 83 if (!isJar) 84 { 85 reader = wrapInJarReader(reader, isWar, warFilter, ".war"); 87 if (!isWar) 88 { 89 reader = wrapInJarReader(reader, isEar, earFilter, ".ear"); 91 if (!isEar) 92 { 93 reader = wrapInJarReader(reader, isZip, zipFilter, ".zip"); 95 } 96 } 97 } 98 99 return reader; 100 } 101 102 103 106 private static DataEntryReader wrapInJarReader(DataEntryReader reader, 107 boolean isJar, 108 String jarFilter, 109 String jarExtension) 110 { 111 DataEntryReader jarReader = new JarReader(reader); 113 114 if (isJar) 115 { 116 return jarReader; 118 } 119 else 120 { 121 if (jarFilter != null) 123 { 124 jarReader = new FilteredDataEntryReader( 125 new DataEntryNameFilter( 126 new FileNameListMatcher(jarFilter)), 127 jarReader); 128 } 129 130 return new FilteredDataEntryReader( 132 new DataEntryNameFilter( 133 new ExtensionMatcher(jarExtension)), 134 jarReader, 135 reader); 136 } 137 } 138 139 140 144 private static boolean endsWithIgnoreCase(String string, String suffix) 145 { 146 int stringLength = string.length(); 147 int suffixLength = suffix.length(); 148 149 return string.regionMatches(true, stringLength - suffixLength, suffix, 0, suffixLength); 150 } 151 } 152 | Popular Tags |