1 11 package org.eclipse.ui.internal.components.framework; 12 13 import org.eclipse.core.runtime.IStatus; 14 import org.eclipse.osgi.util.NLS; 15 import org.eclipse.ui.internal.WorkbenchPlugin; 16 import org.eclipse.ui.internal.components.ComponentMessages; 17 import org.eclipse.ui.internal.components.ComponentUtil; 18 import org.eclipse.ui.internal.misc.StatusUtil; 19 20 31 public class ComponentException extends Exception { 32 33 private static final long serialVersionUID = 6009335074727417445L; 34 35 private String componentName; 36 37 private Throwable cause; 38 39 45 public ComponentException(Object componentKey, Throwable reason) { 46 this(componentKey, getMessage(componentKey, reason), reason); 47 } 48 49 58 public ComponentException(Object componentKey, String message, Throwable reason) { 59 super(message); 60 this.cause = ComponentUtil.getMostSpecificCause(reason); 62 63 this.componentName = getShortName(componentKey); 64 } 65 66 private static String getShortName(Object key) { 67 if (key instanceof Class ) { 68 return ComponentUtil.getSimpleClassName(((Class )key).getName()); 69 } 70 return key.toString(); 71 } 72 73 private static String getLongName(Object key) { 74 if (key instanceof Class ) { 75 return ((Class )key).getName(); 76 } 77 return key.toString(); 78 } 79 80 private static String getMessage(Object key, Throwable reason) { 81 82 String longName = getLongName(key); 83 String shortName = getShortName(key); 84 85 Throwable current = reason; 86 while (current != null) { 87 if (current instanceof ComponentException) { 88 ComponentException ce = (ComponentException)current; 89 if (shortName.equals(ce.getComponentName())) { 90 return ce.getLocalizedMessage(); 91 } 92 return getMessageString(longName, (ComponentException)current); 93 } 94 95 Throwable cause = ComponentUtil.getCause(current); 96 97 if (cause == current) { 98 break; 99 } 100 101 current = cause; 102 } 103 104 reason = ComponentUtil.getCause(reason); 105 106 if (reason != null) { 107 String userString = StatusUtil.getLocalizedMessage(reason); 108 109 if (userString != null) { 110 return NLS.bind(ComponentMessages.ComponentException_unable_to_instantiate_because, longName, userString); 111 } 112 } 113 114 return NLS.bind(ComponentMessages.ComponentException_unable_to_instantiate, longName); 115 } 116 117 private static String getMessageString(String componentName, ComponentException e) { 118 return NLS.bind(ComponentMessages.ComponentException_recursive_requires_string, 119 new Object [] { 120 componentName, 121 e.getComponentName(), 122 ComponentUtil.getMessage(e)}); 123 124 } 125 126 131 public String getComponentName() { 132 return componentName; 133 } 134 135 141 public IStatus getStatus() { 142 return WorkbenchPlugin.getStatus(getMessage(), ComponentUtil.getCause(this)); 143 } 144 145 152 public Throwable getCause() { 153 return cause; 154 } 155 156 } 157 | Popular Tags |