mylyn-gitea/io.gitea.mylyn.core/src/io/gitea/model/GiteaPriorityLevel.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;
}
}