Turns out my "snag" was I was using an inquiry-only user for my login credentials. Need more coffee :)
Here we go:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.uc4.api.Task;
import com.uc4.api.TaskFilter;
import com.uc4.communication.Connection;
import com.uc4.communication.TimeoutException;
import com.uc4.communication.requests.ActivityList;
import com.uc4.communication.requests.ModifyTaskState;
public class RunUpdater {
public static void main (String[] args) throws IOException {
UpdateStatus update = new UpdateStatus(Integer.parseInt(args[0]),args[1]);
update.checkStatus(args[2], Integer.parseInt(args[3]), Integer.parseInt(args[4]));
update.modifyStatus();
update.conn.close();
}
}
class TaskInfo {
String taskName;
int runID;
int statusCode;
int newStatusCode;
public TaskInfo(String taskName, int runID, int statusCode, int newStatusCode) {
this.taskName = taskName;
this.runID = runID;
this.statusCode = statusCode;
this.newStatusCode = newStatusCode;
}
public String getName() {
return taskName;
}
public int getRunID() {
return runID;
}
public int getStatusCode() {
return statusCode;
}
public int getNewStatusCode() {
return newStatusCode;
}
}
class UpdateStatus {
private List<TaskInfo> tasksFound = new ArrayList<TaskInfo>();
public Connection conn;
public UpdateStatus(int client, String level) throws IOException {
conn = new ConnectionManager().authenticate(client, level);
}
public void checkStatus(String object, int statusCode, int newStatusCode) throws TimeoutException, IOException {
TaskFilter activeFilter = new TaskFilter();
activeFilter.selectAllObjects();
activeFilter.setObjectName("*" + object + "*");
ActivityList getActiveTasks = new ActivityList(activeFilter);
conn.sendRequestAndWait(getActiveTasks);
if (getActiveTasks.getMessageBox() == null) {
Iterator<Task> activeTasks = getActiveTasks.iterator();
while (activeTasks.hasNext()) {
Task task = activeTasks.next();
if (task.getStatusCode() == statusCode) {
tasksFound.add(new TaskInfo(task.getName(),task.getRunID(),statusCode,newStatusCode));
}
}
}
}
public void modifyStatus() throws TimeoutException, IOException {
for (TaskInfo taskInfo : tasksFound) {
ModifyTaskState modStatus = new ModifyTaskState(taskInfo.getRunID(), taskInfo.getStatusCode(), taskInfo.getNewStatusCode());
conn.sendRequestAndWait(modStatus);
if (modStatus.getMessageBox() == null) {
System.out.println("Object " + taskInfo.getName() + " (RunID " + taskInfo.getRunID() + ") was successfully modified from status " + taskInfo.getStatusCode() + " to status " + taskInfo.getNewStatusCode());
}
}
}
}
Example output specifying Client, Level, Search Particle (I used "TEST.JU.RAN"), Status Code, and New Status Code:
https://us.v-cdn.net/5019921/uploads/editor/ya/tql70v42s679.png" width="724">
Obviously you are welcome to add to it, etc. I went a little beyond basic to allow for some flexibility, you can remove the entire TaskInfo class if you wanted to, just makes it easier to track and use elsewhere. Let me know if you have any questions.