ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳Ê

ÆíÁý±â¿¡´Â ÆíÁý±â ÄÁÅÙÃ÷¿¡ ´ëÇÑ ±¸Á¶È­µÈ º¸±â¸¦ Á¦°øÇÏ°í ÆíÁý±â ÄÁÅÙÃ÷ÀÇ Å½»öÀ» Áö¿øÇÏ´Â ÇØ´ç ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʰ¡ ÀÖ´Â °æ¿ì°¡ ¸¹½À´Ï´Ù.

Workbench´Â ÀÌ·± ¸ñÀûÀ¸·Î Ç¥ÁØ ¾Æ¿ô¶óÀÎ º¸±â¸¦ Á¦°øÇÕ´Ï´Ù.  Workbench »ç¿ëÀÚ´Â Perspective->º¸±â Ç¥½Ã ¸Þ´º¸¦ »ç¿ëÇÏ¿© ÀÌ º¸±â¸¦ º¼ ¼ö ÀÖ´Â ½Ã±â¸¦ Á¦¾îÇÕ´Ï´Ù.

ÀÏ¹Ý TextEditor´Â ÅØ½ºÆ® ±¸Á¶¸¦ ¾ËÁö ¸øÇϱ⠶§¹®¿¡ Èï¹Ì·Î¿î ¾Æ¿ô¶óÀÎ º¸±â¿¡ ´ëÇÑ ÀÛµ¿À» Á¦°øÇÒ ¼ö ¾ø½À´Ï´Ù.  µû¶ó¼­ ¾Æ·¡ Ç¥½ÃµÈ ±âº» ¾Æ¿ô¶óÀÎ º¸±â´Â ¸¹Àº ¿ªÇÒÀ» ¼öÇàÇÏÁö ¸øÇÕ´Ï´Ù.

Ç÷¯±×ÀÎÀº ¾Æ¿ô¶óÀÎ º¸±â¿¡ »ç¿ëÀÚ Á¤ÀÇ ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀÌ³Ê ÆäÀÌÁö¸¦ Ãß°¡ÇÒ ¸ñÀûÀ¸·Î TextEditor¸¦ È®ÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.   ÀÌ Á¢±Ù¹æ¹ýÀº Workbench Readme µµ±¸ ¿¹¿¡¼­ »ç¿ëµË´Ï´Ù.  ReadmeEditor´Â TextEditorÀÇ ¸î °¡Áö ¸Þ¼Òµå¸¦ ´ëüÇÏ¿© °íÀ¯ ¾Æ¿ô¶óÀ̳ʸ¦ Á¦°øÇÕ´Ï´Ù.  

ÆíÁý±â ¾Æ¿ô¶óÀ̳ʴ Workbench°¡ IContentOutlinePage À¯Çü ¾î´ðÅ͸¦ ¿äûÇÒ ¶§ ÁöÁ¤µË´Ï´Ù.

