forked from jenkinsci/jenkins
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPaneStatusProperties.java
More file actions
94 lines (76 loc) · 2.77 KB
/
PaneStatusProperties.java
File metadata and controls
94 lines (76 loc) · 2.77 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
package hudson.model;
import static java.lang.String.format;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.model.userproperty.UserPropertyCategory;
import hudson.util.PersistedList;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.Stapler;
public class PaneStatusProperties extends UserProperty implements Saveable {
private final PersistedList<String> collapsed = new PersistedList<>(this);
private static final PaneStatusProperties FALLBACK = new PaneStatusPropertiesSessionFallback();
public boolean isCollapsed(String paneId) {
return collapsed.contains(paneId);
}
/**
* @param paneId panel name
* @return the actual state of panel
*/
public boolean toggleCollapsed(String paneId) {
if (collapsed.contains(paneId)) {
collapsed.remove(paneId);
return false;
} else {
collapsed.add(paneId);
return true;
}
}
@Override
public void save() throws IOException {
user.save();
}
@Extension @Symbol("paneStatus")
public static class DescriptorImpl extends UserPropertyDescriptor {
@Override
public UserProperty newInstance(User user) {
return new PaneStatusProperties();
}
@Override
public boolean isEnabled() {
return false;
}
@Override
public @NonNull UserPropertyCategory getUserPropertyCategory() {
return UserPropertyCategory.get(UserPropertyCategory.Invisible.class);
}
}
private static class PaneStatusPropertiesSessionFallback extends PaneStatusProperties {
private static final String attribute = "jenkins_pane_%s_collapsed";
@Override
public boolean isCollapsed(String paneId) {
final HttpSession session = Stapler.getCurrentRequest2().getSession();
return session.getAttribute(format(attribute, paneId)) != null;
}
@Override
public boolean toggleCollapsed(String paneId) {
final HttpSession session = Stapler.getCurrentRequest2().getSession();
final String property = format(attribute, paneId);
final Object collapsed = session.getAttribute(property);
if (collapsed == null) {
session.setAttribute(property, true);
return true;
}
session.removeAttribute(property);
return false;
}
}
public static PaneStatusProperties forCurrentUser() {
final User current = User.current();
if (current == null) {
return FALLBACK;
}
return current.getProperty(PaneStatusProperties.class);
}
}