diff --git a/io.gitea.mylyn.core/src/io/gitea/model/IssueAction.java b/io.gitea.mylyn.core/src/io/gitea/model/IssueAction.java index 795c008..be9e803 100644 --- a/io.gitea.mylyn.core/src/io/gitea/model/IssueAction.java +++ b/io.gitea.mylyn.core/src/io/gitea/model/IssueAction.java @@ -7,12 +7,42 @@ package io.gitea.model; public enum IssueAction { CLOSE("close"), LEAVE("leave"), - REOPEN("open"); + REOPEN("reopen"); IssueAction(String label) { this.label = label; } public final String label; + public static IssueAction getEnum(String other) { + if ((other == null)||(other.isBlank()) || (other.isEmpty())) + return LEAVE; + for (IssueAction a : IssueAction.values()) + if (a.equals(other)) return a; + throw new IllegalArgumentException(other + " is not a IssueAction value"); + } + /**Compute targeted state when apply action as transition to a state. + * + * [from State: OPENED] --> Action: CLOSE --> [to State:CLOSED] + * [from State: CLOSED] --> Action: REOPEN --> [to State: OPENDED] + * All other cases have no impact on State. + * + * @param fromState + * @return Targeted state as IssueState. + */ + public IssueState toState(IssueState fromState) { + if ((this == CLOSE) && (fromState == IssueState.STATE_OPENED)) return IssueState.STATE_CLOSED; + if ((this == REOPEN) && (fromState == IssueState.STATE_CLOSED)) return IssueState.STATE_OPENED; + return fromState; + } + static public IssueState toState(IssueState from, IssueAction onAction) { + return onAction.toState(from); + } + public boolean equals(IssueAction arg0) { + return this.label.equals(arg0.toString()); + } + public boolean equals(String arg0) { + return this.label.equals(arg0); + } } diff --git a/io.gitea.mylyn.core/src/io/gitea/model/IssueState.java b/io.gitea.mylyn.core/src/io/gitea/model/IssueState.java index 0a54675..888e7e4 100644 --- a/io.gitea.mylyn.core/src/io/gitea/model/IssueState.java +++ b/io.gitea.mylyn.core/src/io/gitea/model/IssueState.java @@ -18,6 +18,12 @@ public enum IssueState { this.value = value; } + public static IssueState getEnum(String value) { + for(IssueState s: IssueState.values()) { + if (s.equals(value)) return s; + } + throw new IllegalArgumentException(value + " is not a IssueState value"); + } public String toString() { return this.value; } diff --git a/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttribute.java b/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttribute.java index 11d5228..7e0898a 100644 --- a/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttribute.java +++ b/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttribute.java @@ -28,6 +28,8 @@ public enum GiteaAttribute { COMPLETED("Completed", TaskAttribute.DATE_COMPLETION, TaskAttribute.TYPE_DATETIME, GiteaFlag.READ_ONLY), + DUE_DATE("Due Date", TaskAttribute.DATE_DUE, TaskAttribute.TYPE_DATE, GiteaFlag.ATTRIBUTE), + AUTHOR("Author", TaskAttribute.USER_REPORTER, TaskAttribute.TYPE_PERSON, GiteaFlag.READ_ONLY, GiteaFlag.ATTRIBUTE), PROJECT("Project", TaskAttribute.PRODUCT, TaskAttribute.TYPE_SHORT_TEXT, GiteaFlag.READ_ONLY, GiteaFlag.ATTRIBUTE), diff --git a/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttributeMapper.java b/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttributeMapper.java index f0a3630..98160a5 100644 --- a/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttributeMapper.java +++ b/io.gitea.mylyn.core/src/io/gitea/mylyn/core/GiteaAttributeMapper.java @@ -17,6 +17,7 @@ import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper; import io.gitea.model.GiteaDateTimeUtils; +import io.gitea.model.Label; import io.gitea.model.Milestone; import io.gitea.model.User; @@ -89,6 +90,21 @@ public class GiteaAttributeMapper extends TaskAttributeMapper { return target; } + public List