blob: 366d56bad1cab45b891218484f73a29a47b527e6 [file] [log] [blame]
package com.intellij.tasks.jira.jql.codeinsight;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.Convertor;
import com.intellij.util.containers.MultiMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* @author Mikhail Golubev
*/
public enum JqlStandardField {
AFFECTED_VERSION("affectedVersion", JqlFieldType.VERSION),
ASSIGNEE("assignee", JqlFieldType.USER),
CATEGORY("category", JqlFieldType.CATEGORY),
COMMENT("comment", JqlFieldType.TEXT),
COMPONENT("component", JqlFieldType.COMPONENT),
CREATED("created", JqlFieldType.DATE),
CREATED_DATE("createdDate", JqlFieldType.DATE),
DESCRIPTION("description", JqlFieldType.TEXT),
DUE("due", JqlFieldType.DATE),
DUE_DATE("dueDate", JqlFieldType.DATE),
ENVIRONMENT("environment", JqlFieldType.TEXT),
FILTER("filter", JqlFieldType.FILTER),
REQUEST("request", JqlFieldType.FILTER),
SAVED_FILTER("savedFilter", JqlFieldType.FILTER),
SEARCH_REQUEST("searchRequest", JqlFieldType.FILTER),
FIX_VERSION("fixVersion", JqlFieldType.VERSION),
ISSUE_KEY("issueKey", JqlFieldType.ISSUE),
ID("id", JqlFieldType.ISSUE),
ISSUE("issue", JqlFieldType.ISSUE),
KEY("key", JqlFieldType.ISSUE),
LAST_VIEWED("lastViewed", JqlFieldType.DATE),
LEVEL("level", JqlFieldType.SECURITY_LEVEL),
ORIGINAL_ESTIMATE("originalEstimate", JqlFieldType.DURATION),
TIME_ORIGINAL_ESTIMATE("timeOriginalEstimate", JqlFieldType.DURATION),
PARENT("parent", JqlFieldType.ISSUE),
PRIORITY("priority", JqlFieldType.PRIORITY),
PROJECT("project", JqlFieldType.PROJECT),
REMAINING_ESTIMATE("remainingEstimate", JqlFieldType.DURATION),
TIME_ESTIMATE("timeEstimate", JqlFieldType.DURATION),
REPORTER("reporter", JqlFieldType.USER),
RESOLUTION("resolution", JqlFieldType.RESOLUTION),
RESOLVED("resolved", JqlFieldType.DATE),
RESOLUTION_DATE("resolutionDate", JqlFieldType.DATE),
STATUS("status", JqlFieldType.STATUS),
SUMMARY("summary", JqlFieldType.TEXT),
// So called "master-field". Search in summary, description, environment,
// comments and custom fields
TEXT("text", JqlFieldType.TEXT),
TYPE("type", JqlFieldType.ISSUE_TYPE),
ISSUE_TYPE("issueType", JqlFieldType.ISSUE_TYPE),
TIME_SPENT("timeSpent", JqlFieldType.DURATION),
UPDATED("updated", JqlFieldType.DATE),
UPDATED_DATE("updatedDate", JqlFieldType.DATE),
VOTER("voter", JqlFieldType.USER),
VOTES("votes", JqlFieldType.NUMBER),
WATCHER("watcher", JqlFieldType.USER),
WATCHERS("watchers", JqlFieldType.NUMBER),
WORK_RATION("workRatio", JqlFieldType.NUMBER);
private final String myName;
private final JqlFieldType myType;
JqlStandardField(String name, JqlFieldType type) {
myName = name;
myType = type;
}
public String getName() {
return myName;
}
public JqlFieldType getType() {
return myType;
}
private static final JqlStandardField[] VALUES = values();
private static final Map<String, JqlStandardField> NAME_LOOKUP = ContainerUtil.newMapFromValues(
ContainerUtil.iterate(VALUES),
new Convertor<JqlStandardField, String>() {
@Override
public String convert(JqlStandardField field) {
return field.getName();
}
}
);
public static JqlStandardField byName(String name) {
return NAME_LOOKUP.get(name);
}
private static final MultiMap<JqlFieldType, String> TYPE_LOOKUP = new MultiMap<JqlFieldType, String>();
static {
for (JqlStandardField field : VALUES) {
TYPE_LOOKUP.putValue(field.getType(), field.getName());
}
}
public static Collection<String> allOfType(JqlFieldType type) {
return type == JqlFieldType.UNKNOWN? ALL_FIELD_NAMES : new ArrayList<String>(TYPE_LOOKUP.get(type));
}
public static final List<String> ALL_FIELD_NAMES = ContainerUtil.map2List(VALUES, new Function<JqlStandardField, String>() {
@Override
public String fun(JqlStandardField field) {
return field.myName;
}
});
public static JqlFieldType typeOf(String name) {
for (Map.Entry<JqlFieldType, Collection<String>> entry : TYPE_LOOKUP.entrySet()) {
if (entry.getValue().contains(name)) {
return entry.getKey();
}
}
return JqlFieldType.UNKNOWN;
}
}