OSDN Git Service

デフォルトコメントを削除
[coroid/inqubus.git] / frontend / src / yukihane / nicovideo / NicoDBFinder.java
1 package yukihane.nicovideo;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.logging.Level;
6 import java.util.logging.Logger;
7 import javax.persistence.EntityManager;
8 import javax.persistence.EntityManagerFactory;
9 import javax.persistence.Persistence;
10 import javax.persistence.Query;
11 import nicobrowser.config.Config;
12 import nicobrowser.entity.NicoContent;
13 import org.apache.commons.io.FilenameUtils;
14
15 /**
16  *
17  * @author yuki
18  */
19 public class NicoDBFinder {
20     private static final NicoDBFinder instance = new NicoDBFinder();
21     private final EntityManagerFactory factory;
22
23     private NicoDBFinder() {
24
25         Config config = Config.getInstance();
26         HashMap<String, String> map = new HashMap<String, String>();
27         map.put("toplink.jdbc.url", "jdbc:h2:" + config.getDbFile());
28         factory = Persistence.createEntityManagerFactory("NicoBrowserPU", map);
29     }
30
31     public static NicoDBFinder getInstance() {
32         return instance;
33     }
34     /**
35      * ファイル名からDBを検索する.
36      * @param fileName ファイル名.
37      * @return コンテンツ情報. 一致するものが無ければnull.
38      */
39     public NicoContent findNicoContent(String fileName) {
40         EntityManager manager = factory.createEntityManager();
41
42         String baseName = FilenameUtils.getBaseName(fileName);
43         Query query = manager.createQuery("SELECT cont FROM NicoContent AS cont " + "WHERE ?1 = cont.fileName").
44                 setParameter(1, baseName);
45         List<NicoContent> results = query.getResultList();
46         if (results.size() > 1) {
47             Logger.getLogger(getClass().getName()).log(Level.WARNING, "同一ファイル名のファイルが複数ありました");
48         }
49
50         if (results.isEmpty()) {
51             return null;
52         }
53         return results.get(results.size() - 1);
54     }
55 }