001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: /* $Id: CopyPublicationsTask.java 416058 2006-06-21 18:24:05Z andreas $ */
020:
021: package org.apache.lenya.cms.ant;
022:
023: import java.io.File;
024: import java.io.FilenameFilter;
025: import java.util.StringTokenizer;
026:
027: import org.apache.tools.ant.BuildException;
028: import org.apache.tools.ant.Task;
029: import org.apache.tools.ant.types.Path;
030:
031: /**
032: * Task to copy files of publications and modules
033: */
034: public class CopyPublicationsTask extends Task {
035: private Path pubsRootDirs;
036: private Path toDir;
037: private String excludes;
038:
039: /** (non-Javadoc)
040: * @see org.apache.tools.ant.Task#execute()
041: */
042: public void execute() throws BuildException {
043: int numberOfDirectoriesCreated = 0;
044: int numberOfFilesCopied = 0;
045: TwoTuple twoTuple = new TwoTuple(numberOfDirectoriesCreated,
046: numberOfFilesCopied);
047:
048: StringTokenizer st = new StringTokenizer(this .pubsRootDirs
049: .toString(), File.pathSeparator);
050:
051: log("Excludes " + this .excludes);
052: FilenameFilter filter = new SCMFilenameFilter(this .excludes);
053:
054: while (st.hasMoreTokens()) {
055: String pubsRootDir = st.nextToken();
056:
057: copy(pubsRootDir, filter, twoTuple);
058: }
059:
060: numberOfDirectoriesCreated = twoTuple.x;
061: numberOfFilesCopied = twoTuple.y;
062: log("Copying " + numberOfDirectoriesCreated
063: + " directories to " + this .toDir);
064: log("Copying " + numberOfFilesCopied + " files to "
065: + this .toDir);
066: }
067:
068: /**
069: *
070: */
071: public void copy(String pubsRootDir, FilenameFilter filter,
072: TwoTuple twoTuple) {
073: // In the case the pubsRootDir is publication dir
074: if (new File(pubsRootDir, "/config/publication.xml").isFile()) {
075: File pubDir = new File(pubsRootDir);
076: log("Copy publication: " + pubDir);
077: CopyJavaSourcesTask.copyDir(pubDir, new File(this .toDir
078: .toString()), twoTuple, filter, this );
079: File localPublicationXConf = new File(pubDir,
080: "/config/local.publication.xml");
081: if (localPublicationXConf.isFile()) {
082: File publicationXConf = new File(this .toDir.toString()
083: + "/" + pubDir.getName()
084: + "/config/publication.xml");
085: log("Patch config file with local version: "
086: + localPublicationXConf + " "
087: + publicationXConf);
088: CopyJavaSourcesTask.copyFile(localPublicationXConf,
089: publicationXConf, twoTuple, this , true);
090: }
091:
092: File localAccessControlXConf = new File(pubDir,
093: "/config/access-control/local.access-control.xml");
094: if (localAccessControlXConf.isFile()) {
095: File accessControlXConf = new File(this .toDir
096: .toString()
097: + "/"
098: + pubDir.getName()
099: + "/config/access-control/access-control.xml");
100: log("Patch access control config file with local version: "
101: + localAccessControlXConf
102: + " "
103: + accessControlXConf);
104: CopyJavaSourcesTask.copyFile(localAccessControlXConf,
105: accessControlXConf, twoTuple, this , true);
106: }
107:
108: // In the case the pubsRootDir is module dir
109: } else if (new File(pubsRootDir, "/config/module.xml").isFile()) {
110: log("Copy module: " + pubsRootDir);
111: CopyJavaSourcesTask.copyDir(new File(pubsRootDir),
112: new File(this .toDir.toString()), twoTuple, filter,
113: this );
114: } else {
115: File[] files = new File(pubsRootDir).listFiles(filter);
116: if (files != null) {
117: for (int i = 0; i < files.length; i++) {
118: copy(files[i].getAbsolutePath(), filter, twoTuple);
119: }
120: } else
121: log("ERROR: No children: " + pubsRootDir);
122: }
123: }
124:
125: /**
126: * Where the publications are located
127: *
128: * @param _pubsRootDirs
129: */
130: public void setPubsRootDirs(Path _pubsRootDirs) {
131: this .pubsRootDirs = _pubsRootDirs;
132: }
133:
134: /**
135: * Where the publications shall be copied to
136: *
137: * @param _toDir
138: */
139: public void setToDir(Path _toDir) {
140: this .toDir = _toDir;
141: }
142:
143: /**
144: * Which filenames shall be excluded
145: *
146: * @param _excludes
147: */
148: public void setExcludes(String _excludes) {
149: this.excludes = _excludes;
150: }
151: }
|