| 1 26 27 package org.nightlabs.editor2d.viewer.render; 28 29 import org.apache.log4j.Logger; 30 import org.eclipse.core.runtime.IConfigurationElement; 31 import org.eclipse.core.runtime.IExtension; 32 import org.eclipse.core.runtime.Platform; 33 import org.eclipse.jface.resource.ImageDescriptor; 34 import org.osgi.framework.Bundle; 35 36 import org.nightlabs.base.extensionpoint.AbstractEPProcessor; 37 import org.nightlabs.base.extensionpoint.EPProcessorException; 38 import org.nightlabs.base.util.ImageUtil; 39 import org.nightlabs.editor2d.render.RenderModeDescriptor; 40 import org.nightlabs.editor2d.render.RenderModeManager; 41 import org.nightlabs.editor2d.render.Renderer; 42 43 public class RendererRegistry 44 extends AbstractEPProcessor 45 { 46 public static final String EXTENSION_POINT_ID = "org.nightlabs.editor2d.viewer.renderModeRegistry"; 47 public static final Logger LOGGER = Logger.getLogger(RendererRegistry.class.getName()); 48 49 protected static RendererRegistry _sharedInstance; 50 public static RendererRegistry sharedInstance() 51 { 52 if (_sharedInstance == null) { 53 _sharedInstance = new RendererRegistry(); 54 } 56 return _sharedInstance; 57 } 58 59 protected RendererRegistry() { 60 super(); 61 } 62 63 public String getExtensionPointID() { 64 return EXTENSION_POINT_ID; 65 } 66 67 public static final String ELEMENT_REGISTRY = "registry"; 68 public static final String ATTRIBUTE_MODE = "mode"; 69 public static final String ATTRIBUTE_RENDERER = "renderer"; 70 public static final String ATTRIBUTE_DRAWCOMPONENT_CLASS = "drawComponentClass"; 71 public static final String ATTRIBUTE_NAME = "name"; 72 public static final String ATTRIBUTE_DESCRIPTION = "description"; 73 public static final String ATTRIBUTE_ICON = "icon"; 74 75 public void processElement(IExtension extension, IConfigurationElement element) 76 throws EPProcessorException 77 { 78 if (renderModeManager == null) 79 renderModeManager = new RenderModeManager(); 80 81 if (element.getName().equalsIgnoreCase(ELEMENT_REGISTRY)) 82 { 83 try { 84 String mode = element.getAttribute(ATTRIBUTE_MODE); 85 int renderMode = 1; 86 try { 87 renderMode = Integer.parseInt(mode); 88 } catch (NumberFormatException e) { 89 throw new IllegalArgumentException ("Attribute mode must be an int"); 90 } 91 92 Object renderer = (Object ) element.createExecutableExtension(ATTRIBUTE_RENDERER); 93 if (!(renderer instanceof Renderer)) 94 throw new IllegalArgumentException ("Attribute renderer must implement "+Renderer.class.getName()+" "+renderer.getClass().getName()+" does not!"); 95 Renderer r = (Renderer) renderer; 96 97 Class dcClass = null; 98 try { 99 dcClass = Platform.getBundle(extension.getNamespace()).loadClass(element.getAttribute(ATTRIBUTE_DRAWCOMPONENT_CLASS)); 100 } catch (ClassNotFoundException e) { 101 throw new EPProcessorException(e); 102 } 103 104 109 String name = element.getAttribute(ATTRIBUTE_NAME); 110 String description = element.getAttribute(ATTRIBUTE_DESCRIPTION); 111 String icon = element.getAttribute(ATTRIBUTE_ICON); 112 113 RenderModeDescriptor desc = null; 114 if (checkString(name) && checkString(description) && checkString(icon)) 115 { 116 Bundle bundle = Platform.getBundle(extension.getNamespace()); 117 ImageDescriptor imgDesc = ImageDescriptor.createFromURL(bundle.getEntry(icon)); 118 119 desc = new RenderModeDescriptor(renderMode, name, description, 120 ImageUtil.convertToAWT(imgDesc.getImageData())); 121 } 122 else if (checkString(name) && checkString(description)) { 123 desc = new RenderModeDescriptor(renderMode, name, description); 124 } 125 else if (checkString(name)) { 126 desc = new RenderModeDescriptor(renderMode, name); 127 } 128 129 if (desc != null) { 130 renderModeManager.addRenderer(desc, dcClass, r); 131 } 132 else { 133 renderModeManager.addRenderer(renderMode, dcClass, r); 134 } 135 136 140 } catch (Exception e) { 141 throw new EPProcessorException(e); 142 } 143 } 144 } 145 146 protected RenderModeManager renderModeManager; 147 public RenderModeManager getRenderModeManager() 148 { 149 checkProcessing(); 150 if (renderModeManager == null) 151 renderModeManager = new RenderModeManager(); 152 153 return renderModeManager; 154 } 155 156 } 157 | Popular Tags |