1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.orangesignal.csv.entryfilters;
18
19 import java.util.Collection;
20 import java.util.zip.ZipEntry;
21
22 import com.orangesignal.jlha.LhaHeader;
23
24
25
26
27
28
29 public class PrefixEntryNameFilter extends AbstractEntryFilter {
30
31 private static final long serialVersionUID = -8252513785505493289L;
32
33
34
35
36 private String[] prefixes;
37
38
39
40
41 private boolean ignoreCase;
42
43
44
45
46
47
48 public PrefixEntryNameFilter(final String prefix) {
49 this(new String[]{ prefix }, false);
50 }
51
52
53
54
55
56
57
58 public PrefixEntryNameFilter(final String prefix, final boolean ignoreCase) {
59 this(new String[]{ prefix }, ignoreCase);
60 }
61
62
63
64
65
66
67
68 public PrefixEntryNameFilter(final String[] prefixes) {
69 this(prefixes, false);
70 }
71
72
73
74
75
76
77
78
79 public PrefixEntryNameFilter(final String[] prefixes, final boolean ignoreCase) {
80 if (prefixes == null) {
81 throw new IllegalArgumentException("Prefixes must not be null");
82 }
83 final String[] copy = new String[prefixes.length];
84 System.arraycopy(prefixes, 0, copy, 0, copy.length);
85 this.prefixes = copy;
86 this.ignoreCase = ignoreCase;
87 }
88
89
90
91
92
93
94
95 public PrefixEntryNameFilter(final Collection<String> prefixes) {
96 this(prefixes, false);
97 }
98
99
100
101
102
103
104
105
106 public PrefixEntryNameFilter(final Collection<String> prefixes, final boolean ignoreCase) {
107 if (prefixes == null) {
108 throw new IllegalArgumentException("Prefixes must not be null");
109 }
110 this.prefixes = prefixes.toArray(new String[0]);
111 this.ignoreCase = ignoreCase;
112 }
113
114
115
116
117
118
119
120 @Override
121 public boolean accept(final ZipEntry entry) {
122 return accept(entry.getName());
123 }
124
125
126
127
128
129
130
131 @Override
132 public boolean accept(final LhaHeader entry) {
133 return accept(entry.getPath());
134 }
135
136
137
138
139
140
141
142 private boolean accept(final String path) {
143 for (final String prefix : prefixes) {
144 final boolean b = path.regionMatches(ignoreCase, 0, prefix, 0, prefix.length());
145 if (b) {
146 return true;
147 }
148 }
149 return false;
150 }
151
152 @Override
153 public String toString() {
154 final StringBuilder sb = new StringBuilder();
155 sb.append(super.toString());
156 sb.append('(');
157 if (prefixes != null) {
158 final int length = prefixes.length;
159 for (int i = 0; i < length; i++) {
160 if (i > 0) {
161 sb.append(',');
162 }
163 sb.append(prefixes[i]);
164 }
165 }
166 sb.append(')');
167 return sb.toString();
168 }
169
170 }