From 377e254ff2867c1f006039ca15eae2058ca9af10 Mon Sep 17 00:00:00 2001
From: tcarver <tjc>
Date: Fri, 9 Aug 2013 14:58:57 +0100
Subject: [PATCH] add paste qualifiers option

---
 .../components/UserDefinedQualifiers.java     | 122 +++++++++++++-----
 1 file changed, 88 insertions(+), 34 deletions(-)

diff --git a/uk/ac/sanger/artemis/components/UserDefinedQualifiers.java b/uk/ac/sanger/artemis/components/UserDefinedQualifiers.java
index 62a5b6a08..6f0b1e6d5 100644
--- a/uk/ac/sanger/artemis/components/UserDefinedQualifiers.java
+++ b/uk/ac/sanger/artemis/components/UserDefinedQualifiers.java
@@ -30,6 +30,7 @@ import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileWriter;
@@ -84,7 +85,7 @@ class UserDefinedQualifier extends JFrame
       org.apache.log4j.Logger.getLogger(UserDefinedQualifier.class);
   
   /* collection of loaded files */
-  private Vector<OBO> obos = new Vector<OBO>();
+  private Vector<QualifierList> obos = new Vector<QualifierList>();
   
   /* component containing list of available values */
   private Box qualifierBox = Box.createHorizontalBox();
@@ -120,7 +121,7 @@ class UserDefinedQualifier extends JFrame
     importFile.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent arg0)
       {
-        importObo();
+        importFromFile();
       }
     });
     fileMenu.add(importFile);
@@ -134,7 +135,29 @@ class UserDefinedQualifier extends JFrame
     });
     fileMenu.add(importURL);
     
+    final JMenuItem pasteQualifiers = new JMenuItem("Paste qualifiers ...");
+    pasteQualifiers.addActionListener(new ActionListener(){
+      public void actionPerformed(ActionEvent arg0)
+      {
+        final QualifierTextArea qualifierText = new QualifierTextArea();
+        int status = JOptionPane.showConfirmDialog(UserDefinedQualifier.this, 
+            qualifierText, "Paste in qualifier lists in the format: name = value",
+            JOptionPane.OK_CANCEL_OPTION);
+        
+        if(status == JOptionPane.OK_OPTION)
+        {
+          QualifierList obo = new QualifierList();
+          obo.qualifiers = loadText(new ByteArrayInputStream(qualifierText.getText().getBytes()));
+          obos.add(obo);
+          createComponentToAddCvTerm();
+          mainPanel.revalidate();
+          
+          writeQualifierList(qualifierText.getText());
+        }
 
+      }
+    });
+    fileMenu.add(pasteQualifiers);
     fileMenu.addSeparator();
     
     final JMenu removeFile = new JMenu("Qualifier source(s)");
