You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ga...@apache.org on 2009/03/03 16:44:04 UTC

svn commit: r749634 [1/2] - in /roller/branches/roller_mediablogging/apps/weblogger: src/java/org/apache/roller/weblogger/business/ src/java/org/apache/roller/weblogger/pojos/ src/java/org/apache/roller/weblogger/ui/struts2/editor/ src/java/org/apache/...

Author: ganeshmb
Date: Tue Mar  3 15:44:03 2009
New Revision: 749634

URL: http://svn.apache.org/viewvc?rev=749634&view=rev
Log:
Commiting second patch for media blogging with the following features:
- View media files in a tabular fashion
- View media files in a hierarchical fashion
- Search for a media file with results displayed with pagination.
- Create directories from tabular view and search view.
- Ability to move multiple files across directories
- Ability to delete one or more files.
- Edit metadata for media file.

Added:
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileComparator.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectoryComparator.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileFilter.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileType.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBase.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearch.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearchBean.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/pagers/MediaFilePager.java
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileEdit.jsp
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileHierarchicalView.jsp
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileSearch.jsp
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileView.jsp
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileViewLight.jsp
Removed:
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/TabularView.jsp
Modified:
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManager.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManagerImpl.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.orm.xml
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
    roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBean.java
    roller/branches/roller_mediablogging/apps/weblogger/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java
    roller/branches/roller_mediablogging/apps/weblogger/test/java/org/apache/roller/weblogger/business/MediaFileTest.java
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/classes/ApplicationResources.properties
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/classes/struts.xml
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileAdd.jsp
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileAddSuccess.jsp
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/jsps/editor/MediaFileSidebar.jsp
    roller/branches/roller_mediablogging/apps/weblogger/web/WEB-INF/tiles.xml
    roller/branches/roller_mediablogging/apps/weblogger/web/roller-ui/styles/roller.css

