Author: wesw Date: Thu Jun 4 14:24:28 2009 New Revision: 781750 URL: http://svn.apache.org/viewvc?rev=781750&view=rev Log: minor refactoring, improved UploadStatus & UploadStatusHolder after realizing that I should also be keying off of the item # passed in on the update(long,long,int) method of ProgressListener
Added: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadFile.java (with props) Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/BasicProgressListener.java struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatus.java struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatusHolder.java struts/sandbox/trunk/struts2-fileupload-plugin/src/main/resources/struts-plugin.xml struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/BasicProgressListenerTest.java struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusHolderTest.java struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusTest.java Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/BasicProgressListener.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/BasicProgressListener.java?rev=781750&r1=781749&r2=781750&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/BasicProgressListener.java (original) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/BasicProgressListener.java Thu Jun 4 14:24:28 2009 @@ -73,7 +73,7 @@ UploadStatus status = new UploadStatus(); status.setBytesRead(bytesRead); status.setContentLength(contentLength); - status.setItem(item); + status.setItemId(item); holder.addUploadStatus(sessionId, status); } } Added: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadFile.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadFile.java?rev=781750&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadFile.java (added) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadFile.java Thu Jun 4 14:24:28 2009 @@ -0,0 +1,114 @@ +/* + * $Id$ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.struts2.fileupload; + +/** + * This class just holds the identifying fields for a file + * that is in the process of being uploaded. + * + * @author $Author$ + * <p/> + */ +public class UploadFile { + + private String sessionId; + private int fileItemId; + + /** + * + * @param sessionId + * @param fileItemId + */ + public UploadFile(String sessionId, int fileItemId) { + this.sessionId = sessionId; + this.fileItemId = fileItemId; + } + + /** + * + * @return + */ + public String getSessionId() { + return sessionId; + } + + /** + * + * @param sessionId + */ + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + + /** + * + * @return + */ + public int getFileItemId() { + return fileItemId; + } + + /** + * + * @param fileItemId + */ + public void setFileItemId(int fileItemId) { + this.fileItemId = fileItemId; + } + + /** + * + * @param o + * @return + */ + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UploadFile)) return false; + + UploadFile that = (UploadFile) o; + + if (fileItemId != that.fileItemId) return false; + if (!sessionId.equals(that.sessionId)) return false; + + return true; + } + + /** + * + * @return + */ + @Override + public int hashCode() { + int result = sessionId.hashCode(); + result = 31 * result + fileItemId; + return result; + } + + /** + * + * @return + */ + @Override + public String toString() { + return "sessionId - " + sessionId + ", fileItemId - " + fileItemId; + } +} Propchange: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadFile.java ------------------------------------------------------------------------------ svn:keywords = Id Rev Author Date URL Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatus.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatus.java?rev=781750&r1=781749&r2=781750&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatus.java (original) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatus.java Thu Jun 4 14:24:28 2009 @@ -33,7 +33,7 @@ private long lastAccess ; private long bytesRead ; private long contentLength ; - private long item ; + private int itemId; /** * @@ -42,7 +42,7 @@ updateLastAccess() ; bytesRead = 0; contentLength = 0; - item = 0; + itemId = 0; } /** @@ -87,17 +87,17 @@ /** * */ - public long getItem() { + public int getItemId() { updateLastAccess(); - return item; + return itemId; } /** * */ - public void setItem(long item) { + public void setItemId(int itemId) { updateLastAccess(); - this.item = item; + this.itemId = itemId; } /** Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatusHolder.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatusHolder.java?rev=781750&r1=781749&r2=781750&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatusHolder.java (original) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/main/java/org/apache/struts2/fileupload/UploadStatusHolder.java Thu Jun 4 14:24:28 2009 @@ -38,7 +38,7 @@ public class UploadStatusHolder { private int secondsToKeep = 600 ; //default to ten minutes - public static Map<String,UploadStatus> statuses = new HashMap<String,UploadStatus>(); + public static Map<UploadFile,UploadStatus> statuses = new HashMap<UploadFile,UploadStatus>(); private long lastRun = 0; // keep track so we aren't cleaning up all the time @@ -63,7 +63,7 @@ * @param status */ public void addUploadStatus(String key, UploadStatus status ) { - statuses.put(key,status); + statuses.put(new UploadFile(key, status.getItemId()),status); } /** @@ -71,21 +71,40 @@ * @param key * @return */ - public UploadStatus getUploadStatus(String key) { + public UploadStatus getUploadStatus(String key, int fileItemId) { + cleanUp(); + UploadFile mapKey = new UploadFile(key, fileItemId); + return statuses.get(mapKey); + } + + /** + * + * @param sessionId + * @return + */ + public List<UploadStatus> getAllStatusesInSession(String sessionId) { + List<UploadStatus> statusesInSession = new ArrayList<UploadStatus>(); + for (UploadFile candidate : statuses.keySet()) { + if (candidate.getSessionId() != null && candidate.getSessionId().equals(sessionId)) { + statusesInSession.add(statuses.get(candidate)); + } + } + return statusesInSession; + } + + private void cleanUp() { long now = Calendar.getInstance().getTimeInMillis() / 1000 ; if ( now - lastRun > secondsToKeep) { // time to clean up - List<String> keys2del = new ArrayList<String>(); - for (String cleanUpKey : statuses.keySet()) { + List<UploadFile> keys2del = new ArrayList<UploadFile>(); + for (UploadFile cleanUpKey : statuses.keySet()) { if ( now - statuses.get(cleanUpKey).getLastAccess() > secondsToKeep ) { keys2del.add(cleanUpKey); } } - for (String key2del : keys2del) { + for (UploadFile key2del : keys2del) { statuses.remove(key2del); } } - - return statuses.get(key); } } Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/main/resources/struts-plugin.xml?rev=781750&r1=781749&r2=781750&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/main/resources/struts-plugin.xml Thu Jun 4 14:24:28 2009 @@ -44,4 +44,5 @@ <constant name="struts.fileuploadplugin.listenerupdatefrequency" value="2048" /> <constant name="struts.fileuploadplugin.isportletupload" value="false"/> <constant name="struts.fileuploadplugin.timetokeepstatus" value="600" /> + </struts> \ No newline at end of file Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/BasicProgressListenerTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/BasicProgressListenerTest.java?rev=781750&r1=781749&r2=781750&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/BasicProgressListenerTest.java (original) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/BasicProgressListenerTest.java Thu Jun 4 14:24:28 2009 @@ -27,12 +27,10 @@ import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsStatics; import org.springframework.mock.web.MockServletContext; -import org.springframework.mock.web.MockHttpSession; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import com.opensymphony.xwork2.ActionContext; -import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Map; @@ -85,11 +83,11 @@ String key = request.getSession().getId(); System.err.println("key - " + key); - UploadStatus status = holder.getUploadStatus(key ); + UploadStatus status = holder.getUploadStatus(key , 1); assertTrue(status.getBytesRead() == 10L); assertTrue(status.getContentLength() == 10L); - assertTrue(status.getItem() == 1); + assertTrue(status.getItemId() == 1); } /** @@ -107,11 +105,11 @@ String key = request.getSession().getId(); System.err.println("key - " + key); - UploadStatus status = holder.getUploadStatus(key ); + UploadStatus status = holder.getUploadStatus(key, 1 ); assertTrue(status.getBytesRead() == 10L); assertTrue(status.getContentLength() == 10L); - assertTrue(status.getItem() == 1); + assertTrue(status.getItemId() == 1); } } \ No newline at end of file Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusHolderTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusHolderTest.java?rev=781750&r1=781749&r2=781750&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusHolderTest.java (original) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusHolderTest.java Thu Jun 4 14:24:28 2009 @@ -39,15 +39,15 @@ UploadStatus status1 = new UploadStatus(); status1.setBytesRead(1L); status1.setContentLength(1L); - status1.setItem(1L); + status1.setItemId(1); holder1.addUploadStatus("status1",status1); UploadStatusHolder holder2 = new UploadStatusHolder(); - UploadStatus status2 = holder2.getUploadStatus("status1"); + UploadStatus status2 = holder2.getUploadStatus("status1", 1); assertTrue(status1.getBytesRead() == status2.getBytesRead()); assertTrue(status1.getContentLength() == status2.getContentLength()); - assertTrue(status1.getItem() == status2.getItem()); + assertTrue(status1.getItemId() == status2.getItemId()); } /** @@ -61,10 +61,10 @@ UploadStatus status1 = new UploadStatus(); status1.setBytesRead(1L); status1.setContentLength(1L); - status1.setItem(1L); + status1.setItemId(1); holder1.addUploadStatus("status1",status1); Thread.sleep(5000L); - UploadStatus status2 = holder1.getUploadStatus("status1"); + UploadStatus status2 = holder1.getUploadStatus("status1", 1); assertTrue(status2 == null); } } Modified: struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusTest.java?rev=781750&r1=781749&r2=781750&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusTest.java (original) +++ struts/sandbox/trunk/struts2-fileupload-plugin/src/test/java/org/apache/struts2/fileupload/UploadStatusTest.java Thu Jun 4 14:24:28 2009 @@ -40,11 +40,11 @@ long firstAccess = stat.getLastAccess(); stat.setBytesRead(1L); stat.setContentLength(1L); - stat.setItem(1L); + stat.setItemId(1); Thread.sleep(5000L); assertTrue(1 == stat.getBytesRead()); assertTrue(1 == stat.getContentLength()); - assertTrue(1 == stat.getItem()); + assertTrue(1 == stat.getItemId()); assertTrue(firstAccess < stat.getLastAccess()); } }