From 16433a183467996a86ad2c48c2a272381893fbba Mon Sep 17 00:00:00 2001 From: William Rayner Date: Fri, 24 Feb 2012 11:52:21 +1100 Subject: [PATCH 1/3] Revert "Removed gradle build file to conform with project standards" This reverts commit b868fcde1840b0909736a942fc83c509e8f0cf00. --- build.gradle | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 build.gradle diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..45d9a9d --- /dev/null +++ b/build.gradle @@ -0,0 +1,16 @@ +apply plugin: 'java' +apply plugin: 'eclipse' + +repositories { + mavenCentral() +} + +dependencies { + testCompile "junit:junit:4.8.2", + "org.mockito:mockito-all:1.8.5" + + + compile "com.google.guava:guava:r09", + "javax.servlet:javax.servlet-api:3.0.1", + "com.google.template:soy:2011-14-10" +} \ No newline at end of file From bc7c2090c0f18b962b4ef84b77001749a50e1d53 Mon Sep 17 00:00:00 2001 From: William Rayner Date: Mon, 27 Feb 2012 11:00:10 +1100 Subject: [PATCH 2/3] * Fixed bug where runtime globals were erroneously merged with the template model. In the case of a null model this would result in a crash. Additionally, model values would be overwritten by the runtime globals. --- .../com/papercut/silken/SilkenServlet.java | 3 -- src/main/java/com/papercut/silken/Utils.java | 31 +++++++++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/papercut/silken/SilkenServlet.java b/src/main/java/com/papercut/silken/SilkenServlet.java index 4652525..6b11ddb 100644 --- a/src/main/java/com/papercut/silken/SilkenServlet.java +++ b/src/main/java/com/papercut/silken/SilkenServlet.java @@ -282,10 +282,7 @@ private void doRequest(HttpServletRequest req, HttpServletResponse resp) throws SoyMapData model = config.getModelResolver().resolveModel(req); SoyMapData globals = null; if (config.getRuntimeGlobalsProvider() != null) { - - // Merge globals into the model globals = config.getRuntimeGlobalsProvider().getGlobals(req); - model = Utils.mergeSoyMapData(model, globals); } // FUTURE: A mime type resolver and character type encoding? diff --git a/src/main/java/com/papercut/silken/Utils.java b/src/main/java/com/papercut/silken/Utils.java index 66d7337..2c573c7 100644 --- a/src/main/java/com/papercut/silken/Utils.java +++ b/src/main/java/com/papercut/silken/Utils.java @@ -130,19 +130,32 @@ public static Object toSoyCompatibleObjects(Object obj) { /** * Merge two SoyMapData resources. - * @param s1 1st resource map. - * @param s2 2nd resource map. + * @param soyMap1 1st resource map. + * @param soyMap2 2nd resource map. * @return A new SoyMapData object containing data from both source. */ - public static SoyMapData mergeSoyMapData(SoyMapData s1, SoyMapData s2) { - SoyMapData merged = new SoyMapData(); - for (String key: s1.getKeys()) { - merged.putSingle(key, s1.getSingle(key)); + public static SoyMapData mergeSoyMapData(SoyMapData soyMap1, SoyMapData soyMap2) { + SoyMapData mergedMap = new SoyMapData(); + + if (soyMap1 != null) { + addSoyMapMapToSoyMapData(soyMap1, mergedMap); + } + if (soyMap2 != null) { + addSoyMapMapToSoyMapData(soyMap2, mergedMap); } - for (String key: s2.getKeys()) { - merged.putSingle(key, s2.getSingle(key)); + + return mergedMap; + } + + /** + * Iterates through sourceMap and adds entries to destinationMap + * @param sourceMap Map to read from + * @param destinationMap Map to write to + */ + private static void addSoyMapMapToSoyMapData(SoyMapData sourceMap, SoyMapData destinationMap) { + for (String key: sourceMap.getKeys()) { + destinationMap.putSingle(key, sourceMap.getSingle(key)); } - return merged; } /** From 26affdfc3a80a2fae65a99434756ddc9b23bcf27 Mon Sep 17 00:00:00 2001 From: William Rayner Date: Tue, 19 Jun 2012 16:02:18 +1000 Subject: [PATCH 3/3] * Added recursive fileset resolving --- .../silken/WebAppFileSetResolver.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/papercut/silken/WebAppFileSetResolver.java b/src/main/java/com/papercut/silken/WebAppFileSetResolver.java index eb49be0..1c35c54 100644 --- a/src/main/java/com/papercut/silken/WebAppFileSetResolver.java +++ b/src/main/java/com/papercut/silken/WebAppFileSetResolver.java @@ -50,7 +50,14 @@ public List filesFromNamespace(String searchPath, String namespace, String if (!WEB_APP_ROOT_VAR.equals(path)) { base = path.substring(WEB_APP_ROOT_VAR.length()); } - resourcesList.addAll(listResourcesFromWebDir(base, namespace, suffix)); + // Make sure we end in a slash + StringBuilder pathBuilder = new StringBuilder(base); + if (!base.endsWith("/")) { + pathBuilder.append('/'); + } + pathBuilder.append(namespace.replace(".", "/")).append('/'); + + resourcesList.addAll(listResourcesFromWebDir(pathBuilder.toString(), suffix)); } // We and return when we find our first match on out path. @@ -79,22 +86,15 @@ private List listResourcesFromClasspath(String namespace, String suffix) { return resourceList; } - - private List listResourcesFromWebDir(String base, String namespace, String suffix) { - Preconditions.checkNotNull(base, "No base defined"); - - // Make sure we end in a slash - StringBuilder path = new StringBuilder(base); - if (!base.endsWith("/")) { - path.append('/'); - } - path.append(namespace.replace(".", "/")).append('/'); - - Set files = (Set) servletContext.getResourcePaths(path.toString()); - + + private List listResourcesFromWebDir(String path, String suffix) { + Set files = (Set) servletContext.getResourcePaths(path); + List resourceList = new ArrayList(); for (String file : files) { - if (file.endsWith(suffix)) { + if (file.endsWith("/")) { + resourceList.addAll(listResourcesFromWebDir(file, suffix)); + } else if (file.endsWith(suffix)) { try { resourceList.add(servletContext.getResource(file)); } catch (MalformedURLException e) { @@ -104,5 +104,4 @@ private List listResourcesFromWebDir(String base, String namespace, String } return resourceList; } - }