incubator-freemarker git commit: (JavaDoc typos)

2018-01-04 Thread ddekany
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

2018-01-04 Thread ASF GitHub Bot (JIRA)

[ 
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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...

2018-01-04 Thread asfgit
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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

2018-01-04 Thread woonsan
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) {
+