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