|
|
@@ -24,6 +24,7 @@ import java.io.OutputStream; |
|
|
|
import java.io.ByteArrayInputStream; |
|
|
|
|
|
|
|
import org.apache.tools.ant.Project; |
|
|
|
import org.apache.tools.ant.PropertyHelper; |
|
|
|
import org.apache.tools.ant.types.Resource; |
|
|
|
import org.apache.tools.ant.util.PropertyOutputStream; |
|
|
|
|
|
|
@@ -64,16 +65,35 @@ public class PropertyResource extends Resource { |
|
|
|
* @return the value of the specified Property. |
|
|
|
*/ |
|
|
|
public String getValue() { |
|
|
|
if (isReference()) { |
|
|
|
return ((PropertyResource) getCheckedRef()).getValue(); |
|
|
|
} |
|
|
|
Project p = getProject(); |
|
|
|
return p == null ? null : p.getProperty(getName()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the Object value of this PropertyResource. |
|
|
|
* @return the Object value of the specified Property. |
|
|
|
* @since Ant 1.8.1 |
|
|
|
*/ |
|
|
|
public Object getObjectValue() { |
|
|
|
if (isReference()) { |
|
|
|
return ((PropertyResource) getCheckedRef()).getObjectValue(); |
|
|
|
} |
|
|
|
Project p = getProject(); |
|
|
|
return p == null ? null : PropertyHelper.getProperty(p, getName()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Find out whether this Resource exists. |
|
|
|
* @return true if the Property is set, false otherwise. |
|
|
|
*/ |
|
|
|
public boolean isExists() { |
|
|
|
return getValue() != null; |
|
|
|
if (isReferenceOrProxy()) { |
|
|
|
return getReferencedOrProxied().isExists(); |
|
|
|
} |
|
|
|
return getObjectValue() != null; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -82,10 +102,24 @@ public class PropertyResource extends Resource { |
|
|
|
* compatibility with java.io.File), or UNKNOWN_SIZE if not known. |
|
|
|
*/ |
|
|
|
public long getSize() { |
|
|
|
if (isReference()) { |
|
|
|
return ((Resource) getCheckedRef()).getSize(); |
|
|
|
if (isReferenceOrProxy()) { |
|
|
|
return getReferencedOrProxied().getSize(); |
|
|
|
} |
|
|
|
Object o = getObjectValue(); |
|
|
|
return o == null ? 0L : (long) String.valueOf(o).length(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Override to implement equality with equivalent Resources, |
|
|
|
* since we are capable of proxying them. |
|
|
|
* @param o object to compare |
|
|
|
* @return true if equal to o |
|
|
|
*/ |
|
|
|
public boolean equals(Object o) { |
|
|
|
if (super.equals(o)) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
return isExists() ? (long) getValue().length() : 0L; |
|
|
|
return isReferenceOrProxy() && getReferencedOrProxied().equals(o); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -93,23 +127,20 @@ public class PropertyResource extends Resource { |
|
|
|
* @return hash code as int. |
|
|
|
*/ |
|
|
|
public int hashCode() { |
|
|
|
if (isReference()) { |
|
|
|
return getCheckedRef().hashCode(); |
|
|
|
if (isReferenceOrProxy()) { |
|
|
|
return getReferencedOrProxied().hashCode(); |
|
|
|
} |
|
|
|
return super.hashCode() * PROPERTY_MAGIC; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the string. |
|
|
|
* |
|
|
|
* @return the string contents of the resource. |
|
|
|
* @since Ant 1.7 |
|
|
|
* {@inheritDoc} |
|
|
|
*/ |
|
|
|
public String toString() { |
|
|
|
if (isReference()) { |
|
|
|
return getCheckedRef().toString(); |
|
|
|
if (isReferenceOrProxy()) { |
|
|
|
return getReferencedOrProxied().toString(); |
|
|
|
} |
|
|
|
return String.valueOf(getValue()); |
|
|
|
return getValue(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -121,10 +152,11 @@ public class PropertyResource extends Resource { |
|
|
|
* supported for this Resource type. |
|
|
|
*/ |
|
|
|
public InputStream getInputStream() throws IOException { |
|
|
|
if (isReference()) { |
|
|
|
return ((Resource) getCheckedRef()).getInputStream(); |
|
|
|
if (isReferenceOrProxy()) { |
|
|
|
return getReferencedOrProxied().getInputStream(); |
|
|
|
} |
|
|
|
return isExists() ? new ByteArrayInputStream(getValue().getBytes()) : UNSET; |
|
|
|
Object o = getObjectValue(); |
|
|
|
return o == null ? UNSET : new ByteArrayInputStream(String.valueOf(o).getBytes()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
@@ -136,8 +168,8 @@ public class PropertyResource extends Resource { |
|
|
|
* supported for this Resource type. |
|
|
|
*/ |
|
|
|
public OutputStream getOutputStream() throws IOException { |
|
|
|
if (isReference()) { |
|
|
|
return ((Resource) getCheckedRef()).getOutputStream(); |
|
|
|
if (isReferenceOrProxy()) { |
|
|
|
return getReferencedOrProxied().getOutputStream(); |
|
|
|
} |
|
|
|
if (isExists()) { |
|
|
|
throw new ImmutableResourceException(); |
|
|
@@ -145,4 +177,30 @@ public class PropertyResource extends Resource { |
|
|
|
return new PropertyOutputStream(getProject(), getName()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Learn whether this PropertyResource either refers to another Resource |
|
|
|
* or proxies another Resource due to its object property value being said Resource. |
|
|
|
* @return boolean |
|
|
|
*/ |
|
|
|
protected boolean isReferenceOrProxy() { |
|
|
|
return isReference() || getObjectValue() instanceof Resource; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the referenced or proxied Resource, if applicable. |
|
|
|
* @return Resource |
|
|
|
* @throws IllegalStateException if this PropertyResource neither proxies nor |
|
|
|
* references another Resource. |
|
|
|
*/ |
|
|
|
protected Resource getReferencedOrProxied() { |
|
|
|
if (isReference()) { |
|
|
|
return (Resource) getCheckedRef(Resource.class, "resource"); |
|
|
|
} |
|
|
|
Object o = getObjectValue(); |
|
|
|
if (o instanceof Resource) { |
|
|
|
return (Resource) o; |
|
|
|
} |
|
|
|
throw new IllegalStateException( |
|
|
|
"This PropertyResource does not reference or proxy another Resource"); |
|
|
|
} |
|
|
|
} |