109 lines
3.2 KiB
Java
109 lines
3.2 KiB
Java
// Copyright (c) 2021, Fr.Terrot. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package io.gitea.model;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
|
|
|
|
/**
|
|
* Extract Mylyn PriorityLevel from Issue label
|
|
*
|
|
*/
|
|
public enum GiteaPriorityLevel {
|
|
HIGHEST(PriorityLevel.P1), HIGH(PriorityLevel.P2), MIDDLE(PriorityLevel.P3), LOW(PriorityLevel.P4),
|
|
LOWEST(PriorityLevel.P5);
|
|
|
|
private PriorityLevel level;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @private
|
|
*/
|
|
private GiteaPriorityLevel(PriorityLevel p) {
|
|
this.level = p;
|
|
}
|
|
|
|
/**
|
|
* Get GiteaPriority level.
|
|
*
|
|
* @return PriorityLevel
|
|
*/
|
|
public PriorityLevel getLevel() {
|
|
return level;
|
|
}
|
|
|
|
/**
|
|
* GiteaPriority level as String
|
|
*
|
|
* {@code giteaPriority.ToString() <=> giteaPriority.GetLevel().toString()}
|
|
*
|
|
* To Get GiteaPriority as String use standard Enum name() API.
|
|
*
|
|
* @{code HIGHEST.toString() -> "P1" HIGHEST.name() -> "HIGHEST"}
|
|
*/
|
|
public String toString() {
|
|
return level.toString();
|
|
}
|
|
|
|
/**
|
|
* Get GiteaPriority from PriorityLevel
|
|
*
|
|
* @param level
|
|
* @return
|
|
* @throws IllegalArgumentException
|
|
*/
|
|
public static GiteaPriorityLevel getPriority(PriorityLevel level) throws IllegalArgumentException {
|
|
return Arrays.stream(values()).filter(v -> v.level.equals(level)).findFirst()
|
|
.orElseThrow(() -> new IllegalArgumentException("unknown priority level:" + level.toString()));
|
|
}
|
|
|
|
// P1 .. P5
|
|
private static Pattern valuePattern = Pattern.compile("(?::?priority:)?(p[1-5])", Pattern.CASE_INSENSITIVE);
|
|
// Xtra very_normal is supported, surprising but not a big issue, kept it regexp
|
|
// 'simple'
|
|
private static Pattern alternativePattern = Pattern.compile("(?::?priority:)?(?:very_?)?(high|low|normal)",
|
|
Pattern.CASE_INSENSITIVE);
|
|
private static Pattern priorityPattern = Pattern.compile("(?::?priority:)?(highest|high|middle|low|lowest)",
|
|
Pattern.CASE_INSENSITIVE);
|
|
|
|
/**
|
|
* Return the Priority from labels value.
|
|
*
|
|
* @param labels as string
|
|
*
|
|
* @return found priority or MIDDLE if no priority found.
|
|
*/
|
|
public static GiteaPriorityLevel getPriority(String labels) {
|
|
|
|
Matcher m = priorityPattern.matcher(labels);
|
|
if (m.find()) {
|
|
return GiteaPriorityLevel.valueOf(m.group(1).toUpperCase());
|
|
}
|
|
m = valuePattern.matcher(labels);
|
|
if (m.find()) {
|
|
return GiteaPriorityLevel.getPriority(PriorityLevel.valueOf(m.group(1).toUpperCase()));
|
|
}
|
|
|
|
m = alternativePattern.matcher(labels);
|
|
if (m.find()) {
|
|
switch (m.group(1).toLowerCase()) {
|
|
case "high":
|
|
return GiteaPriorityLevel.HIGHEST;
|
|
case "normal":
|
|
return GiteaPriorityLevel.MIDDLE;
|
|
case "low":
|
|
return GiteaPriorityLevel.LOWEST;
|
|
default:
|
|
}
|
|
}
|
|
return GiteaPriorityLevel.MIDDLE;
|
|
}
|
|
|
|
}
|