package it.altecspace.mylyn.redmine.client; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; 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.Attachment; import com.taskadapter.redmineapi.bean.Issue; import com.taskadapter.redmineapi.bean.Membership; import com.taskadapter.redmineapi.bean.Project; import com.taskadapter.redmineapi.bean.User; import com.taskadapter.redmineapi.bean.Version; public class RedmineClient implements IRedmineClient { final RedmineManager manager; final CachedRepositoryConfiguration configuration; public RedmineClient(String url, String username, String password, CachedRepositoryConfiguration configuration) { this.configuration = configuration; manager = RedmineManagerFactory.createWithUserAuthNoSslCheck(url, username, password); manager.setObjectsPerPage(Integer.MAX_VALUE); } @Override public CachedRepositoryConfiguration getCachedRepositoryConfiguration() { return configuration; } public void validateConnection() throws RedmineException { //This line will trigger an exception if //server is not reachable or if authentication //cannot be performed due to wrong credentials manager.getUserManager().getCurrentUser(); } @Override public void shutdown() { manager.shutdown(); } public Iterable<Project> getProjects() throws RedmineException { return configuration.getProjects(); } @Override public Iterable<Issue> getIssuesByProject(Project project) throws RedmineException { List<Issue> issues = manager.getIssueManager().getIssues(project.getIdentifier(),null,Include.journals); // List<Issue> issuesWithJournals = new ArrayList<Issue>(); // // for(Issue i : issues) // { // Issue issueWithJournals = manager.getIssueManager().getIssueById(i.getId(), Include.journals); // issuesWithJournals.add(issueWithJournals); // } // // return issuesWithJournals; return issues; } @Override public Issue getIssueById(Integer id) throws RedmineException { return manager.getIssueManager().getIssueById(id,Include.journals,Include.attachments); } public void loadConfiguration() throws RedmineException { User u = manager.getUserManager().getCurrentUser(); configuration.setCurrentUser(u); if(configuration.isEmpty()) { for(Membership m : u.getMemberships()) { Project p = manager.getProjectManager().getProjectById(m.getProject().getId()); configuration.addProject(p); List<Version> versions = manager.getProjectManager().getVersions(m.getProject().getId()); configuration.addVersionsToProject(p, versions); } configuration.addStatuses(manager.getIssueManager().getStatuses()); configuration.addTrackers(manager.getIssueManager().getTrackers()); configuration.addUsers(manager.getUserManager().getUsers()); } } @Override public User getCurrentUser() { return this.configuration.getCurrentUser(); } @Override public Attachment getAttachmentById(Integer id) throws RedmineException { return manager.getAttachmentManager().getAttachmentById(id); } @Override public InputStream downloadAttachment(Attachment attachment) throws RedmineException { byte[] content = manager.getAttachmentManager().downloadAttachmentContent(attachment); return new ByteArrayInputStream(content); } @Override public void uploadAttachment(Issue issue,String fileName, String contentType,String description, InputStream content) throws RedmineException, IOException { manager.getAttachmentManager().addAttachmentToIssue(issue.getId(),fileName,description,contentType,content); } }