OSDN Git Service

画面のプロファイル生成処理で共通化できる部分を共通化
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / filewatch / FileWatchUtil.java
1 package yukihane.inqubus.filewatch;
2
3 import java.nio.file.Path;
4 import java.util.Collection;
5 import java.util.SortedSet;
6 import java.util.TreeSet;
7 import java.util.regex.Matcher;
8 import java.util.regex.Pattern;
9 import org.apache.commons.io.FilenameUtils;
10
11 /**
12  *
13  * @author user
14  */
15 public final class FileWatchUtil {
16     // TODO スレッドID指定の場合の考慮も必要か
17
18     private static final Pattern VIDEO_ID_PATTERN = Pattern.compile("(\\w\\w\\d+)");
19
20     private FileWatchUtil() {
21     }
22
23     /**
24      * 指定された文字列で始まる動画IDを検索します.
25      * @param paths 検索対象のファイルパス.
26      * @param startText この文字で始まる動画ID一覧を出力します.
27      * @return 条件に当てはまる動画ID一覧.
28      */
29     public static SortedSet<String> getVideoIdsStartWith(Collection<Path> paths, String startText) {
30         final SortedSet<String> set = new TreeSet<>();
31         for (Path p : paths) {
32             final String name = FilenameUtils.getBaseName(p.toString());
33             final Matcher m = VIDEO_ID_PATTERN.matcher(name);
34             while (m.find()) {
35                 final String alt = m.group(1);
36                 if (alt.startsWith(startText)) {
37                     set.add(alt);
38                 }
39             }
40         }
41         return set;
42     }
43
44     /**
45      * 指定した文字列を含むファイル名一覧を取得します.
46      * @param paths 検索対象のファイルパス.
47      * @param text ファイル名にこの文字列を含むパスを抽出します.
48      * @return 条件に合致するファイルのフルパス.
49      */
50     public static SortedSet<String> getFileNamesContain(Collection<Path> paths, String text) {
51         final SortedSet<String> set = new TreeSet<>();
52         for (Path p : paths) {
53             final String name = FilenameUtils.getBaseName(p.toString());
54             final Matcher m = VIDEO_ID_PATTERN.matcher(name);
55             while (m.find()) {
56                 final String alt = m.group(1);
57                 if (alt.equals(text)) {
58                     set.add(p.toAbsolutePath().toString());
59                     break;
60                 }
61             }
62         }
63         return set;
64     }
65 }