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; 
      }
  }