tcurdt      02/04/04 06:12:47

  Modified:    src/scratchpad/src/org/apache/cocoon/precept Instance.java
               src/scratchpad/src/org/apache/cocoon/precept/preceptors/easyrelax
                        PreceptorImpl.java
               src/scratchpad/src/org/apache/cocoon/precept/stores/bean
                        InstanceImpl.java
               src/scratchpad/src/org/apache/cocoon/precept/stores/dom/simple
                        InstanceImpl.java
  Log:
  introduce node exposing in the instance interface,
  fixed compilation, cleanup
  
  Revision  Changes    Path
  1.4       +5 -2      
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/Instance.java
  
  Index: Instance.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/Instance.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Instance.java     4 Apr 2002 07:02:09 -0000       1.3
  +++ Instance.java     4 Apr 2002 14:12:47 -0000       1.4
  @@ -53,7 +53,9 @@
   
   import org.apache.avalon.framework.component.Component;
   import org.xml.sax.ContentHandler;
  -import org.xml.sax.SAXException;
  +import org.xml.sax.SAXException;
  +
  +import java.util.Collection;
   
   /*
    * @version: Mar 15, 2002
  @@ -64,7 +66,8 @@
   
     public void setValue(String xpath, Object value) throws 
PreceptorViolationException, InvalidXPathSyntaxException;
     public void setValue(String xpath, Object value, Context context) throws 
PreceptorViolationException, InvalidXPathSyntaxException;
  -  public Object getValue(String xpath) throws InvalidXPathSyntaxException, 
NoSuchNodeException;
  +  public Object getValue(String xpath) throws InvalidXPathSyntaxException, 
NoSuchNodeException;
  +  public Collection getNodePaths();
   
     public void setPreceptor( Preceptor preceptor );
     public Preceptor getPreceptor();
  
  
  
  1.4       +24 -7     
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/preceptors/easyrelax/PreceptorImpl.java
  
  Index: PreceptorImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/preceptors/easyrelax/PreceptorImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PreceptorImpl.java        4 Apr 2002 07:02:09 -0000       1.3
  +++ PreceptorImpl.java        4 Apr 2002 14:12:47 -0000       1.4
  @@ -60,6 +60,7 @@
    * @version: Mar 14, 2002
    * @author: Torsten Curdt <[EMAIL PROTECTED]>
    */
  +
   public class PreceptorImpl extends AbstractPreceptor {
     HashMap index = new HashMap();
   
  @@ -70,23 +71,39 @@
         Object value = instance.getValue(xpath);
         for (Iterator it = constraints.iterator(); it.hasNext();) {
           Constraint constraint = (Constraint) it.next();
  -        if (!constraint.isSatisfiedBy(value,context)) {
  +        if (!constraint.isSatisfiedBy(value, context)) {
             if (violations == null) {
               violations = new HashSet();
             }
             violations.add(constraint);
           }
         }
  -      return(violations);
  +      return (violations);
       }
       else {
  -      return(null);
  +      return (null);
       }
     }
   
     public Collection validate(Instance instance, Context context) throws 
