Title: [1349] trunk/web/web-runner/src/main/webapp/ftl: JBEHAVE-191/2: Made file content view togglable between relative and full paths.

Diff

Modified: trunk/web/examples/trader-web/src/main/java/org/jbehave/web/examples/trader/runner/TraderRegistrar.java (1348 => 1349)

--- trunk/web/examples/trader-web/src/main/java/org/jbehave/web/examples/trader/runner/TraderRegistrar.java	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/examples/trader-web/src/main/java/org/jbehave/web/examples/trader/runner/TraderRegistrar.java	2009-10-17 15:56:09 UTC (rev 1349)
@@ -20,6 +20,7 @@
 	}
 	
 	protected File uploadDirectory() {
-		return new File("/tmp/upload");
+		// Can be overridden to return, e.g. new File("/tmp/upload");
+		return super.uploadDirectory();
 	}
 }

Modified: trunk/web/web-io/src/main/java/org/jbehave/web/io/ArchivingFileManager.java (1348 => 1349)

--- trunk/web/web-io/src/main/java/org/jbehave/web/io/ArchivingFileManager.java	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-io/src/main/java/org/jbehave/web/io/ArchivingFileManager.java	2009-10-17 15:56:09 UTC (rev 1349)
@@ -25,10 +25,10 @@
 	}
 
 	public List<File> list() {
-		return asList(uploadDirectory().listFiles(new FileFilter(){
+		return asList(uploadDirectory().listFiles(new FileFilter() {
 			public boolean accept(File file) {
 				return !file.isDirectory();
-			}			
+			}
 		}));
 	}
 
@@ -37,15 +37,17 @@
 		return uploadDirectory;
 	}
 
-	public List<File> listContent(String path){
+	public List<File> listContent(String path, boolean relativePaths) {
 		File directory = archiver.directoryOf(new File(path));
 		List<File> content = new ArrayList<File>();
-		for ( File file : archiver.listContent(directory) ){
-			content.add(archiver.relativeTo(file, directory));
-		}		
+		for (File file : archiver.listContent(directory)) {
+			File contentFile = (relativePaths ? archiver.relativeTo(file,
+					directory) : file);
+			content.add(contentFile);
+		}
 		return content;
 	}
-	
+
 	public void delete(List<String> paths) {
 		for (String path : paths) {
 			deleteFile(new File(path));
@@ -59,13 +61,13 @@
 				deleteFile(new File(file, child));
 			}
 		}
-		if ( archiver.isArchive(file) ){
+		if (archiver.isArchive(file)) {
 			// delete the unarchived directory too
 			deleteFile(archiver.directoryOf(file));
 		}
 		file.delete();
 	}
-	
+
 	public List<File> upload(List<FileItem> fileItems, List<String> errors) {
 		List<File> files = new ArrayList<File>();
 		File directory = uploadDirectory();
@@ -78,7 +80,7 @@
 						archiver.unarchive(file, directory);
 					} catch (FileUnarchiveFailedException e) {
 						errors.add(e.getMessage());
-						if ( e.getCause() != null ){
+						if (e.getCause() != null) {
 							errors.add(e.getCause().getMessage());
 						}
 					}
@@ -87,7 +89,7 @@
 				// ignore and carry on
 			} catch (FileWriteFailedException e) {
 				errors.add(e.getMessage());
-				if ( e.getCause() != null ){
+				if (e.getCause() != null) {
 					errors.add(e.getCause().getMessage());
 				}
 			}
@@ -95,7 +97,6 @@
 		return files;
 	}
 
-	
 	private File writeItemToFile(File directory, FileItem item) {
 		if (isBlank(item.getName())) {
 			throw new FileItemNameMissingException(item);

Modified: trunk/web/web-io/src/main/java/org/jbehave/web/io/FileManager.java (1348 => 1349)

--- trunk/web/web-io/src/main/java/org/jbehave/web/io/FileManager.java	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-io/src/main/java/org/jbehave/web/io/FileManager.java	2009-10-17 15:56:09 UTC (rev 1349)
@@ -9,14 +9,19 @@
 import org.apache.commons.fileupload.FileItem;
 
 /**
- * Allow to list, delete and upload data files.
+ * Manages data files, allowing the upload, list and delete. If a file is any
+ * archive, the contents is unarchived to the directory with the corresponding
+ * name af the archive (e.g. for archive path "/path/to/archive.zip", the output
+ * directory path will be "/path/to/archive". The manager also allows to list
+ * the content of a uploaded and unarchived file paths, e.g. the content of
+ * "/path/to/archive".
  */
 public interface FileManager {
 
 	List<File> list();
-	
-	List<File> listContent(String path);
 
+	List<File> listContent(String path, boolean relativePaths);
+
 	void delete(List<String> paths);
 
 	List<File> upload(List<FileItem> fileItems, List<String> errors);

Added: trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/FilesContext.java (0 => 1349)

--- trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/FilesContext.java	                        (rev 0)
+++ trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/FilesContext.java	2009-10-17 15:56:09 UTC (rev 1349)
@@ -0,0 +1,68 @@
+package org.jbehave.web.runner.waffle.controllers;
+
+import static java.util.Arrays.asList;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.builder.ToStringBuilder;
+
+public class FilesContext {
+
+	public enum View {
+		RELATIVE_PATH, FULL_PATH
+	}
+
+	private List<File> files = new ArrayList<File>();
+	private List<String> selectedPaths = new ArrayList<String>();
+	private Map<String, List<File>> contentFiles = new HashMap<String, List<File>>();
+	private View view = View.RELATIVE_PATH;
+
+	public FilesContext() {
+	}
+
+	public List<File> getFiles() {
+		return files;
+	}
+
+	public void setFiles(List<File> files) {
+		this.files = files;
+	}
+
+	public List<String> getSelectedPaths() {
+		return selectedPaths;
+	}
+
+	public void setSelectedPaths(List<String> selectedPaths) {
+		this.selectedPaths = selectedPaths;
+	}
+
+	public Map<String, List<File>> getContentFiles() {
+		return contentFiles;
+	}
+
+	public void setContentFiles(Map<String, List<File>> contentFiles) {
+		this.contentFiles = contentFiles;
+	}
+
+	public List<View> getViews() {
+		return asList(View.values());
+	}
+
+	public View getView() {
+		return view;
+	}
+
+	public void setView(View view) {
+		this.view = view;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

Modified: trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/FilesController.java (1348 => 1349)

--- trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/FilesController.java	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/FilesController.java	2009-10-17 15:56:09 UTC (rev 1349)
@@ -1,8 +1,8 @@
 package org.jbehave.web.runner.waffle.controllers;
 
+import static org.jbehave.web.runner.waffle.controllers.FilesContext.View.RELATIVE_PATH;
+
 import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -14,56 +14,51 @@
 public class FilesController extends MenuAwareController {
 
 	private final FileManager manager;
-	private List<File> files = new ArrayList<File>();
-	private List<String> selectedPaths = new ArrayList<String>();
-	private Map<String,List<File>> contentFiles = new HashMap<String,List<File>>();
-	
+	private FilesContext filesContext;
+
 	public FilesController(Menu menu, FileManager manager) {
 		super(menu);
 		this.manager = manager;
+		this.filesContext = new FilesContext();
 	}
 
 	@ActionMethod(asDefault = true)
 	public void list() {
-		this.files = manager.list();
+		this.filesContext.setFiles(manager.list());
 	}
 
 	@ActionMethod
 	public void showContent() {
+		Map<String, List<File>> contentFiles = filesContext.getContentFiles();
 		contentFiles.clear();
-		for (String path : selectedPaths) {
-			List<File> content = manager.listContent(path);
-			if ( content.size() > 0 ){
-				contentFiles.put(content.get(0).getPath(), content);							
+		boolean relativePaths = filesContext.getView() == RELATIVE_PATH ? true
+				: false;
+		for (String path : filesContext.getSelectedPaths()) {
+			List<File> content = manager.listContent(path, relativePaths);
+			if (content.size() > 0) {
+				contentFiles.put(content.get(0).getPath(), content);
 			}
 		}
 	}
 
 	@ActionMethod
 	public void hideContent() {
-		contentFiles.clear();
+		filesContext.getContentFiles().clear();
 	}
 
 	@ActionMethod
 	public void delete() {
-		manager.delete(selectedPaths);
+		manager.delete(filesContext.getSelectedPaths());
+		hideContent();
 		list();
 	}
-	
-	public List<File> getFiles() {
-		return files;
-	}
-	
-	public Map<String, List<File>> getContentFiles() {
-		return contentFiles;
-	}
 
-	public List<String> getSelectedPaths() {
-		return selectedPaths;
+	public FilesContext getFilesContext() {
+		return filesContext;
 	}
 
-	public void setSelectedPaths(List<String> selectedPaths) {
-		this.selectedPaths = selectedPaths;
+	public void setFilesContext(FilesContext filesContext) {
+		this.filesContext = filesContext;
 	}
 
 }

Modified: trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/StepdocContext.java (1348 => 1349)

--- trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/StepdocContext.java	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-runner/src/main/java/org/jbehave/web/runner/waffle/controllers/StepdocContext.java	2009-10-17 15:56:09 UTC (rev 1349)
@@ -1,7 +1,8 @@
 package org.jbehave.web.runner.waffle.controllers;
 
+import static java.util.Arrays.asList;
+
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.lang.builder.ToStringBuilder;
@@ -30,7 +31,7 @@
 	}
 	
 	public List<View> getViews(){
-		return Arrays.asList(View.values());
+		return asList(View.values());
 	}
 	
 	public View getView() {

Modified: trunk/web/web-runner/src/main/webapp/ftl/data/files.ftl (1348 => 1349)

--- trunk/web/web-runner/src/main/webapp/ftl/data/files.ftl	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-runner/src/main/webapp/ftl/data/files.ftl	2009-10-17 15:56:09 UTC (rev 1349)
@@ -10,17 +10,22 @@
 <div id="content">
     <form action=""
         
+        <#assign view = filesContext.view />
         <div id="files">
            <fieldset>
                <legend><@i.messageFor "dataFiles" "Data Files"/></legend>
-			   <#assign files = controller.files />
+			   <#assign files = filesContext.files />
 		       <#if (files.size() > 0) >		       		
+			   <p><@i.messageFor "view" "View"/>
+                   <@w.selectSingle "filesContext.view" w.asNameableValues(filesContext.getViews(),"name()","name()") filesContext.getView() 
+                   " />
+               </p>
 	           <table>
 	             <#list files as file>	
-					<#assign path=p.normalise(file.path)>	             
+					<#assign path=p.unixPath(file.path)>	             
 	                <tr>
 	                    <td>${path}</td>
-	                    <td><@w.checkbox "selectedPaths" "${path}" /></td>
+	                    <td><@w.checkbox "filesContext.selectedPaths" "${path}" /></td>
 	                </tr>
 	             </#list>
 	           </table>
@@ -28,24 +33,24 @@
             </fieldset>
         </div>
 
-	    <#assign contentFiles = controller.contentFiles />
+	    <#assign contentFiles = filesContext.contentFiles />
         <#if (contentFiles.size() > 0) >		       		
         <div id="contentFiles">
            <fieldset>
                <legend><@i.messageFor "contentFiles" "Content Files"/></legend>
 	           <table>
-	             <#list contentFiles.keySet() as path>	
-	             	<#assign files=contentFiles.get(path)>
+	             <#list contentFiles.keySet() as directoryPath>	
+	             	<#assign files=contentFiles.get(directoryPath)>
 	             	<#list files as file>	
 		                <tr>
 		                	<td>
 		                	<#if (p.isViewable(file)) >
-		                	    <#assign selectedPath=p.normalise(path)+"/"+p.normalise(file.path)>
+		                	    <#assign selectedPath=p.urlPath(view, file.path, directoryPath)>
 		                		<a class="buttonView"  "viewContent" "View"/></a>
 		                	</#if>
 		                	</td>
-		                	<#assign relativePath=p.normalise(file.path)>
-		                	<td class="contentFilePath">${relativePath}</td>
+		                	<#assign filePath=p.unixPath(file.path)>
+		                	<td class="contentFilePath">${filePath}</td>
 		                </tr>
 	                </#list>
 	             </#list>

Modified: trunk/web/web-runner/src/main/webapp/ftl/data/upload.ftl (1348 => 1349)

--- trunk/web/web-runner/src/main/webapp/ftl/data/upload.ftl	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-runner/src/main/webapp/ftl/data/upload.ftl	2009-10-17 15:56:09 UTC (rev 1349)
@@ -49,7 +49,7 @@
 	         <table>
 	            <#list uploadedFiles as file>
 	                <tr>
-						<#assign path=p.normalise(file.path)>	             
+						<#assign path=p.unixPath(file.path)>	             
 	                    <td>${path}</td>
 	                </tr>
 	            </#list>

Modified: trunk/web/web-runner/src/main/webapp/ftl/paths.ftl (1348 => 1349)

--- trunk/web/web-runner/src/main/webapp/ftl/paths.ftl	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-runner/src/main/webapp/ftl/paths.ftl	2009-10-17 15:56:09 UTC (rev 1349)
@@ -1,16 +1,30 @@
 <#ftl strip_whitespace=true>
 <#--
- * Normalises path by replacing '\' with '/'
+ * Returns the URL path based on the view
  *
+ * @param view the FilesContext.View
  * @param path the path
- * @return the normalised path
+ * @param directoryPath the directory path to use with relative views
+ * @return the url path
  -->
-<#function normalise path>
-    <#assign normalised = path.replace("\\","/")>
-    <#return normalised>
+<#function urlPath view path directoryPath>
+    <#if (view == 'FULL_PATH')><#return unixPath(path)?url('UTF-8')></#if>
+    <#assign full = unixPath(directoryPath)+"/"+unixPath(path)>
+    <#return full?url('UTF-8')>
 </#function>
 
 <#--
+ * Ensures path uses unix separators by replacing '\' with '/'
+ *
+ * @param path the path
+ * @return the unix path
+ -->
+<#function unixPath path>
+    <#assign unix = path.replace("\\","/")>
+    <#return unix>
+</#function>
+
+<#--
  * Determines if file is viewable by looking for a path name with an extension
  *
  * @param file the file

Modified: trunk/web/web-runner/src/test/java/org/jbehave/web/runner/waffle/controllers/FilesControllerTest.java (1348 => 1349)

--- trunk/web/web-runner/src/test/java/org/jbehave/web/runner/waffle/controllers/FilesControllerTest.java	2009-10-17 11:10:20 UTC (rev 1348)
+++ trunk/web/web-runner/src/test/java/org/jbehave/web/runner/waffle/controllers/FilesControllerTest.java	2009-10-17 15:56:09 UTC (rev 1349)
@@ -9,7 +9,6 @@
 
 import org.codehaus.waffle.menu.Menu;
 import org.jbehave.web.io.FileManager;
-import org.jbehave.web.runner.waffle.controllers.FilesController;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.integration.junit4.JMock;
@@ -34,32 +33,34 @@
 		});
 		FilesController controller = new FilesController(MENU, manager);
 		controller.list();
-		assertEquals(files, controller.getFiles());
+		assertEquals(files, controller.getFilesContext().getFiles());
 	}
 
 	@Test
 	public void canListContentFiles() {
 		final List<String> paths = asList("archive1.zip");
 		final List<File> files = asList(new File("archive1"), new File("file1"), new File("file2"));
+		final boolean relativeContentPaths = true;
 		mockery.checking(new Expectations() {
 			{
 				for ( String path : paths ){
-					one(manager).listContent(path);					
+					one(manager).listContent(path, relativeContentPaths);					
 					will(returnValue(files));
 				}
 			}
 		});
 		FilesController controller = new FilesController(MENU, manager);
-		controller.setSelectedPaths(paths);
+		FilesContext filesContext = controller.getFilesContext();
+		filesContext.setSelectedPaths(paths);
 		controller.showContent();
-		assertEquals(files, controller.getContentFiles().get("archive1"));
+		assertEquals(files, filesContext.getContentFiles().get("archive1"));
 	}
 
 	@Test
 	public void canHideContentFiles() {
 		FilesController controller = new FilesController(MENU, manager);
 		controller.hideContent();
-		assertTrue(controller.getContentFiles().isEmpty());
+		assertTrue(controller.getFilesContext().getContentFiles().isEmpty());
 	}
 
 	@Test
@@ -74,9 +75,10 @@
 			}
 		});
 		FilesController controller = new FilesController(MENU, manager);
-		controller.setSelectedPaths(paths);
+		FilesContext filesContext = controller.getFilesContext();
+		filesContext.setSelectedPaths(paths);
 		controller.delete();
-		assertEquals(files, controller.getFiles());
+		assertEquals(files, filesContext.getFiles());
 	}
 
 }


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to