- /*
- * 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:
- * <pre> <nice currentPriority="current.value" ></pre><p>
- * Set <code>currentPriority</code> to the current priority
- * <pre> <nice newPriority="10" ></pre><p>
- * Raise the priority of the build process (But not forked programs)
- * <pre> <nice currentPriority="old" newPriority="3" ></pre><p>
- * Lower the priority of the build process (But not forked programs), and save
- * the old value to the property <code>old</code>.
- *
- * @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);
- }
-
- }