InvalidXPathSyntaxException {
  -    /* we need obtaint a list of all nodes in the instance here */
  -    return(null);
  +    Collection allViolations = null;
  +    Collection xpaths = instance.getNodePaths();
  +    for (Iterator it = xpaths.iterator(); it.hasNext();) {
  +      String xpath = (String) it.next();
  +      try {
  +        Collection violations = validate(instance, xpath, context);
  +        if (violations != null) {
  +          if (allViolations == null) {
  +            allViolations = new HashSet();
  +          }
  +          allViolations.addAll(violations);
  +        }
  +      }
  +      catch (NoSuchNodeException e) {
  +        getLogger().error("hm.. the instance just told us about the nodes!");
  +      }
  +    }
  +    return (allViolations);
     }
   
     public Collection getConstraintsFor(String xpath) throws NoSuchNodeException {
  @@ -192,8 +209,8 @@
             getLogger().debug("found node [" + String.valueOf(currentPath) + "] in 
index");
   
             if (node instanceof ElementPreceptorNode) {
  -            if (((ElementPreceptorNode)node).getMaxOcc() != 
ElementPreceptorNode.UNBOUND && levelInt > ((ElementPreceptorNode)node).getMaxOcc()) {
  -              getLogger().debug(String.valueOf(levelName) + "[" + levelInt + "] 
exceeds maximal occurrences [" + ((ElementPreceptorNode)node).getMaxOcc() + "]");
  +            if (((ElementPreceptorNode) node).getMaxOcc() != 
ElementPreceptorNode.UNBOUND && levelInt > ((ElementPreceptorNode) node).getMaxOcc()) 
{
  +              getLogger().debug(String.valueOf(levelName) + "[" + levelInt + "] 
exceeds maximal occurrences [" + ((ElementPreceptorNode) node).getMaxOcc() + "]");
                 return (false);
               }
             }
  
  
  
  1.3       +5 -12     
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/stores/bean/InstanceImpl.java
  
  Index: InstanceImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/stores/bean/InstanceImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InstanceImpl.java 25 Mar 2002 23:23:55 -0000      1.2
  +++ InstanceImpl.java 4 Apr 2002 14:12:47 -0000       1.3
  @@ -69,6 +69,7 @@
   import org.apache.cocoon.precept.stores.AbstractInstance;
   
   import java.util.List;
  +import java.util.Collection;
   
   /*
    * @version: Mar 15, 2002
  @@ -152,18 +153,6 @@
       preceptor.buildInstance(this);
     }
   
  -  public List validate(String xpath, Context context) throws 
InvalidXPathSyntaxException, NoSuchNodeException {
  -
  -    //NYI
  -    return null;
  -  }
  -
  -  public List validate(Context context) throws InvalidXPathSyntaxException {
  -
  -    //NYI
  -    return null;
  -  }
  -
     public Preceptor getPreceptor() {
       return (preceptor);
     }
  @@ -190,5 +179,9 @@
       catch (MarshalException e) {
         throw new SAXException(e);
       }
  +  }
  +
  +  public Collection getNodePaths() {
  +    return null;
     }
   }
  
  
  
  1.4       +14 -55    
xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/stores/dom/simple/InstanceImpl.java
  
  Index: InstanceImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/precept/stores/dom/simple/InstanceImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InstanceImpl.java 4 Apr 2002 07:02:09 -0000       1.3
  +++ InstanceImpl.java 4 Apr 2002 14:12:47 -0000       1.4
  @@ -129,7 +129,6 @@
                 getLogger().debug("creating node [" + String.valueOf(currentPath) + 
"]");
                 ((ElementNode) currentParent).addChild(node);
                 index.put(currentPath.toString(), node);
  -              index.put(currentPath.toString() + "[1]", node);
               }
             }
             else {
  @@ -141,7 +140,6 @@
                 node = root = new ElementNode(level, null);
               }
               index.put(currentPath.toString(), node);
  -            index.put(currentPath.toString() + "[1]", node);
             }
           }
           currentParent = node;
  @@ -154,12 +152,21 @@
       }
     }
   
  +  private Node lookupNode( String xpath ) {
  +    Node node = (Node) index.get(xpath);
  +    if (node == null) {
  +      node = (Node) index.get(xpath + "[1]");
  +    }
  +    return(node);
  +  }
  +
     public void setValue(String xpath, Object value) throws 
PreceptorViolationException, InvalidXPathSyntaxException {
       setValue(xpath, value, null);
     }
   
     public void setValue(String xpath, Object value, Context context) throws 
PreceptorViolationException, InvalidXPathSyntaxException {
  -    Node node = (Node) index.get(xpath);
  +    Node node = lookupNode(xpath);
  +
       if (node != null) {
         node.setValue((String) value);
       }
  @@ -183,7 +190,7 @@
     }
   
     public Object getValue(String xpath) throws InvalidXPathSyntaxException, 
NoSuchNodeException {
  -    Node node = (Node) index.get(xpath);
  +    Node node = lookupNode(xpath);
       if (node != null) {
         return (node.getValue());
       }
  @@ -192,57 +199,6 @@
       }
     }
   
  -/*
  -  public List validate(Context context) throws InvalidXPathSyntaxException {
  -    ArrayList all = null;
  -    for (Iterator it = index.keySet().iterator(); it.hasNext();) {
  -      String xpath = (String) it.next();
  -      if (!xpath.endsWith("[1]")) {
  -        try {
  -          List result = validate(xpath, context);
  -          if (result != null) {
  -            getLogger().debug("constraint violations for [" + String.valueOf(xpath) 
+ "]");
  -            if (all == null) all = new ArrayList();
  -            all.addAll(result);
  -          }
  -          else {
  -            getLogger().debug("[" + String.valueOf(xpath) + "] is valid");
  -          }
  -        }
  -        catch (NoSuchNodeException e) {
  -          getLogger().error("hm... this should not happen!");
  -        }
  -      }
  -    }
  -    return (all);
  -  }
  -
  -  public List validate(String xpath, Context context) throws 
InvalidXPathSyntaxException, NoSuchNodeException {
  -    Node node = (Node) index.get(xpath);
  -    if (node != null) {
  -      ArrayList result = null;
  -      List constraints = node.getConstraints();
  -      if (constraints != null) {
  -        for (Iterator it = constraints.iterator(); it.hasNext();) {
  -          Constraint constraint = (Constraint) it.next();
  -          if (constraint.isSatisfiedBy(getValue(xpath), context )) {
  -            getLogger().debug("[" + String.valueOf(xpath) + "] constraint [" + 
String.valueOf(constraint) + "] is satisfied");
  -          }
  -          else {
  -            getLogger().debug("[" + String.valueOf(xpath) + "] constraint [" + 
String.valueOf(constraint) + "] FAILED!");
  -            if (result == null) result = new ArrayList();
  -            result.add(constraint);
  -          }
  -        }
  -      }
  -      return (result);
  -    }
  -    else {
  -      getLogger().error("could not find node [" + String.valueOf(xpath) + "]");
  -      throw new NoSuchNodeException(xpath);
  -    }
  -  }
  -*/
     public Preceptor getPreceptor() {
       return (preceptor);
     }
  @@ -269,4 +225,7 @@
       }
     }
   
  +  public Collection getNodePaths() {
  +    return( Collections.unmodifiableCollection( index.keySet() ));
  +  }
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to