From 32c42a747bb52f25ba9aa71f0b9fdbcb41f42a5f Mon Sep 17 00:00:00 2001 From: Bhagwat Kumar Date: Sat, 25 Sep 2010 15:36:06 +0530 Subject: [PATCH] added java doc and removed unused code --- FileViewerGrailsPlugin.groovy | 8 +-- .../plugins/fileviewer/FileController.groovy | 60 +++++++++++------- grails-app/views/file/_fileDetails.gsp | 4 +- grails-app/views/file/fileList.gsp | 10 ++- grails-file-viewer-0.1.zip | Bin 7797 -> 8499 bytes plugin.xml | 8 ++- .../plugins/fileviewer/FileLocations.groovy | 8 +-- .../plugins/fileviewer/FileViewerUtils.groovy | 21 +++--- 8 files changed, 69 insertions(+), 50 deletions(-) diff --git a/FileViewerGrailsPlugin.groovy b/FileViewerGrailsPlugin.groovy index 2f54eb4..bb704b0 100644 --- a/FileViewerGrailsPlugin.groovy +++ b/FileViewerGrailsPlugin.groovy @@ -15,7 +15,7 @@ class FileViewerGrailsPlugin { def author = "Himanshu Seth, Fabien Benichou" def authorEmail = "himanshu@intelligrape.com, fabien.benichou@gmail.com" - def title = "Plugin summary/headline" + def title = "File Viewer Grails plugin" def description = '''\\ File Viewer Grails plugin provides a user friendly way for viewing folders and files on the system. The most common use-case is to see the logs on the server. Documentation available at http://github.com/IntelliGrape/File-Viewer-Grails-Plugin/wiki @@ -25,11 +25,9 @@ Documentation available at http://github.com/IntelliGrape/File-Viewer-Grails-Plu def documentation = "http://grails.org/plugin/file-viewer" def doWithWebDescriptor = { xml -> - // TODO Implement additions to web.xml (optional), this event occurs before } def doWithSpring = { - // TODO Implement runtime spring config (optional) def config = application.config.grails.fileViewer fileLocations(org.grails.plugins.fileviewer.FileLocations) { locations = config.locations ?: [System.getProperty("java.io.tmpdir")] @@ -38,21 +36,17 @@ Documentation available at http://github.com/IntelliGrape/File-Viewer-Grails-Plu } def doWithDynamicMethods = { ctx -> - // TODO Implement registering dynamic methods to classes (optional) } def doWithApplicationContext = { applicationContext -> - // TODO Implement post initialization spring config (optional) } def onChange = { event -> - // TODO Implement code that is executed when any artefact that this plugin is // watching is modified and reloaded. The event contains: event.source, // event.application, event.manager, event.ctx, and event.plugin. } def onConfigChange = { event -> - // TODO Implement code that is executed when the project configuration changes. // The event is the same as for 'onChange'. } } diff --git a/grails-app/controllers/org/grails/plugins/fileviewer/FileController.groovy b/grails-app/controllers/org/grails/plugins/fileviewer/FileController.groovy index 567a438..764a508 100644 --- a/grails-app/controllers/org/grails/plugins/fileviewer/FileController.groovy +++ b/grails-app/controllers/org/grails/plugins/fileviewer/FileController.groovy @@ -1,33 +1,56 @@ package org.grails.plugins.fileviewer -import org.grails.plugins.fileviewer.FileViewerUtils +/** + * @author Himanshu Seth (himanshu@intelligrape.com) + * @author Fabien Benichou (fabien.benichou@gmail.com) + */ class FileController { def fileLocations def index = { - Map model = [locations:fileLocations.locations] + Map model = [locations: fileLocations.locations] if (params.filePath) { File file = new File(params.filePath) if (file.exists()) { - if ( file.isFile()) { + if (file.isFile()) { List locations = getSubFiles(file.parentFile) String fileContents = getFileContents(file) - model= [locations: locations, fileContents: fileContents, filePath: file.absolutePath] + model = [locations: locations, fileContents: fileContents, filePath: file.absolutePath] } else { List locations = getSubFiles(file) - model= [locations:locations] + model = [locations: locations] } - if(!fileLocations.locations.contains(file.absolutePath)){ + if (!fileLocations.locations.contains(file.absolutePath)) { model['prevLocation'] = file.getParentFile().absolutePath } model['showBackLink'] = true } } - render(view: "/file/fileList", model: model, plugin:'fileViewer') + render(view: "/file/fileList", model: model, plugin: 'fileViewer') } + def downloadFile = { + File file = new File(params.filePath) + byte[] assetContent = file.readBytes(); + response.setContentLength(assetContent.size()) + response.setHeader("Content-disposition", "attachment; filename=${file.name}") + String contentType = FileViewerUtils.getMimeContentType(file.name.tokenize(".").last().toString()) + response.setContentType(contentType) + OutputStream out = response.getOutputStream() + out.write(assetContent) + out.flush() + out.close() + } + + /** + * getSubFiles gets list of subfiles + * + * @param file + * + * @return List + */ private List getSubFiles(File file) { List locations = [] file.eachFile {File subFile -> @@ -36,9 +59,15 @@ class FileController { return locations } - + /** + * getFileContents reads file line by line + * + * @param file + * + * @return file contets formatted by
html tag + */ private def getFileContents(File file) { - String fileContents; + String fileContents = ""; List contents = file.text.readLines() if (contents.size() > fileLocations.linesCount) { int startIndex = contents.size() - (fileLocations.linesCount + 1) @@ -49,17 +78,4 @@ class FileController { } return fileContents } - - def downloadFile = { - File file = new File(params.filePath) - byte[] assetContent =file.readBytes(); - response.setContentLength(assetContent.size()) - response.setHeader("Content-disposition", "attachment; filename=${file.name}") - String contentType = FileViewerUtils.getMimeContentType(file.name.tokenize(".").last().toString()) - response.setContentType(contentType) - OutputStream out = response.getOutputStream() - out.write(assetContent) - out.flush() - out.close() - } } diff --git a/grails-app/views/file/_fileDetails.gsp b/grails-app/views/file/_fileDetails.gsp index 32f3cfd..5538942 100644 --- a/grails-app/views/file/_fileDetails.gsp +++ b/grails-app/views/file/_fileDetails.gsp @@ -1,6 +1,8 @@
${fileContents}
\ No newline at end of file diff --git a/grails-app/views/file/fileList.gsp b/grails-app/views/file/fileList.gsp index e3c4737..2ed63f8 100644 --- a/grails-app/views/file/fileList.gsp +++ b/grails-app/views/file/fileList.gsp @@ -2,13 +2,17 @@ - File List + <g:message code="default.page.title.label" default="File List" /> -
Please click on the links below to view detailed reports:

+
+ +

diff --git a/grails-file-viewer-0.1.zip b/grails-file-viewer-0.1.zip index e928db4b93d6c9292794b340d2306d5788ff3882..e7670eaf5336d452db770f5ae0675b36b4c370fc 100644 GIT binary patch delta 5771 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 delta 5070 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 - Your name - Plugin summary/headline + Himanshu Seth, Fabien Benichou + himanshu@intelligrape.com, fabien.benichou@gmail.com + File Viewer Grails plugin \ -Brief description of the plugin. +File Viewer Grails plugin provides a user friendly way for viewing folders and files on the system. The most common use-case is to see the logs on the server. +Documentation available at http://github.com/IntelliGrape/File-Viewer-Grails-Plugin/wiki http://grails.org/plugin/file-viewer diff --git a/src/groovy/org/grails/plugins/fileviewer/FileLocations.groovy b/src/groovy/org/grails/plugins/fileviewer/FileLocations.groovy index 969968a..86fbd8d 100644 --- a/src/groovy/org/grails/plugins/fileviewer/FileLocations.groovy +++ b/src/groovy/org/grails/plugins/fileviewer/FileLocations.groovy @@ -1,12 +1,10 @@ package org.grails.plugins.fileviewer /** - * Created by IntelliJ IDEA. - * User: himanshu - * Date: 7 Sep, 2010 - * Time: 6:24:59 PM - * To change this template use File | Settings | File Templates. + * @author Himanshu Seth (himanshu@intelligrape.com) + * @author Fabien Benichou (fabien.benichou@gmail.com) */ + class FileLocations { List locations Integer linesCount diff --git a/src/groovy/org/grails/plugins/fileviewer/FileViewerUtils.groovy b/src/groovy/org/grails/plugins/fileviewer/FileViewerUtils.groovy index 979431e..a46cb48 100644 --- a/src/groovy/org/grails/plugins/fileviewer/FileViewerUtils.groovy +++ b/src/groovy/org/grails/plugins/fileviewer/FileViewerUtils.groovy @@ -1,7 +1,18 @@ package org.grails.plugins.fileviewer -class FileViewerUtils { +/** + * @author Himanshu Seth (himanshu@intelligrape.com) + * @author Fabien Benichou (fabien.benichou@gmail.com) + */ +class FileViewerUtils { + /** + * getMimeContentType gets mime content type depending on the extension of file name + * + * @param extension e.g. 'asc' + * + * @return the mime content type e.g. 'text/plain' + */ public static String getMimeContentType(String extension) { Map mimeTypes = ['ai': 'application/postscript', 'aif': 'audio/x-aiff', @@ -176,12 +187,4 @@ class FileViewerUtils { 'zip': 'application/zip'] return mimeTypes.get(extension.toLowerCase()) } - - public static boolean isText(String fileName) { - String extension = (fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length())).toLowerCase() - String mimeType = getMimeContentType(extension) - return ((mimeType) && (mimeType?.startsWith("text"))) - } - - }