Modified: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManager.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManager.java?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManager.java (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManager.java Tue Mar  3 15:44:03 2009
@@ -24,25 +24,31 @@
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.pojos.MediaFile;
 import org.apache.roller.weblogger.pojos.MediaFileDirectory;
+import org.apache.roller.weblogger.pojos.MediaFileFilter;
 import org.apache.roller.weblogger.pojos.Weblog;
 
 public interface MediaFileManager {
 
-	// TODO: Ganesh - Remove old FileManager implementation
 	public void createMediaFile(Weblog weblog, MediaFile mediaFile) throws WebloggerException ;
 	public void updateMediaFile(Weblog weblog, MediaFile mediaFile) throws WebloggerException ;
 	public MediaFile getMediaFile(String id) throws WebloggerException;
 	public MediaFile getMediaFile(String id, boolean includeContent) throws WebloggerException;
-	public void removeMediaFile(MediaFile mediaFile) throws WebloggerException;
-	
+	public void removeMediaFile(Weblog weblog, MediaFile mediaFile) throws WebloggerException;
+
+	public List<MediaFile> searchMediaFiles(Weblog weblog, MediaFileFilter filter) throws WebloggerException;
+
 	public MediaFileDirectory createRootMediaFileDirectory(Weblog weblog) throws WebloggerException;
+	public MediaFileDirectory createMediaFileDirectory(MediaFileDirectory parentDirectory, String newDirName) throws WebloggerException;
 	public void createMediaFileDirectory(MediaFileDirectory directory) throws WebloggerException;
+	public MediaFileDirectory createMediaFileDirectoryByPath(Weblog weblog, String path) throws WebloggerException; 
 
 	public MediaFileDirectory getMediaFileDirectory(String id) throws WebloggerException;
+	public MediaFileDirectory getMediaFileDirectoryByPath(Weblog weblog, String path) throws WebloggerException; 
 	public List<MediaFileDirectory> getMediaFileDirectories(Weblog weblog) throws WebloggerException;
     public MediaFileDirectory getMediaFileRootDirectory(Weblog weblog) throws WebloggerException;
     
     public void moveMediaFiles(Collection<MediaFile> mediaFiles, MediaFileDirectory directory) throws WebloggerException;
+    public void moveMediaFile(MediaFile mediaFile, MediaFileDirectory directory) throws WebloggerException;
 
 	public void release();
 }

Modified: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManagerImpl.java?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManagerImpl.java (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/business/MediaFileManagerImpl.java Tue Mar  3 15:44:03 2009
@@ -20,6 +20,7 @@
 
 import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 
@@ -27,6 +28,7 @@
 import javax.persistence.OneToMany;
 import javax.persistence.Query;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.WebloggerException;
@@ -34,8 +36,9 @@
 import org.apache.roller.weblogger.pojos.FileContent;
 import org.apache.roller.weblogger.pojos.MediaFile;
 import org.apache.roller.weblogger.pojos.MediaFileDirectory;
+import org.apache.roller.weblogger.pojos.MediaFileFilter;
 import org.apache.roller.weblogger.pojos.Weblog;
-import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
+import org.apache.roller.weblogger.pojos.MediaFileFilter.MediaFileOrder;
 import org.apache.roller.weblogger.util.RollerMessages;
 
 @com.google.inject.Singleton
@@ -63,7 +66,6 @@
 		
 	}
 	
-    @OneToMany
 	public void moveMediaFiles(Collection<MediaFile> mediaFiles, MediaFileDirectory targetDirectory) 
         throws WebloggerException {
     	for (MediaFile mediaFile: mediaFiles) {
@@ -74,6 +76,25 @@
         roller.getWeblogManager().saveWeblog(targetDirectory.getWeblog());
     }
 
+	public void moveMediaFile(MediaFile mediaFile, MediaFileDirectory targetDirectory) 
+        throws WebloggerException {
+		moveMediaFiles(Arrays.asList(mediaFile), targetDirectory);
+	}
+	
+	public MediaFileDirectory createMediaFileDirectory(MediaFileDirectory parentDirectory, String newDirName) 
+	  throws WebloggerException {
+		
+		if (parentDirectory.hasDirectory(newDirName)) {
+            throw new WebloggerException("Directory exists");
+		}
+		
+		MediaFileDirectory newDirectory = parentDirectory.createNewDirectory(newDirName);
+
+		// update weblog last modified date.  date updated by saveWeblog()
+        roller.getWeblogManager().saveWeblog(newDirectory.getWeblog());
+        
+        return newDirectory;
+	}
 	
 	public void createMediaFileDirectory(MediaFileDirectory directory) 
 	  throws WebloggerException {
@@ -83,6 +104,54 @@
         roller.getWeblogManager().saveWeblog(directory.getWeblog());
 	}
 	
+	public MediaFileDirectory createMediaFileDirectoryByPath(Weblog weblog, String path) 
+	    throws WebloggerException {
+		if (path.startsWith("/")) {
+			path = path.substring(1);
+		}
+		
+		if (path.endsWith("/")) {
+			path = path.substring(0, path.length() - 1);
+		}
+		
+		if (path.equals("")) {
+			/**
+			 * Root cannot be created using this method. Use createRootMediaFileDirectory instead
+			 */
+			throw new WebloggerException("Invalid path!");
+		}
+		
+		int lastPathIndex = path.lastIndexOf("/");
+		
+		MediaFileDirectory parentDirectory;
+		String newDirName;
+		if (lastPathIndex == -1) {
+			//Directory needs to be created under root
+			newDirName = path;
+			parentDirectory = getMediaFileRootDirectory(weblog);
+		}
+		else {
+			String parentPath = path.substring(0, lastPathIndex);
+			newDirName = path.substring(lastPathIndex + 1);
+			parentDirectory = getMediaFileDirectoryByPath(weblog, "/" + parentPath);
+			// Validate whether the parent directory exists
+			if (parentDirectory == null) {
+	            throw new WebloggerException("Parent directory does not exist");
+			}
+		}
+
+		if (parentDirectory.hasDirectory(newDirName)) {
+            throw new WebloggerException("Directory exists");
+		}
+		
+		MediaFileDirectory newDirectory = parentDirectory.createNewDirectory(newDirName);
+
+		// update weblog last modified date.  date updated by saveWeblog()
+        roller.getWeblogManager().saveWeblog(weblog);
+        
+        return newDirectory;
+	}
+	
 	public MediaFileDirectory createRootMediaFileDirectory(Weblog weblog) 
 	    throws WebloggerException {
         MediaFileDirectory rootDirectory = new MediaFileDirectory(null, "root", "root directory", weblog);
@@ -130,6 +199,20 @@
         return mediaFile;
 	}
 
+	public MediaFileDirectory getMediaFileDirectoryByPath(Weblog weblog, String path) 
+    throws WebloggerException {
+        Query q = this.persistenceStrategy.getNamedQuery("MediaFileDirectory.getByWeblogAndPath");
+        q.setParameter(1, weblog);
+        q.setParameter(2, path);
+        try {
+            return (MediaFileDirectory)q.getSingleResult();
+        } catch (NoResultException e) {
+            return null;
+        }
+    }
+
+
+	
 	public MediaFileDirectory getMediaFileDirectory(String id) 
 	    throws WebloggerException {
 		return (MediaFileDirectory) this.persistenceStrategy.load(MediaFileDirectory.class, id);
@@ -154,11 +237,115 @@
         return q.getResultList();
 	}
 	
-	public void removeMediaFile(MediaFile mediaFile) 
+	public void removeMediaFile(Weblog weblog, MediaFile mediaFile) 
 	    throws WebloggerException {
-		this.persistenceStrategy.remove(mediaFile);
+        FileContentManager cmgr = WebloggerFactory.getWeblogger().getFileContentManager();
+
+        this.persistenceStrategy.remove(mediaFile);
+        // update weblog last modified date.  date updated by saveWeblog()
+        roller.getWeblogManager().saveWeblog(weblog);
+
+        cmgr.deleteFile(weblog, mediaFile.getId());
 	}
 	
+	public List<MediaFile> searchMediaFiles(Weblog weblog, MediaFileFilter filter) 
+	     throws WebloggerException {
+        
+		List<Object> params = new ArrayList<Object>();
+        int size = 0;
+        StringBuffer queryString = new StringBuffer();
+        StringBuffer whereClause = new StringBuffer();
+        StringBuffer orderBy = new StringBuffer();
+        
+        queryString.append("SELECT m FROM MediaFile m WHERE ");
+        
+        params.add(size ++, weblog);
+        whereClause.append("m.directory.weblog = ?" + size);
+        
+        if (!StringUtils.isEmpty(filter.getName())) {
+        	params.add(size ++, filter.getName());
+        	whereClause.append(" AND m.name = ?" + size);
+        }
+
+        if (filter.getSize() > 0) {
+        	params.add(size ++, filter.getSize());
+        	whereClause.append(" AND m.length ");
+        	switch (filter.getSizeFilterType()) {
+            	case GT: whereClause.append(">");break;
+            	case GTE: whereClause.append(">=");break;
+            	case EQ: whereClause.append("=");break;
+        	    case LT: whereClause.append("<");break;
+        	    case LTE: whereClause.append("<=");break;
+        	    default: whereClause.append("=");break;
+        	}
+        	whereClause.append(" ?" + size);
+        }
+        
+        if (filter.getTags() != null) {
+        	whereClause.append(" AND EXISTS (SELECT t FROM MediaFileTag t WHERE t.mediaFile = m and t.name IN (");
+        	for (String tag: filter.getTags()) {
+        	    params.add(size ++, tag);
+        	    whereClause.append("?").append(size).append(",");
+        	}
+        	whereClause.deleteCharAt(whereClause.lastIndexOf(","));
+        	whereClause.append("))");
+        }
+        
+        if (filter.getType() != null) {
+        	whereClause.append(" AND m.contentType IN (");
+    		for (String contentType: filter.getType().getContentTypes()) {
+        	    params.add(size ++, contentType);
+        	    whereClause.append("?").append(size).append(",");
+    		}
+        	whereClause.deleteCharAt(whereClause.lastIndexOf(","));
+        	whereClause.append(")");
+        }
+        
+        switch(filter.getOrder()) {
+            case NAME: orderBy.append(" order by m.name");break;
+            case DATE_UPLOADED: orderBy.append(" order by m.dateUploaded");break;
+            case TYPE: orderBy.append(" order by m.contentType");break;
+            default:
+        }
+
+        Query query = persistenceStrategy.getDynamicQuery(queryString.toString() + whereClause.toString());
+        for (int i=0; i<params.size(); i++) {
+            query.setParameter(i+1, params.get(i));
+        }
+        
+        if (filter.getStartIndex() >= 0) {
+            query.setFirstResult(filter.getStartIndex());
+            query.setMaxResults(filter.getLength());
+        }
+        
+        return query.getResultList();
+	}
+	
+	public static void main(String[] args) {
+		/**
+		MediaFileManagerImpl impl = new MediaFileManagerImpl(null, null);
+		
+		MediaFileFilter filter = new MediaFileFilter();
+		filter.setName("testname");
+
+		filter.setSize(3);
+		filter.setSizeFilterType(MediaFileFilter.SizeFilterType.EQ);
+		
+		List<String> tags = new ArrayList<String>();
+		tags.add("test1");
+		tags.add("test2");
+		filter.setTags(tags);
+		
+		filter.setType(MediaFileType.IMAGE);
+
+		System.out.println(impl.searchMediaFiles(null, filter));
+		*/
+	}
+	
+	
+	
+	
+	
 	/*
 	public void searchMediaFiles(MediaFileSearchCriteria searchCriteria) {
 		

Modified: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFile.java Tue Mar  3 15:44:03 2009
@@ -237,4 +237,15 @@
 	public void setContent(FileContent content) {
 		this.content = content;
 	}
+	
+	public boolean isImageFile() {
+		if (this.contentType == null) return false;
+    	String[] allowedImageContentTypes = MediaFileType.IMAGE.getContentTypes(); 
+    	for (String imageContentType: allowedImageContentTypes) {
+    		if (imageContentType.equals(this.contentType)) {
+    			return true;
+    		}
+    	}
+    	return false;
+	}
 }

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileComparator.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileComparator.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileComparator.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileComparator.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,24 @@
+package org.apache.roller.weblogger.pojos;
+
+import java.util.Comparator;
+
+public class MediaFileComparator implements Comparator<MediaFile> {
+	
+	public enum MediaFileComparatorType {NAME, TYPE, DATE_UPLOADED};
+	MediaFileComparatorType type;
+	
+	public MediaFileComparator(MediaFileComparatorType type) {
+		this.type = type;
+	}
+
+	public int compare(MediaFile file1, MediaFile file2) {
+		switch (this.type) {
+		    case NAME: return file1.getName().compareTo(file2.getName());
+		    case TYPE: return file1.getContentType().compareTo(file2.getContentType());
+		    // Do descending comparison by default for date field
+		    case DATE_UPLOADED: return file2.getDateUploaded().compareTo(file1.getDateUploaded());  
+		    default: return 0;
+		}
+	}
+
+}

Modified: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.java?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.java (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.java Tue Mar  3 15:44:03 2009
@@ -200,6 +200,8 @@
     
     public boolean hasMediaFile(String name) {
     	Set<MediaFile> fileSet = this.getMediaFiles();
+    	if (fileSet == null) 
+    		return false;
     	for (MediaFile mediaFile: fileSet) {
     		if (mediaFile.getName().equals(name)) {
     			return true;
@@ -208,6 +210,34 @@
     	return false;
     }
     
+    public MediaFile getMediaFile(String name) {
+    	Set<MediaFile> fileSet = this.getMediaFiles();
+    	if (fileSet == null) 
+    		return null;
+    	for (MediaFile mediaFile: fileSet) {
+    		if (mediaFile.getName().equals(name)) {
+    			return mediaFile;
+    		}
+    	}
+    	return null;
+    }
+    
+    public boolean hasDirectory(String name) {
+    	Set<MediaFileDirectory> dirSet = this.getChildDirectories();
+    	for (MediaFileDirectory directory: dirSet) {
+    		if (directory.getName().equals(name)) {
+    			return true;
+    		}
+    	}
+    	return false;
+    }
+    
+    public MediaFileDirectory createNewDirectory(String name) {
+    	MediaFileDirectory newDirectory = new MediaFileDirectory(this, name, "", this.getWeblog());
+    	this.getChildDirectories().add(newDirectory);
+    	return newDirectory;
+    }
+    
     
     public Set<MediaFile> getMediaFiles() {
 		return mediaFiles;

Modified: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.orm.xml
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.orm.xml?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.orm.xml (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectory.orm.xml Tue Mar  3 15:44:03 2009
@@ -18,6 +18,9 @@
         <named-query name="MediaFileDirectory.getByWeblogAndNoParent">
             <query>SELECT d FROM MediaFileDirectory d WHERE d.weblog = ?1 AND d.parent IS NULL</query>
         </named-query>
+        <named-query name="MediaFileDirectory.getByWeblogAndPath">
+            <query>SELECT d FROM MediaFileDirectory d WHERE d.weblog = ?1 AND d.path = ?2</query>
+        </named-query>
         <attributes>
             <id name="id">
                 <column name="id"/>
@@ -40,6 +43,7 @@
             <one-to-many name="childDirectories" mapped-by="parent" target-entity="org.apache.roller.weblogger.pojos.MediaFileDirectory" fetch="LAZY">
                 <order-by>name</order-by>
                 <cascade>
+                    <cascade-persist/>
                     <cascade-remove/>
                 </cascade>
             </one-to-many>

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectoryComparator.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectoryComparator.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectoryComparator.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileDirectoryComparator.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,22 @@
+package org.apache.roller.weblogger.pojos;
+
+import java.util.Comparator;
+
+public class MediaFileDirectoryComparator implements Comparator<MediaFileDirectory> {
+	
+	public enum DirectoryComparatorType {NAME, PATH};
+	DirectoryComparatorType type;
+	
+	public MediaFileDirectoryComparator(DirectoryComparatorType type) {
+		this.type = type;
+	}
+
+	public int compare(MediaFileDirectory dir1, MediaFileDirectory dir2) {
+		switch (this.type) {
+		    case NAME: return dir1.getName().compareTo(dir2.getName());
+		    case PATH: return dir1.getPath().compareTo(dir2.getPath());
+		    default: return 0;
+		}
+	}
+
+}

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileFilter.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileFilter.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileFilter.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileFilter.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,94 @@
+package org.apache.roller.weblogger.pojos;
+
+import java.util.List;
+
+public class MediaFileFilter {
+	
+	public enum SizeFilterType {GT, GTE, EQ, LT, LTE};
+	public enum MediaFileOrder {NAME, DATE_UPLOADED, TYPE};
+
+	String name;
+	MediaFileType type;
+	long size;
+	SizeFilterType sizeFilterType;
+	List<String> tags;
+	MediaFileOrder order;
+	
+	/**
+	 * Indicates the starting index in the complete result set 
+	 * from which results should be returned.  This is always applied
+	 * along with the length attribute below.
+	 * A value of -1 means that the complete result set should be
+	 * returned. length will be ignored in this case.
+	 */
+	int startIndex = -1;
+	/**
+	 * Number of results to be returned starting from startIndex.
+	 */
+	int length;
+	
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public MediaFileType getType() {
+		return type;
+	}
+
+	public void setType(MediaFileType type) {
+		this.type = type;
+	}
+
+	public List<String> getTags() {
+		return tags;
+	}
+
+	public void setTags(List<String> tags) {
+		this.tags = tags;
+	}
+
+	public long getSize() {
+		return size;
+	}
+
+	public void setSize(long size) {
+		this.size = size;
+	}
+
+	public SizeFilterType getSizeFilterType() {
+		return sizeFilterType;
+	}
+
+	public void setSizeFilterType(SizeFilterType sizeFilterType) {
+		this.sizeFilterType = sizeFilterType;
+	}
+
+	public int getStartIndex() {
+		return startIndex;
+	}
+
+	public void setStartIndex(int startIndex) {
+		this.startIndex = startIndex;
+	}
+
+	public int getLength() {
+		return length;
+	}
+
+	public void setLength(int length) {
+		this.length = length;
+	}
+
+	public MediaFileOrder getOrder() {
+		return order;
+	}
+
+	public void setOrder(MediaFileOrder order) {
+		this.order = order;
+	}
+
+}

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileType.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileType.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileType.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/MediaFileType.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,30 @@
+package org.apache.roller.weblogger.pojos;
+
+public enum MediaFileType {
+
+	AUDIO("audio", "Audio", "audio/mpeg", "audio/x-ms-wma", "audio/x-wav", "audio/vnd.rn-realaudio"), 
+	VIDEO("video", "Video", "video/mpeg", "video/mp4", "video/quicktime", "video/x-ms-wmv"),  
+	IMAGE("image", "Image", "image/jpeg", "image/gif", "image/png", "image/tiff");
+
+	String[] contentTypes;
+	String id;
+	String description;
+	
+	MediaFileType(String id, String desc, String... contentTypes) {
+		this.id = id;
+		this.description = desc;
+		this.contentTypes = contentTypes;
+	}
+
+	public String[] getContentTypes() {
+		return contentTypes;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public String getDesc() {
+		return description;
+	}
+}

Modified: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileAdd.java Tue Mar  3 15:44:03 2009
@@ -20,6 +20,7 @@
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -33,21 +34,21 @@
 import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
 import org.apache.roller.weblogger.pojos.MediaFile;
 import org.apache.roller.weblogger.pojos.MediaFileDirectory;
-import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.roller.weblogger.pojos.MediaFileType;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
 /**
  * Adds a new media file.
  */
 @SuppressWarnings("serial")
-public class MediaFileAdd extends UIAction {
+public class MediaFileAdd extends MediaFileBase {
     private static Log log = LogFactory.getLog(MediaFileAdd.class);
     
     private MediaFileBean bean =  new MediaFileBean();
+    
+    // TODO: Ganesh - Move this to MediaFileBean
     private String directoryId;
     private MediaFileDirectory directory;
-    private List<MediaFileDirectory> allDirectories;
-
     // file uploaded by the user
     private File uploadedFile = null;
     
@@ -64,9 +65,10 @@
     }
     
     public void myPrepare() {
-        try {
+        System.out.println("Into myprepare");
+    	refreshAllDirectories();
+    	try {
             MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
-            setAllDirectories(mgr.getMediaFileDirectories(getActionWeblog()));
             if(!StringUtils.isEmpty(getDirectoryId())) {
                 setDirectory(mgr.getMediaFileDirectory(getDirectoryId()));
             }
@@ -133,18 +135,28 @@
         if (StringUtils.isEmpty(this.uploadedFileFileName)) {
         	addError("error.upload.file");
         }
-    }
+        
+        if (getBean().getCopyrightText().length() > 1023) {
+        	addError("errors.maxlength", Arrays.asList("Copyright text", "1023"));
+        }
+
+        if (getBean().getDescription().length() > 255) {
+        	addError("errors.maxlength", Arrays.asList("File description", "255"));
+        }
+}
     
     /**
      * Get the list of all categories for the action weblog, not including root.
      */
     public List<MediaFileDirectory> getDirectories() {
-        try {
-        	MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
+        
+    	try {
+        	// TODO: Ganesh - do this in prepare method?
+    		MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
             return mgr.getMediaFileDirectories(getActionWeblog());
         } catch (WebloggerException ex) {
             log.error("Error getting media file directory list for weblog - "+getWeblog(), ex);
-            return Collections.EMPTY_LIST;
+            return Collections.emptyList();
         }
     }
 
@@ -172,14 +184,6 @@
 		this.directory = directory;
 	}
 	
-	public List<MediaFileDirectory> getAllDirectories() {
-		return allDirectories;
-	}
-    
-	public void setAllDirectories(List<MediaFileDirectory> dirs) {
-		this.allDirectories = dirs;
-	}
-
     public File getUploadedFile() {
         return uploadedFile;
     }
@@ -205,13 +209,12 @@
     }
     
     public boolean isContentTypeImage() {
-    	// TODO: To be expanded
-    	if ("image/jpeg".equals(this.uploadedFileContentType)
-    	|| 	"image/gif".equals(this.uploadedFileContentType)	
-    	) {
-    		return true;
+    	String[] allowedImageContentTypes = MediaFileType.IMAGE.getContentTypes(); 
+    	for (String imageContentType: allowedImageContentTypes) {
+    		if (imageContentType.equals(this.uploadedFileContentType)) {
+    			return true;
+    		}
     	}
-    	
     	return false;
     }
 }

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBase.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBase.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBase.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBase.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,162 @@
+package org.apache.roller.weblogger.ui.struts2.editor;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.MediaFileManager;
+import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.apache.roller.weblogger.pojos.MediaFile;
+import org.apache.roller.weblogger.pojos.MediaFileDirectory;
+import org.apache.roller.weblogger.pojos.MediaFileDirectoryComparator;
+import org.apache.roller.weblogger.pojos.MediaFileDirectoryComparator.DirectoryComparatorType;
+import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+
+@SuppressWarnings("serial")
+public class MediaFileBase extends UIAction {
+    private static Log log = LogFactory.getLog(MediaFileBase.class);
+
+    private String[] selectedMediaFiles;
+    private String selectedDirectory;
+    private String mediaFileId;
+
+    private List<MediaFileDirectory> allDirectories;
+    
+    protected void doDeleteMediaFile() {
+        
+    	try {
+			log.debug("Processing delete of file id - " + this.mediaFileId);
+			MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+			MediaFile mediaFile = manager.getMediaFile(this.mediaFileId);
+			manager.removeMediaFile(getActionWeblog(), mediaFile);
+			// flush changes
+			WebloggerFactory.getWeblogger().flush();
+			addMessage("mediaFile.delete.success");
+		} catch (WebloggerException e) {
+            log.error("Error deleting media file", e);
+            // TODO: i18n
+            addError("Error deleting media file - " + this.mediaFileId);
+		}
+    }
+    
+    protected void doIncludeMediaFileInGallery() {
+        
+    	try {
+			log.debug("Processing include-in-gallery of file id - " + this.mediaFileId);
+			MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+			MediaFile mediaFile = manager.getMediaFile(this.mediaFileId);
+			mediaFile.setSharedForGallery(true);
+			manager.updateMediaFile(getActionWeblog(), mediaFile);
+			// flush changes
+			WebloggerFactory.getWeblogger().flush();
+			addMessage("mediaFile.includeInGallery.success");
+		} catch (WebloggerException e) {
+            log.error("Error including media file in gallery", e);
+            // TODO: i18n
+            addError("Error including media file in gallery - " + this.mediaFileId);
+		}
+    }
+    
+
+    protected void doDeleteSelected() {
+        String[] fileIds = getSelectedMediaFiles();
+        if (fileIds != null && fileIds.length > 0) {
+        	try {
+				log.debug("Processing delete of " + fileIds.length + " media files.");
+				MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+				for (int index = 0; index < fileIds.length; index++) {
+				    log.debug("Deleting media file - " + fileIds[index]);
+				    MediaFile mediaFile = manager.getMediaFile(fileIds[index]);
+				    manager.removeMediaFile(getActionWeblog(), mediaFile);
+				}
+				// flush changes
+				WebloggerFactory.getWeblogger().flush();
+				addMessage("mediaFile.delete.success");
+			} catch (WebloggerException e) {
+	            log.error("Error deleting selected media files", e);
+                // TODO: i18n
+                addError("Error deleting selected media files");
+			}
+        }
+        else {
+        	addError("mediaFile.error.noneSelectedForDelete");
+        }
+    }
+    
+    protected void doMoveSelected() {
+        String[] fileIds = getSelectedMediaFiles();
+        if (fileIds != null && fileIds.length > 0) {
+        	try {
+				log.debug("Processing move of " + fileIds.length + " media files.");
+				MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+				MediaFileDirectory targetDirectory = manager.getMediaFileDirectory(this.selectedDirectory);
+				for (int index = 0; index < fileIds.length; index++) {
+				    log.debug("Moving media file - " + fileIds[index] + " to directory - " + this.selectedDirectory);
+				    MediaFile mediaFile = manager.getMediaFile(fileIds[index]);
+				    manager.moveMediaFile(mediaFile, targetDirectory);
+				}
+				// flush changes
+				WebloggerFactory.getWeblogger().flush();
+				addMessage("mediaFile.move.success");
+			} catch (WebloggerException e) {
+	            log.error("Error moving selected media files", e);
+                // TODO: i18n
+                addError("Error moving selected media files");
+			}
+        }
+        else {
+        	addError("mediaFile.error.noneSelectedForMove");
+        }
+    }
+
+    protected void refreshAllDirectories() {
+        try {
+            MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
+            List<MediaFileDirectory> directories = mgr.getMediaFileDirectories(getActionWeblog());
+            List<MediaFileDirectory> sortedDirList = new ArrayList<MediaFileDirectory>();
+            sortedDirList.addAll(directories);
+            Collections.sort(sortedDirList, new MediaFileDirectoryComparator(DirectoryComparatorType.PATH));
+            setAllDirectories(sortedDirList);
+        } catch (WebloggerException ex) {
+            log.error("Error looking up media file directories", ex);
+            // TODO: Ganesh - Handle exception
+        }
+    }
+
+	public String[] getSelectedMediaFiles() {
+		return selectedMediaFiles;
+	}
+
+	public void setSelectedMediaFiles(String[] selectedMediaFiles) {
+		this.selectedMediaFiles = selectedMediaFiles;
+	}
+
+	public String getSelectedDirectory() {
+		return selectedDirectory;
+	}
+
+	public void setSelectedDirectory(String selectedDirectory) {
+		this.selectedDirectory = selectedDirectory;
+	}
+
+
+	public List<MediaFileDirectory> getAllDirectories() {
+		return allDirectories;
+	}
+
+	public void setAllDirectories(List<MediaFileDirectory> allDirectories) {
+		this.allDirectories = allDirectories;
+	}
+
+	public String getMediaFileId() {
+		return mediaFileId;
+	}
+
+	public void setMediaFileId(String mediaFileId) {
+		this.mediaFileId = mediaFileId;
+	}
+
+}

Modified: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBean.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBean.java?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBean.java (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileBean.java Tue Mar  3 15:44:03 2009
@@ -44,6 +44,7 @@
     boolean isSharedForGallery;
 
     public void copyTo(MediaFile dataHolder) throws WebloggerException {
+    	
     	dataHolder.setName(this.name);
     	dataHolder.setDescription(this.description);
     	dataHolder.setCopyrightText(this.copyrightText);
@@ -58,6 +59,24 @@
     
     
     public void copyFrom(MediaFile dataHolder) {
+    	this.setId(dataHolder.getId());
+    	this.setName(dataHolder.getName());
+    	this.setDescription(dataHolder.getDescription());
+    	this.setCopyrightText(dataHolder.getCopyrightText());
+    	
+    	Set<MediaFileTag> tags = dataHolder.getTags();
+    	if (tags != null && !tags.isEmpty()) {
+        	StringBuffer tagDisplayBuffer = new StringBuffer();
+        	for (MediaFileTag tag: dataHolder.getTags()) {
+        		tagDisplayBuffer.append(tag.getName());
+        		tagDisplayBuffer.append(" ");
+        	}
+        	tagDisplayBuffer.deleteCharAt(tagDisplayBuffer.length() - 1);
+        	this.setTags(tagDisplayBuffer.toString());
+    	}
+    	
+    	this.setSharedForGallery(dataHolder.isSharedForGallery());
+    	this.setDirectoryId(dataHolder.getDirectory().getId());
     }
 
 

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileEdit.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.ui.struts2.editor;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.FileIOException;
+import org.apache.roller.weblogger.business.MediaFileManager;
+import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
+import org.apache.roller.weblogger.pojos.MediaFile;
+import org.apache.roller.weblogger.pojos.MediaFileDirectory;
+import org.apache.roller.weblogger.ui.struts2.util.UIAction;
+import org.apache.struts2.interceptor.validation.SkipValidation;
+
+/**
+ * Adds a new media file.
+ */
+@SuppressWarnings("serial")
+public class MediaFileEdit extends UIAction {
+    private static Log log = LogFactory.getLog(MediaFileEdit.class);
+    
+    private String mediaFileId; 
+
+    private MediaFileBean bean =  new MediaFileBean();
+    private MediaFileDirectory directory;
+    
+    private List<MediaFileDirectory> allDirectories;
+
+    public MediaFileEdit() {
+        this.actionName = "mediaFileEdit";
+        this.desiredMenu = "editor";
+        this.pageTitle = "mediaFile.edit.title";
+    }
+    
+    public void myPrepare() {
+        try {
+            MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
+            setAllDirectories(mgr.getMediaFileDirectories(getActionWeblog()));
+            if(!StringUtils.isEmpty(bean.getDirectoryId())) {
+                setDirectory(mgr.getMediaFileDirectory(bean.getDirectoryId()));
+            }
+        } catch (WebloggerException ex) {
+            log.error("Error looking up media file directory", ex);
+            // TODO: Ganesh - Handle exception
+        }
+    }
+
+    /**
+     * Show form for adding a new media file.
+     * 
+     * @return String The result of the action.
+     */
+    @SkipValidation
+    public String execute() {
+		MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+		try {
+			MediaFile mediaFile = manager.getMediaFile(this.mediaFileId);
+			this.bean.copyFrom(mediaFile);
+    		return SUCCESS;
+        } catch (FileIOException ex) {
+            addError("uploadFiles.error.upload", bean.getName());
+		} catch (Exception e) {
+            log.error("Error saving new entry", e);
+            // TODO: i18n
+            addError("Error reading uploaded file - " + bean.getName());
+		}
+
+		return INPUT;
+    }
+    
+    /**
+     * Save a media file.
+     * 
+     * @return String The result of the action.
+     */
+    public String save() {
+    	myValidate();
+    	if (!hasActionErrors()) {
+    		MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+    		try {
+    			MediaFile mediaFile = manager.getMediaFile(this.mediaFileId);
+    			bean.copyTo(mediaFile);
+				manager.updateMediaFile(getActionWeblog(), mediaFile);
+	            WebloggerFactory.getWeblogger().flush();
+	            addMessage("mediaFile.update.success");
+	    		return SUCCESS;
+            } catch (FileIOException ex) {
+                addError("uploadFiles.error.upload", bean.getName());
+			} catch (Exception e) {
+	            log.error("Error saving new entry", e);
+                // TODO: i18n
+                addError("Error reading uploaded file - " + bean.getName());
+			}
+			
+    	}
+		return INPUT;
+    }
+    
+    public void myValidate() {
+    	MediaFile fileWithSameName = getDirectory().getMediaFile(getBean().getName());
+        if (fileWithSameName != null && !fileWithSameName.getId().equals(this.mediaFileId)) {
+            addError("MediaFile.error.duplicateName", getBean().getName());
+        }
+    }
+    
+    /**
+     * Get the list of all categories for the action weblog, not including root.
+     */
+    public List<MediaFileDirectory> getDirectories() {
+        
+    	try {
+        	// TODO: Ganesh - do this in prepare method?
+    		MediaFileManager mgr = WebloggerFactory.getWeblogger().getMediaFileManager();
+            return mgr.getMediaFileDirectories(getActionWeblog());
+        } catch (WebloggerException ex) {
+            log.error("Error getting media file directory list for weblog - "+getWeblog(), ex);
+            return Collections.EMPTY_LIST;
+        }
+    }
+
+    public MediaFileBean getBean() {
+    	return bean;
+    }
+    
+    public void setBean(MediaFileBean b) {
+    	this.bean = b;
+    }
+    
+	public List<MediaFileDirectory> getAllDirectories() {
+		return allDirectories;
+	}
+    
+	public void setAllDirectories(List<MediaFileDirectory> dirs) {
+		this.allDirectories = dirs;
+	}
+
+	public String getMediaFileId() {
+		return mediaFileId;
+	}
+
+	public void setMediaFileId(String mediaFileId) {
+		this.mediaFileId = mediaFileId;
+	}
+
+	public MediaFileDirectory getDirectory() {
+		return directory;
+	}
+
+	public void setDirectory(MediaFileDirectory directory) {
+		this.directory = directory;
+	}
+
+}

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearch.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearch.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearch.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearch.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,237 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.ui.struts2.editor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.MediaFileManager;
+import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.apache.roller.weblogger.pojos.MediaFile;
+import org.apache.roller.weblogger.pojos.MediaFileFilter;
+import org.apache.roller.weblogger.ui.struts2.pagers.MediaFilePager;
+import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
+import org.apache.struts2.interceptor.validation.SkipValidation;
+
+/**
+ * Handles actions associated with media file search page.
+ */
+@SuppressWarnings("serial")
+public class MediaFileSearch extends MediaFileBase {
+    private static Log log = LogFactory.getLog(MediaFileSearch.class);
+
+    private static final List<String> fileTypes;
+    private static final List<KeyValueObject> sizeFilterTypes;
+    private static final List<KeyValueObject> sizeUnits;
+    private static final List<KeyValueObject> sortOptions;
+    
+    private MediaFilePager pager;
+
+    private String newDirectoryPath;
+    
+    static {
+        fileTypes = Arrays.asList("", "Audio", "Video", "Image");
+        
+        sizeFilterTypes = Arrays.asList(
+        		new KeyValueObject(0, "greater than"),
+        		new KeyValueObject(1, "greater than or equal to"),
+        		new KeyValueObject(2, "equal to"),
+        		new KeyValueObject(3, "less than or equal to"),
+        		new KeyValueObject(4, "less than")
+        		);
+
+        sizeUnits = Arrays.asList(
+        		new KeyValueObject(0, "bytes"),
+        		new KeyValueObject(1, "kilobytes"),
+        		new KeyValueObject(2, "megabytes")
+        		);
+        
+        sortOptions = Arrays.asList(
+        		new KeyValueObject(0, "Name"),
+        		new KeyValueObject(1, "Date Uploaded"),
+        		new KeyValueObject(2, "Type")
+        		); 
+    }
+    
+    private MediaFileSearchBean bean =  new MediaFileSearchBean();
+
+    public MediaFileSearch() {
+        this.actionName = "mediaFileSearch";
+        this.desiredMenu = "editor";
+        this.pageTitle = "mediaFile.search.title";
+    }
+    
+    public void myPrepare() {
+    	refreshAllDirectories();
+    }
+    
+    /**
+     * Show form for adding a new media file.
+     * 
+     * @return String The result of the action.
+     */
+    @SkipValidation
+    public String execute() {
+		return INPUT;
+    }
+    
+    /**
+     * Save a media file.
+     * 
+     * @return String The result of the action.
+     */
+    public String search() {
+    	boolean valSuccess = myValidate();
+    	if (valSuccess) {
+    		MediaFileFilter filter = new MediaFileFilter();
+    		bean.copyTo(filter);
+    		MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+    		try {
+    			List<MediaFile> rawResults = manager.searchMediaFiles(getActionWeblog(), filter);
+    			boolean hasMore = false;
+    			List<MediaFile> results = new ArrayList<MediaFile>();
+    			results.addAll(rawResults);
+    			if (results.size() > MediaFileSearchBean.PAGE_SIZE) {
+    				results.remove(results.size() - 1);
+    				hasMore = true;
+    			}
+    			
+    			this.pager = new MediaFilePager(bean.getPageNum(), results, hasMore);
+    			
+    			if (results.isEmpty()) {
+                    addError("MediaFile.error.search.noResults");
+    			}
+	    		return SUCCESS;
+			} catch (Exception e) {
+	            log.error("Error applying search criteria", e);
+                // TODO: i18n
+                addError("Error applying search criteria");
+			}
+    		
+    	}
+		return INPUT;
+    }
+    
+    public String delete() {
+    	doDeleteMediaFile();
+    	return search();
+    }
+    
+    public String includeInGallery() {
+    	doIncludeMediaFileInGallery();
+    	return search();
+    }
+
+    public String deleteSelected() {
+    	doDeleteSelected();
+    	return search();
+    }
+    
+    public String moveSelected() {
+        doMoveSelected();
+    	return search();
+    }
+    
+    public String createDirByPath() {
+    	boolean dirCreated = false;
+		if (StringUtils.isEmpty(this.newDirectoryPath)) {
+			addError("mediaFile.error.search.dirPathEmpty");
+		}
+		else if (!this.newDirectoryPath.startsWith("/")) {
+			addError("mediaFile.error.search.dirPathInvalid");
+		}
+		else {
+	    	try {
+				log.debug("Creating directory by path - " + this.newDirectoryPath);
+				MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+				manager.createMediaFileDirectoryByPath(getActionWeblog(), this.newDirectoryPath);
+				// flush changes
+				WebloggerFactory.getWeblogger().flush();
+				addMessage("mediaFile.directoryCreate.success");
+				dirCreated = true;
+			} catch (WebloggerException e) {
+	            log.error("Error creating new directory by path", e);
+	            // TODO: i18n
+	            addError("Error creating new directory by path");
+			}
+		}
+        
+		if (dirCreated) {
+			// Refresh list of directories so the newly created directory is included.
+			refreshAllDirectories();
+		}
+    	return search();
+    }
+    
+    public boolean myValidate() {
+        if (StringUtils.isEmpty(bean.getName())
+        	&& StringUtils.isEmpty(bean.getTags())
+        	&& StringUtils.isEmpty(bean.getType())
+        	&& bean.getSize() == 0) {
+        	addError("MediaFile.error.search.empty");
+        	return false;
+        }
+        return true;
+    }
+    
+    public MediaFileSearchBean getBean() {
+    	return bean;
+    }
+    
+    public void setBean(MediaFileSearchBean b) {
+    	this.bean = b;
+    }
+    
+    public List<String> getFileTypes() {
+    	return fileTypes;
+    }
+    
+    public List<KeyValueObject> getSizeFilterTypes() {
+    	return sizeFilterTypes;
+    }
+    
+    public List<KeyValueObject> getSizeUnits() {
+    	return sizeUnits;
+    }
+
+    public List<KeyValueObject> getSortOptions() {
+    	return sortOptions;
+    }
+
+    public MediaFilePager getPager() {
+		return pager;
+	}
+
+	public void setPager(MediaFilePager pager) {
+		this.pager = pager;
+	}
+
+	public String getNewDirectoryPath() {
+		return newDirectoryPath;
+	}
+
+	public void setNewDirectoryPath(String newDirectoryPath) {
+		this.newDirectoryPath = newDirectoryPath;
+	}
+}

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearchBean.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearchBean.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearchBean.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileSearchBean.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.ui.struts2.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.roller.weblogger.pojos.MediaFileFilter;
+import org.apache.roller.weblogger.pojos.MediaFileType;
+import org.apache.roller.weblogger.pojos.MediaFileFilter.MediaFileOrder;
+import org.apache.roller.weblogger.pojos.MediaFileFilter.SizeFilterType;
+
+/**
+ * Bean for holding media file search criteria.
+ */
+public class MediaFileSearchBean {
+	public static int PAGE_SIZE = 5;
+
+	String name;
+	String type;
+	int sizeFilterType;
+	long size;
+	int sizeUnit;
+	String tags;
+	int pageNum = 0;
+	int sortOption;
+
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getType() {
+		return type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+	public int getSizeFilterType() {
+		return sizeFilterType;
+	}
+	public void setSizeFilterType(int sizeFilterType) {
+		this.sizeFilterType = sizeFilterType;
+	}
+	public long getSize() {
+		return size;
+	}
+	public void setSize(long size) {
+		this.size = size;
+	}
+	public int getSizeUnit() {
+		return sizeUnit;
+	}
+	public void setSizeUnit(int sizeUnit) {
+		this.sizeUnit = sizeUnit;
+	}
+	public String getTags() {
+		return tags;
+	}
+	public void setTags(String tags) {
+		this.tags = tags;
+	}
+	
+    public int getPageNum() {
+		return pageNum;
+	}
+	public void setPageNum(int pageNum) {
+		this.pageNum = pageNum;
+	}
+
+	public int getSortOption() {
+		return sortOption;
+	}
+	public void setSortOption(int sortOption) {
+		this.sortOption = sortOption;
+	}
+
+	public void copyTo(MediaFileFilter dataHolder) {
+    	dataHolder.setName(this.name);
+    	
+    	if (!StringUtils.isEmpty(this.type)) {
+        	MediaFileType filterType = null;
+    		if ("Audio".equals(this.type)) {
+    			filterType = MediaFileType.AUDIO;
+    		}
+    		else if ("Video".equals(this.type)) {
+    			filterType = MediaFileType.VIDEO;
+    		}
+    		else if ("Image".equals(this.type)) {
+    			filterType = MediaFileType.IMAGE;
+    		}
+    		
+    		dataHolder.setType(filterType);
+    	}
+    	
+    	if (this.size > 0) {
+        	SizeFilterType type;
+        	switch(this.sizeFilterType) {
+        	case 0: type = SizeFilterType.GT;break;
+        	case 1: type = SizeFilterType.GTE;break;
+        	case 2: type = SizeFilterType.EQ;break;
+        	case 3: type = SizeFilterType.LTE;break;
+        	case 4: type = SizeFilterType.LT;break;
+        	default: type = null;
+        	}
+        	dataHolder.setSizeFilterType(type);
+        	
+        	long filterSize;
+        	switch (this.sizeUnit) {
+        	case 1: filterSize = this.size * 1024;break;
+        	case 2: filterSize = this.size * 1024 * 1024;break;
+        	default: filterSize = this.size;
+        	}
+        	dataHolder.setSize(filterSize);
+    	}
+    	
+    	if (!StringUtils.isEmpty(this.tags)) {
+        	List<String> tagsSet = new ArrayList<String>();  
+        	for (String tag: this.tags.split(" ")) {
+        		tagsSet.add(tag);
+        	}
+        	dataHolder.setTags(tagsSet);
+    	}
+    	
+    	dataHolder.setStartIndex(pageNum * PAGE_SIZE);
+    	/**
+    	 * Set length to fetch to one more than what is required.
+    	 * This would help us determine whether there are more pages
+    	 */
+    	dataHolder.setLength(PAGE_SIZE + 1);
+    	
+    	MediaFileOrder order; 
+    	switch(this.sortOption) {
+    	case 0: order = MediaFileOrder.NAME;break;
+    	case 1: order = MediaFileOrder.DATE_UPLOADED;break;
+    	case 2: order = MediaFileOrder.TYPE;break;
+    	default: order = null;
+    	}
+    	dataHolder.setOrder(order);
+    }
+
+}

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/editor/MediaFileView.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,275 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.ui.struts2.editor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.FileIOException;
+import org.apache.roller.weblogger.business.MediaFileManager;
+import org.apache.roller.weblogger.business.WebloggerFactory;
+import org.apache.roller.weblogger.pojos.MediaFile;
+import org.apache.roller.weblogger.pojos.MediaFileComparator;
+import org.apache.roller.weblogger.pojos.MediaFileDirectory;
+import org.apache.roller.weblogger.pojos.MediaFileDirectoryComparator;
+import org.apache.roller.weblogger.pojos.MediaFileComparator.MediaFileComparatorType;
+import org.apache.roller.weblogger.pojos.MediaFileDirectoryComparator.DirectoryComparatorType;
+import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
+import org.apache.struts2.interceptor.validation.SkipValidation;
+
+/**
+ * Adds a new media file.
+ */
+@SuppressWarnings("serial")
+public class MediaFileView extends MediaFileBase {
+    private static Log log = LogFactory.getLog(MediaFileView.class);
+    
+    private static final List<KeyValueObject> sortOptions;
+
+    static {
+        sortOptions = Arrays.asList(
+        		new KeyValueObject("", ""),
+        		new KeyValueObject("name", "Name"),
+        		new KeyValueObject("date_uploaded", "Date Uploaded"),
+        		new KeyValueObject("type", "Type")
+        		); 
+    }
+
+    private String directoryId;
+    private String directoryPath;
+    private MediaFileDirectory currentDirectory;
+    
+    private String sortBy;
+
+    private List<MediaFileDirectory> childDirectories;
+    private List<MediaFile> childFiles;
+    
+    private String newDirectoryName;
+
+    public MediaFileView() {
+        this.actionName = "mediaViewAdd";
+        this.desiredMenu = "editor";
+        this.pageTitle = "mediaFile.view.title";
+    }
+    
+    public void myPrepare() {
+    	refreshAllDirectories();
+    }
+
+    public String createNewDirectory() {
+    	boolean dirCreated = false;
+		if (StringUtils.isEmpty(this.newDirectoryName)) {
+			addError("mediaFile.error.view.dirNameEmpty");
+		}
+		else if (this.newDirectoryName.contains("/")) {
+			addError("mediaFile.error.view.dirNameInvalid");
+		}
+		else {
+			try {
+				log.debug("Creating new directory - " + this.newDirectoryName);
+				MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+				MediaFileDirectory parentDirectory = manager.getMediaFileDirectory(this.directoryId);
+				manager.createMediaFileDirectory(parentDirectory, this.newDirectoryName);
+				// flush changes
+				WebloggerFactory.getWeblogger().flush();
+				addMessage("mediaFile.directoryCreate.success");
+				dirCreated = true;
+			} catch (WebloggerException e) {
+	            log.error("Error creating new directory by path", e);
+	            // TODO: i18n
+	            addError("Error creating new directory by path");
+			}
+		}
+
+        
+		if (dirCreated) {
+			// Refresh list of directories so the newly created directory is included.
+			refreshAllDirectories();
+		}
+    	return execute();
+    	
+    }
+    
+    // TODO: Ganesh - use a different name
+    // Returns directory content in JSON format. 
+    public String fetchDirectoryContentLight() {
+    	execute();
+    	return "success.json";
+    }
+    
+    /**
+     * Show form for adding a new media file.
+     * 
+     * @return String The result of the action.
+     */
+    @SkipValidation
+    public String execute() {
+		MediaFileManager manager = WebloggerFactory.getWeblogger().getMediaFileManager();
+		try {
+			MediaFileDirectory directory;
+			if (this.directoryId != null) {
+				directory = manager.getMediaFileDirectory(this.directoryId);
+			}
+			else if (this.directoryPath != null){
+				directory = manager.getMediaFileDirectoryByPath(getActionWeblog(), this.directoryPath);
+				this.directoryId = directory.getId();
+			}
+			else {
+				directory = manager.getMediaFileRootDirectory(getActionWeblog());
+				this.directoryId = directory.getId();
+			}
+
+			this.childDirectories = new ArrayList<MediaFileDirectory>();
+			this.childDirectories.addAll(directory.getChildDirectories());
+			
+			this.childFiles = new ArrayList<MediaFile>();
+			this.childFiles.addAll(directory.getMediaFiles());
+			
+			if (!StringUtils.isEmpty(this.sortBy)) {
+				if ("name".equals(sortBy)) {
+					Collections.sort(this.childDirectories, new MediaFileDirectoryComparator(DirectoryComparatorType.NAME));
+					Collections.sort(this.childFiles, new MediaFileComparator(MediaFileComparatorType.NAME));
+				}
+				else if ("type".equals(sortBy)) {
+					Collections.sort(this.childFiles, new MediaFileComparator(MediaFileComparatorType.TYPE));
+				}
+				else if ("date_uploaded".equals(sortBy)) {
+					Collections.sort(this.childFiles, new MediaFileComparator(MediaFileComparatorType.DATE_UPLOADED));
+				}
+			}
+			
+			this.currentDirectory = directory;
+			
+    		return SUCCESS;
+        } catch (FileIOException ex) {
+        	log.error("Error viewing media file directory ", ex);
+            addError("MediaFile.error.view");
+		} catch (Exception e) {
+            log.error("Error viewing media file directory ", e);
+            addError("MediaFile.error.view");
+		}
+		return SUCCESS;
+    }
+    
+    public List<KeyValueObject> getCurrentDirectoryHierarchy() {
+    	List<KeyValueObject> directoryHierarchy = new ArrayList<KeyValueObject>();
+
+    	directoryHierarchy.add(new KeyValueObject("/", "root"));
+    	String fullPath = this.currentDirectory.getPath();
+    	if (fullPath.length() > 1) {
+        	String[] directoryNames = fullPath.substring(1).split("/");
+        	String directoryPath = "";
+        	for (String directoryName: directoryNames) {
+        		directoryPath = directoryPath + "/" + directoryName; 
+            	directoryHierarchy.add(new KeyValueObject(directoryPath, directoryName));
+        	}
+    	}
+    	return directoryHierarchy;
+    }
+    
+    public String deleteSelected() {
+    	doDeleteSelected();
+    	return execute();
+    }
+    
+    public String delete() {
+    	doDeleteMediaFile();
+    	return execute();
+    }
+    
+    public String includeInGallery() {
+    	doIncludeMediaFileInGallery();
+    	return execute();
+    }
+
+    public String moveSelected() {
+        doMoveSelected();
+    	return execute();
+    }
+    
+    public void myValidate() {
+    }
+    
+	public String getDirectoryId() {
+		return directoryId;
+	}
+
+	public void setDirectoryId(String id) {
+		this.directoryId = id;
+	}
+
+	public List<MediaFileDirectory> getChildDirectories() {
+		return childDirectories;
+	}
+
+	public void setChildDirectories(List<MediaFileDirectory> directories) {
+		this.childDirectories = directories;
+	}
+
+	public List<MediaFile> getChildFiles() {
+		return childFiles;
+	}
+
+	public void setChildFiles(List<MediaFile> files) {
+		this.childFiles = files;
+	}
+
+	public String getNewDirectoryName() {
+		return newDirectoryName;
+	}
+
+	public void setNewDirectoryName(String newDirectoryName) {
+		this.newDirectoryName = newDirectoryName;
+	}
+
+	public MediaFileDirectory getCurrentDirectory() {
+		return currentDirectory;
+	}
+
+	public void setCurrentDirectory(MediaFileDirectory currentDirectory) {
+		this.currentDirectory = currentDirectory;
+	}
+
+	public String getDirectoryPath() {
+		return directoryPath;
+	}
+
+	public void setDirectoryPath(String path) {
+		this.directoryPath = path;
+	}
+
+	public String getSortBy() {
+		return sortBy;
+	}
+
+	public void setSortBy(String sortBy) {
+		this.sortBy = sortBy;
+	}
+
+    public List<KeyValueObject> getSortOptions() {
+    	return sortOptions;
+    }
+
+}

Added: roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/pagers/MediaFilePager.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/pagers/MediaFilePager.java?rev=749634&view=auto
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/pagers/MediaFilePager.java (added)
+++ roller/branches/roller_mediablogging/apps/weblogger/src/java/org/apache/roller/weblogger/ui/struts2/pagers/MediaFilePager.java Tue Mar  3 15:44:03 2009
@@ -0,0 +1,49 @@
+package org.apache.roller.weblogger.ui.struts2.pagers;
+
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.weblogger.pojos.MediaFile;
+
+public class MediaFilePager {
+    private static final Log log = LogFactory.getLog(MediaFilePager.class);
+    
+    // the collection for the pager
+    private final List<MediaFile> items;
+    
+    // what page we are on
+    private final int pageNum;
+    
+    // are there more items?
+    private final boolean moreItems;
+    
+    public MediaFilePager(int page, List<MediaFile> mediaFiles, boolean hasMore) {
+        this.pageNum = page;
+        this.items = mediaFiles;
+        this.moreItems = hasMore;
+    }
+    
+    public List<MediaFile> getItems() {
+        return items;
+    }
+
+    public boolean isMoreItems() {
+        return moreItems;
+    }
+
+    public boolean isJustOnePage() {
+    	return (pageNum == 0 && !moreItems);
+    }
+    
+    public boolean hasPrevious() {
+    	return (pageNum > 0);
+    }
+    
+    public boolean hasNext() {
+    	return this.moreItems;
+    }
+    
+    
+
+}

Modified: roller/branches/roller_mediablogging/apps/weblogger/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java
URL: http://svn.apache.org/viewvc/roller/branches/roller_mediablogging/apps/weblogger/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java?rev=749634&r1=749633&r2=749634&view=diff
==============================================================================
--- roller/branches/roller_mediablogging/apps/weblogger/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java (original)
+++ roller/branches/roller_mediablogging/apps/weblogger/test/java/org/apache/roller/weblogger/business/FileContentManagerTest.java Tue Mar  3 15:44:03 2009
@@ -60,13 +60,6 @@
         // setup weblogger
         TestUtils.setupWeblogger();
         
-        try {
-            testUser = TestUtils.setupUser("FCMTest_userName");
-            testWeblog = TestUtils.setupWeblog("FCMTest_handle", testUser);
-            TestUtils.endSession(true);
-        } catch (Exception ex) {
-            log.error(ex);
-        }
     }
     
     public void tearDown() throws Exception {
@@ -80,6 +73,14 @@
             log.error(ex);
         }
         */
+        PropertiesManager pmgr = WebloggerFactory.getWeblogger().getPropertiesManager();
+        Map config = config = pmgr.getProperties();
+        ((RuntimeConfigProperty)config.get("uploads.dir.maxsize")).setValue("30000");
+        ((RuntimeConfigProperty)config.get("uploads.types.forbid")).setValue("");
+        ((RuntimeConfigProperty)config.get("uploads.types.allowed")).setValue("");
+        ((RuntimeConfigProperty)config.get("uploads.enabled")).setValue("true");
+        pmgr.saveProperties(config);
+        TestUtils.endSession(true);
     }
     
     
@@ -88,6 +89,14 @@
      */
     public void testFileCRUD() throws Exception {
         
+        try {
+            testUser = TestUtils.setupUser("FCMTest_userName1");
+            testWeblog = TestUtils.setupWeblog("FCMTest_handle1", testUser);
+            TestUtils.endSession(true);
+        } catch (Exception ex) {
+            log.error(ex);
+        }
+
         // update roller properties to prepare for test
         PropertiesManager pmgr = WebloggerFactory.getWeblogger().getPropertiesManager();
         Map config = pmgr.getProperties();
@@ -138,6 +147,14 @@
      */
     public void testCanSave() throws Exception {
         
+        try {
+            testUser = TestUtils.setupUser("FCMTest_userName2");
+            testWeblog = TestUtils.setupWeblog("FCMTest_handle2", testUser);
+            TestUtils.endSession(true);
+        } catch (Exception ex) {
+            log.error(ex);
+        }
+
         FileContentManager fmgr = WebloggerFactory.getWeblogger().getFileContentManager();
         PropertiesManager pmgr = WebloggerFactory.getWeblogger().getPropertiesManager();
         Map config = config = pmgr.getProperties();