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 UnrecognisedModuleDescriptorFactory {
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public static UnrecognisedModuleDescriptor createUnrecognisedModuleDescriptor(final Plugin plugin, final Element element, final Throwable e, final ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException {
28 final UnrecognisedModuleDescriptor descriptor = new UnrecognisedModuleDescriptor();
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 = UnrecognisedModuleDescriptorFactory.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 private static String constructErrorMessage(final Plugin plugin, final String moduleName, final String moduleClass, final Throwable e) {
58 String errorMsg;
59
60 if ((e.getMessage() == null) || "".equals(e.getMessage())) {
61 if (e instanceof PluginParseException) {
62 errorMsg = "There was a problem loading the descriptor for module '" + moduleName + "' in plugin '" + (plugin == null ? "null" : plugin.getName()) + "'.\n ";
63 } else if (e instanceof InstantiationException) {
64 errorMsg = "Could not instantiate module descriptor: " + moduleClass + ".<br/>";
65 } else if (e instanceof IllegalAccessException) {
66 errorMsg = "Exception instantiating module descriptor: " + moduleClass + ".<br/>";
67 } else if (e instanceof ClassNotFoundException) {
68 errorMsg = "Could not find module descriptor class: " + moduleClass + ".<br/>";
69 } else if (e instanceof NoClassDefFoundError) {
70 errorMsg = "A required class was missing: " + moduleClass + ". Please check that you have all of the required dependencies.<br/>";
71 } else {
72 errorMsg = "There was a problem loading the module descriptor: " + moduleClass + ".<br/>";
73 }
74 } else {
75 errorMsg = e.getMessage();
76 }
77 return errorMsg;
78 }
79 }