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