1 package com.atlassian.plugin.util;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.Plugin;
5 import com.atlassian.plugin.descriptors.RequiresRestart;
6 import com.google.common.collect.Sets;
7 import org.apache.commons.lang.Validate;
8 import org.dom4j.Element;
9
10 import java.util.HashSet;
11 import java.util.Set;
12
13
14
15
16
17
18 public class PluginUtils
19 {
20 public static final String ATLASSIAN_DEV_MODE = "atlassian.dev.mode";
21
22
23
24
25
26
27 public static final String ATLASSIAN_PLUGINS_ENABLE_WAIT = "atlassian.plugins.enable.wait";
28
29
30
31
32
33
34
35
36
37 public static boolean doesPluginRequireRestart(final Plugin plugin)
38 {
39
40 if (Boolean.getBoolean(ATLASSIAN_DEV_MODE))
41 {
42 return false;
43 }
44
45 for (final ModuleDescriptor<?> descriptor : plugin.getModuleDescriptors())
46 {
47 if (descriptor.getClass().getAnnotation(RequiresRestart.class) != null)
48 {
49 return true;
50 }
51 }
52 return false;
53 }
54
55
56
57
58
59
60
61
62
63 public static Set<String> getPluginModulesThatRequireRestart(final Plugin plugin)
64 {
65 Set<String> keys = new HashSet<String>();
66 for (final ModuleDescriptor<?> descriptor : plugin.getModuleDescriptors())
67 {
68 if (descriptor.getClass().getAnnotation(RequiresRestart.class) != null)
69 {
70 keys.add(descriptor.getKey());
71 }
72 }
73 return keys;
74 }
75
76
77
78
79
80
81
82
83
84 public static boolean doesModuleElementApplyToApplication(Element element, Set<String> keys)
85 {
86 Validate.notNull(keys);
87 Validate.notNull(element);
88 String keyList = element.attributeValue("application");
89 if (keyList == null) {
90 return true;
91 }
92 final String[] split = keyList.split("\\s*,[,\\s]*");
93 if (split.length == 0 || (split.length == 1 && split[0].trim().length() == 0)) {
94 return true;
95 }
96 for (final String key : split) {
97 if (keys.contains(key)) {
98 return true;
99 }
100 }
101 return false;
102 }
103
104
105
106
107
108 public static int getDefaultEnablingWaitPeriod()
109 {
110 return Integer.parseInt(System.getProperty(ATLASSIAN_PLUGINS_ENABLE_WAIT, "60"));
111 }
112 }