1 package com.atlassian.plugin.descriptors;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.ModuleDescriptorFactory;
5 import com.atlassian.plugin.Plugin;
6 import com.atlassian.plugin.PluginParseException;
7 import org.dom4j.Element;
8
9
10
11
12 public final class UnloadableModuleDescriptorFactory {
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public static UnloadableModuleDescriptor createUnloadableModuleDescriptor(final Plugin plugin, final Element element, final Throwable e, final ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException {
28 final UnloadableModuleDescriptor descriptor = new UnloadableModuleDescriptor();
29 descriptor.init(plugin, element);
30
31 final String name = element.getName();
32 final Class<? extends ModuleDescriptor> descriptorClass = moduleDescriptorFactory.getModuleDescriptorClass(name);
33 String descriptorClassName;
34
35 if (descriptorClass == null) {
36 descriptorClassName = descriptor.getKey();
37 } else {
38 descriptorClassName = descriptorClass.getName();
39 }
40
41 final String errorMsg = constructErrorMessage(plugin, name, descriptorClassName, e);
42
43 descriptor.setErrorText(errorMsg);
44
45 return descriptor;
46 }
47
48
49
50
51
52
53
54
55
56
57
58 public static UnloadableModuleDescriptor createUnloadableModuleDescriptor(final Plugin plugin, final ModuleDescriptor<?> descriptor, final Throwable e) {
59 final UnloadableModuleDescriptor unloadableDescriptor = new UnloadableModuleDescriptor();
60 unloadableDescriptor.setName(descriptor.getName());
61 unloadableDescriptor.setKey(descriptor.getKey());
62 unloadableDescriptor.setPlugin(plugin);
63
64 final String errorMsg = constructErrorMessage(plugin, descriptor.getDisplayName(),
65 (descriptor.getModuleClass() == null ? descriptor.getName() : descriptor.getModuleClass().getName()), e);
66
67 unloadableDescriptor.setErrorText(errorMsg);
68
69 return unloadableDescriptor;
70 }
71
72
73
74
75
76
77
78
79
80
81 private static String constructErrorMessage(final Plugin plugin, final String moduleName, final String moduleClass, final Throwable e) {
82 String errorMsg;
83
84 if (e instanceof PluginParseException) {
85 errorMsg = "There was a problem loading the descriptor for module '" + moduleName + "' in plugin '" + (plugin == null ? "null" : plugin.getName()) + "'.\n ";
86 } else if (e instanceof InstantiationException) {
87 errorMsg = "Could not instantiate module descriptor: " + moduleClass + ".<br/>";
88 } else if (e instanceof IllegalAccessException) {
89 errorMsg = "Exception instantiating module descriptor: " + moduleClass + ".<br/>";
90 } else if (e instanceof ClassNotFoundException) {
91 errorMsg = "Could not find module descriptor class: " + moduleClass + ".<br/>";
92 } else if (e instanceof NoClassDefFoundError) {
93 errorMsg = "A required class was missing: " + moduleClass + ". Please check that you have all of the required dependencies.<br/>";
94 } else {
95 errorMsg = "There was a problem loading the module descriptor: " + moduleClass + ".<br/>";
96 }
97
98 return errorMsg + e.getMessage();
99 }
100 }