Made AntSoundPlayer a ProjectListener rather than a BuildListener git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270471 13f79535-47bb-0310-9956-ffa450edef68master
@@ -26,161 +26,92 @@ import org.apache.tools.ant.Task; | |||||
* @author Nick Pellow | * @author Nick Pellow | ||||
* @version $Revision$, $Date$ | * @version $Revision$, $Date$ | ||||
*/ | */ | ||||
public class SoundTask extends Task | |||||
public class SoundTask | |||||
extends Task | |||||
{ | { | ||||
private BuildAlert success = null; | |||||
private BuildAlert fail = null; | |||||
public SoundTask() | |||||
{ | |||||
} | |||||
private BuildAlert m_success; | |||||
private BuildAlert m_fail; | |||||
public BuildAlert createFail() | public BuildAlert createFail() | ||||
{ | { | ||||
fail = new BuildAlert(); | |||||
return fail; | |||||
m_fail = new BuildAlert(); | |||||
return m_fail; | |||||
} | } | ||||
public BuildAlert createSuccess() | public BuildAlert createSuccess() | ||||
{ | { | ||||
success = new BuildAlert(); | |||||
return success; | |||||
m_success = new BuildAlert(); | |||||
return m_success; | |||||
} | } | ||||
public void execute() | public void execute() | ||||
{ | { | ||||
AntSoundPlayer soundPlayer = new AntSoundPlayer(); | |||||
if( success == null ) | |||||
final AntSoundPlayer soundPlayer = new AntSoundPlayer(); | |||||
if( null == m_success ) | |||||
{ | { | ||||
getLogger().warn( "No nested success element found." ); | getLogger().warn( "No nested success element found." ); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
soundPlayer.addBuildSuccessfulSound( success.getSource(), | |||||
success.getLoops(), success.getDuration() ); | |||||
soundPlayer.addBuildSuccessfulSound( getRandomSource( m_success ), | |||||
m_success.getLoops(), m_success.getDuration() ); | |||||
} | } | ||||
if( fail == null ) | |||||
if( null == m_fail ) | |||||
{ | { | ||||
getLogger().warn( "No nested failure element found." ); | getLogger().warn( "No nested failure element found." ); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
soundPlayer.addBuildFailedSound( fail.getSource(), | |||||
fail.getLoops(), fail.getDuration() ); | |||||
soundPlayer.addBuildFailedSound( getRandomSource( m_fail ), | |||||
m_fail.getLoops(), m_fail.getDuration() ); | |||||
} | } | ||||
getProject().addBuildListener( soundPlayer ); | |||||
getProject().addProjectListener( soundPlayer ); | |||||
} | } | ||||
/** | /** | ||||
* A class to be extended by any BuildAlert's that require the output of | |||||
* sound. | |||||
* Gets the location of the file to get the audio. | |||||
* | |||||
* @return The Source value | |||||
*/ | */ | ||||
public class BuildAlert | |||||
private File getRandomSource( final BuildAlert alert ) | |||||
{ | { | ||||
private File source = null; | |||||
private int loops = 0; | |||||
private Long duration = null; | |||||
/** | |||||
* Sets the duration in milliseconds the file should be played. | |||||
* | |||||
* @param duration The new Duration value | |||||
*/ | |||||
public void setDuration( Long duration ) | |||||
final File source = alert.getSource(); | |||||
// Check if source is a directory | |||||
if( source.exists() ) | |||||
{ | { | ||||
this.duration = duration; | |||||
} | |||||
/** | |||||
* Sets the number of times the source file should be played. | |||||
* | |||||
* @param loops the number of loops to play the source file | |||||
*/ | |||||
public void setLoops( int loops ) | |||||
{ | |||||
this.loops = loops; | |||||
} | |||||
/** | |||||
* Sets the location of the file to get the audio. | |||||
* | |||||
* @param source the name of a sound-file directory or of the audio file | |||||
*/ | |||||
public void setSource( File source ) | |||||
{ | |||||
this.source = source; | |||||
} | |||||
/** | |||||
* Gets the duration in milliseconds the file should be played. | |||||
* | |||||
* @return The Duration value | |||||
*/ | |||||
public Long getDuration() | |||||
{ | |||||
return this.duration; | |||||
} | |||||
/** | |||||
* Sets the number of times the source file should be played. | |||||
* | |||||
* @return the number of loops to play the source file | |||||
*/ | |||||
public int getLoops() | |||||
{ | |||||
return this.loops; | |||||
} | |||||
/** | |||||
* Gets the location of the file to get the audio. | |||||
* | |||||
* @return The Source value | |||||
*/ | |||||
public File getSource() | |||||
{ | |||||
File nofile = null; | |||||
// Check if source is a directory | |||||
if( source.exists() ) | |||||
if( source.isDirectory() ) | |||||
{ | { | ||||
if( source.isDirectory() ) | |||||
// get the list of files in the dir | |||||
final String[] entries = source.list(); | |||||
ArrayList files = new ArrayList(); | |||||
for( int i = 0; i < entries.length; i++ ) | |||||
{ | { | ||||
// get the list of files in the dir | |||||
String[] entries = source.list(); | |||||
ArrayList files = new ArrayList(); | |||||
for( int i = 0; i < entries.length; i++ ) | |||||
{ | |||||
File f = new File( source, entries[ i ] ); | |||||
if( f.isFile() ) | |||||
{ | |||||
files.add( f ); | |||||
} | |||||
} | |||||
if( files.size() < 1 ) | |||||
File f = new File( source, entries[ i ] ); | |||||
if( f.isFile() ) | |||||
{ | { | ||||
throw new TaskException( "No files found in directory " + source ); | |||||
files.add( f ); | |||||
} | } | ||||
int numfiles = files.size(); | |||||
// get a random number between 0 and the number of files | |||||
Random rn = new Random(); | |||||
int x = rn.nextInt( numfiles ); | |||||
// set the source to the file at that location | |||||
this.source = (File)files.get( x ); | |||||
} | } | ||||
if( files.size() < 1 ) | |||||
{ | |||||
throw new TaskException( "No files found in directory " + source ); | |||||
} | |||||
final int numfiles = files.size(); | |||||
// get a random number between 0 and the number of files | |||||
final Random random = new Random(); | |||||
final int x = random.nextInt( numfiles ); | |||||
// set the source to the file at that location | |||||
source = (File)files.get( x ); | |||||
} | } | ||||
else | |||||
{ | |||||
getLogger().warn( source + ": invalid path." ); | |||||
this.source = nofile; | |||||
} | |||||
return this.source; | |||||
} | } | ||||
else | |||||
{ | |||||
getLogger().warn( source + ": invalid path." ); | |||||
source = null; | |||||
} | |||||
return source; | |||||
} | } | ||||
} | } | ||||
@@ -26,161 +26,92 @@ import org.apache.tools.ant.Task; | |||||
* @author Nick Pellow | * @author Nick Pellow | ||||
* @version $Revision$, $Date$ | * @version $Revision$, $Date$ | ||||
*/ | */ | ||||
public class SoundTask extends Task | |||||
public class SoundTask | |||||
extends Task | |||||
{ | { | ||||
private BuildAlert success = null; | |||||
private BuildAlert fail = null; | |||||
public SoundTask() | |||||
{ | |||||
} | |||||
private BuildAlert m_success; | |||||
private BuildAlert m_fail; | |||||
public BuildAlert createFail() | public BuildAlert createFail() | ||||
{ | { | ||||
fail = new BuildAlert(); | |||||
return fail; | |||||
m_fail = new BuildAlert(); | |||||
return m_fail; | |||||
} | } | ||||
public BuildAlert createSuccess() | public BuildAlert createSuccess() | ||||
{ | { | ||||
success = new BuildAlert(); | |||||
return success; | |||||
m_success = new BuildAlert(); | |||||
return m_success; | |||||
} | } | ||||
public void execute() | public void execute() | ||||
{ | { | ||||
AntSoundPlayer soundPlayer = new AntSoundPlayer(); | |||||
if( success == null ) | |||||
final AntSoundPlayer soundPlayer = new AntSoundPlayer(); | |||||
if( null == m_success ) | |||||
{ | { | ||||
getLogger().warn( "No nested success element found." ); | getLogger().warn( "No nested success element found." ); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
soundPlayer.addBuildSuccessfulSound( success.getSource(), | |||||
success.getLoops(), success.getDuration() ); | |||||
soundPlayer.addBuildSuccessfulSound( getRandomSource( m_success ), | |||||
m_success.getLoops(), m_success.getDuration() ); | |||||
} | } | ||||
if( fail == null ) | |||||
if( null == m_fail ) | |||||
{ | { | ||||
getLogger().warn( "No nested failure element found." ); | getLogger().warn( "No nested failure element found." ); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
soundPlayer.addBuildFailedSound( fail.getSource(), | |||||
fail.getLoops(), fail.getDuration() ); | |||||
soundPlayer.addBuildFailedSound( getRandomSource( m_fail ), | |||||
m_fail.getLoops(), m_fail.getDuration() ); | |||||
} | } | ||||
getProject().addBuildListener( soundPlayer ); | |||||
getProject().addProjectListener( soundPlayer ); | |||||
} | } | ||||
/** | /** | ||||
* A class to be extended by any BuildAlert's that require the output of | |||||
* sound. | |||||
* Gets the location of the file to get the audio. | |||||
* | |||||
* @return The Source value | |||||
*/ | */ | ||||
public class BuildAlert | |||||
private File getRandomSource( final BuildAlert alert ) | |||||
{ | { | ||||
private File source = null; | |||||
private int loops = 0; | |||||
private Long duration = null; | |||||
/** | |||||
* Sets the duration in milliseconds the file should be played. | |||||
* | |||||
* @param duration The new Duration value | |||||
*/ | |||||
public void setDuration( Long duration ) | |||||
final File source = alert.getSource(); | |||||
// Check if source is a directory | |||||
if( source.exists() ) | |||||
{ | { | ||||
this.duration = duration; | |||||
} | |||||
/** | |||||
* Sets the number of times the source file should be played. | |||||
* | |||||
* @param loops the number of loops to play the source file | |||||
*/ | |||||
public void setLoops( int loops ) | |||||
{ | |||||
this.loops = loops; | |||||
} | |||||
/** | |||||
* Sets the location of the file to get the audio. | |||||
* | |||||
* @param source the name of a sound-file directory or of the audio file | |||||
*/ | |||||
public void setSource( File source ) | |||||
{ | |||||
this.source = source; | |||||
} | |||||
/** | |||||
* Gets the duration in milliseconds the file should be played. | |||||
* | |||||
* @return The Duration value | |||||
*/ | |||||
public Long getDuration() | |||||
{ | |||||
return this.duration; | |||||
} | |||||
/** | |||||
* Sets the number of times the source file should be played. | |||||
* | |||||
* @return the number of loops to play the source file | |||||
*/ | |||||
public int getLoops() | |||||
{ | |||||
return this.loops; | |||||
} | |||||
/** | |||||
* Gets the location of the file to get the audio. | |||||
* | |||||
* @return The Source value | |||||
*/ | |||||
public File getSource() | |||||
{ | |||||
File nofile = null; | |||||
// Check if source is a directory | |||||
if( source.exists() ) | |||||
if( source.isDirectory() ) | |||||
{ | { | ||||
if( source.isDirectory() ) | |||||
// get the list of files in the dir | |||||
final String[] entries = source.list(); | |||||
ArrayList files = new ArrayList(); | |||||
for( int i = 0; i < entries.length; i++ ) | |||||
{ | { | ||||
// get the list of files in the dir | |||||
String[] entries = source.list(); | |||||
ArrayList files = new ArrayList(); | |||||
for( int i = 0; i < entries.length; i++ ) | |||||
{ | |||||
File f = new File( source, entries[ i ] ); | |||||
if( f.isFile() ) | |||||
{ | |||||
files.add( f ); | |||||
} | |||||
} | |||||
if( files.size() < 1 ) | |||||
File f = new File( source, entries[ i ] ); | |||||
if( f.isFile() ) | |||||
{ | { | ||||
throw new TaskException( "No files found in directory " + source ); | |||||
files.add( f ); | |||||
} | } | ||||
int numfiles = files.size(); | |||||
// get a random number between 0 and the number of files | |||||
Random rn = new Random(); | |||||
int x = rn.nextInt( numfiles ); | |||||
// set the source to the file at that location | |||||
this.source = (File)files.get( x ); | |||||
} | } | ||||
if( files.size() < 1 ) | |||||
{ | |||||
throw new TaskException( "No files found in directory " + source ); | |||||
} | |||||
final int numfiles = files.size(); | |||||
// get a random number between 0 and the number of files | |||||
final Random random = new Random(); | |||||
final int x = random.nextInt( numfiles ); | |||||
// set the source to the file at that location | |||||
source = (File)files.get( x ); | |||||
} | } | ||||
else | |||||
{ | |||||
getLogger().warn( source + ": invalid path." ); | |||||
this.source = nofile; | |||||
} | |||||
return this.source; | |||||
} | } | ||||
else | |||||
{ | |||||
getLogger().warn( source + ": invalid path." ); | |||||
source = null; | |||||
} | |||||
return source; | |||||
} | } | ||||
} | } | ||||