cleanup / abuse system fix / prepping for a release
[mir.git] / source / mircoders / localizer / basic / MirBasicPostingSessionHandler.java
index dcd50d7..31822f5 100755 (executable)
  */
 package mircoders.localizer.basic;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
 import mir.config.MirPropertiesConfiguration;
 import mir.log.LoggerWrapper;
-import mir.session.Request;
-import mir.session.Response;
-import mir.session.Session;
-import mir.session.SessionExc;
-import mir.session.SessionFailure;
-import mir.session.SessionHandler;
-import mir.session.UploadedFile;
-import mir.session.ValidationError;
+import mir.session.*;
 import mir.storage.Database;
-import mir.util.ExceptionFunctions;
-import mir.util.FileFunctions;
+import mir.util.ExceptionRoutines;
+import mir.util.FileRoutines;
+import mir.util.IORoutines;
 import mircoders.global.MirGlobal;
 import mircoders.media.UnsupportedMediaTypeExc;
 
+import java.io.*;
+import java.util.*;
+
 /**
  * Extensible handler for open postings.
  * Behaviour can be altered by overriding methods.
@@ -131,6 +115,7 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
         }
         catch (Throwable u) {
         }
+        logger.error("Error while processing attachment", t);
       }
     }
   }
@@ -222,7 +207,7 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
 
     if (configuration.getBoolean("Localizer.OpenSession.AllowFTPUploads", false)) {
       aResponse.setResponseValue("ftpfiles",
-          FileFunctions.getDirectoryContentsAsList(configuration.getFile("Localizer.OpenSession.FTPDirectory"),
+          FileRoutines.getDirectoryContentsAsList(configuration.getFile("Localizer.OpenSession.FTPDirectory"),
               new FilenameFilter() {
                 public boolean accept(File aDir, String aName) {
                   return !(new File(aDir, aName).isDirectory());
@@ -308,7 +293,18 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
     if (configuration.getBoolean("Localizer.OpenSession.AllowFTPUploads", false)) {
       File FTPDirectory = configuration.getFile("Localizer.OpenSession.FTPDirectory");
 
-      List ftpUploads = aRequest.getPrefixedParameterNames("ftpupload");
+      List ftpUploads = new ArrayList(aRequest.getPrefixedParameterNames("ftpupload"));
+      Collections.sort(ftpUploads, new Comparator() {
+        public int compare(Object o1, Object o2) {
+          if (o1 instanceof String && o2 instanceof String) {
+            return ((String) o1).compareTo((String) o2);
+          }
+          else {
+            return 0;
+          }
+        }
+      });
+
       i = ftpUploads.iterator();
       while (i.hasNext()) {
         final String fieldName = (String) i.next();
@@ -323,7 +319,16 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
               preprocessNewAttachment(aRequest, aSession, new UploadedFile() {
                 public void writeToFile(File aFile) throws SessionFailure {
                   try {
-                    FileFunctions.move(sourceFile, aFile);
+                    FileRoutines.move(sourceFile, aFile);
+                  }
+                  catch (IOException e) {
+                    throw new SessionFailure(e);
+                  }
+                }
+
+                public void writeToStream(OutputStream aStream) throws SessionFailure {
+                  try {
+                    IORoutines.copyStream(getInputStream(), aStream);
                   }
                   catch (IOException e) {
                     throw new SessionFailure(e);
@@ -372,7 +377,7 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
   }
 
   protected void makeErrorResponse(Request aRequest, Session aSession, Response aResponse, Throwable anError) throws SessionExc, SessionFailure {
-    Throwable rootCause = ExceptionFunctions.traceCauseException(anError);
+    Throwable rootCause = ExceptionRoutines.traceCauseException(anError);
 
     if (rootCause instanceof DuplicatePostingExc)
       aResponse.setResponseGenerator(dupeResponseGenerator);
@@ -506,6 +511,15 @@ public abstract class MirBasicPostingSessionHandler implements SessionHandler {
       uploadedFile.writeToFile(aFile);
     }
 
+    public void writeToStream(OutputStream aStream) throws SessionExc, SessionFailure {
+      try {
+        IORoutines.copyStream(uploadedFile.getInputStream(), aStream);
+      }
+      catch (IOException e) {
+        throw new SessionFailure(e);
+      }
+    }
+
     public InputStream getInputStream() throws SessionExc, SessionFailure {
       return uploadedFile.getInputStream();
     }