JAL-3949 - refactor logging from jalview.bin.Cache to jalview.bin.Console
[jalview.git] / src / jalview / gui / WsParamSetManager.java
index aec79e4..de1be5d 100644 (file)
 package jalview.gui;
 
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
 import jalview.util.MessageManager;
 import jalview.ws.params.ParamDatastoreI;
 import jalview.ws.params.ParamManager;
 import jalview.ws.params.WsParamSetI;
+import jalview.xml.binding.jalview.ObjectFactory;
+import jalview.xml.binding.jalview.WebServiceParameterSet;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -39,7 +43,11 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.StringTokenizer;
 
-import javax.swing.JOptionPane;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Marshaller;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
 
 /**
  * store and retrieve web service parameter sets.
@@ -49,7 +57,7 @@ import javax.swing.JOptionPane;
  */
 public class WsParamSetManager implements ParamManager
 {
-  Hashtable<String, ParamDatastoreI> paramparsers = new Hashtable<String, ParamDatastoreI>();
+  Hashtable<String, ParamDatastoreI> paramparsers = new Hashtable<>();
 
   @Override
   public WsParamSetI[] getParameterSet(String name, String serviceUrl,
@@ -62,7 +70,7 @@ public class WsParamSetManager implements ParamManager
     }
     StringTokenizer st = new StringTokenizer(files, "|");
     String pfile = null;
-    ArrayList<WsParamSetI> params = new ArrayList<WsParamSetI>();
+    List<WsParamSetI> params = new ArrayList<>();
     while (st.hasMoreTokens())
     {
       pfile = st.nextToken();
@@ -86,8 +94,8 @@ public class WsParamSetManager implements ParamManager
           {
             add = true;
           }
-          add &= (modifiable == p.isModifiable() || unmodifiable == !p
-                  .isModifiable());
+          add &= (modifiable == p.isModifiable()
+                  || unmodifiable == !p.isModifiable());
           add &= name == null || p.getName().equals(name);
 
           if (add)
@@ -99,11 +107,9 @@ public class WsParamSetManager implements ParamManager
         }
       } catch (IOException e)
       {
-        Cache.log
-                .info("Failed to parse parameter file "
-                        + pfile
-                        + " (Check that all JALVIEW_WSPARAMFILES entries are valid!)",
-                        e);
+        Console.info("Failed to parse parameter file " + pfile
+                + " (Check that all JALVIEW_WSPARAMFILES entries are valid!)",
+                e);
       }
     }
     return params.toArray(new WsParamSetI[0]);
@@ -111,33 +117,39 @@ public class WsParamSetManager implements ParamManager
 
   private WsParamSetI[] parseParamFile(String filename) throws IOException
   {
-    List<WsParamSetI> psets = new ArrayList<WsParamSetI>();
+    List<WsParamSetI> psets = new ArrayList<>();
     InputStreamReader is = new InputStreamReader(
-            new java.io.FileInputStream(new File(filename)), "UTF-8");
+            new FileInputStream(new File(filename)), "UTF-8");
 
-    jalview.schemabinding.version2.WebServiceParameterSet wspset = new jalview.schemabinding.version2.WebServiceParameterSet();
-
-    org.exolab.castor.xml.Unmarshaller unmar = new org.exolab.castor.xml.Unmarshaller(
-            wspset);
-    unmar.setWhitespacePreserve(true);
+    WebServiceParameterSet wspset = null;
     try
     {
-      wspset = (jalview.schemabinding.version2.WebServiceParameterSet) unmar
-              .unmarshal(is);
+      JAXBContext jc = JAXBContext
+              .newInstance("jalview.xml.binding.jalview");
+      javax.xml.bind.Unmarshaller um = jc.createUnmarshaller();
+      XMLStreamReader streamReader = XMLInputFactory.newInstance()
+              .createXMLStreamReader(is);
+      JAXBElement<WebServiceParameterSet> jbe = um.unmarshal(streamReader,
+              WebServiceParameterSet.class);
+      wspset = jbe.getValue();
     } catch (Exception ex)
     {
       throw new IOException(ex);
     }
