This repository was archived by the owner on Dec 10, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 42
Expand file tree
/
Copy pathGitLabSCMIcons.java
More file actions
124 lines (100 loc) · 4.35 KB
/
GitLabSCMIcons.java
File metadata and controls
124 lines (100 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package argelbargel.jenkins.plugins.gitlab_branch_source;
import argelbargel.jenkins.plugins.gitlab_branch_source.api.GitLabAPIException;
import argelbargel.jenkins.plugins.gitlab_branch_source.api.GitLabGroup;
import argelbargel.jenkins.plugins.gitlab_branch_source.api.GitLabProject;
import hudson.init.Initializer;
import jenkins.model.Jenkins;
import org.apache.commons.jelly.JellyContext;
import org.gitlab.api.models.GitlabNamespace;
import org.gitlab.api.models.GitlabProject;
import org.jenkins.ui.icon.Icon;
import org.kohsuke.stapler.Stapler;
import java.util.NoSuchElementException;
import static argelbargel.jenkins.plugins.gitlab_branch_source.GitLabHelper.gitLabAPI;
import static org.jenkins.ui.icon.Icon.ICON_LARGE_STYLE;
import static org.jenkins.ui.icon.Icon.ICON_MEDIUM_STYLE;
import static org.jenkins.ui.icon.Icon.ICON_SMALL_STYLE;
import static org.jenkins.ui.icon.Icon.ICON_XLARGE_STYLE;
import static org.jenkins.ui.icon.IconSet.icons;
public final class GitLabSCMIcons {
public enum Size {
SMALL("icon-sm", "16x16", ICON_SMALL_STYLE),
MEDIUM("icon-md", "24x24", ICON_MEDIUM_STYLE),
LARGE("icon-lg", "32x32", ICON_LARGE_STYLE),
XLARGE("icon-xlg", "48x48", ICON_XLARGE_STYLE);
public static Size byDimensions(String dimensions) {
for (Size s : values()) {
if (s.dimensions.equals(dimensions)) {
return s;
}
}
throw new NoSuchElementException("unknown dimensions: " + dimensions);
}
private final String className;
private final String dimensions;
private final String style;
Size(String className, String dimensions, String style) {
this.className = className;
this.dimensions = dimensions;
this.style = style;
}
}
public static final String ICON_PROJECT = "icon-project";
public static final String ICON_BRANCH = "icon-branch";
public static final String ICON_COMMIT = "icon-commit";
public static final String ICON_MERGE_REQUEST = "icon-merge-request";
public static final String ICON_TAG = "icon-tag";
static final String ICON_GITLAB = "icon-gitlab";
private static final String ICON_PATH = "plugin/gitlab-branch-source/images/";
@Initializer
public static void initialize() {
addIcon(ICON_GITLAB);
addIcon(ICON_PROJECT);
addIcon(ICON_BRANCH);
addIcon(ICON_COMMIT);
addIcon(ICON_MERGE_REQUEST);
addIcon(ICON_TAG);
}
public static String iconFileName(String name, Size size) {
Icon icon = icons.getIconByClassSpec(classSpec(name, size));
if (icon == null) {
return null;
}
JellyContext ctx = new JellyContext();
ctx.setVariable("resURL", Stapler.getCurrentRequest().getContextPath() + Jenkins.RESOURCE_PATH);
return icon.getQualifiedUrl(ctx);
}
public static String avatarFileName(int projectId, String connectionName, Size size) {
// TODO: size!
try {
GitLabProject project = gitLabAPI(connectionName).getProject(projectId);
String avatarUrl = project.getAvatarUrl();
if (avatarUrl == null) {
avatarUrl = groupAvatarUrl(project, connectionName);
}
return avatarUrl != null ? avatarUrl : iconFileName(ICON_GITLAB, size);
} catch (GitLabAPIException e) {
return iconFileName(ICON_GITLAB, size);
}
}
static String iconFilePathPattern(String name) {
return ICON_PATH + ":size/" + name + ".png";
}
private static String groupAvatarUrl(GitlabProject project, String connectionName) throws GitLabAPIException {
GitlabNamespace namespace = project.getNamespace();
// if (namespace.getOwnerId() != null) {
// return null;
// }
GitLabGroup group = gitLabAPI(connectionName).getGroup(namespace.getId());
return group.getAvatarUrl();
}
private static String classSpec(String name, Size size) {
return name + " " + size.className;
}
private static void addIcon(String name) {
for (Size size : Size.values()) {
icons.addIcon(new Icon(classSpec(name, size), ICON_PATH + size.dimensions + "/" + name + ".png", size.style));
}
}
private GitLabSCMIcons() { /* no instances allowed */}
}