@@ -145,7 +168,7 @@ class UserDefinedQualifier extends JFrame
       public void menuSelected(MenuEvent e)
       {
         removeFile.removeAll();
-        for(final OBO obo: obos)
+        for(final QualifierList obo: obos)
         {
           final JCheckBoxMenuItem oboMenu =
               new JCheckBoxMenuItem(obo.doc.getName(), obo.isAcive);
@@ -154,7 +177,6 @@ class UserDefinedQualifier extends JFrame
             public void actionPerformed(ActionEvent e)
             {
               obo.isAcive = oboMenu.isSelected();
-              mainPanel.removeAll();
               createComponentToAddCvTerm();
               mainPanel.revalidate();
               mainPanel.repaint();
@@ -173,6 +195,7 @@ class UserDefinedQualifier extends JFrame
    */
   private void createComponentToAddCvTerm()
   {
+    mainPanel.removeAll();
     mainPanel.setLayout(new GridBagLayout());
     final GridBagConstraints c = new GridBagConstraints();
 
@@ -261,7 +284,7 @@ class UserDefinedQualifier extends JFrame
     mainPanel.add(Box.createVerticalStrut(15), c);
   }
 
-  private StringVector searchOboQualifiers(final OBO obo, 
+  private StringVector searchOboQualifiers(final QualifierList obo, 
                                            final String qName, 
                                            final String keyWord,  
                                            final boolean ignoreCase)
@@ -300,7 +323,7 @@ class UserDefinedQualifier extends JFrame
   {
     final String qName = (String) nameCombo.getSelectedItem();
     final StringVector results = new StringVector();
-    for(OBO obo: obos)
+    for(QualifierList obo: obos)
     {
       if(!obo.isAcive)
         continue;
@@ -354,7 +377,7 @@ class UserDefinedQualifier extends JFrame
   private Vector<String> getQualiferNames()
   {
     final Vector<String> names = new Vector<String>();
-    for(OBO obo: obos)
+    for(QualifierList obo: obos)
     {
       if(!obo.isAcive)
         continue;
@@ -516,11 +539,11 @@ class UserDefinedQualifier extends JFrame
   /**
    * Import OBO
    */
-  private void importObo()
+  private void importFromFile()
   {
     final StickyFileChooser fc = new StickyFileChooser();
-    final JCheckBox autoImport = new JCheckBox("Automatically import", true);
-    fc.setAccessory(autoImport);
+    //final JCheckBox autoImport = new JCheckBox("Automatically import", true);
+    //fc.setAccessory(autoImport);
     
     OboFileFilter oboFilter = new OboFileFilter(new String[]{"obo", "OBO"}, "OBO files");
     fc.addChoosableFileFilter(oboFilter);
@@ -540,12 +563,11 @@ class UserDefinedQualifier extends JFrame
     
     createObo(doc);
     
-    mainPanel.removeAll();
     createComponentToAddCvTerm();
     mainPanel.revalidate();
     
-    if(autoImport.isSelected())
-      writeProperties(fc.getSelectedFile().getAbsolutePath());
+    //if(autoImport.isSelected())
+    writeQualifierList(fc.getSelectedFile().getAbsolutePath());
   }
   
   private void importFromUrl()
@@ -563,16 +585,10 @@ class UserDefinedQualifier extends JFrame
     {
       String urlStr = s.trim();
       createObo(new URLDocument(new URL(urlStr)));
-      mainPanel.removeAll();
       createComponentToAddCvTerm();
       mainPanel.revalidate();
       
-      int status = JOptionPane.showConfirmDialog(
-          UserDefinedQualifier.this, 
-          "Automatically import:\n"+urlStr+"\nbetween session?", 
-          "Import Option", JOptionPane.YES_NO_OPTION);
-      if(status == JOptionPane.YES_OPTION)
-        writeProperties(urlStr);
+      writeQualifierList(urlStr);
     }
     catch (MalformedURLException e)
     {
@@ -585,7 +601,7 @@ class UserDefinedQualifier extends JFrame
     try
     {
       logger4j.debug("Reading qualifiers from: "+doc.getName());
-      OBO obo = new OBO();
+      final QualifierList obo = new QualifierList();
       obo.doc = doc;
       obo.qualifiers = loadQualifiers(doc);
       obos.add(obo);
@@ -599,15 +615,34 @@ class UserDefinedQualifier extends JFrame
           JOptionPane.ERROR_MESSAGE);
     }
   }
-  
-  
+
+
   /**
-  * Write or re-write properties and insert/update the user.dir property
-  * @param jemProp      properties file
-  * @param uHome        user working directory
-  */
-  private static void writeProperties(final String loc)
+   * Write or append to artemis qualifiers list
+   * @param loc
+   * @param isOBO
+   */
+  private static void writeQualifierList(final String loc)
   {
+    int status = JOptionPane.showConfirmDialog(
+        null, 
+        "Automatically import:\n"+loc+"\nbetween session?", 
+        "Import Option", JOptionPane.YES_NO_OPTION);
+    if(status != JOptionPane.YES_OPTION)
+      return;
+    
+    final boolean isOBO;
+    if(loc.toLowerCase().endsWith(".obo"))
+      isOBO = true;
+    else
+    {
+      File f = new File(loc);
+      if(f.exists())
+        isOBO = true;
+      else
+        isOBO = false;
+    }
+    
     final String qualPath = System.getProperty("user.home") + File.separator + ".artemis.qualifiers";
     try
     {
@@ -639,12 +674,30 @@ class UserDefinedQualifier extends JFrame
         }
       }
 
+      final File qualFile = new File(qualPath);
+      final boolean exists = qualFile.exists();
       final BufferedWriter bufferedwriter = new BufferedWriter(
-          new FileWriter(new File(qualPath), true));
-      if(loc.startsWith("http://"))
-        bufferedwriter.append("\nimport: "+loc+"\n");
+          new FileWriter(qualFile, true));
+      
+      if(!exists)
+      {
+        bufferedwriter.append("# User defined list of qualifiers in the format of:\n");
+        bufferedwriter.append("# name=value\n");
+        bufferedwriter.append("# The qualifiers are separated by lines.\n");
+        bufferedwriter.append("# OBO files can be used by defining import statements:\n");
+        bufferedwriter.append("#import: http://www.geneontology.org/GO_slims/goslim_generic.obo\n\n");
+      }
+      
+      if(isOBO)
+      {
+        if(loc.startsWith("http://"))
+          bufferedwriter.append("\nimport: "+loc+"\n");
+        else
+          bufferedwriter.append("\nimport: file://"+loc+"\n");
+      }
       else
-        bufferedwriter.append("\nimport: file://"+loc+"\n");
+        bufferedwriter.append(loc+"\n");
+
       bufferedwriter.close();
     }
     catch (FileNotFoundException filenotfoundexception)
@@ -719,8 +772,9 @@ class UserDefinedQualifier extends JFrame
       return buff.toString();
     }
   }
-  
-  private class OBO
+
+
+  private class QualifierList
   {
     Document doc;
     QualifierVector qualifiers;
-- 
GitLab