¿ä¼Ò ÆÑÅ丮¸¦ »ç¿ëÇÏ¿© Workbench ½Ã½ºÅÛ Á¾·á Áß¿¡ ÀúÀåÇÑ µ¥ÀÌÅÍ¿¡¼ Workbench ¸ðµ¨ ¿ÀºêÁ§Æ®¸¦ ´Ù½Ã ÀÛ¼ºÇÕ´Ï´Ù.
¿ä¼Ò ÆÑÅ丮 È®ÀåÀ» ÀÚ¼¼È÷ È®ÀÎÇϱâ Àü¿¡ Ç÷¯±×ÀΠƯÁ¤ µ¿ÀÛÀ» ÀÏ¹Ý Ç÷§Æû ¸ðµ¨ ¿ÀºêÁ§Æ®¿¡ Ãß°¡Çϱâ À§ÇØ Ç÷§Æû¿¡¼ »ç¿ëÇÑ ÀϹÝÀûÀÎ ±â¼úÀ» °ËÅäÇØ¾ß ÇÕ´Ï´Ù.
´Ù¾çÇÑ Workbench Ŭ·¡½º¸¦ ã¾Æº¸¸é ¿©·¯ Workbench ÀÎÅÍÆäÀ̽º¿¡¼ IAdaptable ÀÎÅÍÆäÀ̽º¸¦ È®ÀåÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.
Ç÷¯±×Àο¡¼´Â ¾î´ðÅ͸¦ »ç¿ëÇÏ¿© ƯÁ¤ ÀÛµ¿À» ½Ã½ºÅÛÀÇ ±âÁ¸ À¯Çü¿¡ Ãß°¡ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, Workbench¿¡¼´Â µ¿ÀÛÀ» ÀÚ¿ø¿¡ Ãß°¡ÇÏ¿© ÀÚ¿øÀÌ ÀÚ½ÅÀ» UI·Î ³ªÅ¸³»±â À§ÇØ ·¹À̺í°ú À̹ÌÁö¿¡ ÀÀ´äÇϵµ·Ï ÇÒ ¼ö ÀÖ½À´Ï´Ù. UI ƯÁ¤ µ¿ÀÛÀ» ³·Àº ·¹º§ÀÇ ¿ÀºêÁ§Æ®¿¡ Ãß°¡ÇÏ´Â ¼³°è´Â ±×´ÙÁö ÀûÇÕÇÏÁö ¾Ê½À´Ï´Ù. ±×·¯¸é ¾î¶² ½ÄÀ¸·Î ÀÌ µ¿ÀÛÀ» ÀÚ¿ø À¯Çü¿¡ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï±î?
Ç÷§Æû¿¡¼´Â ƯÁ¤ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϱâ À§ÇØ µ¿ÀûÀ¸·Î ¿ÀºêÁ§Æ®¸¦ Á¶È¸Çϱâ À§ÇÑ ±â¼úÀ» Á¤ÀÇÇÕ´Ï´Ù. Ç÷¯±×ÀÎÀº ±âÁ¸ À¯Çü¿¡ ÀÛµ¿À» Ãß°¡ÇÏ´Â ¾î´ðÅ͸¦ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î ÀÀ¿ëÇÁ·Î±×·¥ Äڵ忡¼´Â ƯÁ¤ ÄÁÅØ½ºÆ®¿¡¼ »ç¿ëÇÒ °æ¿ì ¿ÀºêÁ§Æ®ÀÇ Æ¯Á¤ ¾î´ðÅ͸¦ ³ªÁß¿¡ Á¶È¸ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿ÀºêÁ§Æ®¿¡ ´ëÇØ µî·ÏµÈ ¾î´ðÅͰ¡ ÀÖÀ¸¸é ¾î´ðÅ͸¦ °¡Á®¿Í¼ ¾î´ðÅÍ¿¡ Á¤ÀÇµÈ »õ ÀÛµ¿À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿ÀºêÁ§Æ®ÀÇ ¾î´ðÅ͸¦ µ¿ÀûÀ¸·Î Á¶È¸ÇÏ´Â ±â´ÉÀ» µ¿ÀûÀ¸·Î Á¦°øÇÏ¿© °ü·Ã ½Ã½ºÅÛÀÇ À¶Å뼺À» Çâ»ó½Ãų ¼öµµ ÀÖ½À´Ï´Ù. ¿ø·¡ À¯ÇüÀÇ Á¤ÀǸ¦ º¯°æÇÏÁö ¾Ê°íµµ »õ Ç÷¯±×ÀÎÀ¸·Î Ç÷§Æû À¯Çü¿¡ »õ ¾î´ðÅ͸¦ µî·ÏÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ ¾î´ðÅÍ¿¡ ´ëÇÑ ¿ÀºêÁ§Æ®¸¦ ¿ä±¸ÇÏ´Â °ÍÀÌ ÆÐÅÏÀÔ´Ï´Ù.
//given an object o, we want to do "workbench" things with it.
if (!(o instanceof IAdaptable)) {
return null;
}
IWorkbenchAdapter adapter = (IWorkbenchAdapter)o.getAdapter(IWorkbenchAdapter.class);
if (adapter == null)
return null;
// now I can treat o as an IWorkbenchAdapter
...
ÇØ´ç ¿ÀºêÁ§Æ®¿¡ µî·ÏµÈ ¾î´ðÅͰ¡ ¾øÀ¸¸é ¾î´ðÅÍ·Î ³ÎÀÌ ¸®Åϵ˴ϴÙ. ÀÌ·± °æ¿ì¸¦ ó¸®ÇÒ ¼ö ÀÖ°Ô Å¬¶óÀÌ¾ðÆ®¸¦ ÁغñÇØ¾ß ÇÕ´Ï´Ù. ±×·¯¸é ¿¹»ó ¾î´ðÅͰ¡ µî·ÏµÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡¼ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Workbench¿¡¼´Â ¾î´ðÅ͸¦ »ç¿ëÇÏ¿© IResource¿Í °°Àº ±âº» Ç÷§Æû À¯Çü¿¡¼ UI Á¤º¸¸¦ °¡Á®¿É´Ï´Ù. ±×·¯¸é UIÀÇ Æ¯Á¤ Áö½ÄÀ¸·ÎºÎÅÍ ±âº» À¯ÇüÀ» º¸È£Çϸç Workbench¿¡¼ ±âº» Á¤ÀǸ¦ º¯°æÇÏÁö ¾Ê°íµµ ÇØ´ç ÀÎÅÍÆäÀ̽º¸¦ Àü°³ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¾î´ðÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì Workbench API¿¡¼ Àü´ÞµÇ´Â ¸ðµç Ŭ·¡½º´Â UI ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ±×·¯¸é Ŭ·¡½º Á¤ÀÇ´Â ±úÁö°í ´Ü´ÜÇÑ °áÇÕÀÌ »ý°Ü³ª°Ô µË´Ï´Ù. ÄÚ¾î ¹× UI Ŭ·¡½º °£¿¡ ¼øÈ¯ Á¾¼Ó¼ºÀÌ ³ªÅ¸³³´Ï´Ù. ¾î´ðÅ͸¦ »ç¿ëÇÏ¿© ¸ðµç Ŭ·¡½º´Â IAdaptableÀ» ±¸ÇöÇϰí Ç÷¯±×ÀÎÀÌ ±âº» À¯ÇüÀÇ ÀÛµ¿À» È®ÀåÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ¾î´ðÅÍ ·¹Áö½ºÆ®¸®¸¦ »ç¿ëÇÕ´Ï´Ù.
Workbench Äڵ忡¼ ¾î´ðÅÍ¿¡ ´ëÇÑ À¯ÇüÀ» Á¶È¸ÇÒ ¼ö ÀÖ´Â °æ¿ì°¡ Ç¥½ÃµË´Ï´Ù. ÀÌ·± °æ¿ì Ç÷§Æû ÄÚ¾î À¯Çü¿¡ ´ëÇÑ UI ÁöÇâ Á¤º¸¿¡ ÀÀ´äÇÏ´Â ¹æ¹ýÀ» ¾Ë°í ÀÖ´Â ¿ÀºêÁ§Æ®¸¦ °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù.
»ç¿ëÀÚ°¡ Workbench ½Ã½ºÅÛÀ» Á¾·áÇÒ °æ¿ì Workbench¿¡ Ç¥½ÃµÈ IAdaptableÀÇ ÇöÀç »óŸ¦ ÀúÀåÇØ¾ß ÇÕ´Ï´Ù. ÆÄÀÏ ½Ã½ºÅÛ¿¡ ½±°Ô ÀúÀåµÇ´Â Ưº° Çü½ÄÀÎ IMemento·Î ¿ÀºêÁ§Æ®ÀÇ ±âº» µ¥ÀÌÅÍ ¸Å°³º¯¼ö¸¦ ÀúÀåÇÏ¿© ÀÌ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. IMemento¿¡¼ ¿ÀºêÁ§Æ®¸¦ ´Ù½Ã ¸¸µé ¼ö ÀÖ´Â ÆÑÅ丮ÀÇ idµµ ÀúÀåµË´Ï´Ù.
Ç÷§ÆûÀ» ´Ù½Ã ½ÃÀÛÇϸé Workbench´Â ¸Þ¸àÅä¿¡ ¾Ë·ÁÁø ÆÑÅ丮 id¿Í ¿¬°üµÈ ¿ä¼Ò ÆÑÅ丮¸¦ ã½À´Ï´Ù. org.eclipse.ui.elementFactories È®Àå¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Ç÷¯±×ÀÎ ·¹Áö½ºÆ®¸®¸¦ È®ÀÎÇÏ¿© ÆÑÅ丮¸¦ ã½À´Ï´Ù.
¸¶Å©¾÷Àº ¸Å¿ì °£´ÜÇÕ´Ï´Ù. ÆÑÅ丮ÀÇ id¿Í ÆÑÅ丮¸¦ ±¸ÇöÇÏ´Â ÇØ´ç Ŭ·¡½º¸¦ ÁöÁ¤Çϱ⸸ ÇÏ¸é µË´Ï´Ù.
´ÙÀ½ ÄÚµå ½º´ÏÆêÀº Workbench plugin.xml¿¡¼ °¡Á®¿Â °ÍÀÔ´Ï´Ù.
<extension
point = "org.eclipse.ui.elementFactories">
<factory id ="org.eclipse.ui.internal.model.ResourceFactory"
class="org.eclipse.ui.internal.model.ResourceFactory">
</factory>
<factory id ="org.eclipse.ui.internal.model.WorkspaceFactory"
class="org.eclipse.ui.internal.model.WorkspaceFactory">
</factory>
<factory id ="org.eclipse.ui.part.FileEditorInputFactory"
class="org.eclipse.ui.part.FileEditorInputFactory">
</factory>
<factory id ="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory"
class="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory">
</factory>
</extension>