µ¿Àû Ç÷¯±×ÀÎÀº ½ÇÇà ÁßÀÎ Eclipse ÀνºÅϽº¿¡ Ç÷¯±×ÀÎÀ» »ðÀÔÇϰí Á¦°ÅÇÏ´Â ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù. ·Îµå ÇØÁ¦µÉ ¼ö ÀÖ´Â Àç»ç¿ë°¡´ÉÇÑ ÄÄÆ÷³ÍÆ®ÀÎ µ¿Àû Ç÷¯±×ÀÎÀ» »ç¿ëÇÏ¸é µé¾î¿À°í ³ª°¡´Â Ç÷¯±×ÀÎÀ» ½±°Ô ÃßÀûÇÒ ¼ö ÀÖ½À´Ï´Ù.
µ¿Àû Ç÷¯±×ÀÎÀº ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ÁÖ±â Áß¿¡ ³²¾Æ ÀÖÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥¿¡ ÀÖ¾î¼ ÄÄÆ÷³ÍÆ®°¡ Á¦°ÅµÇ¾úÀ» ¶§ ¸ðµç °ÍÀÌ Á¤¸®µÇµµ·Ï ÇÏ´Â °ÍÀÌ ÇʼöÀûÀÔ´Ï´Ù. ¸®½º³Ê°¡ Workbench¿¡ ¿¬°áµÇ°í Ç׸ñÀÌ µî·ÏµÇ¸é ¸®½º³Ê¿Í Ç׸ñÀº ½Ã½ºÅÛ Á¾·á ÈÄ¿¡µµ ³²¾Æ ÀÖ°í ÀÌ·¯ÇÑ Ç÷¯±×ÀÎÀº ÀÌ·¯ÇÑ ¸®½º³Ê¿Í Ç׸ñÀ» Á¤¸®ÇØ¾ß ÇÔÀ» ÀνÄÇØ¾ß ÇÕ´Ï´Ù.
½ÃÀÛ¿¡¼ È®ÀåÁ¡ÀÇ ¸ðµç ±¸Çö¿¡ ´ëÇÑ ÃæºÐÇÑ ÀбⰡ ÀÀ¿ëÇÁ·Î±×·¥ÀÇ Áֱ⸦ ÀÌÇØÇÏ´Â µ¥ ÃæºÐÇÏ´Ù´Â °¡Á¤Àº ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù. ¸®½º³Ê°¡ ¿¬°áµÇ´ÂÁö ¶Ç´Â ¾Æ¹« Ç׸ñµµ ij½ÃµÇÁö ¾Ê´ÂÁö È®ÀÎÇÏ¿© ·¹Áö½ºÆ®¸® º¯°æ»çÇ×ÀÌ Ã»ÃëµÇµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. WorkbenchÀÇ Ç׸ñÀº Á¤ÀûÀÏ ÇÊ¿ä´Â ¾ø°í ½ÇÁ¦·Î ÀÓ½ÃÀûÀÌ°í ¾ðÁ¦¶óµµ Á¦°ÅÇÒ ¼ö ÀÖÀ½À» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. ƯÁ¤ º¸±â¿¡ ´ëÇÑ Ç÷¯±×ÀÎÀ» ¾²°í ÀÖ´Â °æ¿ì¿¡´Â ¸ÕÀú º¸±â°¡ °è¼Ó Á¸ÀçÇÏ´ÂÁö È®ÀÎÇϽʽÿÀ.
Ç÷¯±×ÀÎ °³¹ßÀڴ Ȱ¿ëÇÏ´Â ¸ðµç È®ÀåÀÌ ÁöÁ¤µÈ È®ÀåÁ¡¿¡ ³ªÅ¸³ª°Å³ª »ç¶óÁú ¼ö ÀÖµµ·Ï Çã¿ëÇØ¾ß ÇÕ´Ï´Ù. È®ÀåÀÌ »ç¶óÁú °æ¿ì È®ÀåÀ» ³ªÅ¸³»´Â ¸ðµç ³»ºÎ ±¸Á¶¸¦ Á¤¸®ÇÏ¿© È®ÀåÀÌ »ç¶óÁ³À½À» È®ÀÎÇϰí È®ÀåÀÌ µå¶óÀ̺êÇÏ´Â ¸ðµç UI ¾ÆÆ¼ÆÑÆ®¸¦ Á¦°ÅÇØ¾ß ÇÕ´Ï´Ù. È®ÀåÀÌ ³ªÅ¸³¯ °æ¿ì ³»ºÎ ±¸Á¶¸¦ È®ÀåÇÏ°í »õ UI ¾ÆÆ¼ÆÑÆ®¸¦ ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ·¹Áö½ºÆ®¸®¸¦ Àд ÁßÀ̰í È®ÀåÀ» °¡Áö¸ç ÀÀ¿ëÇÁ·Î±×·¥¿¡ ´ëÇÑ ·¹Äڵ尡 ÀÛ¼ºµÇ°í À§Ä¡°¡ ÁöÁ¤µÈ´Ù°í °¡Á¤ÇØ º¸½Ê½Ã¿À. °á°ú¿¡ µû¶ó Á¤¸®°¡ ÇÊ¿äÇÑÁö ¾Ë¸®´Â ¸Þ½ÃÁö°¡ Ç¥½ÃµË´Ï´Ù. ¶ÇÇÑ ¸®½º³Ê´Â »õ Ç׸ñÀÌ µé¾î¿Ã °æ¿ì À̸¦ ¾Ë¸®°í ÇØ´ç Ç׸ñÀ» ÀÛ¼ºÇÕ´Ï´Ù.
org.eclipse.core.runtime.dynamicHelpers.IExtensionTracker ¹× ¿¬°üµÈ ÀÎÅÍÆäÀ̽º´Â Ç÷¯±×ÀÎ °³¹ßÀÚ°¡ µé¾î¿À°í ³ª°¡´Â È®ÀåÀ» ½±°Ô ÃßÀûÇϰí ÇØ´ç Á¶Ä¡¿¡ ÀÇÇØ »ý¼ºµÈ ÀÚ¿øÀ» °ü¸®ÇÒ ¼ö ÀÖ´Â ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÕ´Ï´Ù.
´ÙÀ½ ¿¹Á¦¿¡¼´Â Ç÷¯±×Àο¡ À§ÁöÆ®(widget)¶ó°í ÇÏ´Â È®ÀåÁ¡ÀÌ ÀÖ°í IExtensionTracker¸¦ »ç¿ë ÁßÀÓÀ» °¡Á¤ÇÕ´Ï´Ù. ³»ºÎÀûÀ¸·Î À§ÁöÆ®(widget) È®ÀåÀ» ĸ½¶ÈÇÑ WidgetDescriptor ¹× À̵éÀ» °ü¸®ÇÏ´Â WidgetRegistry°¡ ÀÖ½À´Ï´Ù.
public class WidgetRegistry implements IExtensionChangeHandler { public WidgetRegistry() { IExtensionTracker tracker = PlatformUI.getWorkbench() .getExtensionTracker();
IExtensionPoint point = Platform.getExtensionRegistry() .getExtensionPoint("my.plugin.namespace", "widget");
IExtension[] extensions = point.getExtensions();
// initial population
for (int i = 0; i < extensions.length; i++) { addExtension(tracker, extensions[i]);
} tracker
.registerHandler(this, tracker
.createExtensionPointFilter(point)); } public void addExtension(IExtensionTracker tracker, IExtension extension){ WidgetDescriptor descriptor = new WidgetDescriptor(extension); tracker.registerObject(extension, descriptor,
IExtensionTracker.REF_STRONG); addToInternalStructure(descriptor) } private void addToInternalStructure(WidgetDescriptor descriptor) { // registry specific logic } public void removeExtension(IExtension extension, Object[] objects) { for (int i = 0; i < objects.length; i++) { WidgetDescriptor descriptor = (WidgetDescriptor) objects[i];
removeFromInternalStructure(descriptor);
}
} private void removeFromInternalStructure(WidgetDescriptor descriptor) { // registry specific logic }
} public void dispose() { PlatformUI.getWorkbench() .getExtensionTracker().unregisterHandler(this)
} }
ÀÌ ¿¹Á¦¿¡¼ Platform UI´Â ´Ù¾çÇÑ Workbench ·¹º§¿¡¼ IExtensionTracker ÀνºÅϽº¸¦ Á¦°øÇÕ´Ï´Ù. Workbench Áֱ⿡¼ Ȱ¼º »óÅÂÀÎ ¿ÀºêÁ§Æ®¸¦ ÃßÀûÇÏ·Á¸é Workbench.getExtensionTracker()°¡ Á¦°øÇÏ´Â ÃßÀûÀÚ¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÇØ´ç ¿ÀºêÁ§Æ®°¡ ƯÁ¤ Workbench â ¶Ç´Â ÆäÀÌÁö¿¡ °ü·ÃµÈ °æ¿ì¿¡´Â IWorkbenchWindow.getExtensionTracker() ¶Ç´Â IWorkbenchPage.getExtensionTracker()°¡ Á¦°øÇÏ´Â ÃßÀûÀÚ¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î Workbench´Â º¸±â ¼³¸íÀÚ¸¦ Workbench ·¹º§¿¡¼ ÃßÀûÇÏÁö¸¸ ½ÇÁ¦ º¸±â ÀνºÅϽº¸¦ Workbench ÆäÀÌÁö ·¹º§¿¡¼ ÃßÀûÇÕ´Ï´Ù. IFilter ÀνºÅϽº¸¦ IExtensionTracker.registerHandler()¿¡ Á¦°øÇÏ¿© ƯÁ¤ È®ÀåÁ¡¿¡ ´ëÇØ Çڵ鷯¸¦ µî·ÏÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Çڵ鷯´Â IFilter ¿ÀºêÁ§Æ®¿Í ÀÏÄ¡ÇÏ´Â È®ÀåÀ» Ãß°¡ ¶Ç´Â Á¦°ÅÇÒ ¶§¸¸ È£ÃâµË´Ï´Ù.
È®ÀåÀÌ ·±Å¸ÀÓ¿¡ ÀÔ·ÂµÉ ¶§ ÀÌ ¸Þ¼Òµå°¡ È£ÃâµË´Ï´Ù. ±×·± ´ÙÀ½ Çڵ鷯´Â »õ È®ÀåÀ» ¿¬°üµÈ ¸ðµ¨·Î ÅëÇÕÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¿¡ Á¦°øµÈ IExtensionÀ» ±â¹ÝÀ¸·Î ÀÛ¼ºµÈ ¿ÀºêÁ§Æ®´Â IExtensionTracker.registerObject()¸¦ ÅëÇØ ÃßÀûÀÚ¿¡ ´ëÇØ µî·ÏÇØ¾ß ÇÕ´Ï´Ù. È®ÀåÀÌ ·±Å¸ÀÓ¿¡¼ ³ª°¡°Ô µÇ¸é ÀÌ ¸Þ¼Òµå°¡ È£ÃâµË´Ï´Ù. ÇØ´ç È®Àå¿¡ ´ëÇØ ÀÌÀü¿¡ µî·ÏÇÑ ¿ÀºêÁ§Æ®´Â Àμö·Î Àü´ÞµË´Ï´Ù. ±×·± ´ÙÀ½ Çڵ鷯´Â Çʿ信 µû¶ó ¿ÀºêÁ§Æ®¸¦ Á¤¸® ¹× ó¸®ÇÕ´Ï´Ù. ·¹Áö½ºÆ®¸®°¡ ´©¼öµÇÁö ¾Êµµ·Ï Çڵ鷯¸¦ µî·Ï ÇØÁ¦ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.