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 UnrecognisedModuleDescriptorFactory
14 {
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public static UnrecognisedModuleDescriptor createUnrecognisedModuleDescriptor(final Plugin plugin, final Element element, final Throwable e, final ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException
30 {
31 final UnrecognisedModuleDescriptor descriptor = new UnrecognisedModuleDescriptor();
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 = UnrecognisedModuleDescriptorFactory.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 private static String constructErrorMessage(final Plugin plugin, final String moduleName, final String moduleClass, final Throwable e)
64 {
65 String errorMsg;
66
67 if ((e.getMessage() == null) || "".equals(e.getMessage()))
68 {
69 if (e instanceof PluginParseException)
70 {
71 errorMsg = "There was a problem loading the descriptor for module '" + moduleName + "' in plugin '" + (plugin == null ? "null" : plugin.getName()) + "'.\n ";
72 }
73 else if (e instanceof InstantiationException)
74 {
75 errorMsg = "Could not instantiate module descriptor: " + moduleClass + ".<br/>";
76 }
77 else if (e instanceof IllegalAccessException)
78 {
79 errorMsg = "Exception instantiating module descriptor: " + moduleClass + ".<br/>";
80 }
81 else if (e instanceof ClassNotFoundException)
82 {
83 errorMsg = "Could not find module descriptor class: " + moduleClass + ".<br/>";
84 }
85 else if (e instanceof NoClassDefFoundError)
86 {
87 errorMsg = "A required class was missing: " + moduleClass + ". Please check that you have all of the required dependencies.<br/>";
88 }
89 else
90 {
91 errorMsg = "There was a problem loading the module descriptor: " + moduleClass + ".<br/>";
92 }
93 }
94 else
95 {
96 errorMsg = e.getMessage();
97 }
98 return errorMsg;
99 }
100 }