OSDN Git Service

42d5240eb473ddc70032ec12ba28a9803f5b532a
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / gui / ContentTransferHandler.java
1 package yukihane.inqubus.gui;
2
3 import java.awt.datatransfer.DataFlavor;
4 import java.awt.datatransfer.Transferable;
5 import java.awt.datatransfer.UnsupportedFlavorException;
6 import java.io.File;
7 import java.io.IOException;
8 import java.util.List;
9 import java.util.logging.Level;
10 import java.util.logging.Logger;
11 import javax.swing.JCheckBox;
12 import javax.swing.TransferHandler;
13 import javax.swing.text.JTextComponent;
14
15 /**
16  * メイン画面の動画/コメント入力フィールド用TransferHandler
17  * @author yuki
18  */
19 class ContentTransferHandler extends TransferHandler {
20
21     private static final long serialVersionUID = 1L;
22     private static final Logger logger = Logger.getLogger(ContentTransferHandler.class.getName());
23     private final JCheckBox cbLocal;
24     private final TransferHandler defaultTransferHandler;
25
26     /**
27      *
28      * @param defaultTransferHandler 対象JTextFieldインスタンスのデフォルトtransfer handler.
29      * @param cbLocal 対応するローカルチェックボックス.
30      */
31     ContentTransferHandler(TransferHandler defaultTransferHandler, JCheckBox cbLocal) {
32         this.defaultTransferHandler = defaultTransferHandler;
33         this.cbLocal = cbLocal;
34     }
35
36     @Override
37     public boolean canImport(TransferHandler.TransferSupport support) {
38         if (!cbLocal.isSelected()) {
39             return defaultTransferHandler.canImport(support);
40         }
41
42         if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)
43                 && !support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
44             return false;
45         }
46
47         if (support.isDrop()) {
48             support.setDropAction(LINK);
49         }
50         return true;
51     }
52
53     @Override
54     public boolean importData(TransferHandler.TransferSupport support) {
55         if (!cbLocal.isSelected() || !support.isDrop()) {
56             return defaultTransferHandler.importData(support);
57         }
58
59         final Transferable tr = support.getTransferable();
60         try {
61             String text;
62             if (tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
63                 @SuppressWarnings("unchecked")
64                 final List<File> files = (List<File>) tr.getTransferData(DataFlavor.javaFileListFlavor);
65                 if (files.size() > 0) {
66                     File file = files.get(0);
67                     text = file.getPath();
68                 } else {
69                     text = "";
70                 }
71             } else if (tr.isDataFlavorSupported(DataFlavor.stringFlavor)) {
72                 text = (String) tr.getTransferData(DataFlavor.stringFlavor);
73             } else {
74                 return false;
75             }
76             final JTextComponent comp = (JTextComponent) support.getComponent();
77             comp.setText(text);
78             return true;
79         } catch (UnsupportedFlavorException | IOException ex) {
80             logger.log(Level.SEVERE, null, ex);
81         }
82         return false;
83     }
84 }