OSDN Git Service

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