You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by ed...@apache.org on 2004/01/21 17:11:45 UTC

cvs commit: cocoon-lenya/src/java/org/apache/lenya/cms/ant DeleteRCTask.java DeletePoliciesTask.java DeleteResourcesTask.java DeleteContentTask.java

edith       2004/01/21 08:11:44

  Modified:    src/java/org/apache/lenya/cms/ant DeleteContentTask.java
  Added:       src/java/org/apache/lenya/cms/ant DeleteRCTask.java
                        DeletePoliciesTask.java DeleteResourcesTask.java
  Log:
  replace the ant delete with own ant task
  
  Revision  Changes    Path
  1.4       +64 -99    cocoon-lenya/src/java/org/apache/lenya/cms/ant/DeleteContentTask.java
  
  Index: DeleteContentTask.java
  ===================================================================
  RCS file: /home/cvs/cocoon-lenya/src/java/org/apache/lenya/cms/ant/DeleteContentTask.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DeleteContentTask.java	21 Oct 2003 09:51:55 -0000	1.3
  +++ DeleteContentTask.java	21 Jan 2004 16:11:44 -0000	1.4
  @@ -56,132 +56,97 @@
   package org.apache.lenya.cms.ant;
   
   import java.io.File;
  +import java.io.IOException;
   
   import org.apache.lenya.cms.publication.Document;
   import org.apache.lenya.cms.publication.DocumentBuildException;
   import org.apache.lenya.cms.publication.DocumentBuilder;
  +import org.apache.lenya.cms.publication.Label;
   import org.apache.lenya.cms.publication.Publication;
  +import org.apache.lenya.cms.publication.SiteTree;
  +import org.apache.lenya.cms.publication.SiteTreeNode;
  +import org.apache.avalon.excalibur.io.FileUtil;
   import org.apache.tools.ant.BuildException;
   
   /**
  - * Ant task to delete the content (xml file) of a document with document id 
  - * <documentid>, area <area> and language <language>
  + * Ant task to delete the contents (xml files) of documents corresponding to a defined subtree
  + * Visitor of the defined subtree (visitor pattern). The subtree is reverse visited.
    * @author edith
    */
  -public class DeleteContentTask extends PublicationTask {
  -	private String area;
  -	private String documentid;
  -	private String language;
  +public class DeleteContentTask extends TwoDocumentsOperationTask {
   
   	/**
  -     * Creates a new instance of DeleteContentTask
  +	 * 
   	 */
   	public DeleteContentTask() {
   		super();
   	}
   
  -	/**
  -	 * Get the value of the area.
  -	 * 
  -	 * @return The area.
  -	 */
  -	public String getArea() {
  -		return area;
  -	}
  -
  -	/**
  -	 * Get the value of the document id.
  -	 * 
  -	 * @return The document id.
  -	 */
  -	public String getDocumentid() {
  -		return documentid;
  -	}
  -
  -	/**
  -	 * Get the value of the language.
  -	 * 
  -	 * @return The language.
  -	 */
  -	public String getLanguage() {
  -		return language;
  -	}
  -
  -	/**
  -	 * Set the value of the area.
  -	 * 
  -	 * @param string The area.
  -	 */
  -	public void setArea(String string) {
  -		area = string;
  -	}
  -
  -	/**
  -	 * Set the value of the document id.
  -	 * 
  -	 * @param string The document id.
  -	 */
  -	public void setDocumentid(String string) {
  -		documentid = string;
  -	}
  -
  -	/**
  -	 * Set the value of the language.
  -	 * 
  -	 * @param string The language.
  -	 */
  -	public void setLanguage(String string) {
  -		language = string;
  -	}
  -
  -	/**
  -	 * Remove the content of the document corresponding to the document id
  -	 * <documentid>, area <area> and language <language>.  
  -	 * @param language The language
  -	 * @param documentid The document id
  -	 * @param area The area
  +	/** (non-Javadoc)
  +	 * @see org.apache.lenya.cms.publication.SiteTreeNodeVisitor#visitSiteTreeNode(org.apache.lenya.cms.publication.SiteTreeNode)
   	 */
  -	public void deleteContent(
  -		String language,
  -		String documentid,
  -		String area) {
  +	public void visitSiteTreeNode(SiteTreeNode node) {
   		Publication publication = getPublication();
   		DocumentBuilder builder = publication.getDocumentBuilder();
  -		String url =
  -			builder.buildCanonicalUrl(publication, area, documentid, language);
  -		Document document;
  -		try {
  -			document = builder.buildDocument(publication, url);
  -		} catch (DocumentBuildException e) {
  -			throw new BuildException(e);
  -		}
  -		File file = document.getFile();
  -
  -		if (!file.exists()) {
  -			log("There is no file " + file.getAbsolutePath());
  -			return;
  -		}
  -
  -		File directory = file.getParentFile();
  -		file.delete();
   
  -		if (directory.exists() && directory.isDirectory()) {
  -			File[] list = directory.listFiles();
  -			if (list.length < 1) {
  -				directory.delete();
  +		String parentid = node.getAbsoluteParentId();
  +		String destDocumentid = parentid + "/" + node.getId();
  +		String srcDocumentid =
  +			destDocumentid.replaceFirst(
  +				getSecdocumentid(),
  +				getFirstdocumentid());
  +
  +		Label[] labels = node.getLabels();
  +		for (int i = 0; i < labels.length; i++) {
  +			String language = labels[i].getLanguage();
  +			String url =
  +				builder.buildCanonicalUrl(
  +					publication,
  +					getFirstarea(),
  +					srcDocumentid,
  +					language);
  +			Document doc;
  +			try {
  +				doc = builder.buildDocument(publication, url);
  +			} catch (DocumentBuildException e) {
  +				throw new BuildException(e);
  +			}
  +			File srcFile = doc.getFile();
  +			if (!srcFile.exists()) {
  +				log("There are no file " + srcFile.getAbsolutePath());
  +				return;
  +			}
  +			File directory = srcFile.getParentFile();
  +			try {
  +				FileUtil.forceDelete(srcFile);
  +				log("delete file " + srcFile.getAbsolutePath());
  +				if (directory.exists()
  +					&& directory.isDirectory()
  +					&& directory.listFiles().length == 0) {
  +					FileUtil.forceDelete(directory);
  +					log("delete directory " + directory.getAbsolutePath());
  +				}
  +			} catch (IOException e) {
  +				throw new BuildException(e);
   			}
   		}
  +
   	}
   
  -	/** (non-Javadoc)
  +	/** 
   	 * @see org.apache.tools.ant.Task#execute()
  -	 */
  +	 **/
   	public void execute() throws BuildException {
   		try {
  -			log("document-id : " + getDocumentid());
  -			log("area: " + getArea());
  -			log("language : " + getArea());
  -			deleteContent(getLanguage(), getDocumentid(), getArea());
  +			log("document-id for the source :" + this.getFirstdocumentid());
  +			log("area for the source :" + this.getFirstarea());
  +			log("document-id for the destination :" + this.getSecdocumentid());
  +			log("area for the destination :" + this.getSecarea());
  +
  +			Publication publication = getPublication();
  +			SiteTree tree = publication.getSiteTree(this.getSecarea());
  +			SiteTreeNode node = tree.getNode(this.getSecdocumentid());
  +			node.acceptReverseSubtree(this);
   		} catch (Exception e) {
   			throw new BuildException(e);
   		}
  
  
  
  1.1                  cocoon-lenya/src/java/org/apache/lenya/cms/ant/DeleteRCTask.java
  
  Index: DeleteRCTask.java
  ===================================================================
  /*
  $Id: DeleteRCTask.java,v 1.1 2004/01/21 16:11:44 edith Exp $
  <License>
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Lenya" and  "Apache Software Foundation"  must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      apache@apache.org.
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Michael Wechner <mi...@apache.org>. For more information on the Apache Soft-
   ware Foundation, please see <http://www.apache.org/>.
  s
   Lenya includes software developed by the Apache Software Foundation, W3C,
   DOM4J Project, BitfluxEditor, Xopus, and WebSHPINX.
  </License>
  */
  package org.apache.lenya.cms.ant;
  
  import java.io.File;
  import org.apache.lenya.cms.publication.Publication;
  import org.apache.lenya.cms.publication.SiteTree;
  import org.apache.lenya.cms.publication.SiteTreeNode;
  import org.apache.avalon.excalibur.io.FileUtil;
  import org.apache.tools.ant.BuildException;
  
  /**
   * Ant task to delete the rcml- and backup files of documents corresponding to a defined subtree
   * (Visitor pattern) Visitor of the subtree. The subtree is reverse visited.
   * @author edith
   */
  public class DeleteRCTask extends TwoDocumentsOperationTask {
  	private String rcmldir = "";
  	private String rcbakdir = "";
  	private String srcareadir = "";
  
  	/**
  	 * 
  	 */
  	public DeleteRCTask() {
  		super();
  	}
  
  	/** (non-Javadoc)
  	 * @see org.apache.lenya.cms.publication.SiteTreeNodeVisitor#visitSiteTreeNode(org.apache.lenya.cms.publication.SiteTreeNode)
  	 */
  	public void visitSiteTreeNode(SiteTreeNode node) {
  		try {
  			Publication publication = getPublication();
  			String publicationPath =
  				this.getPublicationDirectory().getCanonicalPath();
  			String rcmlDirectory =
  				new File(publicationPath, this.getRcmldir()).getCanonicalPath();
  			String rcbakDirectory =
  				new File(publicationPath, this.getRcbakdir())
  					.getCanonicalPath();
  
  			String parentid = node.getAbsoluteParentId();
  			String destDocumentid = parentid + "/" + node.getId();
  			String srcDocumentid =
  				destDocumentid.replaceFirst(
  					getSecdocumentid(),
  					getFirstdocumentid());
  
  			File srcRcmlDir =
  				new File(
  					rcmlDirectory,
  					this.getSrcareadir() + File.separator + srcDocumentid);
  
  			if (srcRcmlDir.exists()) {
  				FileUtil.forceDelete(srcRcmlDir);
  				log("delete rcml directory " + srcRcmlDir.getAbsolutePath());
  			}
  
  			File srcRcbakDir =
  				new File(
  					rcbakDirectory,
  					this.getSrcareadir() + File.separator + srcDocumentid);
  
  			if (srcRcbakDir.exists()) {
  				FileUtil.forceDelete(srcRcbakDir);
  				log("delete rcbak directory " + srcRcbakDir.getAbsolutePath());
  			}
  
  		} catch (Exception e) {
  			throw new BuildException(e);
  		}
  
  	}
  
  	/** 
  	 * @see org.apache.tools.ant.Task#execute()
  	 **/
  	public void execute() throws BuildException {
  		try {
  			log("document-id for the source :" + this.getFirstdocumentid());
  			log("document-id for the destination :" + this.getSecdocumentid());
  			log("area for the destination :" + this.getSecarea());
  			log("rcml dir" + this.getRcmldir());
  			log("rcbak dir" + this.getRcbakdir());
  			log("src area dir" + this.getSrcareadir());
  
  			//visit the destination tree
  			Publication publication = getPublication();
  			SiteTree tree = publication.getSiteTree(this.getSecarea());
  			SiteTreeNode node = tree.getNode(this.getSecdocumentid());
  			node.acceptReverseSubtree(this);
  
  		} catch (Exception e) {
  			throw new BuildException(e);
  		}
  	}
  	/**
  	 * @return The backup directory.
  	 */
  	public String getRcbakdir() {
  		return rcbakdir;
  	}
  
  	/**
  	 * @return The rcml directory.
  	 */
  	public String getRcmldir() {
  		return rcmldir;
  	}
  
  	/**
  	 * @return The path of the area from the publication.
  	 */
  	public String getSrcareadir() {
  		return srcareadir;
  	}
  
  	/**
  	 * @param string The backup directory.
  	 */
  	public void setRcbakdir(String string) {
  		rcbakdir = string;
  	}
  
  	/**
  	 * @param string The rcml directory.
  	 */
  	public void setRcmldir(String string) {
  		rcmldir = string;
  	}
  
  	/**
  	 * @param string The path of the area from the publication.
  	 */
  	public void setSrcareadir(String string) {
  		srcareadir = string;
  	}
  
  }
  
  
  
  1.1                  cocoon-lenya/src/java/org/apache/lenya/cms/ant/DeletePoliciesTask.java
  
  Index: DeletePoliciesTask.java
  ===================================================================
  /*
  $Id: DeletePoliciesTask.java,v 1.1 2004/01/21 16:11:44 edith Exp $
  <License>
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Lenya" and  "Apache Software Foundation"  must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      apache@apache.org.
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Michael Wechner <mi...@apache.org>. For more information on the Apache Soft-
   ware Foundation, please see <http://www.apache.org/>.
  
   Lenya includes software developed by the Apache Software Foundation, W3C,
   DOM4J Project, BitfluxEditor, Xopus, and WebSHPINX.
  </License>
  */
  package org.apache.lenya.cms.ant;
  
  import java.io.File;
  import java.io.FileFilter;
  import java.io.IOException;
  
  import org.apache.avalon.excalibur.io.FileUtil;
  import org.apache.lenya.cms.publication.Publication;
  import org.apache.lenya.cms.publication.SiteTree;
  import org.apache.lenya.cms.publication.SiteTreeNode;
  import org.apache.tools.ant.BuildException;
  
  /**
   * Ant task to delete the policies of documents corresponding to a defined subtree
   * Visitor of the defined subtree (visitor pattern). The subtree is reverse visited.
   * @author edith
   */
  public class DeletePoliciesTask extends TwoDocumentsOperationTask {
      private String policiesDir;
  
  	/**
  	 * 
  	 */
  	public DeletePoliciesTask() {
  		super();
  	}
  
  	/**
  	 * @return string The policies directory.
  	 */
  	public String getPoliciesDir() {
  		return policiesDir;
  	}
  	/**
  	 * @param string The policies directory
  	 */
  	public void setPoliciesDir(String string) {
  		policiesDir = string;
  	}
  
  	/** 
  	 * Get all files in a given directory, that are not directories.
  	 * If the given directory doesn't exist, return null.
  	 * @param directory The directory
  	 * @return List of files
  	 */
  	public File[] getFiles(File directory) {
  		FileFilter filter = new FileFilter() {
  
  			public boolean accept(File file) {
  				return file.isFile();
  			}
  		};
  		if (directory.exists() && directory.isDirectory()) {
  			return directory.listFiles(filter);
  		}
  		return null;
  	}
  
  	/**
  	 * Delte the policies file 
  	 * @param srcDir The directory of the policies files.
  	 */
  	public void deletePolicies(File srcDir) {
  		File[] authoringPolicies = this.getFiles(srcDir);
  		if (authoringPolicies == null) {
              log("no policies file to delete");
  			return;
  		}
          try {
  		for (int i = 0; i < authoringPolicies.length; i++) {
              FileUtil.forceDelete(authoringPolicies[i]);
  
  		}
          if (srcDir.exists() && srcDir.isDirectory() && srcDir.listFiles().length == 0) {  
            FileUtil.forceDelete(srcDir);
            log(
                "delete directory "
                    + srcDir.getAbsolutePath());
          }
          } catch (IOException e) {
              throw new BuildException(e);
          }
  
  	}
  
  	/** (non-Javadoc)
  	 * @see org.apache.lenya.cms.ant.DocumentOperationTask#visitSiteTreeNode(org.apache.lenya.cms.publication.SiteTreeNode)
  	 */
  	public void visitSiteTreeNode(SiteTreeNode node) {
  		String srcArea = this.getFirstarea();
  		String destArea = this.getSecarea();
  
  		String parentid = node.getAbsoluteParentId();
  		String destDocumentid = parentid + "/" + node.getId();
  		String srcDocumentid =
  			destDocumentid.replaceFirst(
  				getSecdocumentid(),
  				getFirstdocumentid());
  
  		try {
  			if (srcArea.equals(Publication.AUTHORING_AREA)) {
  				if (destArea.equals(Publication.AUTHORING_AREA)) {
  					File srcDir =
  						new File(
  							policiesDir,
  							this.getFirstarea()
  								+ File.separator
  								+ srcDocumentid);
  					log("delete :" + srcDir.getCanonicalPath());
                      deletePolicies(srcDir);
  					File srcLiveDir =
  						new File(
  							policiesDir,
  							Publication.LIVE_AREA
  								+ File.separator
  								+ srcDocumentid);
  					log("delete :" + srcLiveDir.getCanonicalPath());
                      deletePolicies(srcLiveDir);
  
  				} else if (
  					destArea.equals(Publication.ARCHIVE_AREA)
  						| destArea.equals(Publication.TRASH_AREA)) {
  					File srcDir =
  						new File(
  							policiesDir,
  							this.getFirstarea()
  								+ File.separator
  								+ srcDocumentid);
  					log("delete :" + srcDir.getCanonicalPath());
                      deletePolicies(srcDir);
  
  					File srcLiveDir =
  						new File(
  							policiesDir,
  							Publication.LIVE_AREA
  								+ File.separator
  								+ srcDocumentid);
  					log("delete :" + srcLiveDir.getCanonicalPath());
                      deletePolicies(srcLiveDir);
  				}
  			} else if (
  				srcArea.equals(Publication.ARCHIVE_AREA)
  					| srcArea.equals(Publication.TRASH_AREA)) {
  				if (destArea.equals(Publication.AUTHORING_AREA)) {
  					File srcDir =
  						new File(
  							policiesDir,
  							this.getFirstarea()
  								+ File.separator
  								+ this.getSecarea()
  								+ File.separator
  								+ srcDocumentid);
  					log("delete :" + srcDir.getCanonicalPath());
                      deletePolicies(srcDir);
  
  					File srcLiveDir =
  						new File(
  							policiesDir,
  							this.getFirstarea()
  								+ File.separator
  								+ Publication.LIVE_AREA
  								+ File.separator
  								+ srcDocumentid);
  					log("delete :" + srcLiveDir.getCanonicalPath());
                      deletePolicies(srcLiveDir);
  				}
  			}
  		} catch (IOException e) {
  			throw new BuildException(e);
  		}
  	}
  
  	/** 
  	 * @see org.apache.tools.ant.Task#execute()
  	 **/
  	public void execute() throws BuildException {
  		try {
  			log("document-id for the source :" + this.getFirstdocumentid());
  			log("area for the source :" + this.getFirstarea());
  			log("document-id for the destination :" + this.getSecdocumentid());
  			log("area for the destination :" + this.getSecarea());
  
  			Publication publication = getPublication();
  			SiteTree tree = publication.getSiteTree(this.getSecarea());
  			SiteTreeNode node = tree.getNode(this.getSecdocumentid());
  			node.acceptReverseSubtree(this);
  		} catch (Exception e) {
  			throw new BuildException(e);
  		}
  	}
  }
  
  
  
  1.1                  cocoon-lenya/src/java/org/apache/lenya/cms/ant/DeleteResourcesTask.java
  
  Index: DeleteResourcesTask.java
  ===================================================================
  /*
  $Id: DeleteResourcesTask.java,v 1.1 2004/01/21 16:11:44 edith Exp $
  <License>
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Lenya" and  "Apache Software Foundation"  must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      apache@apache.org.
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Michael Wechner <mi...@apache.org>. For more information on the Apache Soft-
   ware Foundation, please see <http://www.apache.org/>.
  
   Lenya includes software developed by the Apache Software Foundation, W3C,
   DOM4J Project, BitfluxEditor, Xopus, and WebSHPINX.
  </License>
  */
  package org.apache.lenya.cms.ant;
  
  import org.apache.lenya.cms.publication.Document;
  import org.apache.lenya.cms.publication.DocumentBuildException;
  import org.apache.lenya.cms.publication.DocumentBuilder;
  import org.apache.lenya.cms.publication.Label;
  import org.apache.lenya.cms.publication.Publication;
  import org.apache.lenya.cms.publication.ResourcesManager;
  import org.apache.lenya.cms.publication.SiteTree;
  import org.apache.lenya.cms.publication.SiteTreeNode;
  import org.apache.tools.ant.BuildException;
  
  /**
   * Ant task to delete the resources of documents corresponding to a defined subtree
   * (Visitor pattern) Visitor of the subtree. The subtree is reverse visited.
   * 
   * @author edith
   *
   */
  public class DeleteResourcesTask extends TwoDocumentsOperationTask {
  
  	/**
  	 * 
  	 */
  	public DeleteResourcesTask() {
  		super();
  	}
  
  	/**
  	 * Delete the resources of the documents corresponding to this node
  	 *  
  	 * @see org.apache.lenya.cms.publication.SiteTreeNodeVisitor#visitSiteTreeNode(org.apache.lenya.cms.publication.SiteTreeNode)
  	 */
  	public void visitSiteTreeNode(SiteTreeNode node) {
  		Publication publication = getPublication();
  		DocumentBuilder builder = publication.getDocumentBuilder();
  
  		String parentid = node.getAbsoluteParentId();
  		String destDocumentid = parentid + "/" + node.getId();
  		String srcDocumentid =
  			destDocumentid.replaceFirst(
  				getSecdocumentid(),
  				getFirstdocumentid());
  
  		Label[] labels = node.getLabels();
  		for (int i = 0; i < labels.length; i++) {
  			String language = labels[i].getLanguage();
  			String url =
  				builder.buildCanonicalUrl(
  					publication,
  					getFirstarea(),
  					srcDocumentid,
  					language);
  			Document srcDoc;
  			try {
  				srcDoc = builder.buildDocument(publication, url);
  			} catch (DocumentBuildException e) {
  				throw new BuildException(e);
  			}
  
  			ResourcesManager resourcesMgr = new ResourcesManager(srcDoc);
  			resourcesMgr.deleteResources();
  		}
  	}
  
  	/** 
  	 * @see org.apache.tools.ant.Task#execute()
  	 **/
  	public void execute() throws BuildException {
  		try {
  			log("document-id for the source :" + this.getFirstdocumentid());
  			log("area for the source :" + this.getFirstarea());
  			log("document-id for the destination :" + this.getSecdocumentid());
  			log("area for the destination :" + this.getSecarea());
  
  			Publication publication = getPublication();
  			SiteTree tree = publication.getSiteTree(this.getSecarea());
  			SiteTreeNode node = tree.getNode(this.getSecdocumentid());
  			node.acceptReverseSubtree(this);
  		} catch (Exception e) {
  			throw new BuildException(e);
  		}
  	}
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: lenya-cvs-unsubscribe@cocoon.apache.org
For additional commands, e-mail: lenya-cvs-help@cocoon.apache.org