/* * Copyright 2003-2004 The Apache Software Foundation * * 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 org.apache.tools.ant.taskdefs; import org.apache.tools.ant.Task; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; /** * A task to provide "nice-ness" to the current thread, and/or to * query the current value. * Examples: *
<nice currentPriority="current.value" >
* Set currentPriority to the current priority
*
<nice newPriority="10" >
* Raise the priority of the build process (But not forked programs) *
<nice currentPriority="old" newPriority="3" >
* Lower the priority of the build process (But not forked programs), and save
* the old value to the property old.
*
* @ant.task name="nice" category="control"
*/
public class Nice extends Task {
/**
* the new priority
*/
private Integer newPriority;
/**
* the current priority
*/
private String currentPriority;
/**
* Execute the task
* @exception BuildException if something goes wrong with the build
*/
public void execute() throws BuildException {
Thread self = Thread.currentThread();
int priority = self.getPriority();
if (currentPriority != null) {
String current = Integer.toString(priority);
getProject().setNewProperty(currentPriority, current);
}
//if there is a new priority, and it is different, change it
if (newPriority != null && priority != newPriority.intValue()) {
try {
self.setPriority(newPriority.intValue());
} catch (SecurityException e) {
//catch permissions denial and keep going
log("Unable to set new priority -a security manager is in the way",
Project.MSG_WARN);
} catch (IllegalArgumentException iae) {
throw new BuildException("Priority out of range", iae);
}
}
}
/**
* The name of a property to set to the value of the current
* thread priority. Optional
* @param currentPriority the property name.
*/
public void setCurrentPriority(String currentPriority) {
this.currentPriority = currentPriority;
}
/**
* the new priority, in the range 1-10.
* @param newPriority the new priority value.
*/
public void setNewPriority(int newPriority) {
if (newPriority < Thread.MIN_PRIORITY || newPriority > Thread.MAX_PRIORITY) {
throw new BuildException("The thread priority is out of the range 1-10");
}
this.newPriority = new Integer(newPriority);
}
}