This repository has been archived by the owner on Mar 9, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 60
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fixed bug where lists in documents were not properly wrapped for rhino
- Loading branch information
Showing
3 changed files
with
311 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
207 changes: 207 additions & 0 deletions
207
TouchDB-Android-JavaScript/src/org/elasticsearch/script/javascript/support/NativeList.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,207 @@ | |||
/* | |||
* Licensed to ElasticSearch and Shay Banon under one | |||
* or more contributor license agreements. See the NOTICE file | |||
* distributed with this work for additional information | |||
* regarding copyright ownership. ElasticSearch 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.elasticsearch.script.javascript.support; | |||
|
|||
import java.util.List; | |||
|
|||
import org.mozilla.javascript.Scriptable; | |||
import org.mozilla.javascript.Undefined; | |||
import org.mozilla.javascript.Wrapper; | |||
|
|||
/** | |||
* | |||
*/ | |||
public class NativeList implements Scriptable, Wrapper { | |||
private static final long serialVersionUID = 3664761893203964569L; | |||
|
|||
private List<Object> list; | |||
private Scriptable parentScope; | |||
private Scriptable prototype; | |||
|
|||
|
|||
public static NativeList wrap(Scriptable scope, List<Object> list) { | |||
return new NativeList(scope, list); | |||
} | |||
|
|||
public NativeList(Scriptable scope, List<Object> list) { | |||
this.parentScope = scope; | |||
this.list = list; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Wrapper#unwrap() | |||
*/ | |||
|
|||
public Object unwrap() { | |||
return list; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#getClassName() | |||
*/ | |||
|
|||
public String getClassName() { | |||
return "NativeList"; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#get(java.lang.String, org.mozilla.javascript.Scriptable) | |||
*/ | |||
|
|||
public Object get(String name, Scriptable start) { | |||
if ("length".equals(name)) { | |||
return list.size(); | |||
} else { | |||
return Undefined.instance; | |||
} | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#get(int, org.mozilla.javascript.Scriptable) | |||
*/ | |||
|
|||
public Object get(int index, Scriptable start) { | |||
if (index < 0 || index >= list.size()) { | |||
return Undefined.instance; | |||
} | |||
return list.get(index); | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#has(java.lang.String, org.mozilla.javascript.Scriptable) | |||
*/ | |||
|
|||
public boolean has(String name, Scriptable start) { | |||
if ("length".equals(name)) { | |||
return true; | |||
} | |||
return false; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#has(int, org.mozilla.javascript.Scriptable) | |||
*/ | |||
|
|||
public boolean has(int index, Scriptable start) { | |||
return index >= 0 && index < list.size(); | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object) | |||
*/ | |||
|
|||
@SuppressWarnings("unchecked") | |||
public void put(String name, Scriptable start, Object value) { | |||
// do nothing here... | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#put(int, org.mozilla.javascript.Scriptable, java.lang.Object) | |||
*/ | |||
|
|||
public void put(int index, Scriptable start, Object value) { | |||
if (index == list.size()) { | |||
list.add(value); | |||
} else { | |||
list.set(index, value); | |||
} | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#delete(java.lang.String) | |||
*/ | |||
|
|||
public void delete(String name) { | |||
// nothing here | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#delete(int) | |||
*/ | |||
|
|||
public void delete(int index) { | |||
list.remove(index); | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#getPrototype() | |||
*/ | |||
|
|||
public Scriptable getPrototype() { | |||
return this.prototype; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#setPrototype(org.mozilla.javascript.Scriptable) | |||
*/ | |||
|
|||
public void setPrototype(Scriptable prototype) { | |||
this.prototype = prototype; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#getParentScope() | |||
*/ | |||
|
|||
public Scriptable getParentScope() { | |||
return this.parentScope; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#setParentScope(org.mozilla.javascript.Scriptable) | |||
*/ | |||
|
|||
public void setParentScope(Scriptable parent) { | |||
this.parentScope = parent; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#getIds() | |||
*/ | |||
|
|||
public Object[] getIds() { | |||
int size = list.size(); | |||
Object[] ids = new Object[size]; | |||
for (int i = 0; i < size; ++i) { | |||
ids[i] = i; | |||
} | |||
return ids; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#getDefaultValue(java.lang.Class) | |||
*/ | |||
|
|||
public Object getDefaultValue(Class hint) { | |||
return null; | |||
} | |||
|
|||
/* (non-Javadoc) | |||
* @see org.mozilla.javascript.Scriptable#hasInstance(org.mozilla.javascript.Scriptable) | |||
*/ | |||
|
|||
public boolean hasInstance(Scriptable value) { | |||
if (!(value instanceof Wrapper)) | |||
return false; | |||
Object instance = ((Wrapper) value).unwrap(); | |||
return List.class.isInstance(instance); | |||
} | |||
|
|||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters