Class ModifiedSelector
- All Implemented Interfaces:
Cloneable
,EventListener
,BuildListener
,Parameterizable
,ResourceSelector
,ExtendFileSelector
,FileSelector
Selector class that uses Algorithm, Cache and Comparator for its work. The Algorithm is used for computing a hashvalue for a file. The Comparator decides whether to select or not. The Cache stores the other value for comparison by the Comparator in a persistent manner.
The ModifiedSelector is implemented as a CoreSelector and uses default values for all its attributes therefore the simplest example is
<copy todir="dest"> <fileset dir="src"> <modified/> </fileset> </copy>
The same example rewritten as CoreSelector with setting the all values (same as defaults are) would be
<copy todir="dest"> <fileset dir="src"> <modified update="true" cache="propertyfile" algorithm="digest" comparator="equal"> <param name="cache.cachefile" value="cache.properties"/> <param name="algorithm.algorithm" value="MD5"/> </modified> </fileset> </copy>
And the same rewritten as CustomSelector would be
<copy todir="dest"> <fileset dir="src"> <custom class="org.apache.tools.ant.type.selectors.ModifiedSelector"> <param name="update" value="true"/> <param name="cache" value="propertyfile"/> <param name="algorithm" value="digest"/> <param name="comparator" value="equal"/> <param name="cache.cachefile" value="cache.properties"/> <param name="algorithm.algorithm" value="MD5"/> </custom> </fileset> </copy>
If you want to provide your own interface implementation you can do that via the *classname attributes. If the classes are not on Ant's core classpath, you will have to provide the path via nested <classpath> element, so that the selector can find the classes.
<modified cacheclassname="com.mycompany.MyCache"> <classpath> <pathelement location="lib/mycompany-antutil.jar"/> </classpath> </modified>
All these three examples copy the files from src to dest using the ModifiedSelector. The ModifiedSelector uses the PropertyfileCache , the DigestAlgorithm and the EqualComparator for its work. The PropertyfileCache stores key-value-pairs in a simple java properties file. The filename is cache.properties. The update flag lets the selector update the values in the cache (and on first call creates the cache). The DigestAlgorithm computes a hashvalue using the java.security.MessageDigest class with its MD5-Algorithm and its standard provider. The new computed hashvalue and the stored one are compared by the EqualComparator which returns 'true' (more correct a value not equals zero (1)) if the values are not the same using simple String comparison.
A useful scenario for this selector is inside a build environment for homepage generation (e.g. with Apache Forrest).
<target name="generate-and-upload-site"> <echo> generate the site using forrest </echo> <antcall target="site"/> <echo> upload the changed files </echo> <ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.pwd}"> <fileset dir="htdocs/manual"> <modified/> </fileset> </ftp> </target>
Here all changed files are uploaded to the server. The ModifiedSelector saves therefore much upload time.
This selector uses reflection for setting the values of its three interfaces (using org.apache.tools.ant.IntrospectionHelper) therefore no special 'configuration interfaces' has to be implemented by new caches, algorithms or comparators. All present setXX methods can be used. E.g. the DigestAlgorithm can use a specified provider for computing its value. For selecting this there is a setProvider(String providername) method. So you can use a nested <param name="algorithm.provider" value="MyProvider"/>.
- Since:
- Ant 1.6
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
The enumerated type for algorithm.static class
The enumerated type for cache.static class
The enumerated type for algorithm. -
Field Summary
Fields inherited from class org.apache.tools.ant.types.selectors.BaseExtendSelector
parameters
Fields inherited from class org.apache.tools.ant.ProjectComponent
description, location, project
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addClasspath
(Path path) Add the classpath.void
Support for nested <param> tags.void
Support for nested <param> tags.void
buildFinished
(BuildEvent event) Signals that the last target has finished.void
buildStarted
(BuildEvent event) Signals that a build has started.void
Configures this Selector.Get the algorithm type to use.getCache()
Get the cache type to use.Returns and initializes the classloader for this class.Comparator
<? super String> Get the comparator type to use.boolean
Getter for the delay updateint
Getter for the modified countboolean
isSelected
(File basedir, String filename, File file) Implementation of BaseExtendSelector.isSelected().boolean
isSelected
(Resource resource) Implementation of ResourceSelector.isSelected().protected <T> T
Loads the specified class and initializes an object of that class.void
messageLogged
(BuildEvent event) Signals a message logging event.protected void
save the cache filevoid
Set the algorithm type to use.void
setAlgorithmClass
(String classname) Setter for algorithmClass.void
Set the cache type to use.void
setCacheClass
(String classname) Setter for cacheClass.void
setClassLoader
(ClassLoader loader) Set the used ClassLoader.void
Set the comparator type to use.void
setComparatorClass
(String classname) Setter for comparatorClass.void
setDelayUpdate
(boolean delayUpdate) Setter for the delay updatevoid
setModified
(int modified) Setter for the modified countvoid
setParameters
(Parameter... parameters) Defined in org.apache.tools.ant.types.Parameterizable.void
setSeldirs
(boolean seldirs) Support for seldirs attribute.void
setSelres
(boolean newValue) Support for selres attribute.void
setUpdate
(boolean update) Support for update attribute.void
targetFinished
(BuildEvent event) Signals that a target has finished.void
targetStarted
(BuildEvent event) Signals that a target is starting.void
taskFinished
(BuildEvent event) Signals that a task has finished.void
taskStarted
(BuildEvent event) Signals that a task is starting.toString()
Override Object.toString().protected void
tryToSetAParameter
(Object obj, String name, String value) Try to set a value on an object using reflection.void
useParameter
(Parameter parameter) Support for nested<param name="" value=""/>
tags.void
Overrides BaseSelector.verifySettings().Methods inherited from class org.apache.tools.ant.types.selectors.BaseExtendSelector
getParameters
Methods inherited from class org.apache.tools.ant.types.selectors.BaseSelector
getError, setError, setError, validate
Methods inherited from class org.apache.tools.ant.types.DataType
checkAttributesAllowed, checkChildrenAllowed, circularReference, clone, dieOnCircularReference, dieOnCircularReference, dieOnCircularReference, getCheckedRef, getCheckedRef, getCheckedRef, getCheckedRef, getCheckedRef, getDataTypeName, getRefid, invokeCircularReferenceCheck, isChecked, isReference, noChildrenAllowed, pushAndInvokeCircularReferenceCheck, setChecked, setRefid, tooManyAttributes
Methods inherited from class org.apache.tools.ant.ProjectComponent
getDescription, getLocation, getProject, log, log, setDescription, setLocation, setProject
-
Constructor Details
-
ModifiedSelector
public ModifiedSelector()Bean-Constructor.
-
-
Method Details
-
verifySettings
public void verifySettings()Overrides BaseSelector.verifySettings().- Overrides:
verifySettings
in classBaseSelector
-
configure
public void configure()Configures this Selector. Does this work only once per Selector object.Because some problems while configuring from <custom>Selector the configuration is done in the following order:
- collect the configuration data
- wait for the first isSelected() call
- set the default values
- set values for name pattern '*': update, cache, algorithm, comparator
- set values for name pattern '*.*: cache.cachefile, ...
This configuration algorithm is needed because you don't know the order of arriving config-data. E.g. if you first set the cache.cachefilename and after that the cache itself, the default value for cachefilename is used, because setting the cache implies creating a new Cache instance - with its defaults.
-
loadClass
Loads the specified class and initializes an object of that class. Throws a BuildException using the given message if an error occurs during loading/instantiation or if the object is not from the given type.- Type Parameters:
T
- desired type- Parameters:
classname
- the classnamemsg
- the message-part for the BuildExceptiontype
- the type to check against- Returns:
- a castable object
-
isSelected
Implementation of ResourceSelector.isSelected().- Specified by:
isSelected
in interfaceFileSelector
- Specified by:
isSelected
in interfaceResourceSelector
- Parameters:
resource
- The resource to check- Returns:
- whether the resource is selected
- See Also:
-
isSelected
Implementation of BaseExtendSelector.isSelected().- Specified by:
isSelected
in interfaceFileSelector
- Specified by:
isSelected
in classBaseExtendSelector
- Parameters:
basedir
- as described in BaseExtendSelectorfilename
- as described in BaseExtendSelectorfile
- as described in BaseExtendSelector- Returns:
- as described in BaseExtendSelector
-
saveCache
protected void saveCache()save the cache file -
setAlgorithmClass
Setter for algorithmClass.- Parameters:
classname
- new value
-
setComparatorClass
Setter for comparatorClass.- Parameters:
classname
- new value
-
setCacheClass
Setter for cacheClass.- Parameters:
classname
- new value
-
setUpdate
public void setUpdate(boolean update) Support for update attribute.- Parameters:
update
- new value
-
setSeldirs
public void setSeldirs(boolean seldirs) Support for seldirs attribute.- Parameters:
seldirs
- new value
-
setSelres
public void setSelres(boolean newValue) Support for selres attribute.- Parameters:
newValue
- the new value
-
getModified
public int getModified()Getter for the modified count- Returns:
- modified count
-
setModified
public void setModified(int modified) Setter for the modified count- Parameters:
modified
- count
-
getDelayUpdate
public boolean getDelayUpdate()Getter for the delay update- Returns:
- true if we should delay for performance
-
setDelayUpdate
public void setDelayUpdate(boolean delayUpdate) Setter for the delay update- Parameters:
delayUpdate
- true if we should delay for performance
-
addClasspath
-
getClassLoader
Returns and initializes the classloader for this class.- Returns:
- the classloader
-
setClassLoader
Set the used ClassLoader. If you invoke this selector by API (e.g. inside some testcases) the selector will use a different classloader for loading the interface implementations than the caller. Therefore you will get a ClassCastException if you get the implementations from the selector and cast them.- Parameters:
loader
- the ClassLoader to use
-
addParam
-
addParam
Support for nested <param> tags.- Parameters:
parameter
- the parameter object
-
setParameters
Defined in org.apache.tools.ant.types.Parameterizable. Overwrite implementation in superclass because only special parameters are valid.- Specified by:
setParameters
in interfaceParameterizable
- Overrides:
setParameters
in classBaseExtendSelector
- Parameters:
parameters
- the parameters to set.- See Also:
-
useParameter
Support for nested<param name="" value=""/>
tags. Parameter named cache, algorithm, comparator or update are mapped to the respective set-Method. Parameter which names starts with cache. or algorithm. or comparator. are tried to set on the appropriate object via its set-methods. Other parameters are invalid and an BuildException will be thrown.- Parameters:
parameter
- Key and value as parameter object
-
tryToSetAParameter
Try to set a value on an object using reflection. Helper method for easier access to IntrospectionHelper.setAttribute().- Parameters:
obj
- the object on which the attribute should be setname
- the attributenamevalue
- the new value
-
toString
-
buildFinished
Signals that the last target has finished.- Specified by:
buildFinished
in interfaceBuildListener
- Parameters:
event
- received BuildEvent- See Also:
-
targetFinished
Signals that a target has finished.- Specified by:
targetFinished
in interfaceBuildListener
- Parameters:
event
- received BuildEvent- See Also:
-
taskFinished
Signals that a task has finished.- Specified by:
taskFinished
in interfaceBuildListener
- Parameters:
event
- received BuildEvent- See Also:
-
buildStarted
Signals that a build has started.- Specified by:
buildStarted
in interfaceBuildListener
- Parameters:
event
- received BuildEvent
-
targetStarted
Signals that a target is starting.- Specified by:
targetStarted
in interfaceBuildListener
- Parameters:
event
- received BuildEvent- See Also:
-
taskStarted
Signals that a task is starting.- Specified by:
taskStarted
in interfaceBuildListener
- Parameters:
event
- received BuildEvent- See Also:
-
messageLogged
Signals a message logging event.- Specified by:
messageLogged
in interfaceBuildListener
- Parameters:
event
- received BuildEvent- See Also:
-
getCache
-
setCache
Set the cache type to use.- Parameters:
name
- an enumerated cache type.
-
getAlgorithm
Get the algorithm type to use.- Returns:
- the enumerated algorithm type
-
setAlgorithm
Set the algorithm type to use.- Parameters:
name
- an enumerated algorithm type.
-
getComparator
Get the comparator type to use.- Returns:
- the enumerated comparator type
-
setComparator
Set the comparator type to use.- Parameters:
name
- an enumerated comparator type.
-