import flexagon.fd.model.integration.its.api.WorkItem;
import flexagon.fd.model.integration.its.api.WorkItemAttachment;
import flexagon.fd.model.integration.its.api.WorkItemComment;
import flexagon.fd.model.integration.its.api.WorkItemDetails;
import flexagon.fd.model.integration.its.api.WorkItemStatus;
import flexagon.fd.model.integration.its.api.WorkItemUpdate;
import flexagon.fd.model.integration.util.ApiException;
class RedmineIssueTrackingSystem extends
IssueTrackingSystem
{
void checkConnection()
{
String methodName = "checkConnection()";
try
{
fdrestutils.testConnection(REDMINE_URL, "/projects/1/versions.json", REDMINE_USER_NMAE, REDMINE_PASSWORD)
}
catch (Exception e)
{
log.logInfo(methodName, " Failed in Test connection" + e.getMessage() + " " + e)
throw new ApiException("Connection failed. " + e.getMessage());
}
}
String getWorkItemStatus(WorkItem ticket)
{
String methodName = "getWorkItemStatus()";
String message = " ticket# ${ticket.toString()}"
log.logInfo(methodName, message);
String resourcePath = REDMINE_TICKET_URL_PATTERN.replaceAll("\\{REDMINE_ISSUE\\}", ticket.getNumber())
javax.json.JsonObject jsonObj = fdrestutils.getRequest(REDMINE_URL, resourcePath, REDMINE_USER_NMAE, REDMINE_PASSWORD);
if(jsonObj != null)
{
javax.json.JsonObject issue = jsonObj.getJsonObject("issue")
if(issue!=null)
{
javax.json.JsonObject status = issue.getJsonObject("status")
if(status !=null)
{
return status.getString("name")
}
}
}
return null;
}
String getWorkItemURL(WorkItem ticket)
{
String methodName = "getWorkItemURL()";
String message = "ticket# ${ticket.toString()}"
log.logInfo(methodName, message);
String resourcePath = REDMINE_TICKET_URL_PATTERN.replaceAll("\\{REDMINE_ISSUE\\}", ticket.getNumber())
message = "Redmine ticket URL is # ${REDMINE_URL}, resourcePath=${resourcePath}"
log.logInfo(methodName, message)
return REDMINE_URL + resourcePath;
}
void populateWorkItem(WorkItem ticket)
{
String methodName = "populateWorkItem()";
String message = "Populate ticket# ${ticket.toString()}"
log.logInfo(methodName, message)
String resourcePath = REDMINE_TICKET_URL_PATTERN.replaceAll("\\{REDMINE_ISSUE\\}", ticket.getNumber())
javax.json.JsonObject jsonObj = fdrestutils.getRequest(REDMINE_URL, resourcePath, REDMINE_USER_NMAE, REDMINE_PASSWORD);
if(jsonObj != null)
{
javax.json.JsonObject issue = jsonObj.getJsonObject("issue")
if(issue!=null)
{
ticket.setDescription(issue.getString("description"))
javax.json.JsonObject tracker = issue.getJsonObject("tracker")
if(tracker !=null)
{
ticket.setType(tracker.getString("name"))
}
}
}
}
void addCommentToWorkItem(WorkItem ticket, String pComment)
{
String methodName = "addCommentToWorkItem()";
try
{
String message = " Adding comment to ${ticket.toString()} , comment=${pComment}"
log.logInfo(methodName, message)
def builder = new groovy.json.JsonBuilder()
def root = builder.issue {
notes "${pComment}"
}
String payload = builder.toString();
String resourcePath = REDMINE_TICKET_REST_PATTERN.replaceAll("\\{REDMINE_ISSUE\\}", ticket.getNumber())
fdrestutils.putRequest(REDMINE_URL, REDMINE_USER_NMAE, REDMINE_PASSWORD, resourcePath, payload);
}
catch (Exception e)
{
log.logInfo( methodName, " Failed while adding comment to the issue - " + e.getMessage() + " " + e)
throw new ApiException("Connection failed. " + e.getMessage());
}
}
void changeWorkItemStatusTo(WorkItem ticket, Serializable pStatus)
{
String methodName = "changeWorkItemStatusTo()";
String message = " Adding comment to ${ticket.toString()} , status=${pStatus}"
log.logInfo(methodName, message)
def builder = new groovy.json.JsonBuilder()
def root = builder.issue {
notes "Status updated to ${pStatus}"
status_id "${pStatus}"
}
String payload = builder.toString();
String resourcePath = REDMINE_TICKET_REST_PATTERN.replaceAll("\\{REDMINE_ISSUE\\}", ticket.getNumber())
fdrestutils.putRequest(REDMINE_URL, REDMINE_USER_NMAE, REDMINE_PASSWORD, resourcePath, payload);
}
def parseWorkItemNumberFromChangeLogs(List<String> pChangeLogMessages, List<String> pTicketPatternList)
{
String methodName = "parseWorkItemNumberFromChangeLogs()";
Set<String> ticketNumberList = new HashSet<String>();
String message = " Input ChangeLogMessages=${pChangeLogMessages} , TicketPatternList=${pTicketPatternList}"
log.logInfo(methodName, message)
Collection<String> parsedTicketNumbers = flexagon.fd.model.integration.its.util.ChangeLogParser.getParser().parse(pChangeLogMessages, pTicketPatternList);
message = "parsedTicketNumbers=${parsedTicketNumbers}"
log.logInfo(methodName, message)
if(parsedTicketNumbers != null && !parsedTicketNumbers.isEmpty() && pTicketPatternList != null && !pTicketPatternList.isEmpty())
{
parsedTicketNumbers.each{ parsedTicket ->
pTicketPatternList.each{ pattern ->
if(parsedTicket.startsWith(pattern))
{
String ticketNumber = parsedTicket.substring(pattern.length(),parsedTicket.length())
ticketNumberList.add(ticketNumber)
}
}
}
}
return ticketNumberList;
}
public Collection<WorkItemComment> getWorkItemComments(WorkItem pTicket, int i, int i2)
throws ApiException
{
return Collections.emptySet();
}
public Collection<WorkItemUpdate> getWorkItemHistory(WorkItem pTicket, int i, int i2)
throws ApiException
{
// TODO Implement this method
return Collections.emptySet();
}
public Collection<WorkItemAttachment> getWorkItemAttachments(WorkItem pTicket)
throws ApiException
{
// TODO Implement this method
return Collections.emptySet();
}
public WorkItemDetails getWorkItem(WorkItem pTicket)
throws ApiException
{
// TODO Implement this method
return null;
}
public InputStream getWorkItemAttachmentContent(WorkItem pTicket, Serializable pSerializable)
throws ApiException
{
// TODO Implement this method
return null;
}
public List<WorkItemDetails> getWorkItems(List<WorkItem> pList)
throws ApiException
{
// TODO Implement this method
return Collections.emptyList();
}
public List<WorkItemStatus> getAvailableWorkItemStatuses(WorkItem pWorkItem)
throws ApiException
{
// TODO Implement this method
return Collections.emptyList();
}
} |