You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2008/04/15 15:05:09 UTC
svn commit: r648231 - in /incubator/sling/trunk/scripting/javascript/src:
main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
Author: bdelacretaz
Date: Tue Apr 15 06:05:02 2008
New Revision: 648231
URL: http://svn.apache.org/viewvc?rev=648231&view=rev
Log:
SLING-382 - VersionHistoryImpl was incorrectly wrapped as a Node in server-side javascript - contributed by Gert Vanthienen, thanks!
Added:
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java (with props)
Modified:
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java?rev=648231&r1=648230&r2=648231&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java Tue Apr 15 06:05:02 2008
@@ -21,6 +21,8 @@
import java.util.HashMap;
import java.util.Map;
+import javax.jcr.version.VersionHistory;
+
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.WrapFactory;
@@ -30,6 +32,8 @@
public class SlingWrapFactory extends WrapFactory {
public static final SlingWrapFactory INSTANCE = new SlingWrapFactory();
+
+ private static final Class<?>[] EXCLUDED_CLASSES = {VersionHistory.class};
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -73,7 +77,7 @@
}
private String getHostObjectName(Class<?> javaClass) {
- if(javaClass==null) {
+ if(javaClass==null || isExcluded(javaClass)) {
return null;
}
String hostObjectName = wrappers.get(javaClass);
@@ -90,6 +94,18 @@
}
return hostObjectName;
+ }
+
+ /*
+ * Is this class in the excluded class list?
+ */
+ private boolean isExcluded(Class<?> javaClass) {
+ for (Class<?> type : EXCLUDED_CLASSES) {
+ if (type.isAssignableFrom(javaClass)) {
+ return true;
+ }
+ }
+ return false;
}
public void registerWrapper(Class<?> javaClass, String hostObjectName) {
Added: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java?rev=648231&view=auto
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java (added)
+++ incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java Tue Apr 15 06:05:02 2008
@@ -0,0 +1,49 @@
+/*
+ * 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.sling.scripting.wrapper;
+
+import javax.jcr.Node;
+
+import org.apache.sling.scripting.RepositoryScriptingTestBase;
+import org.apache.sling.scripting.ScriptEngineHelper;
+
+public class SlingWrapFactoryTest extends RepositoryScriptingTestBase {
+
+ private Node node;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ node = getNewNode();
+ node.addMixin("mix:versionable");
+ getSession().save();
+
+ node.setProperty("Modified", "Just making sure we have a second version");
+ getSession().save();
+ }
+
+ public void testGetVersionHistoryNotWrapped() throws Exception {
+ final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+ data.put("node", node);
+ Object result = script.eval("node.getVersionHistory().getAllVersions()", data);
+ assertNotNull(result);
+ }
+
+}
Propchange: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Re: svn commit: r648231 - in /incubator/sling/trunk/scripting/javascript/src: main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
Posted by Bertrand Delacretaz <bd...@apache.org>.
On Tue, Apr 15, 2008 at 3:13 PM, Felix Meschberger
<Fe...@day.com> wrote:
> ...You should probably also include the
> Version interface, which also extends from Node and might also pose
> problems...
Done, revision 649089.
-Bertrand
Re: svn commit: r648231 - in
/incubator/sling/trunk/scripting/javascript/src:
main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
Posted by Felix Meschberger <Fe...@day.com>.
Hi Bertrand,
Looks like a usefull approach. You should probably also include the
Version interface, which also extends from Node and might also pose
problems.
Thanks and Regards
Felix
Am Dienstag, den 15.04.2008, 13:05 +0000 schrieb bdelacretaz@apache.org:
> Author: bdelacretaz
> Date: Tue Apr 15 06:05:02 2008
> New Revision: 648231
>
> URL: http://svn.apache.org/viewvc?rev=648231&view=rev
> Log:
> SLING-382 - VersionHistoryImpl was incorrectly wrapped as a Node in server-side javascript - contributed by Gert Vanthienen, thanks!
>
> Added:
> incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java (with props)
> Modified:
> incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
>
> Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
> URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java?rev=648231&r1=648230&r2=648231&view=diff
> ==============================================================================
> --- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java (original)
> +++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java Tue Apr 15 06:05:02 2008
> @@ -21,6 +21,8 @@
> import java.util.HashMap;
> import java.util.Map;
>
> +import javax.jcr.version.VersionHistory;
> +
> import org.mozilla.javascript.Context;
> import org.mozilla.javascript.Scriptable;
> import org.mozilla.javascript.WrapFactory;
> @@ -30,6 +32,8 @@
> public class SlingWrapFactory extends WrapFactory {
>
> public static final SlingWrapFactory INSTANCE = new SlingWrapFactory();
> +
> + private static final Class<?>[] EXCLUDED_CLASSES = {VersionHistory.class};
>
> /** default log */
> private final Logger log = LoggerFactory.getLogger(getClass());
> @@ -73,7 +77,7 @@
> }
>
> private String getHostObjectName(Class<?> javaClass) {
> - if(javaClass==null) {
> + if(javaClass==null || isExcluded(javaClass)) {
> return null;
> }
> String hostObjectName = wrappers.get(javaClass);
> @@ -90,6 +94,18 @@
> }
>
> return hostObjectName;
> + }
> +
> + /*
> + * Is this class in the excluded class list?
> + */
> + private boolean isExcluded(Class<?> javaClass) {
> + for (Class<?> type : EXCLUDED_CLASSES) {
> + if (type.isAssignableFrom(javaClass)) {
> + return true;
> + }
> + }
> + return false;
> }
>
> public void registerWrapper(Class<?> javaClass, String hostObjectName) {
>
> Added: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
> URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java?rev=648231&view=auto
> ==============================================================================
> --- incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java (added)
> +++ incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java Tue Apr 15 06:05:02 2008
> @@ -0,0 +1,49 @@
> +/*
> + * 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.sling.scripting.wrapper;
> +
> +import javax.jcr.Node;
> +
> +import org.apache.sling.scripting.RepositoryScriptingTestBase;
> +import org.apache.sling.scripting.ScriptEngineHelper;
> +
> +public class SlingWrapFactoryTest extends RepositoryScriptingTestBase {
> +
> + private Node node;
> +
> + @Override
> + protected void setUp() throws Exception {
> + super.setUp();
> +
> + node = getNewNode();
> + node.addMixin("mix:versionable");
> + getSession().save();
> +
> + node.setProperty("Modified", "Just making sure we have a second version");
> + getSession().save();
> + }
> +
> + public void testGetVersionHistoryNotWrapped() throws Exception {
> + final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
> + data.put("node", node);
> + Object result = script.eval("node.getVersionHistory().getAllVersions()", data);
> + assertNotNull(result);
> + }
> +
> +}
>
> Propchange: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
> ------------------------------------------------------------------------------
> svn:eol-style = native
>
> Propchange: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
> ------------------------------------------------------------------------------
> svn:keywords = Author Date Id Revision Rev URL
>
>