+
     if (wspset != null && wspset.getParameters().length() > 0)
     {
-      for (String url : wspset.getServiceURL())
+      List<String> urls = wspset.getServiceURL();
+      final String[] urlArray = urls.toArray(new String[urls.size()]);
+
+      for (String url : urls)
       {
         ParamDatastoreI parser = paramparsers.get(url);
         if (parser != null)
         {
           WsParamSetI pset = parser.parseServiceParameterFile(
                   wspset.getName(), wspset.getDescription(),
-                  wspset.getServiceURL(), wspset.getParameters());
+                  urlArray, wspset.getParameters());
           if (pset != null)
           {
             pset.setSourceFile(filename);
@@ -160,7 +172,7 @@ public class WsParamSetManager implements ParamManager
     {
       if (filename != null && !((outfile = new File(filename)).canWrite()))
       {
-        Cache.log.warn("Can't write to " + filename
+        Console.warn("Can't write to " + filename
                 + " - Prompting for new file to write to.");
         filename = null;
       }
@@ -179,15 +191,15 @@ public class WsParamSetManager implements ParamManager
     }
     if (parser == null)
     {
-      throw new Error(
-              MessageManager
-                      .getString("error.implementation_error_cannot_find_marshaller_for_param_set"));
+      throw new Error(MessageManager.getString(
+              "error.implementation_error_cannot_find_marshaller_for_param_set"));
     }
     if (filename == null)
     {
-      JalviewFileChooser chooser = new JalviewFileChooser(
-              Cache.getProperty("LAST_DIRECTORY"), "wsparams",
-              "Web Service Parameter File", "Web Service Parameter File");
+      // TODO: JAL-3048 webservice - not required for Jalview-JS
+
+      JalviewFileChooser chooser = new JalviewFileChooser("wsparams",
+              "Web Service Parameter File");
       chooser.setFileView(new JalviewFileView());
       chooser.setDialogTitle(MessageManager
               .getString("label.choose_filename_for_param_file"));
@@ -196,8 +208,7 @@ public class WsParamSetManager implements ParamManager
       if (value == JalviewFileChooser.APPROVE_OPTION)
       {
         outfile = chooser.getSelectedFile();
-        jalview.bin.Cache
-                .setProperty("LAST_DIRECTORY", outfile.getParent());
+        Cache.setProperty("LAST_DIRECTORY", outfile.getParent());
         filename = outfile.getAbsolutePath();
         if (!filename.endsWith(".wsparams"))
         {
@@ -208,7 +219,7 @@ public class WsParamSetManager implements ParamManager
     }
     if (outfile != null)
     {
-      String paramFiles = jalview.bin.Cache.getDefault("WS_PARAM_FILES",
+      String paramFiles = Cache.getDefault("WS_PARAM_FILES",
               filename);
       if (paramFiles.indexOf(filename) == -1)
       {
@@ -218,33 +229,41 @@ public class WsParamSetManager implements ParamManager
         }
         paramFiles = paramFiles.concat(filename);
       }
-      jalview.bin.Cache.setProperty("WS_PARAM_FILES", paramFiles);
+      Cache.setProperty("WS_PARAM_FILES", paramFiles);
 
-      jalview.schemabinding.version2.WebServiceParameterSet paramxml = new jalview.schemabinding.version2.WebServiceParameterSet();
+      WebServiceParameterSet paramxml = new WebServiceParameterSet();
 
       paramxml.setName(parameterSet.getName());
       paramxml.setDescription(parameterSet.getDescription());
-      paramxml.setServiceURL(parameterSet.getApplicableUrls().clone());
+      for (String url : parameterSet.getApplicableUrls())
+      {
+        paramxml.getServiceURL().add(url);
+      }
       paramxml.setVersion("1.0");
       try
       {
-        paramxml.setParameters(parser
-                .generateServiceParameterFile(parameterSet));
+        paramxml.setParameters(
+                parser.generateServiceParameterFile(parameterSet));
         PrintWriter out = new PrintWriter(new OutputStreamWriter(
                 new FileOutputStream(outfile), "UTF-8"));
-        paramxml.marshal(out);
+        JAXBContext jaxbContext = JAXBContext
+                .newInstance(WebServiceParameterSet.class);
+        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
+        jaxbMarshaller.marshal(
+                new ObjectFactory().createWebServiceParameterSet(paramxml),
+                out);
         out.close();
         parameterSet.setSourceFile(filename);
       } catch (Exception e)
       {
-        Cache.log.error("Couldn't write parameter file to " + outfile, e);
+        Console.error("Couldn't write parameter file to " + outfile, e);
       }
     }
   }
 
   /*
    * 
-   * JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache
+   * JalviewFileChooser chooser = new JalviewFileChooser(Cache
    * .getProperty("LAST_DIRECTORY"), new String[] { "jc" }, new String[] {
    * "Jalview User Colours" }, "Jalview User Colours"); chooser.setFileView(new
    * jalview.io.JalviewFileView());
@@ -254,8 +273,8 @@ public class WsParamSetManager implements ParamManager
    * int value = chooser.showOpenDialog(this);
    * 
    * if (value == JalviewFileChooser.APPROVE_OPTION) { File choice =
-   * chooser.getSelectedFile(); jalview.bin.Cache.setProperty("LAST_DIRECTORY",
-   * choice.getParent()); String defaultColours = jalview.bin.Cache.getDefault(
+   * chooser.getSelectedFile(); Cache.setProperty("LAST_DIRECTORY",
+   * choice.getParent()); String defaultColours = Cache.getDefault(
    * "USER_DEFINED_COLOURS", choice.getPath()); if
    * (defaultColours.indexOf(choice.getPath()) == -1) { defaultColours =
    * defaultColours.concat("|") .concat(choice.getPath()); } (non-Javadoc)
@@ -272,7 +291,7 @@ public class WsParamSetManager implements ParamManager
     {
       return;
     }
-    String paramFiles = jalview.bin.Cache.getDefault("WS_PARAM_FILES", "");
+    String paramFiles = Cache.getDefault("WS_PARAM_FILES", "");
     if (paramFiles.indexOf(filename) > -1)
     {
       String nparamFiles = new String();
@@ -285,7 +304,7 @@ public class WsParamSetManager implements ParamManager
           nparamFiles = nparamFiles.concat("|").concat(fl);
         }
       }
-      jalview.bin.Cache.setProperty("WS_PARAM_FILES", nparamFiles);
+      Cache.setProperty("WS_PARAM_FILES", nparamFiles);
     }
 
     try
@@ -293,18 +312,18 @@ public class WsParamSetManager implements ParamManager
       File pfile = new File(filename);
       if (pfile.exists() && pfile.canWrite())
       {
-        if (JOptionPane.showConfirmDialog(Desktop.instance,
+        if (JvOptionPane.showConfirmDialog(Desktop.instance,
                 "Delete the preset's file, too ?", "Delete User Preset ?",
-                JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION)
+                JvOptionPane.OK_CANCEL_OPTION) == JvOptionPane.OK_OPTION)
         {
           pfile.delete();
         }
       }
     } catch (Exception e)
     {
-      Cache.log
-              .error("Exception when trying to delete webservice user preset: ",
-                      e);
+      Console.error(
+              "Exception when trying to delete webservice user preset: ",
+              e);
     }
   }