Update of /var/cvs/applications/resources/src/org/mmbase/util/images
In directory james.mmbase.org:/tmp/cvs-serv13560

Modified Files:
        ImageMagickImageConverter.java 
Log Message:
  MMB-1725


See also: 
http://cvs.mmbase.org/viewcvs/applications/resources/src/org/mmbase/util/images
See also: http://www.mmbase.org/jira/browse/MMB-1725


Index: ImageMagickImageConverter.java
===================================================================
RCS file: 
/var/cvs/applications/resources/src/org/mmbase/util/images/ImageMagickImageConverter.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- ImageMagickImageConverter.java      24 Sep 2008 05:54:30 -0000      1.11
+++ ImageMagickImageConverter.java      29 Sep 2008 15:41:00 -0000      1.12
@@ -27,12 +27,13 @@
  * @author Michiel Meeuwissen
  * @author Nico Klasens
  * @author Jaco de Groot
- * @version $Id: ImageMagickImageConverter.java,v 1.11 2008/09/24 05:54:30 
michiel Exp $
+ * @version $Id: ImageMagickImageConverter.java,v 1.12 2008/09/29 15:41:00 
michiel Exp $
  */
 public class ImageMagickImageConverter extends AbstractImageConverter 
implements ImageConverter {
     private static final Logger log = 
Logging.getLoggerInstance(ImageMagickImageConverter.class);
 
     private static final Pattern IM_VERSION_PATTERN = 
Pattern.compile("(?is).*?\\s(\\d+)\\.(\\d+)\\.(\\d+)\\s.*");
+    private static final Pattern IM_FORMAT_PATTERN  = 
Pattern.compile("(?is)\\s*([A-Z0-9]+)\\*?\\s+[A-Z0-9]+\\s*[r\\-]w[\\+\\-]\\s+.*");
 
     private int imVersionMajor = 5;
     private int imVersionMinor = 5;
@@ -54,7 +55,73 @@
     protected String host = "localhost";
     protected int port = 1679;
 
-    protected List<String> excludeFormats = new ArrayList<String>();
+    protected Set<String> excludeFormats = new TreeSet<String>();
+    private  final Set<String> validFormats = new TreeSet<String>();
+
+
+
+
+
+    private OutputStream getOutput(String... args) {
+        ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        switch (method) {
+        case METHOD_LAUNCHER: {
+            try {
+
+                CommandLauncher launcher = new CommandLauncher("ConvertImage");
+                log.debug("Starting convert");
+                List<String> cmd = new ArrayList<String>();
+                for (String arg : args) {
+                    cmd.add(arg);
+                }
+                launcher.execute(converterPath, cmd.toArray(EMPTY));
+                launcher.waitAndRead(outputStream, errorStream);
+            } catch (ProcessException e) {
+                log.error("Convert test failed. " + converterPath + " (" + 
e.getMessage() + ")");
+            }
+            break;
+        }
+        case METHOD_CONNECTOR: {
+            try {
+                java.net.Socket socket = new java.net.Socket(host, port);
+                final OutputStream os = socket.getOutputStream();
+                os.write(0); // version
+                final ObjectOutputStream stream = new ObjectOutputStream(os);
+                List<String> cmd = new ArrayList<String>();
+                cmd.add(converterPath);
+                for (String arg : args) {
+                    cmd.add(arg);
+                }
+                stream.writeObject((cmd.toArray(EMPTY)));
+                stream.writeObject(EMPTY);
+                Copier copier = new Copier(new ByteArrayInputStream(new 
byte[0]), os, ".file -> socket");
+                org.mmbase.util.ThreadPools.jobsExecutor.execute(copier);
+
+                Copier copier2 = new Copier(socket.getInputStream(), 
outputStream, ";socket -> cout");
+                org.mmbase.util.ThreadPools.jobsExecutor.execute(copier2);
+
+                copier.waitFor();
+                socket.shutdownOutput();
+                copier2.waitFor();
+                socket.close();
+            } catch (Exception ioe) {
+                log.error("" + host + ":" + port);
+                try {
+                    errorStream.write(("" + host + ":" + port).getBytes());
+                    errorStream.flush();
+                } catch (Exception e) {
+                    log.error(e);
+                }
+            }
+            break;
+        }
+        default: log.error("unknown method " + method);
+        }
+        return outputStream;
+
+    }
+
 
     /**
      * This function initializes this class
@@ -145,60 +212,9 @@
         // TODO: research how we tell convert, that is should use the 
System.getProperty(); with respective the value's 'java.io.tmpdir', 'user.dir'
         //       this, since convert writes at this moment inside the 
'user.dir'(working dir), which isnt writeable all the time.
 
-        ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        switch (method) {
-        case METHOD_LAUNCHER: {
-            try {
-
-                CommandLauncher launcher = new CommandLauncher("ConvertImage");
-                log.debug("Starting convert");
-                List<String> cmd = new ArrayList<String>();
-                cmd.add("-version");
-                launcher.execute(converterPath, cmd.toArray(EMPTY));
-                launcher.waitAndRead(outputStream, errorStream);
-            } catch (ProcessException e) {
-                log.error("Convert test failed. " + converterPath + " (" + 
e.getMessage() + ") conv.root='" + converterRoot
-                          + "' conv.command='" + converterCommand + "'");
-            }
-            break;
-        }
-        case METHOD_CONNECTOR: {
-            try {
-                java.net.Socket socket = new java.net.Socket(host, port);
-                final OutputStream os = socket.getOutputStream();
-                os.write(0); // version
-                final ObjectOutputStream stream = new ObjectOutputStream(os);
-                List<String> cmd = new ArrayList<String>();
-                cmd.add(converterPath);
-                cmd.add("-version");
-                stream.writeObject((cmd.toArray(EMPTY)));
-                stream.writeObject(EMPTY);
-                Copier copier = new Copier(new ByteArrayInputStream(new 
byte[0]), os, ".file -> socket");
-                org.mmbase.util.ThreadPools.jobsExecutor.execute(copier);
-
-                Copier copier2 = new Copier(socket.getInputStream(), 
outputStream, ";socket -> cout");
-                org.mmbase.util.ThreadPools.jobsExecutor.execute(copier2);
-
-                copier.waitFor();
-                socket.shutdownOutput();
-                copier2.waitFor();
-                socket.close();
-            } catch (Exception ioe) {
-                log.error("" + host + ":" + port);
-                try {
-                    errorStream.write(("" + host + ":" + port).getBytes());
-                    errorStream.flush();
-                } catch (Exception e) {
-                    log.error(e);
-                }
-            }
-            break;
-        }
-        default: log.error("unknown method " + method);
-        }
 
-        String imOutput = outputStream.toString();
+        {
+            String imOutput = getOutput("-version").toString();
         Matcher m = IM_VERSION_PATTERN.matcher(imOutput);
         if (m.matches()) {
             imVersionMajor = Integer.parseInt(m.group(1));
@@ -211,6 +227,18 @@
             log.info("Supposing ImageMagick version " + imVersionMajor + "." + 
imVersionMinor + "." + imVersionPatch);
 
         }
+        }
+
+
+        for (String imLine : getOutput("-list", 
"format").toString().split("\n")) {
+            Matcher m = IM_FORMAT_PATTERN.matcher(imLine);
+            if (m.matches()) {
+                String format = m.group(1);
+                validFormats.add(format.toUpperCase());
+            }
+        }
+        log.info("Found ImageMagick supported formats " + validFormats);
+
 
         // Cant do more checking then this, i think....
         tmp = params.get("ImageConvert.ColorizeHexScale");
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to