001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.nbbuild;
043:
044: import java.io.File;
045: import java.util.*;
046:
047: import org.apache.tools.ant.BuildException;
048: import org.apache.tools.ant.Project;
049: import org.apache.tools.ant.Task;
050: import org.apache.tools.ant.taskdefs.Copy;
051: import org.apache.tools.ant.types.FileSet;
052:
053: /** Copies content of subdirectories of defined name from set of directories
054: * to a certain location.
055: *
056: * @author Jesse Glick, Rudolf Balada
057: *
058: * Copied and changed from NbMerge.java
059: */
060: public class SimpleMerge extends Task {
061:
062: private File dest;
063: private List<String> modules = new ArrayList<String>();
064: private List<File> topdirs = new ArrayList<File>();
065: private List<String> subdirs = new ArrayList<String>();
066:
067: /** Target directory to unpack to (top of IDE installation). */
068: public void setDest(File f) {
069: dest = f;
070: }
071:
072: /** Comma-separated list of modules to include. */
073: public void setModules(String s) {
074: StringTokenizer tok = new StringTokenizer(s, ", ");
075: modules = new ArrayList<String>();
076: while (tok.hasMoreTokens())
077: modules.add(tok.nextToken());
078: }
079:
080: /** Set the top directory.
081: * There should be subdirectories under this for each named module.
082: */
083: public void setTopdir(File t) {
084: topdirs.add(t);
085: }
086:
087: /** Nested topdir addition. */
088: public class Topdir {
089: /** Path to an extra topdir. */
090: public void setPath(File t) {
091: topdirs.add(t);
092: }
093: }
094:
095: /** Add a nested topdir.
096: * If there is more than one topdir total, build products
097: * may be taken from any of them, including from multiple places
098: * for the same module. (Later topdirs may override build
099: * products in earlier topdirs.)
100: */
101: public Topdir createTopdir() {
102: return new Topdir();
103: }
104:
105: /** Set the subdirectory.
106: * There should be these subdirectories in each named module.
107: */
108: public void setSubdir(String t) {
109: subdirs.add(t);
110: }
111:
112: /** Nested subdir addition. */
113: public class Subdir {
114: /** Path to an extra Subdir. */
115: public void setPath(String t) {
116: subdirs.add(t);
117: }
118: }
119:
120: /** Add a nested subdir.
121: * If there is more than one subdir total, build products
122: * may be taken from any of them, including from multiple places
123: * for the same module. (Later subdirs may override build
124: * products in earlier subdirs.)
125: */
126: public Subdir createSubdir() {
127: return new Subdir();
128: }
129:
130: public void execute() throws BuildException {
131: if (topdirs.isEmpty()) {
132: throw new BuildException(
133: "You must set at least one topdir attribute",
134: getLocation());
135: }
136:
137: if (subdirs.isEmpty()) {
138: throw new BuildException(
139: "You must set at least one subdir attribute",
140: getLocation());
141: }
142:
143: log("Starting merge to " + dest.getAbsolutePath());
144: for (File topdir : topdirs) {
145: for (String module : modules) {
146: for (String sdir : subdirs) {
147: File subdir = new File(new File(topdir, module),
148: sdir);
149: if (!subdir.exists()) {
150: log("Dir " + subdir
151: + " does not exist, skipping...",
152: Project.MSG_WARN);
153: continue;
154: }
155: Copy copy = (Copy) getProject().createTask("copy");
156: FileSet fs = new FileSet();
157: fs.setDir(subdir);
158: copy.addFileset(fs);
159: copy.setTodir(dest);
160: copy.setIncludeEmptyDirs(true);
161: copy.init();
162: copy.setLocation(getLocation());
163: copy.execute();
164: }
165: }
166: }
167: log("Merge finished");
168: }
169: }
|