package jp.eosoro.redmine;
import java.util.ArrayList;
import java.util.List;
import com.taskadapter.redmineapi.Include;
import com.taskadapter.redmineapi.RedmineException;
import com.taskadapter.redmineapi.RedmineManager;
import com.taskadapter.redmineapi.RedmineManagerFactory;
import com.taskadapter.redmineapi.bean.CustomField;
import com.taskadapter.redmineapi.bean.Issue;
import com.taskadapter.redmineapi.bean.ProjectFactory;
import com.taskadapter.redmineapi.bean.TrackerFactory;
import com.taskadapter.redmineapi.bean.User;
import com.taskadapter.redmineapi.bean.UserFactory;
/**
* Redmine登録クラス
* */
public class RedmineRegist {
RedmineManager mgr;
private Issue issue;
private List<CustomField> customeField;
/**
* コンストラクタ
* @param String RedmineサイトURI
* @param String APIキー
*/
public RedmineRegist(String uri, String apiAccessKey) {
mgr = RedmineManagerFactory.createWithApiKey(uri, apiAccessKey);
issue = new Issue();
customeField = new ArrayList<CustomField>();
}
/**
* チケット登録
* @param subject タイトル
* @param description 詳細
* @param assigned_toId 担当者を指定する時はユーザーid 指定しない場合は0
* @param assigned_toGroupId グループを指定するときはグループid 指定しない場合は0
* @param parentid 親チケットを指定する時はチケットid 指定しない場合は0
* @param projectId
* @param trackerId
* @param priorityId
* @param statusId
* @return int 登録チケットID 登録失敗時はゼロ
* */
public int regist(String subject, String description, int assigned_toId, int assigned_toGroupId, int parentid, int projectId, int trackerId, int priorityId, int statusId){
getIssue().setSubject(subject);
getIssue().setDescription(description);
//プロジェクト指定
getIssue().setProject(ProjectFactory.create(projectId));
//トラッカー指定
getIssue().setTracker(TrackerFactory.create(trackerId));
//ステータス/優先度指定
getIssue().setPriorityId(priorityId);
getIssue().setStatusId(statusId);
// カスタムフィールド設定
getIssue().addCustomFields(getCustomeField());
try {
//担当者指定
if(assigned_toId > 0){
getIssue().setAssignee(getMgr().getUserManager().getUserById(assigned_toId));
}
//グループ
else if(assigned_toGroupId > 0){
User u = UserFactory.create(assigned_toGroupId);
getIssue().setAssignee(u);
}
//親チケット
if(parentid > 0){
getIssue().setParentId(parentid);
}
return getMgr().getIssueManager().createIssue(getIssue()).getId();
} catch (RedmineException e) {
return 0;
}
}
/**
* 関連するチケットをセットする
* @param int チケットID
* @throws RedmineException
* */
public void setRelation(int id, int relateid) throws RedmineException{
getMgr().getIssueManager().createRelation(id, relateid, "relates");
}
/**
* ジャーナル追加
* @param id チケットID
* @param Notes コメント
* @throws RedmineException
* */
public int addJournal(int id, String Notes) throws RedmineException{
Issue issue = getMgr().getIssueManager().getIssueById(id, Include.journals);
issue.setNotes(Notes);
getMgr().getIssueManager().update(issue);
return issue.getId();
}
public RedmineManager getMgr() {
return mgr;
}
private Issue getIssue() {
return issue;
}
public List<CustomField> getCustomeField() {
return customeField;
}
public void setCustomeField(List<CustomField> customeField) {
this.customeField = customeField;
}
}