Backport the DiskFileUploadReciever changes - 360345: Fileupload always error when upload file with 1 character file name
https://bugs.eclipse.org/bugs/show_bug.cgi?id=360345
diff --git a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java
index e34feee..424073c 100644
--- a/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java
+++ b/bundles/org.eclipse.rap.rwt.supplemental.fileupload/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver.java
@@ -21,8 +21,9 @@
  * A file upload receiver that stores received files on disk.
  */
 public class DiskFileUploadReceiver extends FileUploadReceiver {
-  
+
   private static final String DEFAULT_TARGET_FILE_NAME = "upload.tmp";
+  private static final String TEMP_DIRECTORY_PREFIX = "fileupload_";
 
   private File targetFile;
 
@@ -57,17 +58,20 @@
     if( details != null && details.getFileName() != null ) {
       fileName = details.getFileName();
     }
-    return File.createTempFile( createPrefix( fileName ), createSuffix( fileName ) );
+    File result = new File( createTempDirectory(), fileName );
+    result.createNewFile();
+    return result;
   }
 
-  private String createPrefix( String fileName ) {
-    int dotIndex = fileName.lastIndexOf( '.' );
-    return dotIndex == -1 ? fileName : fileName.substring( 0, dotIndex + 1 );
-  }
-
-  private String createSuffix( String fileName ) {
-    int dotIndex = fileName.lastIndexOf( '.' );
-    return dotIndex == -1 ? null : fileName.substring( dotIndex );
+  private static File createTempDirectory() throws IOException {
+    File result = File.createTempFile( TEMP_DIRECTORY_PREFIX, "" );
+    result.delete();
+    if( result.mkdir() ) {
+      result.deleteOnExit();
+    } else {
+      throw new IOException( "Unable to create temp directory: " + result.getAbsolutePath() );
+    }
+    return result;
   }
 
   private static void copy( InputStream inputStream, OutputStream outputStream )
diff --git a/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java b/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java
index 8054ab7..666df5e 100644
--- a/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java
+++ b/tests/org.eclipse.rap.rwt.supplemental.fileupload.test/src/org/eclipse/rap/rwt/supplemental/fileupload/DiskFileUploadReceiver_Test.java
@@ -43,8 +43,7 @@
     createdFile = receiver.createTargetFile( details );
 
     assertTrue( createdFile.exists() );
-    assertTrue( createdFile.getName().startsWith( "foo." ) );
-    assertTrue( createdFile.getName().endsWith( ".bar" ) );
+    assertEquals( "foo.bar", createdFile.getName() );
   }
 
   public void testCreatedTargetFilesDiffer() throws IOException {
@@ -80,8 +79,7 @@
 
     assertNotNull( createdFile );
     assertTrue( createdFile.exists() );
-    assertTrue( createdFile.getName().startsWith( "upload." ) );
-    assertTrue( createdFile.getName().endsWith( ".tmp" ) );
+    assertEquals( "upload.tmp", createdFile.getName() );
     assertEquals( content, FileUploadTestUtil.getFileContents( createdFile ) );
   }
 }