/* * Copyright (c) 2001-2004 Ant-Contrib project. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.antcontrib.walls; import java.io.File; import java.util.StringTokenizer; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Location; import org.apache.tools.ant.Project; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; /* * Created on Aug 24, 2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ /** * FILL IN JAVADOC HERE * * @author Dean Hiller(dean@xsoftware.biz) */ public class Package { private String name; private String pack; //signifies the package did not end with .* or .** private boolean badPackage = false; private String failureReason = null; //holds the name attribute of the package element of each //package this package depends on. private String[] depends; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setPackage(String pack) { this.pack = pack; } public String getPackage() { return pack; } public void setDepends(String d) { if(d == null) { throw new RuntimeException("depends cannot be set to null"); } //parse this first. StringTokenizer tok = new StringTokenizer(d, ", \t"); depends = new String[tok.countTokens()]; int i = 0; while(tok.hasMoreTokens()) { depends[i] = tok.nextToken(); i++; } } public String[] getDepends() { return depends; } /** * FILL IN JAVADOC HERE * */ public FileSet getJavaCopyFileSet(Project p, Location l) throws BuildException { if(failureReason != null) throw new BuildException(failureReason, l); else if(pack.indexOf("/") != -1 || pack.indexOf("\\") != -1) throw new BuildException("A package name cannot contain '\\' or '/' like package="+pack +"\nIt must look like biz.xsoftware.* for example", l); FileSet set = new FileSet(); String match = getMatch(p, pack, ".java"); //log("match="+match+" pack="+pack); //first exclude the compilation module, then exclude all it's //dependencies too. set.setIncludes(match); return set; } /** * FILL IN JAVADOC HERE * */ public FileSet getClassCopyFileSet(Project p, Location l) throws BuildException { FileSet set = new FileSet(); set.setIncludes("**/*.class"); return set; } public File getBuildSpace(File baseDir) { return new File(baseDir, name); } /** * @return the source path */ public Path getSrcPath(File baseDir, Project p) { Path path = new Path(p); path.setLocation(getBuildSpace(baseDir)); return path; } /** * @return the classpath */ public Path getClasspath(File baseDir, Project p) { Path path = new Path(p); if(depends != null) { for(int i = 0; i < depends.length; i++) { String buildSpace = (String)depends[i]; File dependsDir = new File(baseDir, buildSpace); path.setLocation(dependsDir); } } return path; } private String getMatch(Project p, String pack, String postFix) { pack = p.replaceProperties(pack); pack = pack.replace('.', File.separatorChar); String match; String classMatch; if(pack.endsWith("**")) { match = pack + File.separatorChar+"*"+postFix; } else if(pack.endsWith("*")) { match = pack + postFix; } else throw new RuntimeException("Please report this bug"); return match; } /** * FILL IN JAVADOC HERE * @param r a fault reason string */ public void setFaultReason(String r) { failureReason = r; } }