Author: tchemit Date: 2012-07-14 19:07:01 +0200 (Sat, 14 Jul 2012) New Revision: 297 Url: http://nuiton.org/repositories/revision/jredmine/297 Log: refs #2034: Updates to helper-m-p 1.5 (use better rest api) + improve model design Added: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRequestFactory.java Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/ModelHelper.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/RedmineModelEnum.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/DefaultRequestBuilder.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/IssueScopeRequestBuilder.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/ProjectScopeRequestBuilder.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/VersionScopeRequestBuilder.java Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java 2012-07-14 17:07:01 UTC (rev 297) @@ -33,13 +33,13 @@ import org.nuiton.jredmine.model.IssueCategory; import org.nuiton.jredmine.model.IssuePriority; import org.nuiton.jredmine.model.IssueStatus; +import org.nuiton.jredmine.model.ModelHelper; import org.nuiton.jredmine.model.News; import org.nuiton.jredmine.model.Project; import org.nuiton.jredmine.model.TimeEntry; import org.nuiton.jredmine.model.Tracker; import org.nuiton.jredmine.model.User; import org.nuiton.jredmine.model.Version; -import org.nuiton.jredmine.rest.RedmineRestClient; /** * Default implementation of {@link RedmineAnonymousService}. @@ -71,26 +71,26 @@ @Override public IssueStatus[] getIssueStatuses() throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_ISSUE_STATUS_LIST, + return getDatas(ModelHelper.GET_ALL_ISSUE_STATUS_REQUEST_NAME, IssueStatus.class ); } @Override public IssuePriority[] getIssuePriorities() throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_ISSUE_PRIORITY_LIST, + return getDatas(ModelHelper.GET_ALL_ISSUE_PRIORITY_REQUEST_NAME, IssuePriority.class ); } @Override public Project[] getProjects() throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_PROJECT_LIST, Project.class); + return getDatas(ModelHelper.GET_ALL_PROJECT_REQUEST_NAME, Project.class); } @Override public IssueCategory[] getIssueCategories(String projectName) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_ISSUE_CATEGORY_LIST, + return getDatas(ModelHelper.GET_ALL_ISSUE_CATEGORY_REQUEST_NAME, IssueCategory.class, projectName ); @@ -98,7 +98,7 @@ @Override public Project getProject(String projectName) throws RedmineServiceException { - return getData(RedmineRestClient.GET_PROJECT, + return getData(ModelHelper.GET_PROJECT_REQUEST_NAME, Project.class, projectName ); @@ -106,7 +106,7 @@ @Override public Tracker[] getTrackers(String projectName) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_TRACKER_LIST, + return getDatas(ModelHelper.GET_ALL_TRACKER_REQUEST_NAME, Tracker.class, projectName ); @@ -114,7 +114,7 @@ @Override public News[] getNews(String projectName) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_NEWS_LIST, + return getDatas(ModelHelper.GET_ALL_NEWS_REQUEST_NAME, News.class, projectName ); @@ -122,7 +122,7 @@ @Override public User[] getProjectMembers(String projectName) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_USER_LIST, + return getDatas(ModelHelper.GET_ALL_USER_REQUEST_NAME, User.class, projectName ); @@ -130,7 +130,7 @@ @Override public Version[] getVersions(String projectName) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_VERSION_LIST, + return getDatas(ModelHelper.GET_ALL_VERSION_REQUEST_NAME, Version.class, projectName ); @@ -139,7 +139,7 @@ @Override public Version getVersion(String projectName, String versionName) throws RedmineServiceException { - return getData(RedmineRestClient.GET_VERSION, + return getData(ModelHelper.GET_VERSION_REQUEST_NAME, Version.class, projectName, versionName @@ -149,7 +149,7 @@ @Override public Attachment[] getAttachments(String projectName, String versionName) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_ATTACHMENTS_LIST, + return getDatas(ModelHelper.GET_ALL_ATTACHMENTS_REQUEST_NAME, Attachment.class, projectName, versionName @@ -159,7 +159,7 @@ @Override public Issue[] getIssues(String projectName, String versionName) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_ISSUE_LIST, + return getDatas(ModelHelper.GET_ALL_ISSUES_REQUEST_NAME, Issue.class, projectName, versionName @@ -169,7 +169,7 @@ @Override public TimeEntry[] getIssueTimeEntries(String projectName, String issueId) throws RedmineServiceException { - return getDatas(RedmineRestClient.GET_ISSUE_TIME_ENTRY_LIST, + return getDatas(ModelHelper.GET_ALL_ISSUE_TIME_ENTRY_REQUEST_NAME, TimeEntry.class, projectName, issueId @@ -178,7 +178,7 @@ @Override public Issue[] getIssues(String projectName) throws RedmineServiceException { - Issue[] result = getDatas(RedmineRestClient.GET_PROJECT_ISSUES, + Issue[] result = getDatas(ModelHelper.GET_ALL_PROJECT_ISSUES_REQUEST_NAME, Issue.class, projectName ); @@ -187,7 +187,7 @@ @Override public Issue[] getOpenedIssues(String projectName) throws RedmineServiceException { - Issue[] result = getDatas(RedmineRestClient.GET_PROJECT_OPENED_ISSUES, + Issue[] result = getDatas(ModelHelper.GET_ALL_PROJECT_OPENED_ISSUES_REQUEST_NAME, Issue.class, projectName ); @@ -196,7 +196,7 @@ @Override public Issue[] getClosedIssues(String projectName) throws RedmineServiceException { - Issue[] result = getDatas(RedmineRestClient.GET_PROJECT_CLOSED_ISSUES, + Issue[] result = getDatas(ModelHelper.GET_ALL_PROJECT_CLOSED_ISSUES_REQUEST_NAME, Issue.class, projectName ); Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java 2012-07-14 17:07:01 UTC (rev 297) @@ -29,11 +29,11 @@ import org.nuiton.io.rest.RestClient; import org.nuiton.io.rest.RestClientConfiguration; import org.nuiton.jredmine.model.Attachment; +import org.nuiton.jredmine.model.ModelHelper; import org.nuiton.jredmine.model.News; import org.nuiton.jredmine.model.Project; import org.nuiton.jredmine.model.TimeEntry; import org.nuiton.jredmine.model.Version; -import org.nuiton.jredmine.rest.RedmineRestClient; /** * Default {@link RedmineService} implementation based on a {@link RestClient} @@ -67,7 +67,8 @@ @Override public Project[] getUserProjects() throws RedmineServiceException { checkLoggued(); - Project[] result = getDatas(RedmineRestClient.GET_USER_PROJECTS, Project.class); + Project[] result = getDatas(ModelHelper.GET_USER_PROJECTS_REQUEST_NAME, + Project.class); return result; } @@ -76,7 +77,7 @@ Version version) throws RedmineServiceException { // send data and obtain created version - Version result = sendData(RedmineRestClient.ADD_VERSION, + Version result = sendData(ModelHelper.ADD_VERSION_REQUEST_NAME, Version.class, projectName, version @@ -89,7 +90,7 @@ Version version) throws RedmineServiceException { // send data and obtain updated version - Version result = sendData(RedmineRestClient.UPDATE_VERSION, + Version result = sendData(ModelHelper.UPDATE_VERSION_REQUEST_NAME, Version.class, projectName, version @@ -103,7 +104,7 @@ Version newVersion) throws RedmineServiceException { // send data and obtain updated or created new version - Version result = sendData(RedmineRestClient.NEXT_VERSION, + Version result = sendData(ModelHelper.NEXT_VERSION_REQUEST_NAME, Version.class, projectName, newVersion, @@ -118,7 +119,7 @@ Attachment attachement) throws RedmineServiceException { // send data and obtain created attachment - Attachment result = sendData(RedmineRestClient.ADD_ATTACHMENT, + Attachment result = sendData(ModelHelper.ADD_ATTACHMENT_REQUEST_NAME, Attachment.class, projectName, versionName, @@ -131,7 +132,7 @@ public News addNews(String projectName, News news) throws RedmineServiceException { // send data and obtain created news - News result = sendData(RedmineRestClient.ADD_NEWS, + News result = sendData(ModelHelper.ADD_NEWS_REQUEST_NAME, News.class, projectName, news @@ -144,7 +145,7 @@ String issueId, TimeEntry entry) throws RedmineServiceException { // send data and obtain updated version - TimeEntry result = sendData(RedmineRestClient.ADD_ISSUE_TIME_ENTRY, + TimeEntry result = sendData(ModelHelper.ADD_ISSUE_TIME_ENTRY_REQUEST_NAME, TimeEntry.class, projectName, issueId, Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/ModelHelper.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/ModelHelper.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/ModelHelper.java 2012-07-14 17:07:01 UTC (rev 297) @@ -38,6 +38,64 @@ */ public class ModelHelper { + public static final String GET_ALL_ISSUE_STATUS_REQUEST_NAME = "IssueStatus/all"; + + public static final String GET_ALL_ISSUE_PRIORITY_REQUEST_NAME = "IssuePriority/all"; + + public static final String GET_ALL_ISSUE_CATEGORY_REQUEST_NAME = "IssueCategory/all"; + + public static final String GET_USER_PROJECTS_REQUEST_NAME = "User/Project/all"; + + public static final String GET_ALL_PROJECT_REQUEST_NAME = "Project/all"; + + public static final String GET_PROJECT_REQUEST_NAME = "Project/detail"; + + public static final String GET_ALL_VERSION_REQUEST_NAME = "Project/Version/all"; + + public static final String GET_ALL_TRACKER_REQUEST_NAME = "Project/Tracker/all"; + + public static final String GET_ALL_PROJECT_ISSUES_REQUEST_NAME = "Project/Issue/all"; + + public static final String GET_ALL_PROJECT_OPENED_ISSUES_REQUEST_NAME = "Project/Issue/opened"; + + public static final String GET_ALL_PROJECT_CLOSED_ISSUES_REQUEST_NAME = "Project/Issue/closed"; + + public static final String GET_ALL_USER_REQUEST_NAME = "Project/User/all"; + + public static final String GET_ALL_NEWS_REQUEST_NAME = "Project/News/all"; + + public static final String GET_VERSION_REQUEST_NAME = "Project/Version/detail"; + + public static final String GET_ALL_ISSUES_REQUEST_NAME = "Project/Version/Issue/all"; + + public static final String GET_ALL_ATTACHMENTS_REQUEST_NAME = "Project/Version/Attachment/all"; + + public static final String ADD_ATTACHMENT_REQUEST_NAME = "Project/Version/Attachment/add"; + + public static final String ADD_VERSION_REQUEST_NAME = "Project/Version/add"; + + public static final String UPDATE_VERSION_REQUEST_NAME = "Project/Version/update"; + + public static final String NEXT_VERSION_REQUEST_NAME = "Project/Version/next"; + + public static final String ADD_NEWS_REQUEST_NAME = "Project/News/add"; + + public static final String GET_ALL_ISSUE_TIME_ENTRY_REQUEST_NAME = "Project/Issue/TimeEntry/all"; + + public static final String ADD_ISSUE_TIME_ENTRY_REQUEST_NAME = "Project/Issue/TimeEntry/add"; + + public static final String LOGIN_REQUEST_NAME = "Login"; + + public static final String LOGOUT_REQUEST_NAME = "Logout"; + + public static final String PING_REQUEST_NAME = "Ping"; + + public static final String VERSION_SCOPE = "version"; + + public static final String PROJECT_SCOPE = "project"; + + public static final String ISSUE_SCOPE = "issue"; + public static <T extends IdAble> T byId(int id, T... datas) { for (T data : datas) { if (data.getId() == id) { Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/RedmineModelEnum.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/RedmineModelEnum.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/model/RedmineModelEnum.java 2012-07-14 17:07:01 UTC (rev 297) @@ -24,8 +24,6 @@ */ package org.nuiton.jredmine.model; -import org.nuiton.jredmine.rest.RedmineRestClient; - /** * Un énumération pour connaitre l'ensemble des classes du modèle. * @@ -34,17 +32,17 @@ */ public enum RedmineModelEnum { - issueStatus(IssueStatus.class, RedmineModelScope.none, RedmineRestClient.GET_ISSUE_STATUS_LIST), - issuePriority(IssuePriority.class, RedmineModelScope.none, RedmineRestClient.GET_ISSUE_PRIORITY_LIST), - project(Project.class, RedmineModelScope.none, RedmineRestClient.GET_PROJECT_LIST), - issueCategory(IssueCategory.class, RedmineModelScope.project, RedmineRestClient.GET_ISSUE_CATEGORY_LIST), - tracker(Tracker.class, RedmineModelScope.project, RedmineRestClient.GET_TRACKER_LIST), - user(User.class, RedmineModelScope.project, RedmineRestClient.GET_USER_LIST), - news(News.class, RedmineModelScope.project, RedmineRestClient.GET_NEWS_LIST), - version(Version.class, RedmineModelScope.project, RedmineRestClient.GET_VERSION_LIST), - issue(Issue.class, RedmineModelScope.version, RedmineRestClient.GET_ISSUE_LIST), - timeEntry(TimeEntry.class, RedmineModelScope.issue, RedmineRestClient.GET_ISSUE_TIME_ENTRY_LIST), - attachment(Attachment.class, RedmineModelScope.version, RedmineRestClient.GET_ATTACHMENTS_LIST); + issueStatus(IssueStatus.class, RedmineModelScope.none, ModelHelper.GET_ALL_ISSUE_STATUS_REQUEST_NAME), + issuePriority(IssuePriority.class, RedmineModelScope.none, ModelHelper.GET_ALL_ISSUE_PRIORITY_REQUEST_NAME), + project(Project.class, RedmineModelScope.none, ModelHelper.GET_ALL_PROJECT_REQUEST_NAME), + issueCategory(IssueCategory.class, RedmineModelScope.project, ModelHelper.GET_ALL_ISSUE_CATEGORY_REQUEST_NAME), + tracker(Tracker.class, RedmineModelScope.project, ModelHelper.GET_ALL_TRACKER_REQUEST_NAME), + user(User.class, RedmineModelScope.project, ModelHelper.GET_ALL_USER_REQUEST_NAME), + news(News.class, RedmineModelScope.project, ModelHelper.GET_ALL_NEWS_REQUEST_NAME), + version(Version.class, RedmineModelScope.project, ModelHelper.GET_ALL_VERSION_REQUEST_NAME), + issue(Issue.class, RedmineModelScope.version, ModelHelper.GET_ALL_ISSUES_REQUEST_NAME), + timeEntry(TimeEntry.class, RedmineModelScope.issue, ModelHelper.GET_ALL_ISSUE_TIME_ENTRY_REQUEST_NAME), + attachment(Attachment.class, RedmineModelScope.version, ModelHelper.GET_ALL_ATTACHMENTS_REQUEST_NAME); private final Class<?> modelType; Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/DefaultRequestBuilder.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/DefaultRequestBuilder.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/DefaultRequestBuilder.java 2012-07-14 17:07:01 UTC (rev 297) @@ -24,6 +24,9 @@ */ package org.nuiton.jredmine.rest; +import com.google.common.base.Joiner; +import org.apache.commons.lang3.ArrayUtils; +import org.nuiton.io.rest.RestMethod; import org.nuiton.io.rest.RestRequest; import org.nuiton.io.rest.RestRequestBuilder; @@ -38,17 +41,20 @@ */ public class DefaultRequestBuilder implements RestRequestBuilder { - public static final String CONTEXT_PATH = "jredmine"; + private static final long serialVersionUID = 1L; - public static final String[] EMPTY_STRING_ARRAY = new String[0]; - protected String name; - protected String action; + protected String[] action; - public DefaultRequestBuilder(String name, String action) { + protected final RestMethod method; + + public DefaultRequestBuilder(String name, + RestMethod method, + String... action) { this.name = name; this.action = action; + this.method = method; } @Override @@ -62,12 +68,12 @@ */ public String[] getParameters(Object... args) { // by default, no parameter - return EMPTY_STRING_ARRAY; + return ArrayUtils.EMPTY_STRING_ARRAY; } public String[] getPath(Object... args) { // by default, path is contextPath / action - return new String[]{CONTEXT_PATH, action}; + return action; } public Map<String, File> getAttachments(Object... args) { @@ -94,6 +100,25 @@ public Map<String, File> getAttachments() { return DefaultRequestBuilder.this.getAttachments(args); } + + @Override + public boolean containsAttachments() { + Map<String, File> attachments = getAttachments(); + return attachments != null && !attachments.isEmpty(); + } + + @Override + public String toPath(String redmineUrl) { + String result = redmineUrl + "/" + + Joiner.on('/').join(getPath()); + return result; + } + + @Override + public RestMethod getMethod() { + return method; + } + }; } } Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/IssueScopeRequestBuilder.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/IssueScopeRequestBuilder.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/IssueScopeRequestBuilder.java 2012-07-14 17:07:01 UTC (rev 297) @@ -24,6 +24,8 @@ */ package org.nuiton.jredmine.rest; +import org.nuiton.io.rest.RestMethod; + /** * Builder of requests which are in a project and issue context. * <p/> @@ -34,10 +36,18 @@ */ public class IssueScopeRequestBuilder extends ProjectScopeRequestBuilder { - public IssueScopeRequestBuilder(String name, String action) { - super(name, action); + private static final long serialVersionUID = 1L; + + public IssueScopeRequestBuilder(String name, + RestMethod method, + String... action) { + super(name, method, action); } + public IssueScopeRequestBuilder(String name, String... action) { + this(name, null, action); + } + @Override public String[] getParameters(Object... args) { Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/ProjectScopeRequestBuilder.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/ProjectScopeRequestBuilder.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/ProjectScopeRequestBuilder.java 2012-07-14 17:07:01 UTC (rev 297) @@ -24,6 +24,8 @@ */ package org.nuiton.jredmine.rest; +import org.nuiton.io.rest.RestMethod; + /** * Builder of requests which are in a project context. * @@ -32,10 +34,18 @@ */ public class ProjectScopeRequestBuilder extends DefaultRequestBuilder { - public ProjectScopeRequestBuilder(String name, String action) { - super(name, action); + private static final long serialVersionUID = 1L; + + public ProjectScopeRequestBuilder(String name, String... action) { + this(name, null, action); } + public ProjectScopeRequestBuilder(String name, + RestMethod method, + String... action) { + super(name, method, action); + } + @Override public String[] getPath(Object... args) { @@ -43,10 +53,9 @@ String projectName = (String) args[0]; - return new String[]{ - CONTEXT_PATH, - action, - projectName - }; + String[] result = new String[action.length + 1]; + System.arraycopy(action, 0, result, 0, action.length); + result[action.length] = projectName; + return result; } } Added: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRequestFactory.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRequestFactory.java (rev 0) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRequestFactory.java 2012-07-14 17:07:01 UTC (rev 297) @@ -0,0 +1,202 @@ +package org.nuiton.jredmine.rest; + +import com.google.common.base.Strings; +import org.nuiton.io.rest.AbstractRequestFactory; +import org.nuiton.io.rest.RestMethod; +import org.nuiton.jredmine.model.Attachment; +import org.nuiton.jredmine.model.ModelHelper; +import org.nuiton.jredmine.model.News; +import org.nuiton.jredmine.model.TimeEntry; +import org.nuiton.jredmine.model.Version; +import org.nuiton.jredmine.model.VersionStatusEnum; + +import java.io.File; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * TODO + * + * @author tchemit <chemit@codelutin.com> + * @since 1.4 + */ +public class RedmineRequestFactory extends AbstractRequestFactory { + + @Override + public void addDefaultRequests() { + + // misc requests + + addRequestBuilder(new DefaultRequestBuilder(ModelHelper.PING_REQUEST_NAME, RestMethod.GET, "jredmine", "ping")); + addRequestBuilder(new DefaultRequestBuilder(ModelHelper.LOGOUT_REQUEST_NAME, RestMethod.GET, "jredmine", "logout")); + addRequestBuilder(new DefaultRequestBuilder(ModelHelper.LOGIN_REQUEST_NAME, RestMethod.POST, "jredmine", "login") { + + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + String login = (String) args[0]; + String password = (String) args[1]; + return new String[]{"username", login, "password", password}; + } + }); + + // data with no scope requests + + addRequestBuilder(new DefaultRequestBuilder(ModelHelper.GET_ALL_PROJECT_REQUEST_NAME, RestMethod.GET, "jredmine", "get_projects.xml")); + addRequestBuilder(new DefaultRequestBuilder(ModelHelper.GET_USER_PROJECTS_REQUEST_NAME, RestMethod.GET, "jredmine", "get_user_projects.xml")); + addRequestBuilder(new DefaultRequestBuilder(ModelHelper.GET_ALL_ISSUE_STATUS_REQUEST_NAME, RestMethod.GET, "jredmine", "get_issue_statuses.xml")); + addRequestBuilder(new DefaultRequestBuilder(ModelHelper.GET_ALL_ISSUE_PRIORITY_REQUEST_NAME, RestMethod.GET, "jredmine", "get_issue_priorities.xml")); + + // data with project scope requests + + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_PROJECT_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_PROJECT_ISSUES_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project_issues.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_PROJECT_OPENED_ISSUES_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project_opened_issues.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_PROJECT_CLOSED_ISSUES_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project_closed_issues.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_VERSION_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project_versions.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_ISSUE_CATEGORY_REQUEST_NAME, RestMethod.GET, "jredmine", "get_issue_categories.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_TRACKER_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project_trackers.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_USER_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project_users.xml")); + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.GET_ALL_NEWS_REQUEST_NAME, RestMethod.GET, "jredmine", "get_project_news.xml")); + + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.ADD_VERSION_REQUEST_NAME, RestMethod.POST, "jredmine", "add_version.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + Version version = (Version) args[1]; + String date = getVersionEffectiveDate(version); + String status = getVersionStatus(version); + return new String[]{ + "version[name]", version.getName(), + "version[description]", version.getDescription(), + "version[effective_date]", date, + "version[status]", status + }; + } + }); + + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.UPDATE_VERSION_REQUEST_NAME, RestMethod.POST, "jredmine", "update_version.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + Version version = (Version) args[1]; + String date = getVersionEffectiveDate(version); + String status = getVersionStatus(version); + return new String[]{ + "version[name]", version.getName(), + "version[description]", version.getDescription(), + "version[effective_date]", date, + "version[status]", status + }; + } + }); + + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.NEXT_VERSION_REQUEST_NAME, RestMethod.POST, "jredmine", "next_version.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + + + Version version = (Version) args[1]; + String date = getVersionEffectiveDate(version); + String status = getVersionStatus(version); + String oldVersionName = (String) args[2]; + return new String[]{ + "oldVersionName", oldVersionName, + "version[name]", version.getName(), + "version[description]", version.getDescription(), + "version[effective_date]", date, + "version[status]", status + }; + } + }); + + addRequestBuilder(new ProjectScopeRequestBuilder(ModelHelper.ADD_NEWS_REQUEST_NAME, RestMethod.POST, "jredmine", "add_news.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + News news = (News) args[1]; + return new String[]{ + "news[title]", news.getTitle(), + "news[summary]", news.getSummary(), + "news[description]", news.getDescription() + }; + } + }); + + // version scope requests + + addRequestBuilder(new VersionScopeRequestBuilder(ModelHelper.GET_VERSION_REQUEST_NAME, RestMethod.GET, "jredmine", "get_version.xml")); + addRequestBuilder(new VersionScopeRequestBuilder(ModelHelper.GET_ALL_ISSUES_REQUEST_NAME, RestMethod.GET, "jredmine", "get_version_issues.xml")); + addRequestBuilder(new VersionScopeRequestBuilder(ModelHelper.GET_ALL_ATTACHMENTS_REQUEST_NAME, RestMethod.GET, "jredmine", "get_version_attachments.xml")); + addRequestBuilder(new VersionScopeRequestBuilder(ModelHelper.ADD_ATTACHMENT_REQUEST_NAME, RestMethod.POST, "jredmine", "add_version_attachment.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + String versionId = (String) args[1]; + Attachment attachment = (Attachment) args[2]; + return new String[]{ + "version_name", versionId, + "attachment[description]", attachment.getDescription() + }; + } + + @Override + public Map<String, File> getAttachments(Object... args) { + Map<String, File> upload = new HashMap<String, File>(); + Attachment attachment = (Attachment) args[2]; + upload.put("attachment[file]", attachment.getToUpload()); + return upload; + } + }); + + // issue scope requests + + addRequestBuilder(new IssueScopeRequestBuilder(ModelHelper.GET_ALL_ISSUE_TIME_ENTRY_REQUEST_NAME, RestMethod.GET, "jredmine", "get_issue_times.xml")); + + addRequestBuilder(new IssueScopeRequestBuilder(ModelHelper.ADD_ISSUE_TIME_ENTRY_REQUEST_NAME, RestMethod.POST, "jredmine", "add_issue_time.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + String issueId = (String) args[1]; + TimeEntry timeEntry = (TimeEntry) args[2]; + Date d = timeEntry.getSpentOn(); + if (d == null) { + d = new Date(); + } + String date = DATE_FORMAT.format(d); + return new String[]{ + "issue_id", issueId, + //"timeEntry[issue_id]", issueId, + "time_entry[activity_id]", timeEntry.getActivityId() + "", + "time_entry[spent_on]", date, + "time_entry[hours]", timeEntry.getHours() + "", + "time_entry[comments]", timeEntry.getComments() == null ? "" : timeEntry.getComments() + }; + } + }); +} + + protected static String getVersionStatus(Version version) { + String status = version.getStatus(); + if (Strings.isNullOrEmpty(status)) { + + // use default open status + status = VersionStatusEnum.open.name(); + } + return status; + } + + protected static String getVersionEffectiveDate(Version version) { + return version.getEffectiveDate() == null ? "" : + DATE_FORMAT.format(version.getEffectiveDate()); + } +} Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java 2012-07-14 17:07:01 UTC (rev 297) @@ -29,31 +29,14 @@ import org.apache.commons.httpclient.StatusLine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.codehaus.plexus.util.StringUtils; +import org.nuiton.io.rest.RequestFactory; import org.nuiton.io.rest.RestClient; import org.nuiton.io.rest.RestClientConfiguration; import org.nuiton.io.rest.RestRequest; import org.nuiton.io.rest.RestSession; -import org.nuiton.jredmine.model.Attachment; -import org.nuiton.jredmine.model.Issue; -import org.nuiton.jredmine.model.IssueCategory; -import org.nuiton.jredmine.model.IssuePriority; -import org.nuiton.jredmine.model.IssueStatus; -import org.nuiton.jredmine.model.News; -import org.nuiton.jredmine.model.Project; -import org.nuiton.jredmine.model.TimeEntry; -import org.nuiton.jredmine.model.Tracker; -import org.nuiton.jredmine.model.User; -import org.nuiton.jredmine.model.Version; -import org.nuiton.jredmine.model.VersionStatusEnum; +import org.nuiton.jredmine.model.ModelHelper; -import java.io.File; import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * Implementation of a {@link RestClient} to access a Redmine server via the @@ -67,219 +50,22 @@ private static final Log log = LogFactory.getLog(RedmineRestClient.class); - public static final String GET_ISSUE_LIST = Issue.class.getName() + "list"; + private final RequestFactory requestFactory; - public static final String GET_ISSUE_STATUS_LIST = IssueStatus.class.getName() + "list"; - - public static final String GET_ISSUE_PRIORITY_LIST = IssuePriority.class.getName() + "list"; - - public static final String GET_ISSUE_CATEGORY_LIST = IssueCategory.class.getName() + "list"; - - public static final String GET_ISSUE_TIME_ENTRY_LIST = TimeEntry.class.getName() + "list"; - - public static final String GET_PROJECT_LIST = Project.class.getName() + "list"; - - public static final String GET_PROJECT_ISSUES = Project.class.getName() + "issues"; - - public static final String GET_PROJECT_OPENED_ISSUES = Project.class.getName() + "opened-issues"; - - public static final String GET_PROJECT_CLOSED_ISSUES = Project.class.getName() + "closed-issues"; - - public static final String GET_USER_PROJECTS = Project.class.getName() + "forUser"; - - public static final String GET_PROJECT = Project.class.getName() + "detail"; - - public static final String GET_VERSION_LIST = Version.class.getName() + "list"; - - public static final String GET_TRACKER_LIST = Tracker.class.getName() + "list"; - - public static final String GET_ATTACHMENTS_LIST = Attachment.class.getName() + "list"; - - public static final String GET_USER_LIST = User.class.getName() + "list"; - - public static final String GET_NEWS_LIST = News.class.getName() + "list"; - - public static final String GET_VERSION = Version.class.getName() + "detail"; - - public static final String ADD_VERSION = Version.class.getName() + "add"; - - public static final String UPDATE_VERSION = Version.class.getName() + "update"; - - public static final String NEXT_VERSION = Version.class.getName() + "next"; - - public static final String ADD_NEWS = News.class.getName() + "add"; - - public static final String ADD_ATTACHMENT = Attachment.class.getName() + "add"; - - public static final String ADD_ISSUE_TIME_ENTRY = TimeEntry.class.getName() + "add"; - - public static final String LOGIN = "login"; - - public static final String LOGOUT = "logout"; - - public static final String PING = "ping"; - - public final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); - public RedmineRestClient() { + requestFactory = new RedmineRequestFactory(); + requestFactory.addDefaultRequests(); } public RedmineRestClient(RestClientConfiguration configuration) { super(configuration); + requestFactory = new RedmineRequestFactory(); + requestFactory.addDefaultRequests(); } @Override - protected void addDefaultRequests() { - - addRequestBuilder(new DefaultRequestBuilder(PING, "ping")); - addRequestBuilder(new DefaultRequestBuilder(LOGOUT, "logout")); - addRequestBuilder(new DefaultRequestBuilder(LOGIN, "login") { - - @Override - public String[] getParameters(Object... args) { - String login = (String) args[0]; - String password = (String) args[1]; - return new String[]{"username", login, "password", password}; - } - }); - - // with no scope - - addRequestBuilder(new DefaultRequestBuilder(GET_PROJECT_LIST, "get_projects.xml")); - addRequestBuilder(new DefaultRequestBuilder(GET_USER_PROJECTS, "get_user_projects.xml")); - addRequestBuilder(new DefaultRequestBuilder(GET_ISSUE_STATUS_LIST, "get_issue_statuses.xml")); - addRequestBuilder(new DefaultRequestBuilder(GET_ISSUE_PRIORITY_LIST, "get_issue_priorities.xml")); - - // with project scope - - addRequestBuilder(new ProjectScopeRequestBuilder(GET_PROJECT, "get_project.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_PROJECT_ISSUES, "get_project_issues.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_PROJECT_OPENED_ISSUES, "get_project_opened_issues.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_PROJECT_CLOSED_ISSUES, "get_project_closed_issues.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_VERSION_LIST, "get_project_versions.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_ISSUE_CATEGORY_LIST, "get_issue_categories.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_TRACKER_LIST, "get_project_trackers.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_USER_LIST, "get_project_users.xml")); - addRequestBuilder(new ProjectScopeRequestBuilder(GET_NEWS_LIST, "get_project_news.xml")); - - addRequestBuilder(new ProjectScopeRequestBuilder(ADD_VERSION, "add_version.xml") { - - @Override - public String[] getParameters(Object... args) { - Version version = (Version) args[1]; - String date = getVersionEffectiveDate(version); - String status = getVersionStatus(version); - return new String[]{ - "version[name]", version.getName(), - "version[description]", version.getDescription(), - "version[effective_date]", date, - "version[status]", status - }; - } - }); - - addRequestBuilder(new ProjectScopeRequestBuilder(UPDATE_VERSION, "update_version.xml") { - - @Override - public String[] getParameters(Object... args) { - Version version = (Version) args[1]; - String date = getVersionEffectiveDate(version); - String status = getVersionStatus(version); - return new String[]{ - "version[name]", version.getName(), - "version[description]", version.getDescription(), - "version[effective_date]", date, - "version[status]", status - }; - } - }); - - addRequestBuilder(new ProjectScopeRequestBuilder(NEXT_VERSION, "next_version.xml") { - - @Override - public String[] getParameters(Object... args) { - - - Version version = (Version) args[1]; - String date = getVersionEffectiveDate(version); - String status = getVersionStatus(version); - String oldVersionName = (String) args[2]; - return new String[]{ - "oldVersionName", oldVersionName, - "version[name]", version.getName(), - "version[description]", version.getDescription(), - "version[effective_date]", date, - "version[status]", status - }; - } - }); - - addRequestBuilder(new ProjectScopeRequestBuilder(ADD_NEWS, "add_news.xml") { - - @Override - public String[] getParameters(Object... args) { - News news = (News) args[1]; - return new String[]{ - "news[title]", news.getTitle(), - "news[summary]", news.getSummary(), - "news[description]", news.getDescription() - }; - } - }); - - // with version scope - - addRequestBuilder(new VersionScopeRequestBuilder(GET_VERSION, "get_version.xml")); - addRequestBuilder(new VersionScopeRequestBuilder(GET_ISSUE_LIST, "get_version_issues.xml")); - addRequestBuilder(new VersionScopeRequestBuilder(GET_ATTACHMENTS_LIST, "get_version_attachments.xml")); - - - addRequestBuilder(new VersionScopeRequestBuilder(ADD_ATTACHMENT, "add_version_attachment.xml") { - - @Override - public String[] getParameters(Object... args) { - String versionId = (String) args[1]; - Attachment attachment = (Attachment) args[2]; - return new String[]{ - "version_name", versionId, - "attachment[description]", attachment.getDescription() - }; - } - - @Override - public Map<String, File> getAttachments(Object... args) { - Map<String, File> upload = new HashMap<String, File>(); - Attachment attachment = (Attachment) args[2]; - upload.put("attachment[file]", attachment.getToUpload()); - return upload; - } - }); - - // with issue scope - - addRequestBuilder(new IssueScopeRequestBuilder(GET_ISSUE_TIME_ENTRY_LIST, "get_issue_times.xml")); - - addRequestBuilder(new IssueScopeRequestBuilder(ADD_ISSUE_TIME_ENTRY, "add_issue_time.xml") { - - @Override - public String[] getParameters(Object... args) { - String issueId = (String) args[1]; - TimeEntry timeEntry = (TimeEntry) args[2]; - Date d = timeEntry.getSpentOn(); - if (d == null) { - d = new Date(); - } - String date = DATE_FORMAT.format(d); - return new String[]{ - "issue_id", issueId, - //"timeEntry[issue_id]", issueId, - "time_entry[activity_id]", timeEntry.getActivityId() + "", - "time_entry[spent_on]", date, - "time_entry[hours]", timeEntry.getHours() + "", - "time_entry[comments]", timeEntry.getComments() == null ? "" : timeEntry.getComments() - }; - } - }); + public RequestFactory getRequestFactory() { + return requestFactory; } @Override @@ -299,7 +85,7 @@ return; } try { - RestRequest request = getRequest(LOGOUT); + RestRequest request = getRequest(ModelHelper.LOGOUT_REQUEST_NAME); session.setOpen(false); session.doRequest(request); } finally { @@ -311,7 +97,7 @@ try { - RestRequest request = getRequest(PING); + RestRequest request = getRequest(ModelHelper.PING_REQUEST_NAME); HttpMethod gm = session.doRequest(request); StatusLine sl = gm.getStatusLine(); @@ -345,7 +131,7 @@ protected void login(RestSession session) throws IOException { - RestRequest request = getRequest(LOGIN, + RestRequest request = getRequest(ModelHelper.LOGIN_REQUEST_NAME, configuration.getRestUsername(), configuration.getRestPassword()); @@ -368,18 +154,4 @@ } - protected String getVersionStatus(Version version) { - String status = version.getStatus(); - if (StringUtils.isEmpty(status)) { - - // use default open status - status = VersionStatusEnum.open.name(); - } - return status; - } - - protected String getVersionEffectiveDate(Version version) { - return version.getEffectiveDate() == null ? "" : - DATE_FORMAT.format(version.getEffectiveDate()); - } } Modified: branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/VersionScopeRequestBuilder.java =================================================================== --- branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/VersionScopeRequestBuilder.java 2012-07-14 17:06:09 UTC (rev 296) +++ branches/jredmine-1.x/jredmine-client/src/main/java/org/nuiton/jredmine/rest/VersionScopeRequestBuilder.java 2012-07-14 17:07:01 UTC (rev 297) @@ -24,6 +24,8 @@ */ package org.nuiton.jredmine.rest; +import org.nuiton.io.rest.RestMethod; + /** * Builder of requests which are in a project and version context. * @@ -32,10 +34,16 @@ */ public class VersionScopeRequestBuilder extends ProjectScopeRequestBuilder { - public VersionScopeRequestBuilder(String name, String action) { - super(name, action); + private static final long serialVersionUID = 1L; + + public VersionScopeRequestBuilder(String name, RestMethod method, String... action) { + super(name, method, action); } + public VersionScopeRequestBuilder(String name, String... action) { + this(name, null, action); + } + @Override public String[] getParameters(Object... args) {
participants (1)
-
tchemit@users.nuiton.org