public Object getAdapter(Class key) {
    if (key.equals(IContentOutlinePage.class)) {
        IEditorInput input = getEditorInput();
        if (input instanceof IFileEditorInput) {
            page = new ReadmeContentOutlinePage(
                ((IFileEditorInput)input).getFile());
            return page;
        }
    }
    return super.getAdapter(key);

ReadmeEditor°¡ .readme ÆÄÀÏ¿¡¼­ ¿­¸®¸é, ÇØ´ç Readme ¾Æ¿ô¶óÀ̳ʰ¡ Ç¥½ÃµË´Ï´Ù(Workbench »ç¿ëÀÚ°¡ ¾Æ¿ô¶óÀÎ º¸±â¸¦ Ç¥½ÃÇϰí ÀÖ´Â °æ¿ì).

ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀÌ³Ê ÆäÀÌÁö´Â IContentOutlinePage¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.  ÀÌ ÀÎÅÍÆäÀ̽º´Â ¼±ÅûçÇ× º¯°æ ¸®½º³Ê¸¦ ¾Ë¸®´Â ±â´É(ISelectionProvider)°ú º¸±â¿¡¼­ ÆäÀÌÁö¸¦ Ç¥½ÃÇÏ´Â ÀÛµ¿(IPage)À» °áÇÕÇÕ´Ï´Ù.  ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʴ ÀϹÝÀûÀ¸·Î JFace Ç¥½Ã±â¸¦ »ç¿ëÇÏ¿© ±¸ÇöµË´Ï´Ù.  ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀÌ³Ê ±âº» ±¸Çö(ContentOutlinePage)Àº JFace Æ®¸® Ç¥½Ã±â¸¦ »ç¿ëÇÏ¿© ¾Æ¿ô¶óÀÎ °èÃþ ±¸Á¶¸¦ Ç¥½ÃÇÕ´Ï´Ù.  ÀÌ Ç¥½Ã´Â ReadmeContentOutlinePage¸¦ Æ÷ÇÔÇÏ¿© ´Ù¼öÀÇ ±¸Á¶È­µÈ ¾Æ¿ô¶óÀ̳ʿ¡ ÀûÇÕÇÕ´Ï´Ù.

ReadmeContentOutlinePage´Â ¿Ü°ü»ó Readme º¸±â È®ÀåÀÚ¸¦ ±¸ÇöÇßÀ» ¶§ º¸¾Ò´ø Readme ¼½¼Ç º¸±â(¾Æ·¡ Ç¥½ÃµÊ)¿Í À¯»çÇÕ´Ï´Ù. 

»ç½Ç À¯ÀÏÇÑ Â÷ÀÌÁ¡Àº ¾Æ¿ô¶óÀ̳ʰ¡ ¼½¼Ç °èÃþ ±¸Á¶ º¸±â¸¦ Ç¥½ÃÇÏ´Â ¹Ý¸é¿¡ Readme ¼½¼Ç º¸±â´Â ¼½¼Ç Ç÷§ ¸ñ·ÏÀ» Ç¥½ÃÇÑ´Ù´Â Á¡ÀÔ´Ï´Ù.  µû¶ó¼­ ¾Æ¿ô¶óÀÌ³Ê ±¸Çö ¶ÇÇÑ º¸±â ±¸Çö°ú ¾ÆÁÖ À¯»çÇÕ´Ï´Ù.  ¾Æ¿ô¶óÀ̳ʰ¡ ¸ñ·Ï Ç¥½Ã±â ´ë½Å Æ®¸® Ç¥½Ã±â¸¦ »ç¿ëÇÑ´Ù´Â Á¡À» Á¦¿ÜÇϰí´Â ¸ðµÎ µ¿ÀÏÇÕ´Ï´Ù.

ÆíÁý±â°¡ ¾Æ¿ô¶óÀÎ ÆäÀÌÁö¸¦ ÀÛ¼ºÇßÀ» ¶§ ÆäÀÌÁö°¡ »ý¼ºÀÚÀÇ ÆíÁý±â ÀÔ·Â ¿ä¼Ò¿¡ Àü´ÞµÇ¾ú½À´Ï´Ù.  ÀÌ ÀÔ·ÂÀº ¾Æ·¡¿¡¼­¿Í °°ÀÌ ¾Æ¿ô¶óÀÎ ÆäÀÌÁö Ç¥½Ã±â·Î Á÷Á¢ Àü´ÞµÉ ¼ö ÀÖ½À´Ï´Ù.

public void createControl(Composite parent) {
    ...
    TreeViewer viewer = getTreeViewer();
    viewer.setContentProvider(new WorkbenchContentProvider());
    viewer.setLabelProvider(new WorkbenchLabelProvider());
    viewer.setInput(getContentOutline(input));
    ...
}

Æ®¸® Ç¥½Ã±â ÀÛ¼ºÀº ContentOutlinePage¿¡¼­ »ó¼ÓµË´Ï´Ù.  Readme ¼½¼Ç º¸±â¿¡¼­ »ç¿ëµÇ¾ú´ø °Í°ú µ¿ÀÏÇÑ ÄÁÅÙÃ÷ ¹× ·¹À̺í Á¦°ø¾÷ü°¡ ¿©±â¼­ »ç¿ëµÇ¸ç, º¸±â ¼½¼ÇÀ» ±¸¼ºÇß´ø µ¿ÀÏÇÑ ReadmeModelFactory¸¦ »ç¿ëÇÏ¿© ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀÎÀÌ ±¸¼ºµË´Ï´Ù.

private IAdaptable getContentOutline(IAdaptable input) {
    return ReadmeModelFactory.getInstance().getContentOutline(input);
}

À̰ÍÀ¸·Î ¸ðµç°ÍÀÌ ¿Ï·áµÇ¾ú½À´Ï´Ù!

¹°·Ð ¾Æ¿ô¶óÀÌ³Ê ÀÚü°¡ ´Ùä·Î¿î ÀÛµ¿À» Á¦°øÇÏÁö´Â ¾Ê½À´Ï´Ù.  ¼½¼ÇÀ» ¼±ÅÃÇØµµ ÆíÁý±â¿¡¼­ ÅØ½ºÆ®¸¦ Ž»öÇÏÁö ¸øÇÕ´Ï´Ù.  ÀÌ ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ÊÀÇ ÀÌ¿ë ¸ñÀûÀº ¹«¾ùÀϱî¿ä? °èÃþ ±¸Á¶¸¦ Ç¥½ÃÇÏ´Â °ÍÀ» Á¦¿ÜÇϸé ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʴ ¼½¼Ç º¸±â¿¡¼­ º¼ ¼ö ¾ø´Â ¾î¶² ÀÛµ¿µµ Á¦°øÇÏÁö ¸øÇÑ´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.  ¾Õ¼± ÀÛ¾÷¿¡¼­µµ ¾Æ¹«°Íµµ ¼öÇàÇÏÁö ¸øÇÏ´Â ¾Æ¿ô¶óÀ̳ʸ¦ Á¦°øÇÏ´Â ´ë½Å ¼½¼Ç º¸±â¿¡¼­ Æ®¸® Ç¥½Ã±â¸¦ »ç¿ëÇß½À´Ï´Ù.  

±×°Ç ´ÜÁö ¿¹ÀÏ »ÓÀÔ´Ï´Ù!  ½ÇÁ¦·Î ReadmeContentOutlinePage´Â ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʸ¦ ÅØ½ºÆ® ÆíÁý±â¿¡ »ç¿ëÀÚ Á¤ÀÇÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¼³¸íÇϱâ À§ÇØ Á¦°øµË´Ï´Ù.  ÀÌ ¿¹°¡ ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀÌ³Ê ÀÚü¸¦ ¼³¸íÇÏ´Â ÁÁÀº ¿¹´Â ¾Æ´Õ´Ï´Ù.  ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʸ¦ »ç¿ëÇÏ¿© ÆíÁý±â ÄÁÅÙÃ÷¸¦ Ž»öÇÏ·Á´Â °æ¿ì, ÄÁÅÙÃ÷ ±¸Á¶¸¦ Ç¥½ÃÇÏ´Â °ÍÀÌ ¸ñÀûÀ̶ó¸é ¼½¼Ç º¸±â¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ ³´½À´Ï´Ù.

º¸´Ù ´Ùä·Î¿î ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʸ¦ ¹ß°ßÇÒ ¼ö ÀÖ´Â °÷Àº ¾îµðÀϱî¿ä?  ContentOutlinePage ¼­ºêŬ·¡½º¿Í ÇØ´ç ÆíÁý±â¸¦ »ìÆì º¸½Ê½Ã¿À.  º¸´Ù ÀϹÝÀûÀÎ ÆÐÅÏÀº ÆíÁý±â°¡ ¾Æ¿ô¶óÀÎ ÆäÀÌÁö¸¦ Á¦°øÇÏ°í ¿©±â¿¡ ¼±ÅûçÇ× À̺¥Æ®¸¦ µî·ÏÇÏ´Â °ÍÀÔ´Ï´Ù.  ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀο¡¼­ Ç׸ñÀÌ ¼±ÅõǸé, ÆíÁý±â°¡ ±×¿¡ µû¶ó °»½ÅµË´Ï´Ù.

Java ¼Ò½º ÄÚµå ÆíÁý±â(JDT¿¡¼­ Á¦°ø)´Â Èï¹Ì·Î¿î ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʸ¦ º¸¿©ÁÝ´Ï´Ù.  Java ¾Æ¿ô¶óÀ̳ʴ ±¸Á¶È­µÈ Java ¼Ò½º ÄÚµå º¸±â¸¦ Á¦°øÇϸç, »ç¿ëÀÚ°¡ ÇØ´ç ÆíÁý±â¿¡¼­ ¼±¾ð, ¸Þ¼Òµå, Çʵ带 Ž»öÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.  ¾Æ¿ô¶óÀ̳ʰ¡ ¼±ÅûçÇ× À̺¥Æ®¸¦ º¸°íÇϸé Java ÆíÁý±â°¡ ¼¼·Î ´«±ÝÀÚ¸¦ °»½ÅÇÏ¿© ¾Æ¿ô¶óÀÌ³Ê ¿ä¼Ò°¡ ¼Ò½º ÄÚµå ¾îµð¿¡ À§Ä¡ÇØ ÀÖ´ÂÁö¸¦ Ç¥½ÃÇÕ´Ï´Ù.