package hudson.plugins.synergy.impl;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
* Get information about tasks.
*
* @author jrbe
*
* TODO : work with several task at once.
*/
public class TaskInfoCommand extends Command {
private DateFormat synergyDateFormat65 = new SimpleDateFormat("EE MMM dd hh:mm:ss yyyy", Locale.ENGLISH);
// 3/17/10 7:55 AM
private DateFormat synergyDateFormat71 = new SimpleDateFormat("MM/dd/yy hh:mm a", Locale.ENGLISH);
private List<String> tasks;
private List<TaskCompleted> informations;
public TaskInfoCommand(List<String> tasks) {
this.tasks = tasks;
}
@Override
public String[] buildCommand(String ccmExe) {
String[] commands = new String[]{ccmExe, "task", "-show", "info", tasks.get(0)};
return commands;
}
@Override
public void parseResult(String result) {
informations = new ArrayList<TaskCompleted>();
TaskCompleted task = null;
Pattern re_taskid = Pattern.compile("^\\s*Task.+?([0-9]+)[^\\d]*$");
Pattern re_resolver = Pattern.compile("^\\s*Resolver:\\s*(.*)\\s*$");
Pattern re_completiondate = Pattern.compile("^\\s*Actual Completion Date:\\s*(.*)\\s*$");
try {
BufferedReader reader = new BufferedReader(new StringReader(result));
String line = reader.readLine();
while (line!=null) {
// TODO: check the format of the taskid-line in releases < 7.1
Matcher m_taskid = re_taskid.matcher(line);
Matcher m_resolver = re_resolver.matcher(line);
Matcher m_completiondate = re_completiondate.matcher(line);
if (m_taskid.matches()){
task = new TaskCompleted();
informations.add(task);
task.setId(m_taskid.group(1));
}else if (line.indexOf("Synopsis:")!=-1) {
// Check whether we have already stored task synopsis
// (in case task description also contains 'Synopsis:')
if (task.getSynopsis() == null){
// TODO multiline synopsis
task.setSynopsis(line.substring(line.indexOf(':')+1).trim());
}
}else if (m_resolver.matches()){
task.setResolver(m_resolver.group(1));
}else if (line.indexOf("Status set to 'completed'")!=-1){
try {
String dateAsString = line.substring(0, line.lastIndexOf(':'));
Date date = synergyDateFormat65.parse(dateAsString);
task.setDateCompleted(date);
} catch (ParseException e) {
// ignore.
// TODO: log parsing problems to hudson logfile
System.out.println("ParseException: '"+line+"'");
}
}else if (m_completiondate.matches()){
String dateAsString = m_completiondate.group(1);
try {
Date date = synergyDateFormat71.parse(dateAsString);
task.setDateCompleted(date);
} catch (ParseException e) {
// ignore.
// TODO: log parsing problems to hudson logfile
System.out.println("ParseException: '"+dateAsString+"'");
}
}
line = reader.readLine();
}
} catch (IOException e) {
// TODO: log parsing problems to hudson logfile
// Will not happen on a StringReader.
}
}
public List<TaskCompleted> getInformations() {
return informations;
}
}