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 SuffixEntryNameFilter extends AbstractEntryFilter {
30
31 private static final long serialVersionUID = -2053518605167417363L;
32
33
34
35
36 private String[] suffixes;
37
38
39
40
41 private boolean ignoreCase;
42
43
44
45
46
47
48 public SuffixEntryNameFilter(final String suffix) {
49 this(new String[]{ suffix }, false);
50 }
51
52
53
54
55
56
57
58 public SuffixEntryNameFilter(final String suffix, final boolean ignoreCase) {
59 this(new String[]{ suffix }, ignoreCase);
60 }
61
62
63
64
65
66
67
68 public SuffixEntryNameFilter(final String[] suffixes) {
69 this(suffixes, false);
70 }
71
72
73
74
75
76
77
78
79 public SuffixEntryNameFilter(final String[] suffixes, final boolean ignoreCase) {
80 if (suffixes == null) {
81 throw new IllegalArgumentException("Suffixes must not be null");
82 }
83 final String[] copy = new String[suffixes.length];
84 System.arraycopy(suffixes, 0, copy, 0, copy.length);
85 this.suffixes = copy;
86 this.ignoreCase = ignoreCase;
87 }
88
89
90
91
92
93
94
95 public SuffixEntryNameFilter(final Collection<String> suffixes) {
96 this(suffixes, false);
97 }
98
99
100
101
102
103
104
105
106 public SuffixEntryNameFilter(final Collection<String> suffixes, final boolean ignoreCase) {
107 if (suffixes == null) {
108 throw new IllegalArgumentException("Suffixes must not be null");
109 }
110 this.suffixes = suffixes.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 suffix : suffixes) {
144 final int len = suffix.length();
145 final boolean b = path.regionMatches(ignoreCase, path.length() - len, suffix, 0, len);
146 if (b) {
147 return true;
148 }
149 }
150 return false;
151 }
152
153 @Override
154 public String toString() {
155 final StringBuilder sb = new StringBuilder();
156 sb.append(super.toString());
157 sb.append('(');
158 if (suffixes != null) {
159 final int length = suffixes.length;
160 for (int i = 0; i < length; i++) {
161 if (i > 0) {
162 sb.append(',');
163 }
164 sb.append(suffixes[i]);
165 }
166 }
167 sb.append(')');
168 return sb.toString();
169 }
170
171 }