/*******************************************************************************
* Copyright (c) 2014, Paul Weingardt
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Paul Weingardt - initial API and implementation
*******************************************************************************/
package de.weingardt.mylyn.gitlab.core;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.Set;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
public enum GitlabAttribute {
BODY("Description", TaskAttribute.DESCRIPTION,
TaskAttribute.TYPE_LONG_RICH_TEXT),
TITLE("Summary", TaskAttribute.SUMMARY,
TaskAttribute.TYPE_SHORT_RICH_TEXT),
STATUS("Status", TaskAttribute.STATUS,
TaskAttribute.TYPE_SHORT_TEXT, GitlabFlag.ATTRIBUTE, GitlabFlag.READ_ONLY),
LABELS("Labels", "de.weingardt.gitlab.issue.labels",
TaskAttribute.TYPE_LONG_TEXT, GitlabFlag.ATTRIBUTE),
UPDATED("Updated", TaskAttribute.DATE_MODIFICATION,
TaskAttribute.TYPE_DATETIME, GitlabFlag.READ_ONLY, GitlabFlag.ATTRIBUTE),
CREATED("Created", TaskAttribute.DATE_CREATION,
TaskAttribute.TYPE_DATETIME, GitlabFlag.READ_ONLY, GitlabFlag.ATTRIBUTE),
COMPLETED("Completed", TaskAttribute.DATE_COMPLETION,
TaskAttribute.TYPE_DATETIME, GitlabFlag.READ_ONLY),
AUTHOR("Author", TaskAttribute.USER_REPORTER,
TaskAttribute.TYPE_PERSON, GitlabFlag.READ_ONLY, GitlabFlag.ATTRIBUTE),
PROJECT("Project", TaskAttribute.PRODUCT,
TaskAttribute.TYPE_SHORT_TEXT, GitlabFlag.READ_ONLY, GitlabFlag.ATTRIBUTE),
ASSIGNEE("Assignee", TaskAttribute.USER_ASSIGNED,
TaskAttribute.TYPE_PERSON, GitlabFlag.ATTRIBUTE),
MILESTONE("Milestone", "de.weingardt.gitlab.issue.milestone",
TaskAttribute.TYPE_SINGLE_SELECT, GitlabFlag.ATTRIBUTE),
IID("IID", TaskAttribute.TASK_KEY, TaskAttribute.TYPE_INTEGER,
GitlabFlag.READ_ONLY),
PRIORITY("Priority", TaskAttribute.PRIORITY,
TaskAttribute.TYPE_SHORT_TEXT, GitlabFlag.READ_ONLY),
TYPE("Type", TaskAttribute.TASK_KIND,
TaskAttribute.TYPE_SHORT_TEXT, GitlabFlag.READ_ONLY);
public static final String TypeBug = "bug";
public static final String TypeFeature = "feature";
public static final String TypeStory = "story";
private Set<GitlabFlag> flags;
private final String prettyName;
private final String taskKey;
private final String type;
public String getKind() {
if(type.equals(TaskAttribute.TYPE_PERSON)) {
return TaskAttribute.KIND_PEOPLE;
} else if (flags.contains(GitlabFlag.ATTRIBUTE)) {
return TaskAttribute.KIND_DEFAULT;
}
return null;
}
public boolean isReadOnly() {
return flags.contains(GitlabFlag.READ_ONLY);
}
GitlabAttribute(String prettyName, String taskKey, String type, GitlabFlag... flags) {
this.taskKey = taskKey;
this.prettyName = prettyName;
this.type = type;
if (flags == null || flags.length == 0) {
this.setFlags(EnumSet.noneOf(GitlabFlag.class));
} else {
this.setFlags(EnumSet.copyOf(Arrays.asList(flags)));
}
}
GitlabAttribute(String prettyName, String taskKey, String type) {
this(prettyName, taskKey, type, new GitlabFlag[] {});
}
public Set<GitlabFlag> getFlags() {
return flags;
}
public void setFlags(Set<GitlabFlag> flags) {
this.flags = flags;
}
public String getPrettyName() {
return prettyName;
}
public String getTaskKey() {
return taskKey;
}
public String getType() {
return type;
}
public String toString() {
return this.prettyName;
}
public static GitlabAttribute get(String key) {
for(GitlabAttribute attr : GitlabAttribute.values()) {
if(attr.getTaskKey().equals(key)) {
return attr;
}
}
return null;
}
}