¼³¸í: ÀÌ È®ÀåÁ¡Àº ´Ù¸¥ Ç÷¯±×ÀÎ ¼ÒÀ¯ÀÇ ÆË¾÷ ¸Þ´º¿¡ Á¶Ä¡¸¦ »õ·Î Ãß°¡ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. Á¶Ä¡ Áö½Ã¹®Àº ƯÁ¤ ¿ÀºêÁ§Æ® À¯Çü(objectContribution) ¶Ç´Â ƯÁ¤ ÆË¾÷ ¸Þ´º¿¡ ´ëÇØ ÀÛ¼ºµÉ ¼ö ÀÖ½À´Ï´Ù. ¿ÀºêÁ§Æ® À¯Çü¿¡ ´ëÇØ µî·ÏµÈ °æ¿ì¿¡´Â ÁöÁ¤µÈ À¯ÇüÀÇ ¿ÀºêÁ§Æ®°¡ ¼±ÅÃµÈ ¸ðµç Ç¥½Ã±â¿¡ Áö½Ã¹®ÀÌ ³ªÅ¸³³´Ï´Ù. ¹Ý¸é, ÆË¾÷ ¸Þ´º¿¡ ´ëÇÑ µî·ÏÀº ¼±ÅûçÇ׿¡ »ó°ü ¾øÀÌ ÁöÁ¤µÈ ¸Þ´º¿¡¸¸ ³ªÅ¸³³´Ï´Ù.
¼±ÅûçÇ×ÀÌ À̱âÁ¾À̸é Áö½Ã¹®Àº ¼±ÅûçÇ×ÀÇ °øÅë À¯Çü¿¡ ´ëÇØ µî·ÏµÈ °æ¿ì¿¡ Àû¿ëµË´Ï´Ù. Á÷Á¢ ÀÏÄ¡°¡ °¡´ÉÇÏÁö ¾ÊÀ¸¸é ¼öÆÛŬ·¡½º ¹× ¼öÆÛÀÎÅÍÆäÀ̽º¿¡ ´ëÇØ ÀÏÄ¡ÇÏ´Â Ç׸ñÀ» ã½À´Ï´Ù.
À̸§ ÇÊÅ͸¦ »ç¿ëÇÏ¿© ¼±ÅûçÇ×À» ´õ Á¦ÇÑÇÒ ¼ö ÀÖ½À´Ï´Ù. À̸§ ÇÊÅ͸¦ »ç¿ëÇÏ´Â °æ¿ì ¼±ÅûçÇ×ÀÇ ¸ðµç ¿ÀºêÁ§Æ®°¡ ÇØ´ç ÇÊÅÍ¿Í ÀÏÄ¡ÇØ¾ß¸¸ Áö½Ã¹®À» Àû¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿ÀºêÁ§Æ® Áö½Ã¹®ÀÇ °³º° Á¶Ä¡´Â enablesFor ¼Ó¼ºÀ» »ç¿ëÇÏ¿© ÇØ´ç Á¶Ä¡°¡ ´ÜÀÏ, ´ÙÁß ¶Ç´Â ±âŸ ¼±ÅûçÇ× À¯Çü Áß ¾î´À À¯Çü¿¡ ´ëÇØ¼¸¸ Àû¿ëµÇ¾î¾ß ÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ÇÊÅ͸µ ¸ÞÄ¿´ÏÁòÀÌ Àû´çÇÏÁö ¾ÊÀ¸¸é Á¶Ä¡ Áö½Ã¹®¿¡¼´Â filter ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì ´ë»ó ¿ÀºêÁ§Æ®ÀÇ ¼Ó¼ºÀº ÀÏ·ÃÀÇ Å°/°ª ½Ö¿¡ ¼³¸íµË´Ï´Ù. ¼±ÅûçÇ׿¡ Àû¿ëµÇ´Â ¼Ó¼ºÀº ƯÁ¤ À¯Çü°ú °ü·ÃµÇ¸ç Workbench ÀÚüÀÇ µµ¸ÞÀÎ ¹üÀ§¸¦ ³Ñ¾î¼¹Ç·Î ÀÌ ·¹º§ÀÇ ÇÊÅ͸µ¿¡¼´Â ½ÇÁ¦ ¼±ÅûçÇ×ÀÌ Workbench¸¦ ´ëÇ¥ÇÕ´Ï´Ù.
±¸¼º ¸¶Å©¾÷:
<!ELEMENT objectContribution (filter | menu | action)*>
<!ATTLIST objectContribution
id
CDATA #REQUIRED
objectClass CDATA #REQUIRED
nameFilter CDATA #IMPLIED
>
<!ELEMENT action EMPTY>name - ³ªÁß¿¡ Á¶Ä¡ °æ·ÎÀÇ ¸¶Áö¸· ÅäÅ«À¸·Î ÂüÁ¶µÉ ¼ö ÀÖ´Â ºÐ¸®ÀÚÀÇ À̸§. ±×·¯¹Ç·Î ºÐ¸®ÀÚ´Â Á¶Ä¡¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Â À̸§ ÁöÁ¤µÈ ±×·ì ¿ªÇÒÀ» ÇÕ´Ï´Ù.
Á¶Ä¡¿Í ¸Þ´º ·¹ÀÌºí¿¡´Â ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÏ¿© ´Ï¸ð´Ð°ú ´ÜÃà۸¦ ÀÎÄÚµåÇϴ Ư¼ö ¹®ÀÚ°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½Àº ÆË¾÷ ¸Þ´º È®ÀåÁ¡ÀÇ ¿¹ÀÔ´Ï´Ù.
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.xyz.C1"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.java">
<menu id="com.xyz.xyzMenu"
path="additions"
label="&XYZ Java Tools">
<separator name="group1"/>
</menu>
<action id="com.xyz.runXYZ"
label="&Run XYZ Tool"
menubarPath="com.xyz.xyzMenu/group1"
icon="icons/runXYZ.gif"
helpContextId="com.xyz.run_action_context"
class="com.xyz.actions.XYZToolActionDelegate"
enablesFor="1">
</action>
</objectContribution>
<viewerContribution
id="com.xyz.C2"
targetID="org.eclipse.ui.views.TaskList">
<action
id="com.xyz.showXYZ"
label="&Show XYZ"
menubarPath="additions"
icon="icons/showXYZ.gif"
helpContextId="com.xyz.show_action_context"
class="com.xyz.actions.XYZShowActionDelegate">
</action>
</viewerContribution>
</extension>
À§ÀÇ ¿¹¿¡¼ ÁöÁ¤µÈ Á¶Ä¡´Â ´ÜÀÏ ¼±ÅûçÇ×(enablesFor ¼Ó¼º)¿¡ ´ëÇØ¼¸¸ Ȱ¼ºÈµË´Ï´Ù. ¶ÇÇÑ ¼±ÅûçÇ×ÀÇ °¢ ¿ÀºêÁ§Æ®´Â ÁöÁ¤µÈ ÀÎÅÍÆäÀ̽º(IFile)¸¦ ±¸ÇöÇØ¾ß Çϸç Java ÆÄÀÏÀ̾î¾ß ÇÕ´Ï´Ù. ÀÌ Á¶Ä¡´Â ÀÌÀü¿¡ ÀÛ¼ºµÈ ¼ºê¸Þ´º¿¡ Ãß°¡µË´Ï´Ù. ÀÌ Áö½Ã¹®Àº Çʼö ¼±ÅûçÇ×ÀÌ ÀÖ´Â ¸ðµç º¸±â¿¡ Àû¿ëµË´Ï´Ù.
¹Ý¸é, À§ÀÇ Ç¥½Ã±â Áö½Ã¹®Àº Ÿ½ºÅ© º¸±â¿¡¼¸¸ ³ªÅ¸³ª¸ç º¸±âÀÇ ¼±ÅûçÇ׿¡ ¿µÇâÀ» ¹ÞÁö ¾Ê½À´Ï´Ù.
´ÙÀ½Àº ÇÊÅÍ ¸ÞÄ¿´ÏÁòÀÇ ¿¹ÀÔ´Ï´Ù. ÀÌ °æ¿ì Á¶Ä¡´Â ¿ì¼±¼øÀ§°¡ ³ô°í ¿Ï·áµÈ IMarkers¿¡ ´ëÇØ¼¸¸ ³ªÅ¸³³´Ï´Ù.
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.xyz.C1"
objectClass="org.eclipse.core.resources.IMarker">
<filter name="done"
value="true"/>
<filter name="priority"
value="2"/>
<action id="com.xyz.runXYZ"
label="High Priority Completed Action Tool"
icon="icons/runXYZ.gif"
class="com.xyz.actions.MarkerActionDelegate">
</action>
</objectContribution>
</extension>
API Á¤º¸: Á¶Ä¡ ¼Ó¼º classÀÇ °ªÀº org.eclipse.ui.IObjectActionDelegate(¿ÀºêÁ§Æ® Áö½Ã¹®ÀÇ °æ¿ì), org.eclipse.ui.IViewActionDelegate(º¸±â¿¡ ¼ÓÇϴ ǥ½Ã±â¿¡ ´ëÇÑ Áö½Ã¹®ÀÇ °æ¿ì), ¶Ç´Â org.eclipse.ui.IEditorActionDelegate(ÆíÁý±â¿¡ ¼ÓÇϴ ǥ½Ã±â¿¡ ´ëÇÑ Áö½Ã¹®ÀÇ °æ¿ì)¸¦ ±¸ÇöÇÏ´Â Java Ŭ·¡½ºÀÇ ¿ÏÀüÇÑ Å¬·¡½º À̸§À̾î¾ß ÇÕ´Ï´Ù. ÀÌ ¼¼ °æ¿ì ¸ðµÎ, ±¸ÇöÇϴ Ŭ·¡½º´Â ²À ÇÊ¿äÇϱâ Àü¿¡ Àüü Ç÷¯±×ÀÎÀÌ ·ÎµåµÇÁö ¾Êµµ·Ï °¡´ÉÇÑ ÇÑ ´Ê°Ô ·ÎµåµË´Ï´Ù.
Âü°í: ÀÌÀü ¹öÀü°úÀÇ È£È¯¼ºÀ» À§ÇØ org.eclipse.ui.IActionDelegate°¡ ¿ÀºêÁ§Æ® Áö½Ã¹®¿¡ ´ëÇØ ±¸ÇöµÉ ¼ö ÀÖ½À´Ï´Ù.
ÆÄÆ® ³»ÀÇ ÆË¾÷ ¸Þ´º È®ÀåÀÚ´Â ´ë»ó ÆÄÆ®°¡ È®ÀåÀ» À§ÇØ ¸Þ´º¸¦ °ø°³ÇÒ ¶§¸¸ °¡´ÉÇÕ´Ï´Ù. ÀÌ´Â Á¦Ç°ÀÇ È®À强À» Çâ»ó½ÃŰ¹Ç·Î ¸Å¿ì À¯¿ëÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷À» ¼öÇàÇÏ·Á¸é °¢ ÆÄÆ®´Â IWorkbenchPartSite#registerContextMenu¸¦ È£ÃâÇÏ¿© Á¤ÀÇµÈ ¸ðµç ÆË¾÷ ¸Þ´º¸¦ °ø°³ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷À» ¼öÇàÇÑ ´ÙÀ½¿¡´Â Workbench¿¡¼ ±âÁ¸ÀÇ ¸ðµç Á¶Ä¡ È®ÀåÀÚ¸¦ ÀÚµ¿À¸·Î »ðÀÔÇÕ´Ï´Ù.
¸Þ´º ID´Â µî·ÏµÈ °¢ ¸Þ´º¿¡ ´ëÇØ Á¦°øµÇ¾î¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ ÆÄÆ® »çÀÌÀÇ Àϰü¼ºÀ» À§ÇØ ¸ðµç ÆÄÆ® ±¸ÇöÀÚ°¡ ´ÙÀ½ °èȹÀ» äÅÃÇØ¾ß ÇÕ´Ï´Ù.
ÄÁÅØ½ºÆ® ¸Þ´ºÀÇ ¼±ÅûçÇ×ÀÎ WorkbenchÀÇ ¿ÀºêÁ§Æ®´Â org.eclipse.ui.IActionFilter¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â À¯Çü ƯÁ¤ ÇÊÅ͸µÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â ÇÊÅ͸µ °èȹÀÔ´Ï´Ù. Workbench¿¡¼´Â IActionFilterÀÇ ±¸Çö ¿©ºÎ¸¦ È®ÀÎÇÏ¿© ¼±ÅûçÇ׿¡ ´ëÇÑ ÇÊÅ͸¦ °Ë»öÇÕ´Ï´Ù. ¿©±â¿¡ ½ÇÆÐÇϸé Workbench¿¡¼´Â IAdaptable ¸ÞÄ¿´ÏÁòÀ» ÅëÇØ ÇÊÅ͸¦ ¿äûÇÕ´Ï´Ù.
±âº» Á¦°ø ±¸Çö: Workbench º¸±â¿¡´Â ¿©·¯ °³ÀÇ Á¶Ä¡¿Í ÇÔ²² ÀÌ¹Ì ·ÎµåµÈ Áßø ÆË¾÷ ¸Þ´º°¡ ÀÖ½À´Ï´Ù. Ç÷¯±×ÀÎÀº ÀÌ·¯ÇÑ ¸Þ´º¿¡ µµ¿òÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. Ç¥½Ã±â¿¡ ÀÌ·¯ÇÑ Áö½Ã¹®À» À§ÇØ ¿¹¾àµÈ ½½·ÔÀÌ ÀÖ°í ÇØ´ç ½½·ÔÀÌ °ø¿ëÀ¸·Î ¸¸µé¾îÁø °æ¿ì¿¡´Â ½½·Ô À̸§À» °æ·Î·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â Á¶Ä¡ ¹× ¼ºê¸Þ´º°¡ ÆË¾÷ ¸Þ´ºÀÇ ³¡¿¡ Ãß°¡µË´Ï´Ù.