@@ -1,5 +1,5 @@
/*
/*
* Copyright 2000-2002,2004 The Apache Software Foundation
* Copyright 2000-2002,2004-2005 The Apache Software Foundation
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
@@ -27,15 +27,31 @@ import org.apache.tools.ant.Project;
public class Reference {
public class Reference {
private String refid;
private String refid;
private Project project;
/**
* @deprecated Please use {@link Reference#Reference(Project,String)} instead.
*/
public Reference() {
public Reference() {
super();
}
}
/**
* @deprecated Please use {@link Reference#Reference(Project,String)} instead.
*/
public Reference(String id) {
public Reference(String id) {
this();
setRefId(id);
setRefId(id);
}
}
/**
* Create a reference to a named ID in a particular project.
* @param p the project this reference is associated with
* @param id the name of this reference
* @since Ant 1.7
*/
public Reference(Project p, String id) {
setRefId(id);
setProject(p);
}
public void setRefId(String id) {
public void setRefId(String id) {
refid = id;
refid = id;
@@ -44,16 +60,59 @@ public class Reference {
public String getRefId() {
public String getRefId() {
return refid;
return refid;
}
}
/**
* Set the associated project. Should not normally be necessary;
* use {@link Reference#Reference(Project,String)}.
* @param p the project to use
* @since Ant 1.7
*/
public void setProject(Project p) {
this.project = p;
}
/**
* Get the associated project, if any; may be null.
* @return the associated project
* @since Ant 1.7
*/
public Project getProject() {
return project;
}
public Object getReferencedObject(Project project) throws BuildException {
/**
* Resolve the reference, using the associated project if
* it set, otherwise use the passed in project.
* @param fallback the fallback project to use if the project attribute of
* reference is not set.
* @return the dereferenced object.
* @throws BuildException if the reference cannot be dereferenced.
*/
public Object getReferencedObject(Project fallback) throws BuildException {
if (refid == null) {
if (refid == null) {
throw new BuildException("No reference specified");
throw new BuildException("No reference specified");
}
}
Object o = project.getReference(refid);
Object o = project == null ? fallback.getReference(refid) : project.getReference(refid);
if (o == null) {
if (o == null) {
throw new BuildException("Reference " + refid + " not found.");
throw new BuildException("Reference " + refid + " not found.");
}
}
return o;
return o;
}
}
/**
* Resolve the reference, looking in the associated project.
* @see Project#getReference
* @return the dereferenced object.
* @throws BuildException if the project is null or the reference cannot be dereferenced
* @since Ant 1.7
*/
public Object getReferencedObject() throws BuildException {
if (project == null) {
throw new BuildException("No project set on reference to " + refid);
}
return getReferencedObject(project);
}
}
}