incubator-freemarker git commit: (JavaDoc typos)
Repository: incubator-freemarker Updated Branches: refs/heads/3 421dc2a93 -> 06377e524 (JavaDoc typos) Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/06377e52 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/06377e52 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/06377e52 Branch: refs/heads/3 Commit: 06377e524da6f59d3e2d625957e16f529cff889b Parents: 421dc2a Author: ddekany Authored: Thu Jan 4 22:47:59 2018 +0100 Committer: ddekany Committed: Fri Jan 5 00:14:06 2018 +0100 -- .../apache/freemarker/core/model/ArgumentArrayLayout.java | 10 +- .../freemarker/core/model/TemplateDirectiveModel.java | 4 ++-- .../org/apache/freemarker/core/util/StringToIndexMap.java | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/06377e52/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java -- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java b/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java index 3da8d6d..e3d3497 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java @@ -33,10 +33,10 @@ import org.apache.freemarker.core.util.StringToIndexMap; * values can always be accessed at these constant indexes; no runtime name lookup is needed inside the {@code * execute} method of the {@link TemplateCallableModel} implementation. The {@link ArgumentArrayLayout} object is * usually stored in a static final field of the {@link TemplateCallableModel} implementation class. Said constant - * indexes are alsi usually defined in the {@link TemplateCallableModel} implementation as static final constants - * (then feed into the {@link ArgumentArrayLayout}). Some {@link TemplateCallableModel} implementations, such those - * stand for macros and functions defined in the template, decide the layout on runtime instead. Note the less, once - * the {@link TemplateCallableModel} was crated, the layout is fixed. + * indexes are also usually defined in the {@link TemplateCallableModel} implementation as static final constants + * (then feed into the {@link ArgumentArrayLayout}). Some {@link TemplateCallableModel} implementations, such as those + * stand for macros and functions defined in the template, decide the layout on runtime instead. None the less, once + * the {@link TemplateCallableModel} was created, the layout is fixed. * * The layout of the array is as follows: * @@ -47,7 +47,7 @@ import org.apache.freemarker.core.util.StringToIndexMap; * * {@link #getPredefinedNamedArgumentsMap()}{@code .size()} elements for the predefined named arguments. These are * at the indexes returned by {@link #getPredefinedNamedArgumentsMap()}{@code .get(String name)}. Yet again, for - * omitted arguments the corresponding array element is {@code null}. Within this index range reserved for the + * omitted arguments the corresponding array element is {@code null}. Within the index range reserved for the * named arguments, the {@link TemplateCallableModel} object is free to chose what index belongs to which name (as * far as two names don't share the same index). * http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/06377e52/freemarker-core/src/main/java/org/apache/freemarker/core/model/TemplateDirectiveModel.java -- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/model/TemplateDirectiveModel.java b/freemarker-core/src/main/java/org/apache/freemarker/core/model/TemplateDirectiveModel.java index c834f97..c30d737 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/model/TemplateDirectiveModel.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/model/TemplateDirectiveModel.java @@ -38,13 +38,13 @@ public interface TemplateDirectiveModel extends TemplateCallableModel { * The array of argument values. Not {@code null}. If a parameter was omitted on the caller side, the * corresponding array element will be {@code null}. The length of the array and the indexes correspond to * the {@link ArgumentArrayLayout} returned by {@link #getDirectiveArgumentArrayLayout()}. {@link - * ArgumentArrayLayout} os not {@code null}m and the caller doesn't keep argument layout rules (such as the + * Argument
[jira] [Commented] (FREEMARKER-55) FM3 freemarker-spring module, Web MVC support
[ https://issues.apache.org/jira/browse/FREEMARKER-55?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16311932#comment-16311932 ] ASF GitHub Bot commented on FREEMARKER-55: -- Github user asfgit closed the pull request at: https://github.com/apache/incubator-freemarker/pull/41 > FM3 freemarker-spring module, Web MVC support > - > > Key: FREEMARKER-55 > URL: https://issues.apache.org/jira/browse/FREEMARKER-55 > Project: Apache Freemarker > Issue Type: Task >Affects Versions: 3.0.0 >Reporter: Daniel Dekany > > Add Spring "Web MVC framework" functionality to freemarker-spring. > This can be complex task (and the issue possibly has to be subdivided), as it > involves things like: > * Some aspects of the FreeMarker 2 integration (developed by the Spring > developers) are quite confusing ({{FreemarerConfigurer}}, etc.), and we are > looking into if it needs to be like that. > * See if we can support {{@EnableWebMvc}} (note that FreeMarker 2 support is > hard coded into {{ViewResolverRegistry}}, which we can't modify) > * Creating custom directives/methods to expose Spring features like the > Spring JSP Tag Library does (but in a way that firs FreeMarker better) > * Expose JSP custom tag support from the {{freemarker-servlet}} module. > Depends on: FREEMARKER-54 -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[03/13] incubator-freemarker git commit: FREEMARKER-55: Adding TagOutputter
FREEMARKER-55: Adding TagOutputter Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/ff2feb04 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/ff2feb04 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/ff2feb04 Branch: refs/heads/3 Commit: ff2feb0402d806731bd64e6132952d1c14026b85 Parents: fb2ae5c Author: Woonsan Ko Authored: Wed Dec 27 00:29:52 2017 -0500 Committer: Woonsan Ko Committed: Wed Dec 27 00:29:52 2017 -0500 -- .../AbstractSpringTemplateCallableModel.java| 10 +- ...aBoundFormElementTemplateDirectiveModel.java | 73 + .../AbstractFormTemplateDirectiveModel.java | 57 +++ ...stractHtmlElementTemplateDirectiveModel.java | 114 +- ...tHtmlInputElementTemplateDirectiveModel.java | 19 +++ .../model/form/InputTemplateDirectiveModel.java | 87 --- .../spring/model/form/TagOutputter.java | 152 +++ .../form/InputTemplateDirectiveModelTest.java | 8 +- 8 files changed, 456 insertions(+), 64 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ff2feb04/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java index d97e750..d552e9c 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java @@ -130,9 +130,17 @@ abstract class AbstractSpringTemplateCallableModel implements TemplateCallableMo protected final TemplateModel getBindStatusTemplateModel(Environment env, ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext, String path, boolean ignoreNestedPath) throws TemplateException { +BindStatus status = getBindStatus(env, objectWrapperAndUnwrapper, requestContext, path, ignoreNestedPath); +return (status != null) ? objectWrapperAndUnwrapper.wrap(status) : null; +} + +// TODO: Javadocs +protected final BindStatus getBindStatus(Environment env, +ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext, String path, +boolean ignoreNestedPath) throws TemplateException { final String resolvedPath = (ignoreNestedPath) ? path : resolveNestedPath(env, objectWrapperAndUnwrapper, path); BindStatus status = requestContext.getBindStatus(resolvedPath, false); -return (status != null) ? objectWrapperAndUnwrapper.wrap(status) : null; +return status; } /** http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ff2feb04/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java index f9afb84..7bfac9b 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java @@ -1,16 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. 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. + */ + package org.apache.freemarker.spring.model.form; +import java.io.IOException; + import javax.servlet.http.HttpSe
[04/13] incubator-freemarker git commit: FREEMARKER-55: make attribute arguments explicit
FREEMARKER-55: make attribute arguments explicit Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/2b5e9b7c Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/2b5e9b7c Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/2b5e9b7c Branch: refs/heads/3 Commit: 2b5e9b7cb8bda5065e475339f3ec9dd854848b0a Parents: ff2feb0 Author: Woonsan Ko Authored: Thu Dec 28 01:26:54 2017 -0500 Committer: Woonsan Ko Committed: Thu Dec 28 01:26:54 2017 -0500 -- ...aBoundFormElementTemplateDirectiveModel.java | 76 +++- .../AbstractFormTemplateDirectiveModel.java | 41 ++- ...stractHtmlElementTemplateDirectiveModel.java | 349 +-- ...tHtmlInputElementTemplateDirectiveModel.java | 126 +++ .../model/form/InputTemplateDirectiveModel.java | 152 +--- .../spring/model/form/TagOutputter.java | 11 +- .../test/model/form/input-directive-usages.ftlh | 2 +- 7 files changed, 582 insertions(+), 175 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2b5e9b7c/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java index 7bfac9b..f50f81d 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java @@ -20,38 +20,88 @@ package org.apache.freemarker.spring.model.form; import java.io.IOException; +import java.io.Writer; +import java.util.Arrays; +import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.freemarker.core.CallPlace; import org.apache.freemarker.core.Environment; import org.apache.freemarker.core.TemplateException; +import org.apache.freemarker.core.model.ArgumentArrayLayout; import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper; +import org.apache.freemarker.core.model.TemplateModel; +import org.apache.freemarker.core.util.CallableUtils; +import org.apache.freemarker.core.util.StringToIndexMap; import org.springframework.util.StringUtils; import org.springframework.web.servlet.support.BindStatus; import org.springframework.web.servlet.support.RequestContext; +import org.springframework.web.servlet.support.RequestDataValueProcessor; /** * Corresponds to org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag. */ public abstract class AbstractDataBoundFormElementTemplateDirectiveModel extends AbstractFormTemplateDirectiveModel { +private static final int PATH_PARAM_IDX = 0; + +private static final int ID_PARAM_IDX = 1; + +private static final String ID_PARAM_NAME = "id"; + +protected static List NAMED_ARGS_ENTRY_LIST = Arrays.asList( +new StringToIndexMap.Entry(ID_PARAM_NAME, ID_PARAM_IDX) +); + +private static final ArgumentArrayLayout ARGS_LAYOUT = +ArgumentArrayLayout.create( +1, +false, +StringToIndexMap.of(NAMED_ARGS_ENTRY_LIST.toArray(new StringToIndexMap.Entry[NAMED_ARGS_ENTRY_LIST.size()])), +true +); + +private String path; private String id; +private BindStatus bindStatus; + +protected AbstractDataBoundFormElementTemplateDirectiveModel(HttpServletRequest request, +HttpServletResponse response) { +super(request, response); +} + +public String getPath() { +return path; +} + public String getId() { return id; } -public void setId(String id) { -this.id = id; +@Override +public ArgumentArrayLayout getDirectiveArgumentArrayLayout() { +return ARGS_LAYOUT; } -protected AbstractDataBoundFormElementTemplateDirectiveModel(HttpServletRequest request, -HttpServletResponse response) { -super(request, response); +@Override +protected void executeInternal(TemplateModel[] args, CallPlace callPlace, Writer out, Environment env, +ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext) +throws TemplateException, IOException { + +path = CallableUtils.getOptionalStringArgument(args, PATH_PA
[09/13] incubator-freemarker git commit: FREEMARKER-55: replacing list by array for varg entries
FREEMARKER-55: replacing list by array for varg entries Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/207d94ef Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/207d94ef Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/207d94ef Branch: refs/heads/3 Commit: 207d94ef8d123b43cf9ff3aed9b0c77f0dff7ecc Parents: 045c980 Author: Woonsan Ko Authored: Thu Jan 4 11:41:38 2018 -0500 Committer: Woonsan Ko Committed: Thu Jan 4 11:41:38 2018 -0500 -- .../freemarker/core/util/_ArrayUtilsTest.java | 76 + .../freemarker/core/util/_ArrayUtils.java | 109 +++ ...aBoundFormElementTemplateDirectiveModel.java | 8 +- ...stractHtmlElementTemplateDirectiveModel.java | 53 - ...tHtmlInputElementTemplateDirectiveModel.java | 30 ++--- .../model/form/FormTemplateDirectiveModel.java | 44 .../model/form/InputTemplateDirectiveModel.java | 28 ++--- 7 files changed, 254 insertions(+), 94 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/207d94ef/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/_ArrayUtilsTest.java -- diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/_ArrayUtilsTest.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/_ArrayUtilsTest.java new file mode 100644 index 000..b849bca --- /dev/null +++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/_ArrayUtilsTest.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. 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. + */ + +package org.apache.freemarker.core.util; + +import java.util.Arrays; + +import org.junit.Test; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +public class _ArrayUtilsTest { + +@Test +public void testAddAll() { +Object [] arr = _ArrayUtils.addAll(null); +assertTrue(arr.length == 0); + +arr = _ArrayUtils.addAll(null, null); +assertNull(arr); + +Object[] arr1 = { "a", "b", "c" }; +Object[] arr2 = { "1", "2", "3" }; +Object[] arrAll = { "a", "b", "c", "1", "2", "3" }; + +arr = _ArrayUtils.addAll(arr1, null); +assertNotSame(arr1, arr); +assertArrayEquals(arr1, arr); + +arr = _ArrayUtils.addAll(null, arr2); +assertNotSame(arr2, arr); +assertArrayEquals(arr2, arr); + +arr = _ArrayUtils.addAll(arr1, arr2); +assertArrayEquals(arrAll, arr); +} + +@Test +public void testClone() { +assertArrayEquals(null, _ArrayUtils.clone((Object[]) null)); +Object[] original1 = new Object[0]; +Object[] cloned1 = _ArrayUtils.clone(original1); +assertTrue(Arrays.equals(original1, cloned1)); +assertTrue(original1 != cloned1); + +final StringBuilder builder = new StringBuilder("pick"); +original1 = new Object[]{builder, "a", new String[]{"stick"}}; +cloned1 = _ArrayUtils.clone(original1); +assertTrue(Arrays.equals(original1, cloned1)); +assertTrue(original1 != cloned1); +assertSame(original1[0], cloned1[0]); +assertSame(original1[1], cloned1[1]); +assertSame(original1[2], cloned1[2]); +} + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/207d94ef/freemarker-core/src/main/java/org/apache/freemarker/core/util/_ArrayUtils.java -- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/util/_ArrayUtils.java b/freemarker-core/src/main/java/org/apache/freemarker/core/util/_ArrayUtils.java new file mode 100644 index 000..a060f99 --- /dev/null +++ b/freemarker-core/sr
[13/13] incubator-freemarker git commit: FREEMARKER-55: Spring MVC Form JSP TagLibs Support - form and input directives
FREEMARKER-55: Spring MVC Form JSP TagLibs Support - form and input directives Merge commit 'refs/pull/41/head' of https://github.com/apache/incubator-freemarker into 3 Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/421dc2a9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/421dc2a9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/421dc2a9 Branch: refs/heads/3 Commit: 421dc2a93a258e87b0ecb008e5abae69dc84cf70 Parents: efa000c 5b510c4 Author: Woonsan Ko Authored: Thu Jan 4 14:46:23 2018 -0500 Committer: Woonsan Ko Committed: Thu Jan 4 14:46:23 2018 -0500 -- FM3-CHANGE-LOG.txt | 3 + .../freemarker/core/util/_ArrayUtilsTest.java | 76 .../freemarker/core/util/StringToIndexMap.java | 18 + .../freemarker/core/util/_ArrayUtils.java | 109 + .../AbstractSpringTemplateCallableModel.java| 25 +- .../AbstractSpringTemplateDirectiveModel.java | 2 +- .../model/SpringTemplateCallableHashModel.java | 9 +- ...aBoundFormElementTemplateDirectiveModel.java | 161 .../AbstractFormTemplateDirectiveModel.java | 74 ...stractHtmlElementTemplateDirectiveModel.java | 353 + ...tHtmlInputElementTemplateDirectiveModel.java | 155 .../model/form/FormTemplateDirectiveModel.java | 395 +++ .../model/form/InputTemplateDirectiveModel.java | 199 ++ .../SpringFormTemplateCallableHashModel.java| 57 +++ .../spring/model/form/TagOutputter.java | 160 .../spring/web/view/FreeMarkerView.java | 4 + .../form/FormTemplateDirectiveModelTest.java| 107 + .../form/InputTemplateDirectiveModelTest.java | 107 + .../test/model/form/form-directive-usages.ftlh | 78 .../test/model/form/input-directive-usages.ftlh | 92 + 20 files changed, 2176 insertions(+), 8 deletions(-) --
[02/13] incubator-freemarker git commit: FREEMARKER-55: skeletal unit test for input tag
FREEMARKER-55: skeletal unit test for input tag Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/fb2ae5cc Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/fb2ae5cc Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/fb2ae5cc Branch: refs/heads/3 Commit: fb2ae5cc81c4160c7bc694e0d85b8d979a61db49 Parents: 150ad7f Author: Woonsan Ko Authored: Sat Dec 23 17:43:33 2017 -0500 Committer: Woonsan Ko Committed: Sat Dec 23 17:43:33 2017 -0500 -- .../model/SpringTemplateCallableHashModel.java | 3 + ...stractHtmlElementTemplateDirectiveModel.java | 21 ++ .../model/form/InputTemplateDirectiveModel.java | 19 +- .../SpringFormTemplateCallableHashModel.java| 57 .../form/InputTemplateDirectiveModelTest.java | 71 .../test/model/form/input-directive-usages.ftlh | 27 6 files changed, 180 insertions(+), 18 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fb2ae5cc/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java index eb17233..76c 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java @@ -30,6 +30,7 @@ import org.apache.freemarker.core.TemplateException; import org.apache.freemarker.core.model.TemplateHashModel; import org.apache.freemarker.core.model.TemplateModel; import org.apache.freemarker.core.model.TemplateStringModel; +import org.apache.freemarker.spring.model.form.SpringFormTemplateCallableHashModel; /** * TemplateHashModel wrapper for templates using Spring directives, functions and internal models. @@ -67,6 +68,8 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel, modelsMap.put(TransformFunction.NAME, new TransformFunction(request, response)); modelsMap.put(UrlFunction.NAME, new UrlFunction(request, response)); modelsMap.put(EvalFunction.NAME, new EvalFunction(request, response)); + +modelsMap.put(SpringFormTemplateCallableHashModel.NAME, new SpringFormTemplateCallableHashModel(request, response)); } @Override http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fb2ae5cc/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java index a0766f8..23b3d43 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java @@ -11,6 +11,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.freemarker.core.TemplateException; +import org.apache.freemarker.core.model.ArgumentArrayLayout; import org.apache.freemarker.core.model.TemplateBooleanModel; import org.apache.freemarker.core.model.TemplateHashModelEx; import org.apache.freemarker.core.model.TemplateModel; @@ -53,6 +54,16 @@ public abstract class AbstractHtmlElementTemplateDirectiveModel "onkeydown") ); +private static final int PATH_PARAM_IDX = 0; + +private static final ArgumentArrayLayout ARGS_LAYOUT = +ArgumentArrayLayout.create( +1, +false, +null, +true +); + private Map attributes; private Map unmodifiableAttributes = Collections.emptyMap(); @@ -60,6 +71,11 @@ public abstract class AbstractHtmlElementTemplateDirectiveModel super(request, response); } +@Override +public ArgumentArrayLayout getDirectiveArgumentArrayLayout() { +return ARGS_LAYOUT; +} + public Map getAttributes() { return unmodifiableAttributes; } @@ -81,6 +97,11 @@ public abstract class AbstractHtmlElementTemplateDirectiveModel attr
[08/13] incubator-freemarker git commit: FREEMARKER-55: Adding tests and polishing
FREEMARKER-55: Adding tests and polishing Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/045c980c Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/045c980c Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/045c980c Branch: refs/heads/3 Commit: 045c980cfcbc96b258334aaf467145914864 Parents: 1f7100c Author: Woonsan Ko Authored: Tue Jan 2 23:03:55 2018 -0500 Committer: Woonsan Ko Committed: Tue Jan 2 23:03:55 2018 -0500 -- .../AbstractSpringTemplateCallableModel.java| 15 - .../model/SpringTemplateCallableHashModel.java | 9 ++- ...aBoundFormElementTemplateDirectiveModel.java | 2 +- .../AbstractFormTemplateDirectiveModel.java | 15 +++-- ...stractHtmlElementTemplateDirectiveModel.java | 8 +-- ...tHtmlInputElementTemplateDirectiveModel.java | 2 +- .../model/form/FormTemplateDirectiveModel.java | 65 ++-- .../model/form/InputTemplateDirectiveModel.java | 34 +- .../SpringFormTemplateCallableHashModel.java| 1 - .../spring/model/form/TagOutputter.java | 3 + .../form/FormTemplateDirectiveModelTest.java| 41 +++- .../form/InputTemplateDirectiveModelTest.java | 35 +++ .../test/model/form/form-directive-usages.ftlh | 46 -- .../test/model/form/input-directive-usages.ftlh | 52 +++- 14 files changed, 290 insertions(+), 38 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/045c980c/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java index f7c75d9..4866557 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java @@ -134,7 +134,20 @@ public abstract class AbstractSpringTemplateCallableModel implements TemplateCal return (status != null) ? objectWrapperAndUnwrapper.wrap(status) : null; } -// TODO: Javadocs +/** + * Find {@link BindStatus} with no {@code htmlEscape} option from {@link RequestContext} by the {@code path}. + * + * NOTE: In FreeMarker, there is no need to depend on BindStatus#htmlEscape option + * as FreeMarker template expressions can easily set escape option by themselves. + * Therefore, this method always get a {@link BindStatus} with {@code htmlEscape} option set to {@code false}. + * @param env Environment + * @param objectWrapperAndUnwrapper ObjectWrapperAndUnwrapper + * @param requestContext Spring RequestContext + * @param path bind path + * @param ignoreNestedPath flag whether or not to ignore the nested path + * @return a {@link BindStatus} with no {@code htmlEscape} option from {@link RequestContext} by the {@code path} + * @throws TemplateException if template exception occurs + */ protected final BindStatus getBindStatus(Environment env, ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext, String path, boolean ignoreNestedPath) throws TemplateException { http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/045c980c/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java index 76c..a859821 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java @@ -35,7 +35,6 @@ import org.apache.freemarker.spring.model.form.SpringFormTemplateCallableHashMod /** * TemplateHashModel wrapper for templates using Spring directives, functions and internal models. */ -//TODO [FM3] Shouldn't this be a TemplateHashModelEx? public final class SpringTemplateCallableHashModel implements TemplateHashModel, Serializable { private static final long serialVersionUID = 1L; @@ -77,19 +76,19 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel, return m
[GitHub] incubator-freemarker pull request #41: FREEMARKER-55: Spring MVC Form Suppor...
Github user asfgit closed the pull request at: https://github.com/apache/incubator-freemarker/pull/41 ---
[12/13] incubator-freemarker git commit: FREEMARKER-55: update changelog
FREEMARKER-55: update changelog Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/5b510c45 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/5b510c45 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/5b510c45 Branch: refs/heads/3 Commit: 5b510c45f1190a6b905c6248ab71d5171e8f12fb Parents: fdbeb1c Author: Woonsan Ko Authored: Thu Jan 4 14:37:45 2018 -0500 Committer: Woonsan Ko Committed: Thu Jan 4 14:37:45 2018 -0500 -- FM3-CHANGE-LOG.txt | 3 +++ 1 file changed, 3 insertions(+) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b510c45/FM3-CHANGE-LOG.txt -- diff --git a/FM3-CHANGE-LOG.txt b/FM3-CHANGE-LOG.txt index 2be3d10..42fbf68 100644 --- a/FM3-CHANGE-LOG.txt +++ b/FM3-CHANGE-LOG.txt @@ -521,6 +521,9 @@ models by default like FreemarkerServlet does. - : Replaced by spring.url(...) function. - : No need since spring.url(...) function supports named vargs for variable length parameters. - : Replaced by spring.eval(...) function. +- Directives Support to replace Spring Form JSP Tag Libraries in spring-form.tld: + - : Replaced by <@form.form ... /> directive. + - : Replaced by <@form.input ... /> directive. Core / Miscellaneous
[10/13] incubator-freemarker git commit: FREEMARKER-55: cleanups - expose ARGS_LAYOUT only as possible
FREEMARKER-55: cleanups - expose ARGS_LAYOUT only as possible Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/2ffeeae3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/2ffeeae3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/2ffeeae3 Branch: refs/heads/3 Commit: 2ffeeae325f7959534ceaf4b783e43dd445b899c Parents: 207d94e Author: Woonsan Ko Authored: Thu Jan 4 14:20:52 2018 -0500 Committer: Woonsan Ko Committed: Thu Jan 4 14:20:52 2018 -0500 -- .../freemarker/core/util/StringToIndexMap.java| 18 ++ ...ataBoundFormElementTemplateDirectiveModel.java | 18 -- ...AbstractHtmlElementTemplateDirectiveModel.java | 11 ++- ...actHtmlInputElementTemplateDirectiveModel.java | 10 ++ .../model/form/FormTemplateDirectiveModel.java| 10 ++ .../model/form/InputTemplateDirectiveModel.java | 10 ++ 6 files changed, 58 insertions(+), 19 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java -- diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java b/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java index 830a41f..6f997eb 100644 --- a/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java +++ b/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java @@ -37,6 +37,10 @@ public final class StringToIndexMap { private static final int MAX_VARIATIONS_TRIED = 4; +/** Input Entries from caller. */ +private final Entry[] inputEntries; + +/** Internal entry buckets. */ private final Entry[] buckets; private final int bucketIndexMask; private final int bucketIndexOverlap; @@ -131,6 +135,7 @@ public final class StringToIndexMap { // This is a very frequent case, so we optimize for it a bit. private StringToIndexMap(Entry entry) { +inputEntries = new Entry[] { entry }; buckets = new Entry[] { entry }; bucketIndexMask = 0; bucketIndexOverlap = 0; @@ -143,11 +148,15 @@ public final class StringToIndexMap { private StringToIndexMap(Entry[] entries, int entriesLength) { if (entriesLength == 0) { +inputEntries = null; buckets = null; bucketIndexMask = 0; bucketIndexOverlap = 0; keys = Collections.emptyList(); } else { +inputEntries = new Entry[entriesLength]; +System.arraycopy(entries, 0, inputEntries, 0, entriesLength); + String[] keyArray = new String[entriesLength]; for (int i = 0; i < entriesLength; i++) { keyArray[i] = entries[i].key; @@ -273,6 +282,15 @@ public final class StringToIndexMap { } +/** + * Return a cloned array from the original {@link Entry} array which was given by the caller through directly + * using {@link #of(Entry...)} or {@link #of(Entry[], int)} or indirectly using other methods such as {@link #of(String, int)}. + * @return a cloned array from the original {@link Entry} array which was given by the caller + */ +public Entry[] getInputEntries() { +return inputEntries; +} + private static int getPowerOf2GreaterThanOrEqualTo(int n) { if (n == 0) { return 0; http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java index 3cb36d6..11b47c3 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java @@ -53,11 +53,25 @@ abstract class AbstractDataBoundFormElementTemplateDirectiveModel extends Abstra private static final String ID_PARAM_NAME = ID_ATTR_NAME; -protected static StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES = { +private static final StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES = { new StringToIndexMap.Entry
[11/13] incubator-freemarker git commit: FREEMARKER-55: exposing form model directly
FREEMARKER-55: exposing form model directly Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/fdbeb1c6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/fdbeb1c6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/fdbeb1c6 Branch: refs/heads/3 Commit: fdbeb1c6e4109480785797dd4938f7d7d47b89e2 Parents: 2ffeeae Author: Woonsan Ko Authored: Thu Jan 4 14:26:00 2018 -0500 Committer: Woonsan Ko Committed: Thu Jan 4 14:26:00 2018 -0500 -- .../freemarker/spring/model/SpringTemplateCallableHashModel.java | 3 --- .../org/apache/freemarker/spring/web/view/FreeMarkerView.java| 4 .../views/test/model/form/form-directive-usages.ftlh | 2 -- .../views/test/model/form/input-directive-usages.ftlh| 2 -- 4 files changed, 4 insertions(+), 7 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fdbeb1c6/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java index a859821..ad74823 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java @@ -30,7 +30,6 @@ import org.apache.freemarker.core.TemplateException; import org.apache.freemarker.core.model.TemplateHashModel; import org.apache.freemarker.core.model.TemplateModel; import org.apache.freemarker.core.model.TemplateStringModel; -import org.apache.freemarker.spring.model.form.SpringFormTemplateCallableHashModel; /** * TemplateHashModel wrapper for templates using Spring directives, functions and internal models. @@ -67,8 +66,6 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel, modelsMap.put(TransformFunction.NAME, new TransformFunction(request, response)); modelsMap.put(UrlFunction.NAME, new UrlFunction(request, response)); modelsMap.put(EvalFunction.NAME, new EvalFunction(request, response)); - -modelsMap.put(SpringFormTemplateCallableHashModel.NAME, new SpringFormTemplateCallableHashModel(request, response)); } @Override http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fdbeb1c6/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java index c8fcbd2..8689522 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java @@ -36,6 +36,7 @@ import org.apache.freemarker.servlet.IncludePage; import org.apache.freemarker.servlet.ServletContextHashModel; import org.apache.freemarker.servlet.jsp.TaglibFactory; import org.apache.freemarker.spring.model.SpringTemplateCallableHashModel; +import org.apache.freemarker.spring.model.form.SpringFormTemplateCallableHashModel; /** * FreeMarker template based view implementation, with being able to provide a {@link ServletContextHashModel} @@ -141,6 +142,9 @@ public class FreeMarkerView extends AbstractFreeMarkerView { model.putUnlistedModel(SpringTemplateCallableHashModel.NAME, new SpringTemplateCallableHashModel(request, response)); +model.putUnlistedModel(SpringFormTemplateCallableHashModel.NAME, +new SpringFormTemplateCallableHashModel(request, response)); + model.putAll(map); return model; http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fdbeb1c6/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/form-directive-usages.ftlh -- diff --git a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/form-directive-usages.ftlh b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/form-directive-usages.ftlh index f70a4aa..bfd65cd 100644 --- a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/form-directive-usages.ftlh +++ b/freemarker-spring/src/test/resources/META-INF/web-reso
[07/13] incubator-freemarker git commit: FREEMARKER-55: Adding skeletal form directive
FREEMARKER-55: Adding skeletal form directive Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/1f7100ce Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/1f7100ce Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/1f7100ce Branch: refs/heads/3 Commit: 1f7100cee9ca2e1c2c28e4bc5bded6e4857677ec Parents: aa264af Author: Woonsan Ko Authored: Sat Dec 30 01:07:12 2017 -0500 Committer: Woonsan Ko Committed: Sat Dec 30 01:07:12 2017 -0500 -- ...stractHtmlElementTemplateDirectiveModel.java | 1 + .../model/form/FormTemplateDirectiveModel.java | 346 +++ .../SpringFormTemplateCallableHashModel.java| 1 + .../form/FormTemplateDirectiveModelTest.java| 68 .../test/model/form/form-directive-usages.ftlh | 42 +++ 5 files changed, 458 insertions(+) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/1f7100ce/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java index 1bd8d5c..f711f3a 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java @@ -107,6 +107,7 @@ public abstract class AbstractHtmlElementTemplateDirectiveModel private static final int CSSERRORCLASS_PARAM_IDX = NAMED_ARGS_OFFSET + 16; private static final String CSSERRORCLASS_PARAM_NAME = "cssErrorClass"; +// TODO: It's a problem to see NAMED_ARGS_ENTRY_LIST is visible from child classes! @SuppressWarnings("unchecked") protected static List NAMED_ARGS_ENTRY_LIST = _CollectionUtils.mergeImmutableLists(false, http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/1f7100ce/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java new file mode 100644 index 000..565245b --- /dev/null +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java @@ -0,0 +1,346 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. 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. + */ + +package org.apache.freemarker.spring.model.form; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.util.Arrays; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.freemarker.core.CallPlace; +import org.apache.freemarker.core.Environment; +import org.apache.freemarker.core.TemplateException; +import org.apache.freemarker.core.model.ArgumentArrayLayout; +import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper; +import org.apache.freemarker.core.model.TemplateModel; +import org.apache.freemarker.core.util.CallableUtils; +import org.apache.freemarker.core.util.StringToIndexMap; +import org.apache.freemarker.core.util._CollectionUtils; +import org.springframework.http.HttpMethod; +import org.springframework.util.StringUtils; +import org.springframework.web.servlet.support.RequestContext; +import org.springframework.web.servlet.support.RequestDataValueProcessor; +import org.springframework.web.util.HtmlUtils; +import org.springframework.web.util.UriUtils; + +public class FormTemplate
[05/13] incubator-freemarker git commit: FREEMARKER-55: unit tests for form.input directive
FREEMARKER-55: unit tests for form.input directive Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/ae94a3d4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/ae94a3d4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/ae94a3d4 Branch: refs/heads/3 Commit: ae94a3d494ac1da64c89e70a4f021170f064730c Parents: 2b5e9b7 Author: Woonsan Ko Authored: Fri Dec 29 23:54:07 2017 -0500 Committer: Woonsan Ko Committed: Fri Dec 29 23:54:07 2017 -0500 -- ...aBoundFormElementTemplateDirectiveModel.java | 34 +--- .../AbstractFormTemplateDirectiveModel.java | 4 ++- ...stractHtmlElementTemplateDirectiveModel.java | 15 ++--- ...tHtmlInputElementTemplateDirectiveModel.java | 1 + .../model/form/InputTemplateDirectiveModel.java | 1 + .../form/InputTemplateDirectiveModelTest.java | 9 +++--- .../test/model/form/input-directive-usages.ftlh | 27 ++-- 7 files changed, 59 insertions(+), 32 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ae94a3d4/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java index f50f81d..27bc4fd 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java @@ -49,7 +49,11 @@ public abstract class AbstractDataBoundFormElementTemplateDirectiveModel extends private static final int ID_PARAM_IDX = 1; -private static final String ID_PARAM_NAME = "id"; +private static final String ID_ATTR_NAME = "id"; + +private static final String NAME_ATTR_NAME = "name"; + +private static final String ID_PARAM_NAME = ID_ATTR_NAME; protected static List NAMED_ARGS_ENTRY_LIST = Arrays.asList( new StringToIndexMap.Entry(ID_PARAM_NAME, ID_PARAM_IDX) @@ -102,13 +106,12 @@ public abstract class AbstractDataBoundFormElementTemplateDirectiveModel extends } protected void writeDefaultAttributes(TagOutputter tagOut) throws TemplateException, IOException { -// FIXME -writeOptionalAttribute(tagOut, "id", resolveId()); -writeOptionalAttribute(tagOut, "name", getName()); +writeOptionalAttribute(tagOut, ID_ATTR_NAME, resolveId()); +writeOptionalAttribute(tagOut, NAME_ATTR_NAME, getName()); } protected String resolveId() throws TemplateException { -Object id = evaluate("id", getId()); +Object id = evaluate(ID_PARAM_NAME, getId()); if (id != null) { String idString = id.toString(); @@ -123,29 +126,22 @@ public abstract class AbstractDataBoundFormElementTemplateDirectiveModel extends } protected String getName() throws TemplateException { -// FIXME -return "name"; -//return getPropertyPath(); +return getPropertyPath(); } -protected String getPropertyPath(Environment env, -ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext, String path, -boolean ignoreNestedPath) throws TemplateException { -BindStatus status = getBindStatus(env, objectWrapperAndUnwrapper, requestContext, path, ignoreNestedPath); -String expression = status.getExpression(); +protected String getPropertyPath() { +String expression = getBindStatus().getExpression(); return (expression != null ? expression : ""); } protected final String processFieldValue(Environment env, String name, String value, String type) throws TemplateException { RequestContext requestContext = getRequestContext(env, false); RequestDataValueProcessor processor = requestContext.getRequestDataValueProcessor(); +HttpServletRequest request = getRequest(); -// FIXME -//ServletRequest request = this.pageContext.getRequest(); -// -//if (processor != null && (request instanceof HttpServletRequest)) { -//value = processor.processFormFieldValue((HttpServletRequest) request, name, value, type); -//} +if (processor != null && request != null) { +value = processor.processFormFieldValue(request, name, value, type); +} re
[06/13] incubator-freemarker git commit: FREEMARKER-55: make it public for consistency
FREEMARKER-55: make it public for consistency Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/aa264af1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/aa264af1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/aa264af1 Branch: refs/heads/3 Commit: aa264af1bce93e0891c9551b8c494185471e5727 Parents: ae94a3d Author: Woonsan Ko Authored: Fri Dec 29 23:59:13 2017 -0500 Committer: Woonsan Ko Committed: Fri Dec 29 23:59:13 2017 -0500 -- .../spring/model/AbstractSpringTemplateCallableModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/aa264af1/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java index d552e9c..f7c75d9 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java @@ -38,7 +38,7 @@ import org.springframework.web.servlet.view.AbstractTemplateView; /** * Abstract TemplateCallableModel for derived classes to support Spring MVC based templating environment. */ -abstract class AbstractSpringTemplateCallableModel implements TemplateCallableModel { +public abstract class AbstractSpringTemplateCallableModel implements TemplateCallableModel { private final HttpServletRequest request; private final HttpServletResponse response;
[01/13] incubator-freemarker git commit: FREEMARKER-55: skeletal design
Repository: incubator-freemarker Updated Branches: refs/heads/3 efa000c9c -> 421dc2a93 FREEMARKER-55: skeletal design Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/150ad7f6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/150ad7f6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/150ad7f6 Branch: refs/heads/3 Commit: 150ad7f6039446e2d0e3ee66010abe5be920d8d1 Parents: efa000c Author: Woonsan Ko Authored: Fri Dec 22 23:21:37 2017 -0500 Committer: Woonsan Ko Committed: Fri Dec 22 23:21:37 2017 -0500 -- .../AbstractSpringTemplateDirectiveModel.java | 2 +- ...aBoundFormElementTemplateDirectiveModel.java | 16 +++ .../AbstractFormTemplateDirectiveModel.java | 17 +++ ...stractHtmlElementTemplateDirectiveModel.java | 139 +++ ...tHtmlInputElementTemplateDirectiveModel.java | 13 ++ .../model/form/InputTemplateDirectiveModel.java | 86 6 files changed, 272 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/150ad7f6/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java index c91b387..4366841 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java @@ -36,7 +36,7 @@ import org.springframework.web.servlet.support.RequestContext; /** * Abstract TemplateDirectiveModel for derived classes to support Spring MVC based templating environment. */ -abstract class AbstractSpringTemplateDirectiveModel extends AbstractSpringTemplateCallableModel +public abstract class AbstractSpringTemplateDirectiveModel extends AbstractSpringTemplateCallableModel implements TemplateDirectiveModel { /** http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/150ad7f6/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java new file mode 100644 index 000..f9afb84 --- /dev/null +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java @@ -0,0 +1,16 @@ +package org.apache.freemarker.spring.model.form; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Corresponds to org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag. + */ +public abstract class AbstractDataBoundFormElementTemplateDirectiveModel extends AbstractFormTemplateDirectiveModel { + +protected AbstractDataBoundFormElementTemplateDirectiveModel(HttpServletRequest request, +HttpServletResponse response) { +super(request, response); +} + +} http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/150ad7f6/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractFormTemplateDirectiveModel.java -- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractFormTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractFormTemplateDirectiveModel.java new file mode 100644 index 000..84ca87d --- /dev/null +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractFormTemplateDirectiveModel.java @@ -0,0 +1,17 @@ +package org.apache.freemarker.spring.model.form; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.freemarker.spring.model.AbstractSpringTemplateDirectiveModel; + +/** + * Corresponds to org.springframework.web.servlet.tags.form.AbstractFormTag. + */ +public abstract class AbstractFormTemplateDirectiveModel extends AbstractSpringTemplateDirectiveModel { + +protected AbstractFormTemplateDirectiveModel(HttpServletRequest request, HttpServletResponse response) { +