You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by co...@apache.org on 2004/01/28 06:51:54 UTC
cvs commit: cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom PageLocal.java PageLocalImpl.java PageLocalScope.java PageLocalScopeImpl.java
coliver 2004/01/27 21:51:54
Added: src/java/org/apache/cocoon/components/flow/javascript/fom
PageLocal.java PageLocalImpl.java
PageLocalScope.java PageLocalScopeImpl.java
Log:
Almost forgot to commit these
Revision Changes Path
1.1 cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/PageLocal.java
Index: PageLocal.java
===================================================================
package org.apache.cocoon.components.flow.javascript.fom;
import org.mozilla.javascript.Scriptable;
public interface PageLocal extends Scriptable {
public Object getId();
public void setPageLocalScope(PageLocalScope scope);
}
1.1 cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/PageLocalImpl.java
Index: PageLocalImpl.java
===================================================================
package org.apache.cocoon.components.flow.javascript.fom;
import org.mozilla.javascript.*;
public class PageLocalImpl extends ScriptableObject implements PageLocal {
private PageLocalScope scope; // null if this is the prototype
private String id;
public PageLocalImpl() {
this.id = String.valueOf(System.identityHashCode(this));
}
public void setPageLocalScope(PageLocalScope scope) {
this.scope = scope;
}
public Object getId() {
return id;
}
public String getClassName() {
return "PageLocal";
}
public boolean has(String name, Scriptable start) {
if (scope == null) {
return super.has(name, start);
}
return scope.has(this, name);
}
public boolean has(int index, Scriptable start) {
if (scope == null) {
return super.has(index, start);
}
return scope.has(this, index);
}
public void put(String name, Scriptable start, Object value) {
if (scope == null) {
super.put(name, start, value);
} else {
scope.put(this, name, value);
}
}
public void put(int index, Scriptable start, Object value) {
if (scope == null) {
super.put(index, start, value);
} else {
scope.put(this, index, value);
}
}
public Object get(String name, Scriptable start) {
if (scope == null) {
return super.get(name, start);
}
return scope.get(this, name);
}
public Object get(int index, Scriptable start) {
if (scope == null) {
return super.get(index, start);
}
return scope.get(this, index);
}
public void delete(int index) {
if (scope == null) {
super.delete(index);
} else {
scope.delete(this, index);
}
}
public void delete(String name) {
if (scope == null) {
super.delete(name);
} else {
scope.delete(this, name);
}
}
public Object[] getIds() {
if (scope == null) {
return super.getIds();
}
return scope.getIds(this);
}
public Object getDefaultValue(Class hint) {
if (scope == null) {
return super.getDefaultValue(hint);
}
return scope.getDefaultValue(this, hint);
}
}
1.1 cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/PageLocalScope.java
Index: PageLocalScope.java
===================================================================
package org.apache.cocoon.components.flow.javascript.fom;
public interface PageLocalScope {
public boolean has(PageLocal local, String name);
public boolean has(PageLocal local, int index);
public Object get(PageLocal local, String name);
public Object get(PageLocal local, int index);
public void put(PageLocal local, String name, Object value);
public void put(PageLocal local, int index, Object value);
public void delete(PageLocal local, String name);
public void delete(PageLocal local, int index);
public Object[] getIds(PageLocal local);
public Object getDefaultValue(PageLocal local, Class hint);
public PageLocal createPageLocal();
}
1.1 cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/PageLocalScopeImpl.java
Index: PageLocalScopeImpl.java
===================================================================
package org.apache.cocoon.components.flow.javascript.fom;
import java.util.*;
import org.mozilla.javascript.*;
public class PageLocalScopeImpl implements PageLocalScope {
private Map locals;
private Scriptable scope;
public PageLocalScopeImpl(Scriptable scope) {
locals = new HashMap();
this.scope = scope;
}
private Scriptable newObject() {
try {
return Context.getCurrentContext().newObject(scope);
} catch (Exception ignored) {
// can't happen here
ignored.printStackTrace();
throw new Error("error: " + ignored);
}
}
private PageLocalScopeImpl(PageLocalScopeImpl toBeCloned) {
this.scope = toBeCloned.scope;
locals = new HashMap();
Iterator iter = toBeCloned.locals.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry e = (Map.Entry)iter.next();
Object key = e.getKey();
Object value = e.getValue();
// clone it
Scriptable obj = (Scriptable)value;
Scriptable newObj = newObject();
Object[] ids = obj.getIds();
for (int i = 0; i < ids.length; i++) {
String name = ids[i].toString();
newObj.put(name, newObj, obj.get(name, obj));
}
value = newObj;
locals.put(key, value);
}
}
private Scriptable resolve(PageLocal local) {
final Object id = local.getId();
Scriptable result = (Scriptable)locals.get(id);
if (result == null) {
locals.put(id, result = newObject());
}
return result;
}
public boolean has(PageLocal local, String name) {
Scriptable obj = resolve(local);
return obj.has(name, obj);
}
public boolean has(PageLocal local, int index) {
Scriptable obj = resolve(local);
return obj.has(index, obj);
}
public Object get(PageLocal local, String name) {
Scriptable obj = resolve(local);
return obj.get(name, obj);
}
public Object get(PageLocal local, int index) {
Scriptable obj = resolve(local);
return obj.get(index, obj);
}
public void put(PageLocal local, String name, Object value) {
Scriptable obj = resolve(local);
obj.put(name, obj, value);
}
public void put(PageLocal local, int index, Object value) {
Scriptable obj = resolve(local);
obj.put(index, obj, value);
}
public void delete(PageLocal local, String name) {
Scriptable obj = resolve(local);
obj.delete(name);
}
public void delete(PageLocal local, int index) {
Scriptable obj = resolve(local);
obj.delete(index);
}
public Object[] getIds(PageLocal local) {
Scriptable obj = resolve(local);
return obj.getIds();
}
public Object getDefaultValue(PageLocal local, Class hint) {
Scriptable obj = resolve(local);
return obj.getDefaultValue(hint);
}
public PageLocalScopeImpl duplicate() {
return new PageLocalScopeImpl(this);
}
public PageLocal createPageLocal() {
// not used
return null;
}
}