Revision: 1459
http://gatewiki.svn.sourceforge.net/gatewiki/?rev=1459&view=revAuthor: hcunningham
Date: 2009-07-06 15:44:26 +0000 (Mon, 06 Jul 2009)
Log Message:
-----------
added a method to search out navigation files in wiki trees
added a test for it
Modified Paths:
--------------
trunk/cow/doc/cow-backlog.yam
trunk/cow/grails-app/conf/Config.groovy
trunk/cow/grails-app/controllers/PageController.groovy
trunk/cow/grails-app/utils/gate/util/FileUtils.groovy
trunk/cow/test/unit/FileUtilsTests.groovy
Added Paths:
-----------
trunk/cow/test/unit/gate/navigation.html
Modified: trunk/cow/doc/cow-backlog.yam
===================================================================
--- trunk/cow/doc/cow-backlog.yam 2009-07-06 11:52:19 UTC (rev 1458)
+++ trunk/cow/doc/cow-backlog.yam 2009-07-06 15:44:26 UTC (rev 1459)
@@ -22,8 +22,11 @@
- PC.show, line 90:
- pageBody = FileUtils.getBody(pageFile)
- change this to be PageService.getBody(pageFile, wiki)
- - this then does an FU.getBody on the page itself and adds in FU.getBody
- called over any available layout info from the wiki
+ - this then does an FU.getBody on the page itself and adds in
+ FU.getBody called over any available layout info from the wiki
+ - for each layout file in conf.navigation.files
+ - find the nearest one to current dir, up the tree to wiki top
+
- layouts for whole wiki-areas
- add a "areaLayoutName" to Wiki, which would reference a layout GSP in
the site-specific plugin; PageLinkTabLib would then use this for the
Modified: trunk/cow/grails-app/conf/Config.groovy
===================================================================
--- trunk/cow/grails-app/conf/Config.groovy 2009-07-06 11:52:19 UTC (rev 1458)
+++ trunk/cow/grails-app/conf/Config.groovy 2009-07-06 15:44:26 UTC (rev 1459)
@@ -105,6 +105,9 @@
layout.present = false // ditto
controller = "gate.cow.GuestLayoutController"
}
+ navigation {
+ files = [ "cow:nav.html" ]
+ }
page { // note: this has to be serialisable to support the edit flow
bibURI = "
http://gate.ac.uk/sale/bib/main.html"
bibAnchorPrefix = "X"
@@ -200,24 +203,24 @@
// cow
gate {
cow {
- DataArea="debug, logfile"
+ DataArea="info, logfile"
CowUtils="info, logfile"
CowPermission="info, logfile"
}
yam {
YamFile="info, logfile"
- YamTest="debug, logfile"
+ YamTest="info, logfile"
parse.YamParser="info, logfile"
translate.AbstractTranslator="info, logfile"
depend.Dependencies="info, logfile"
}
util.FileUtils="info, logfile"
- versioning.svnkit="debug, logfile"
- versioning="debug, logfile"
+ versioning.svnkit="info, logfile"
+ versioning="info, logfile"
}
grails {
app {
- controller.WikiController="debug, logfile"
+ controller.WikiController="info, logfile"
controller.PageController="debug, logfile"
controller.SvnAuthController="debug, logfile"
service.PageService="debug, logfile"
Modified: trunk/cow/grails-app/controllers/PageController.groovy
===================================================================
--- trunk/cow/grails-app/controllers/PageController.groovy 2009-07-06 11:52:19 UTC (rev 1458)
+++ trunk/cow/grails-app/controllers/PageController.groovy 2009-07-06 15:44:26 UTC (rev 1459)
@@ -124,6 +124,7 @@
* params.unzip == 'on' -> try to unzip the file whatever its type
* params.overwrite == 'on' -> overwrite any existing file
*/
+// TODO use i18n messages
def upload = {
log.debug("\n\n=== ${actionName}: ${request.forwardURI} ===")
Map thisPage = pageService.analyse(params) ?: [ : ]
@@ -296,7 +297,7 @@
} else {
flash.message = "Upload failed.<br><br>" + messages;
}
- }
+ } // upload (GWT)
/** Edit action. Handles edits on HTML (YAM and non-YAM) and TXT files. */
def editFlow = {
@@ -632,6 +633,8 @@
} // normalExit
} // newpageFlow
+// this is the non-gwt version of upload, which was broken because of an
+// interaction between jsec and webflow iirr...
// /** Action for uploading new files and directories. */
// def uploadFlow = {
// /** Validate and triage the request. */
@@ -766,7 +769,6 @@
// element for home with special anchor text
pathelems << new PathElement(string:basePath, path:basePath)
-
if(id.equals("1")) {
basePath = basePath + "help/"
pathelems << new PathElement(string: "help", path:basePath)
Modified: trunk/cow/grails-app/utils/gate/util/FileUtils.groovy
===================================================================
--- trunk/cow/grails-app/utils/gate/util/FileUtils.groovy 2009-07-06 11:52:19 UTC (rev 1458)
+++ trunk/cow/grails-app/utils/gate/util/FileUtils.groovy 2009-07-06 15:44:26 UTC (rev 1459)
@@ -24,7 +24,28 @@
* @author Hamish Cunningham
*/
class FileUtils {
+ /**
+ * Find the first occurence of a file above a location in a directory tree
+ * up to and including a particular top directory.
+ */
+ static File findFileInTree(String fileName, File topDir, File startDir) {
+ File currentDir = startDir
+ log.debug("\ntopDir: ${topDir}")
+ while(true) {
+ log.debug("currentDir: ${currentDir}")
+ File possibleFile = new File((File) currentDir, (String) fileName)
+ if(possibleFile.exists())
+ return possibleFile
+ if(currentDir == null || topDir == null) // should never...
+ return null
+ else if(currentDir.getCanonicalPath() == topDir.getCanonicalPath())
+ return null
+ else
+ currentDir = currentDir.parentFile;
+ }
+ } // findFileInTree
+
/**
* Get the body of an HTML file. Tries to use Sitemesh (HTMLPageParser);
* if that fails uses some imperfect string matching on body tags.
@@ -185,7 +206,6 @@
static Pattern META_ENCODING_PATTERN =
~/(?i)<meta\s+http-equiv="Content-type"[^>]*?charset=(.+?)"/
-
/**
* Return the String contents of an html file, decoded according to the
* encodings given in any xml declaration or meta tag. In order to overcome
Modified: trunk/cow/test/unit/FileUtilsTests.groovy
===================================================================
--- trunk/cow/test/unit/FileUtilsTests.groovy 2009-07-06 11:52:19 UTC (rev 1458)
+++ trunk/cow/test/unit/FileUtilsTests.groovy 2009-07-06 15:44:26 UTC (rev 1459)
@@ -22,6 +22,45 @@
// this.getClass().classLoader.rootLoader.URLs.each{ println it }
}
+ void testFindFileInTree() {
+ log.debug("doing testFileFileInTree")
+
+ // get a couple of directories from the test resource tree
+ String pageFileDirPath =
+ this.getClass().getResource("/gate/yam/resources").getFile()
+ File wikiTopDir =
+ new File(
+ this.getClass().getResource("/gate/yam/resources").getFile()
+ ).parentFile.parentFile
+ File pageFileDir = new File(pageFileDirPath)
+ log.debug("pageFileDir: ${pageFileDir}")
+
+ // find a file two directories up
+ File foundFile =
+ FileUtils.findFileInTree("navigation.html", wikiTopDir, pageFileDir)
+ assertTrue(
+ "wrong name found: ${foundFile.path}",
+ foundFile.path.endsWith("/gate/navigation.html")
+ )
+
+ // non-existant file
+ foundFile =
+ FileUtils.findFileInTree("xxx.html", wikiTopDir, pageFileDir)
+ assertTrue(
+ "name should not be found but was", foundFile == null
+ )
+
+ // file in the starting dir
+ foundFile =
+ FileUtils.findFileInTree("yam-minimal.html", wikiTopDir, pageFileDir)
+ assertTrue(
+ "wrong name found (2): ${foundFile.path}",
+ foundFile.path.endsWith("/gate/yam/resources/yam-minimal.html")
+ )
+
+ log.debug("finished testFileFileInTree test")
+ } // testFindFileInTree()
+
void testReplaceFileSuffix() {
log.debug("doing testReplaceFileSuffix")
Added: trunk/cow/test/unit/gate/navigation.html
===================================================================
--- trunk/cow/test/unit/gate/navigation.html (rev 0)
+++ trunk/cow/test/unit/gate/navigation.html 2009-07-06 15:44:26 UTC (rev 1459)
@@ -0,0 +1,2 @@
+
+<p>dummy file for FileUtilsTests</p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
------------------------------------------------------------------------------
_______________________________________________
gatewiki-commits mailing list
gatewiki-commits@...
https://lists.sourceforge.net/lists/listinfo/gatewiki-commits