upayavira    2003/08/28 12:21:00

  Modified:    src/java/org/apache/cocoon Main.java
               src/java/org/apache/cocoon/bean CocoonBean.java
                        CocoonWrapper.java
  Log:
  Moved error detection to correct place
  Added basic support for include/exclude
  
  Revision  Changes    Path
  1.13      +26 -2     cocoon-2.1/src/java/org/apache/cocoon/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/Main.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Main.java 27 Aug 2003 19:18:18 -0000      1.12
  +++ Main.java 28 Aug 2003 19:21:00 -0000      1.13
  @@ -163,7 +163,10 @@
       private static final String NODE_LOAD_CLASS = "load-class";
       private static final String NODE_DEFAULT_FILENAME = "default-filename";
   
  -
  +    private static final String NODE_INCLUDE = "include";
  +    private static final String NODE_EXCLUDE = "exclude";
  +    private static final String ATTR_INCLUDE_EXCLUDE_PATTERN = "pattern";
  +    
       private static final String NODE_URI = "uri";
       private static final String ATTR_URI_TYPE = "type";
       private static final String ATTR_URI_SOURCEPREFIX = "src-prefix";
  @@ -501,6 +504,14 @@
                       } else if (nodeName.equals(NODE_DEFAULT_FILENAME)) {
                           cocoon.setDefaultFilename(getNodeValue(node));
   
  +                    } else if (nodeName.equals(NODE_INCLUDE)) {
  +                        String pattern = 
Main.parseIncludeExcludeNode(cocoon, node, NODE_INCLUDE);
  +                        cocoon.addIncludePattern(pattern);
  +
  +                    } else if (nodeName.equals(NODE_EXCLUDE)) {
  +                        String pattern = 
Main.parseIncludeExcludeNode(cocoon, node, NODE_EXCLUDE);
  +                        cocoon.addExcludePattern(pattern);
  +
                       } else if (nodeName.equals(NODE_URI)) {
                           Main.parseURINode(cocoon, node, destDir);
   
  @@ -551,6 +562,19 @@
           NodeList nodes = node.getChildNodes();
           if (nodes.getLength()!=0) {
               throw new IllegalArgumentException("Unexpected children of <" + 
NODE_BROKEN_LINKS + "> node");
  +        }
  +    }
  +
  +    private static String parseIncludeExcludeNode(CocoonBean cocoon, Node 
node, final String NODE_TYPE) throws IllegalArgumentException {
  +        NodeList nodes = node.getChildNodes();
  +        if (nodes.getLength() != 0) {
  +            throw new IllegalArgumentException("Unexpected children of <" + 
NODE_INCLUDE + "> node");
  +        }
  +
  +        if (Main.hasAttribute(node, ATTR_INCLUDE_EXCLUDE_PATTERN)) {
  +            return Main.getAttributeValue(node, 
ATTR_INCLUDE_EXCLUDE_PATTERN);
  +        } else {
  +            throw new IllegalArgumentException("Expected a 
"+ATTR_INCLUDE_EXCLUDE_PATTERN+" attribute for <"+NODE_TYPE+"> node");
           }
       }
   
  
  
  
  1.18      +79 -23    
cocoon-2.1/src/java/org/apache/cocoon/bean/CocoonBean.java
  
  Index: CocoonBean.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/bean/CocoonBean.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- CocoonBean.java   27 Aug 2003 19:18:18 -0000      1.17
  +++ CocoonBean.java   28 Aug 2003 19:21:00 -0000      1.18
  @@ -60,6 +60,7 @@
   import org.apache.cocoon.components.notification.Notifier;
   import org.apache.cocoon.components.notification.DefaultNotifyingBuilder;
   import org.apache.cocoon.components.notification.Notifying;
  +import org.apache.cocoon.matching.helpers.WildcardHelper;
   
   import org.apache.excalibur.source.ModifiableSource;
   import org.apache.excalibur.source.SourceResolver;
  @@ -77,10 +78,13 @@
   import java.util.List;
   
   /**
  - * The Cocoon Bean simplifies usage of the Cocoon object. Allows to create, 
  + * <p>The Cocoon Bean simplifies usage of the Cocoon object. Allows to 
create, 
    * configure Cocoon instance and process requests, one by one or multiple 
  - * with link traversal.
  + * with link traversal.</p>
    *
  + * <p><b>WARNING:</b> This interface is not stable and could be changed in 
  + * backward incompatible way without prior notice.</p> 
  +
    * @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
  @@ -97,6 +101,8 @@
       private List targets = new ArrayList();
       private boolean brokenLinkGenerate = false;
       private String brokenLinkExtension = "";
  +    private List excludePatterns = new ArrayList();
  +    private List includePatterns = new ArrayList();
   
       // Internal Objects
       private Map allProcessedLinks;
  @@ -105,6 +111,7 @@
       private List listeners = new ArrayList();
       private boolean verbose;
       SourceResolver sourceResolver;
  +    
       //
       // INITIALISATION METHOD
       //
  @@ -201,6 +208,16 @@
           }
       }
   
  +    public void addExcludePattern(String pattern) {
  +             int preparedPattern[] = WildcardHelper.compilePattern(pattern);
  +             excludePatterns.add(preparedPattern);
  +    }
  +    
  +    public void addIncludePattern(String pattern) {
  +             int preparedPattern[] = WildcardHelper.compilePattern(pattern);
  +        includePatterns.add(preparedPattern);
  +    }
  +
       public void addListener(BeanListener listener) {
           this.listeners.add(listener);
       }
  @@ -413,6 +430,12 @@
   
                   String absoluteLink =
                       NetUtils.normalize(NetUtils.absolutize(path, 
relativeLink));
  +                
  +                if (!isIncluded(absoluteLink)) {
  +                    //@TODO@ Log/report skipped link
  +                    continue;
  +                }
  +                
                   {
                       final TreeMap p = new TreeMap();
                       absoluteLink =
  @@ -482,7 +505,11 @@
                                       NetUtils.deparameterize(absoluteLink, p),
                                       p);
                           }
  -                        absoluteLinks.add(absoluteLink);
  +                        if (isIncluded(absoluteLink)) {
  +                            absoluteLinks.add(absoluteLink);
  +                        } else {
  +                            // @TODO@ Log/report skipped link
  +                        }
                       }
                       linkCount = gatheredLinks.size();
                   }
  @@ -621,24 +648,53 @@
           return uri;
       }
       
  -     public ModifiableSource getSource(Target target, String filename)
  -             throws IOException, ProcessingException {
  -             final String finalDestinationURI = target.getFinalURI(filename);
  -             Source src = sourceResolver.resolveURI(finalDestinationURI);
  -             if (!(src instanceof ModifiableSource)) {
  -                     sourceResolver.release(src);
  -                     throw new ProcessingException(
  -                             "Source is not Modifiable: " + 
finalDestinationURI);
  -             }
  -             return (ModifiableSource) src;
  -     }
  -
  -     public long getLastModified(Target target, String filename) throws 
IOException, ProcessingException {
  -             return getSource(target, filename).getLastModified();
  -     }
  +    public ModifiableSource getSource(Target target, String filename)
  +        throws IOException, ProcessingException {
  +        final String finalDestinationURI = target.getFinalURI(filename);
  +        Source src = sourceResolver.resolveURI(finalDestinationURI);
  +        if (!(src instanceof ModifiableSource)) {
  +            sourceResolver.release(src);
  +            throw new ProcessingException(
  +                "Source is not Modifiable: " + finalDestinationURI);
  +        }
  +        return (ModifiableSource) src;
  +    }
  +
  +    public long getLastModified(Target target, String filename) throws 
IOException, ProcessingException {
  +        return getSource(target, filename).getLastModified();
  +    }
           
  -     public void releaseSource(ModifiableSource source) {
  -             sourceResolver.release(source);
  -     }
  -    
  +    public void releaseSource(ModifiableSource source) {
  +        sourceResolver.release(source);
  +    }
  +    private boolean isIncluded(String uri) {
  +        boolean included;
  +        Iterator i;
  +        HashMap map = new HashMap();
  +        
  +        if (includePatterns.size() == 0) {
  +            included = true;
  +        } else {
  +            included = false;
  +            i = includePatterns.iterator();
  +            while (i.hasNext()){ 
  +                int pattern[] = (int[])i.next();
  +                if (WildcardHelper.match(map, uri, pattern)) {
  +                    included=true;
  +                    break;
  +                }
  +            }
  +        }
  +        if (excludePatterns.size() != 0) {
  +            i = excludePatterns.iterator();
  +            while (i.hasNext()) {
  +                int pattern[] = (int[])i.next();
  +                if (WildcardHelper.match(map, uri, pattern)) {
  +                    included=false;
  +                    break;
  +                }
  +            }
  +        }
  +        return included;
  +    }
   }
  
  
  
  1.3       +1 -15     
cocoon-2.1/src/java/org/apache/cocoon/bean/CocoonWrapper.java
  
  Index: CocoonWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/bean/CocoonWrapper.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CocoonWrapper.java        27 Aug 2003 19:18:18 -0000      1.2
  +++ CocoonWrapper.java        28 Aug 2003 19:21:00 -0000      1.3
  @@ -134,20 +134,6 @@
           // @todo@ these should log then throw exceptions back to the caller, 
not use system.exit()
           setLogLevel("ERROR");
   
  -        if (contextDir.equals("")) {
  -            String error =
  -                "Careful, you must specify a configuration file when using 
the -c/--contextDir argument";
  -            log.fatalError(error);
  -            throw new ProcessingException(error);
  -        }
  -
  -        if (workDir.equals("")) {
  -            String error =
  -                "Careful, you must specify a destination dir when using the 
-w/--workDir argument";
  -            log.fatalError(error);
  -            throw new ProcessingException(error);
  -        }
  -
           this.context = getDir(this.contextDir, "context");
           this.work = getDir(workDir, "working");
   
  
  
  

Reply via email to