´ÙÀ½Àº ¸ðµ¨ Á¦°øÀÚ°¡ ÆÀ ³í¸® ¸ðµ¨ Áö¿øÀ» ÀÌ¿ëÇϱâ À§ÇØ ¼öÇàÇÒ ¼ö ÀÖ´Â ÀÛ¾÷ÀÇ ¸ñ·ÏÀÔ´Ï´Ù.
´ÙÀ½ ¼½¼ÇÀº À§ÀÇ °¢ »çÇ׿¡ ´ëÇØ ÀÚ¼¼È÷ ¼³¸íÇÕ´Ï´Ù. org.eclipse.team.examples.filesystem Ç÷¯±×ÀÎÀº ÀÌ·¯ÇÑ »çÇ× Áß ¸î °¡Áö¿¡ ´ëÇØ ¼³¸íÇÏ´Â ¿¹Á¦¸¦ Æ÷ÇÔÇÕ´Ï´Ù. CVS ÀúÀå¼Ò¿¡¼ ÇÁ·ÎÁ§Æ®¸¦ üũ¾Æ¿ôÇÏ¿© ÀÌ ÇнÀ¼¸¦ Àд µ¿¾È ÂüÁ¶·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸éÃ¥»çÇ×: ¿¹Á¦ Ç÷¯±×ÀÎÀÇ ¼Ò½º ÄÚµå´Â ½Ã°£ÀÌ È帣¸é¼ º¯°æµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼ »ç¿ëµÇ´Â ³»¿ë°ú ÀÏÄ¡ÇÏ´Â »çº»À» °¡Á®¿Ã °æ¿ì 3.2 ¹öÀü ű×(´ëºÎºÐÀÇ °æ¿ì R3_2) ¶Ç´Â 2006³â 6¿ù 28ÀÏÀÇ ³¯Â¥ ű׸¦ »ç¿ëÇÏ¿© ÇÁ·ÎÁ§Æ®¸¦ üũ¾Æ¿ôÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÚ¿ø ¸ÊÇÎ API´Â ³í¸® ¸ðµ¨ Á¶ÀÛÀ» »ý·«ÇÏ¿© ÀǵµÀûÀ¸·Î ´Ü¼øÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ³í¸® ¸ðµ¨À» Ç¥½ÃÇϰųª Áß¿äÇÑ °ü·Ã Ãß°¡ Áö½ÄÀ» ¾òÀ» ¼ö ¾ø½À´Ï´Ù. ÀÌ APIÀÇ ¸ñÀûÀº ´Ü¼øÈ÷ Çϳª ÀÌ»óÀÇ ¸ðµ¨ ¿ä¼Ò¸¦ ÀÛ¾÷°ø°£ ÀÚ¿ø¿¡ ¸ÊÇÎÇÏ´Â °ÍÀÔ´Ï´Ù.
API´Â ´ÙÀ½ Ŭ·¡½º·Î ±¸¼ºµË´Ï´Ù.
Object getModelObject()
: ¸ÊÇÎÀÌ
ÆÄ»ýµÇ°Å³ª ¼öÁ¤µÈ ±âÁØ ¸ðµ¨ ¿ÀºêÁ§Æ®ResourceTraversal[]
getTraversals(ResourceMappingContext, IProgressMonitor)
: ¸ðµ¨
¿ÀºêÁ§Æ®¸¦ ±¸¼ºÇÏ´Â ÀÚ¿ø¿¡ Àû¿ëµÇ´Â ÀÚ¿ø ¼øÈ¸ ResourceTraversal
¿¡´Â
ÀÚ¿ø ¼¼Æ®¿Í, ¼øÈ¸ÀÇ ÀÚ¿øÀÌ ¿ø·¡ ¸ðµ¨
¿ÀºêÁ§Æ®¿Í ¿¬°üµÇ´Â ±íÀ̸¦ ³ªÅ¸³»´Â ±íÀÌ Ç÷¡±×°¡
Æ÷ÇԵ˴ϴÙ. Ŭ¶óÀ̾ðÆ®(¿¹: ÀúÀå¼Ò Á¦°øÀÚ)°¡
ÃÖ´ëÇÑ È¿À²ÀûÀÎ ¹æ¹ýÀ¸·Î ÇØ´ç Á¶ÀÛÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â
¹æ½ÄÀ¸·Î ¸ðµ¨ ÄÁÅÙÃ÷¸¦ ¼³¸íÇϱâ À§ÇØ ÀÚ¿ø ¸ÊÇÎÀ¸·Î
Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÚ¿ø ¼øÈ¸°¡ Á¦°øµË´Ï´Ù. ÁÖ¿ä
¸Þ¼Òµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
getResources()
getDepth()
ResourceMappingContext
¹× RemoteResourceMappingContext
»ç¿ëÀº ¾à°£ ´õ º¹ÀâÇϸç ÀÚ¿ø ¸ÊÇÎ ÄÁÅØ½ºÆ® ¼½¼Ç¿¡¼ ¼³¸íÇÕ´Ï´Ù.ÀÚ¿ø ¸ÊÇο¡´Â µÎ °¡Áö À¯ÇüÀÇ Ç÷¯±×ÀÎÀÌ Áß¿äÇÕ´Ï´Ù. ÇØ´ç Ç÷¯±×ÀÎÀº ÀÛ¾÷°ø°£ÀÇ ÀÚ¿øÀ¸·Î ±¸¼ºµÇ°Å³ª Æ÷ÇԵǴ ¸ðµ¨À» Á¦°øÇÏ´Â Ç÷¯±×Àΰú ÀÚ¿ø¿¡ ´ëÇÑ Á¶ÀÛÀ» ¼öÇàÇÏ·Á´Â Ç÷¯±×ÀÎÀÔ´Ï´Ù. ÀüÀÚÀÇ °æ¿ì´Â ´ÙÀ½ ¼½¼Ç¿¡¼ ¼³¸íÇϰí ÈÄÀÚÀÇ °æ¿ì´Â ³í¸® ¸ðµ¨ ÅëÇÕ¿¡ ´ëÇÑ ÀúÀå¼Ò ·Îµå¸Ê¿¡¼ ¼³¸íÇÕ´Ï´Ù.
¿ÀºêÁ§Æ®°¡ ÀÚ¿ø¿¡ ¸Â°Ô ¼öÁ¤µÇ´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀÌ
ÇÊ¿äÇÑ °æ¿ì, ÀÚ¿ø ƯÁ¤ Á¶Ä¡¸¦ ÄÁÅØ½ºÆ® ¸Þ´º¿¡ Ç¥½ÃÇϱâ À§ÇØ ÇØ´ç
¸ðµ¨ ¿ÀºêÁ§Æ®¸¦ IResource
¿¡ ¸Â°Ô ¼öÁ¤ÇÑ Ç÷¯±×ÀÎÀº ÀÌÁ¦
ResourceMapping
¿¡ ¸Â°Ô ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ¼³¸íÀÌ
ÇÊ¿äÇÏÁö ¾ÊÀº °æ¿ì¿¡´Â Ç÷¯±×ÀÎÀ» ¼öÁ¤ÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù. ¿¹¸¦ µé¾î, ÇöÀç
IFile
¿¡ ¸Â°Ô ¼öÁ¤µÇ´Â Java ÄÄÆÄÀÏ ´ÜÀ§(¿¹: JDT º¸±â¿¡ Ç¥½ÃµÇ´Â
*.java ÆÄÀÏ)´Â ResourceMapping
¿¡ ¸Â°Ô ¼öÁ¤ÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù. ¾Æ¹«·±
ÀÌÁ¡ÀÌ ¾ø±â ¶§¹®ÀÔ´Ï´Ù. ±×·¯³ª ÆÐŰÁö°¡ ¼ºêÆú´õ°¡ ¾Æ´Ñ
ÇØ´ç Æú´õÀÇ ÆÄÀϷθ¸ ±¸¼ºµÊÀ» Ç¥½ÃÇÏ·Á¸é Java ÆÐŰÁö¸¦
ResourceMapping
¿¡ ¸Â°Ô ¼öÁ¤ÇØ¾ß ÇÕ´Ï´Ù.
¸ðµ¨ ¿ä¼Ò¸¦ ÀÚ¿ø ¸ÊÇο¡ ¸Â°Ô ¼öÁ¤ÇÒ ¶§ ÀϹÝÀûÀÎ ¹æ¹ýÀº ¾î´ðÅÍ ÆÑÅ丮¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½Àº Ç÷¯±×ÀÎ ManifestÀÇ ¾î´ðÅÍ ÆÑÅ丮¸¦ ÄÁÆ®¸®ºä¼ÇÇÏ´Â XML ¸¶Å©¾÷ÀÔ´Ï´Ù.
<extension
point="org.eclipse.core.runtime.adapters">
<factory
class="org.eclipse.example.library.logical.AdapterFactory"
adaptableType="org.eclipse.example.library.Book">
<adapter type="org.eclipse.core.resources.mapping.ResourceMapping"/>
</factory>
<factory
class="org.eclipse.example.library.logical.AdapterFactory"
adaptableType="org.eclipse.example.library.Library">
<adapter type="org.eclipse.core.resources.mapping.ResourceMapping"/>
</factory>
...
</extension>
¾î´ðÅÍ ÆÑÅ丮 ±¸ÇöÀº ´ÙÀ½°ú °°½À´Ï´Ù.
public class AdapterFactory implements IAdapterFactory {
public Object getAdapter(Object adaptableObject, Class adapterType) {
if((adaptableObject instanceof EObject) && adapterType == ResourceMapping.class) {
return new EObjectResourceMapping((EObject)adaptableObject);
}
return null;
}
public Class[] getAdapterList() {
return new Class[] {ResourceMapping.class};
}
}
¸ðµ¨ ¿ÀºêÁ§Æ®´Â IAdaptable
ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì
Ç÷§Æû ¾î´ðÅÍ °ü¸®ÀÚ¸¦ ÂüÁ¶ÇÏ´ÂÁö È®ÀÎÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷Àº PlatformObject
ÀÇ
¼ºêŬ·¡½º¸¦ ÀÛ¼ºÇϰųª ´ÙÀ½ ÄÚµå ÇàÀ» »ç¿ëÇÏ¿© ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
Platform.getAdapterManager().getAdapter(Object, Class)
À§ÀÇ ³»¿ëÀº ¼±È£µÇ´Â Á¢±Ù ¹æ½ÄÀÔ´Ï´Ù. ±×·¯³ª ¸ðµ¨ ¿ÀºêÁ§Æ®´Â
IAdaptable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÒ ¼ö ÀÖÀ¸¸ç ¿äû ½Ã ÇϳªÀÇ ResourceMapping
ÀνºÅϽº¸¦ ¸í½ÃÀûÀ¸·Î ÀÛ¼ºÇÏ°í ¸®ÅÏÇÏ´Â getAdapter(Class)
±¸ÇöÀ» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â º¸´Ù °£´ÜÇÑ Á¢±Ù
¹æ½ÄÀÌÁö¸¸ ¸ðµ¨ÀÌ ÀÚ¿ø ÀûÀÀ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Áö½ÄÀ»
°®°í ÀÖ¾î¾ß ÇϹǷΠÀÚÁÖ »ç¿ëµÇÁö´Â ¾Ê½À´Ï´Ù.
°æ¿ì¿¡ µû¶ó, ³í¸® ¸ðµ¨ÀÇ Á¦°øÀÚ°¡ ¸ðµç ÄÁÅØ½ºÆ®¿¡¼ ÇØ´ç
¸ðµ¨ÀÌ IResource
¿¡ ¸Â°Ô ¼öÁ¤µÇ´Â °ÍÀ» ¿øÇÏÁö
¾Ê°Å³ª ¿ÀºêÁ§Æ® ÄÁÆ®¸®ºä¼Ç°ú ´Ù¸¥ ÄÁÅØ½ºÆ®¿¡ ´ëÇØ ¿ÀºêÁ§Æ®°¡
´Ù¸£°Ô ¼öÁ¤µÇ±â¸¦ ¿øÇÒ ¼ö ÀÖ½À´Ï´Ù. Workbench UI´Â À̸¦ À§ÇØ Æ¯¼ö Áß°£ ¾î´ðÅÍ
API, IContributorResourceAdapter
¸¦ Á¦°øÇÕ´Ï´Ù. ¿ÀºêÁ§Æ®
ÄÁÆ®¸®ºä¼Ç ÄÁÅØ½ºÆ®¿¡¼ ¿ÀºêÁ§Æ®¸¦ IResource
¿¡ ¸Â°Ô ¼öÁ¤ÇÏ´Â
°æ¿ì, Workbench´Â ¸ÕÀú ÀÚ¿øÀ» IContributorResourceAdapter
¿¡
¸Â°Ô ¼öÁ¤ÇÑ ÈÄ IResource
¿¡ ´ëÇÑ Á÷Á¢ ¼öÁ¤À» ½ÃµµÇÕ´Ï´Ù. ÀÌ
ÀÎÅÍÆäÀ̽ºÀÇ »õ ¼ºêÀÎÅÍÆäÀ̽º, IContributorResourceAdapter2
°¡
Ãß°¡µÇ¾ú½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â ResourceMapping
ÀÇ µ¿ÀÏÇÑ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.
ÇÑ °¡Áö Â÷ÀÌÁ¡Àº ¸ðµ¨ Á¦°øÀÚ°¡
IContributorResourceAdapter
¿¡ ÆÑÅ丮¸¦ µî·ÏÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.
Workbench°¡ instanceof È®ÀÎÀ» ¼öÇàÇÏ¿© ÄÁÆ®¸®ºä¼ÇµÈ ¾î´ðÅͰ¡ ¶ÇÇÑ
IContributorResourceAdapter2
ÀνºÅϽºÀÎÁö ¿©ºÎ¸¦ È®ÀÎÇϱ⠶§¹®ÀÔ´Ï´Ù.
Java ÆÐŰÁö¿¡ ´ëÇÑ ResourceMapping
¼ºêŬ·¡½ºÀÇ ±¸ÇöÀº ´ÙÀ½°ú °°½À´Ï´Ù.
public class JavaPackageResourceMapping extends ResourceMapping {
IPackageFragment package;
...
public getModelObject() {
return package;
}
public ResourceTraversals[] getTraversals(
ResourceMappingContext context,
IProgressMonitor monitor) {
return new ResourceTraversal[] {
new ResourceTraversal(
new IResource[] { package.getCorrespondingResource() },
IResource.DEPTH_ONE, IResource.NONE)
}
}
}
ÀÌ ¸ÊÇÎÀº ¸Å¿ì °£´ÜÇÑ ¸ÊÇÎÀ̹ǷΠ±¸ÇöÀÌ º¹ÀâÇÏÁö ¾Ê½À´Ï´Ù. ÀÚ¿ø ¸ÊÇÎ ±¸ÇöÀÇ º¹Àâµµ´Â ¹°·Ð ¸ðµ¨¸¶´Ù ´Ù¸¨´Ï´Ù.
ÀÚ¿ø ¸ÊÇÎ APIÀÇ ÇÑ °¡Áö ÀÌÁ¡Àº Ç÷¯±×ÀÎÀÌ ÀÚ¿ø ¸ÊÇÎ °üÁ¡¿¡¼ ¿øÇÏ´Â ¸ðµç Á¶ÀÛÀ» ±¸ÇöÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù(¿¹: CVS °»½Å, CVS È®¾à, CVS ű×, ºÒ·® µ¥ÄÚ·¹ÀÌ¼Ç µî). ±×·¯³ª Áö±Ý±îÁö µµÀÔµÈ API´Â ¸ðµ¨ÀÇ ·ÎÄà »óŸ¸ ó¸®ÇÕ´Ï´Ù. °³¹ßÀÚ °£¿¡ °øÀ¯µÉ ¼ö ÀÖ´Â ¸ðµ¨ ÀÛ¾÷À» ¼öÇàÇÏ´Â °æ¿ì, ¸ðµ¨ÀÇ ¿ø°Ý »óÅÂ(¿¹: ´Ù¸¥ »ç¿ëÀÚ°¡ ÀúÀå¼Ò¿¡ üũÀÎÇÑ ¸ðµ¨ÀÇ »óÅÂ)°¡ ÀÛ¾÷°ø°£ÀÇ »óÅÂ¿Í ´Ù¸¥ »óȲÀÌ ¹ß»ýÇÕ´Ï´Ù. CVS °»½ÅÀ» ¼öÇàÇÏ´Â °æ¿ì ¸ðµ¨ÀÇ ·ÎÄà »óŰ¡ ¿ø°Ý »óÅÂ¿Í ÀÏÄ¡Çϱ⸦ ¹Ù¶ó°Ô µË´Ï´Ù. ±×·¯³ª ÀÌ´Â Ãß°¡ ÆÄÀÏÀ» Æ÷ÇÔÇØ¾ß Çϰųª ÀϺΠÆÄÀÏÀ» Á¦°ÅÇØ¾ß ÇÔÀ» ÀǹÌÇÕ´Ï´Ù.
À̰ÍÀº ÀϺΠ³í¸® ¸ðµ¨¿¡ ´ëÇÑ ¹®Á¦°¡ ¾Æ´Õ´Ï´Ù. ¿¹¸¦ µé¾î, Java ÆÐŰÁö´Â ¸ðµ¨ÀÇ ¿ø°Ý »óÅ¿¡ °ü°è ¾øÀÌ ±íÀÌ 1·Î ¹æ¹®ÇÒ ¼ö ÀÖ´Â ÄÁÅ×À̳ÊÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ÀúÀå¼Ò Á¦°øÀÚ´Â È®¾à ½Ã Ãâ·Â »èÁ¦¸¦ Æ÷ÇÔÇØ¾ß ÇÏ¸ç °»½Å ½Ã ÀÔ·Â Ãß°¡¸¦ Æ÷ÇÔÇØ¾ß ÇÔÀ» ½±°Ô ÆÇº°ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ÀϺΠ³í¸® ¸ðµ¨À» ±¸¼ºÇÏ´Â ÀÚ¿øÀº ½Ã°£ÀÌ Áö³²¿¡ µû¶ó º¯°æµÉ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¸ðµ¨ ¿ä¼Ò¸¦ ±¸¼ºÇÏ´Â ÀÚ¿øÀº Manifest ÆÄÀÏÀÇ ÄÁÅÙÃ÷ ¶Ç´Â ±âŸ À¯»çÇÑ ¸ÞÄ¿´ÏÁò¿¡ µû¶ó ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¿ø ¸ÊÇÎÀÌ ¿Ã¹Ù¸¥ ¼øÈ¸¸¦ ¸®ÅÏÇÏ·Á¸é Manifest ÆÄÀÏÀÇ ¿ø°Ý ÄÁÅÙÃ÷(·ÎÄà ÄÁÅÙÃ÷¿Í ´Ù¸¥ °æ¿ì)¿¡ ¾×¼¼½ºÇÏ¿© Ãß°¡ ÀÚ¿øÀ» Æ÷ÇÔÇØ¾ß ÇÏ´ÂÁö ¿©ºÎ¸¦ È®ÀÎÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Ãß°¡ ÀÚ¿øÀÌ ÀÛ¾÷°ø°£¿¡ ¾øÀ» ¼öµµ ÀÖÁö¸¸ ÀúÀå¼Ò Á¦°øÀÚ´Â ¼±ÅÃµÈ Á¶Ä¡°¡ ¼öÇàµÉ ¶§ ÀÚ¿ø ±â´ÉÀ» È®ÀÎÇÏ´Â ¹æ¹ýÀ» ¾Ë°í ÀÖ½À´Ï´Ù.
ÀÌó·³ º¸´Ù º¹ÀâÇÑ ¸ðµ¨À» Áö¿øÇϱâ À§ÇØ RemoteResourceMappingContext
¸¦
ResourceMapping#getTraversals
¸Þ¼Òµå·Î Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÄÁÅØ½ºÆ®°¡ Á¦°øµÇ¸é ¸ÊÇο¡¼ ÇØ´ç ÄÁÅØ½ºÆ®¸¦ »ç¿ëÇÏ¿© ÇÊ¿äÇÑ ¸ðµç
ÀÚ¿øÀÌ ¼øÈ¸¿¡ Æ÷ÇԵǾú´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÄÁÅØ½ºÆ®°¡
Á¦°øµÇÁö ¾Ê´Â °æ¿ì ¸ÊÇÎÀº ·ÎÄà »óŸ¸
ÇØ´çµÇ´Â °ÍÀ¸·Î °¡Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ResourceMapping
Àº ¸ðµ¨À» ±¸¼ºÇÏ´Â
ÀÚ¿øÀÌ ½Ã°£ °æ°ú¿¡ µû¶ó º¯°æµÇ°í ÇØ´ç ¸ðµ¨À»
±¸¼ºÇÏ´Â ÀÚ¿øÀ» Æ÷ÇÔÇÏ´Â ´Ü¼ø ¼øÈ¸(¹× ÇØ´ç
ÀÚ¿ø)·Î ¸ðµ¨°ú ÀÚ¿ø °£ÀÇ °ü°è¸¦ ¼³¸íÇÒ ¼ö ¾ø´Â
°æ¿ì getTraversals
¸Þ¼Òµå¿¡ Á¦°øµÇ´Â
ÄÁÅØ½ºÆ®¿¡ À¯ÀÇÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, Java ÆÐŰÁöÀÇ
ÀÚ¿øÀÌ ½Ã°£ °æ°ú¿¡ µû¶ó º¯°æµÇ´õ¶óµµ ÆÐŰÁö¸¦ ±íÀÌ
1ÀÇ Æú´õ·Î ¼³¸íÇÒ ¼ö ÀÖÀ¸¹Ç·Î Java ÆÐŰÁö¿¡ ´ëÇÑ ÀÚ¿ø
¸ÊÇÎÀº ÀÚ¿ø ¸ÊÇÎ ÄÁÅØ½ºÆ®¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù.
º¸´Ù º¹ÀâÇÑ ¿¹Á¦·Î, ¿©·¯ À̹ÌÁö°¡ Æ÷ÇÔµÈ HTML ÆÄÀÏÀ»
°í·ÁÇÒ ¼ö ÀÖ½À´Ï´Ù. HTML ÆÄÀÏÀÇ À̹ÌÁö ÂüÁ¶°¡
ÇØ´ç ÆÄÀÏ ¸ðµ¨ÀÇ ÀϺÎÀÎ °ÍÀ¸·Î °¡Á¤ÇÕ´Ï´Ù. ÀúÀå¼Ò¿¡¼
HTML ÆÄÀÏÀÇ ·ÎÄà ÄÁÅÙÃ÷¸¦ °»½ÅÇÏ´Â °æ¿ì »ç¿ëÀÚ´Â »õ
À̹ÌÁö°¡ Æ÷Ç﵃ °ÍÀ¸·Î ¿¹»óÇÕ´Ï´Ù. HTML ÆÄÀÏ ¸ðµ¨¿¡ ´ëÇÑ
ResourceMapping
ÀÇ getTraversals
¸Þ¼Òµå´Â ´ÙÀ½°ú °°ÀÌ Ç¥½ÃµË´Ï´Ù.
public class HTMLResourceMapping extends ResourceMapping {
private HTMLFile htmlFile;
public ResourceTraversal[] getTraversals(ResourceMappingContext context,
IProgressMonitor monitor)
IResource[] resources = htmlFile.getResources();
if (context instanceof RemoteResourceMappingContext) {
// Look for any additional resources on the server
RemoteResourceMappingContext remoteContext = (RemoteResourceMappingContext)context;
IFile file = htmlFile.getFile();
if (remoteContext.hasRemoteChange(file, monitor)) {
IStorage storage = remoteContext.fetchRemoteContents(file, monitor);
IResource[] additionalResources = getReferences(storage.getContents());
resources = combine(resources, additionalResources);
}
if (remoteContext.isThreeWay() && remoteContext.hasLocalChange(file, monitor)) {
IStorage storage = remoteContext.fetchBaseContents(file, monitor);
IResource[] additionalResources = getReferences(storage.getContents());
resources = combine(resources, additionalResources);
}
}
return new ResourceTraversal[] {
new ResourceTraversal(resources, IResource.DEPTH_ZERO, IResource.NONE)};
}
}
¸ðµ¨¿¡´Â µÎ °¡Áö ÀÚ¿ø ¼¼Æ®°¡ Æ÷ÇԵ˴ϴÙ. ÇÑ ¼¼Æ®´Â ÀÛ¾÷°ø°£ ³» HTML ÆÄÀÏÀÇ ·ÎÄà ÄÁÅÙÃ÷¿¡¼ ÆÄ»ýµÇ¸ç ´Ù¸¥ ¼¼Æ®´Â ¿ø°Ý ÆÄÀÏ ¹× ±âÁØ ÆÄÀÏÀÇ ÄÁÅÙÃ÷¿¡¼ ¾ò½À´Ï´Ù. µÎ °¡Áö ¼¼Æ® ¸ðµÎ ÀÛ¾÷°ø°£¿¡ Á¸ÀçÇÏÁö ¾Ê´Â ÀÚ¿øÀÌ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ·ÎÄà HTML ÆÄÀÏ¿¡ ÀÛ¾÷°ø°£¿¡ Á¸ÀçÇÏÁö ¾Ê´Â À̹ÌÁö¿¡ ´ëÇÑ »ó´ë ¸µÅ©°¡ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÀÚ¿øÀÌ Æ÷ÇԵǾî¾ß ÇÏ¸ç ¿ø°Ý À§Ä¡ÀÎ °æ¿ì ÆäÄ¡µË´Ï´Ù. ¿ø°Ý ÆÄÀÏÀÇ °æ¿ì, »õ ¿ø°Ý ÄÁÅÙÃ÷¸¦ ´Ù¿î·ÎµåÇÒ ¶§ ÆäÄ¡ÇØ¾ß ÇÏ´Â Ãß°¡ À̹ÌÁö¸¦ ÂüÁ¶ÇÏ´Â »õ »çº»ÀÌ Æ÷ÇԵ˴ϴÙ.
¸ðµ¨ Á¦°øÀÚ´Â °ü·Ã ÀÚ¿ø ¸ÊÇÎÀ» ÇÔ²² ±×·ìÈÇÏ´Â ¼ö´ÜÀÔ´Ï´Ù. ´ÙÀ½Àº ModelProvider Ŭ·¡½º¿¡ ´ëÇÑ ¸µÅ©ÀÔ´Ï´Ù. ÀÌ Å¬·¡½ºÀÇ ¼¼ °¡Áö ±âº» ¿ëµµ´Â ´ÙÀ½°ú °°½À´Ï´Ù.
IResourceMappingMerger
´Â
¸ðµ¨ Á¦°øÀÚ¸¦ ¼öÁ¤ÇÏ¿© ¾ò½À´Ï´Ù. ´ÙÀ½Àº modelProvider È®Àå Á¤ÀÇ¿¡ ´ëÇÑ ¿¹Á¦ÀÔ´Ï´Ù.
<extension
id="modelProvider"
name="Library Example"
point="org.eclipse.core.resources.modelProviders">
<modelProvider
class="org.eclipse.team.examples.library.adapt.LibraryModelProvider"
name="Library Example"/>
<extends-model id="org.eclipse.core.resources.modelProvider"/>
<enablement> <test property="org.eclipse.core.resources.projectNature" value="org.eclipse.team.examples.library.view.nature" />
</enablement>
</extension>
LibraryModelProvider
´Â ModelProvider
ÀÇ ¼ºêŬ·¡½ºÀÔ´Ï´Ù.
Àο¡À̺í¸ÕÆ® ±ÔÄ¢Àº ¶óÀ̺귯¸® ¸ðµ¨ÀÌ ÇØ´ç ¸ðµ¨À» Áö¼Ó½ÃŰ´Â ÀÚ¿ø°ú
ÀÏÄ¡½ÃŰ´Â µ¥ »ç¿ëµË´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼, ¸ðµ¨ Á¦°øÀÚ´Â
¶óÀ̺귯¸® ³×ÀÌó°¡ ÀÖ´Â ÇÁ·ÎÁ§Æ®¿¡¼ ÀÚ¿øÀ» ÀÏÄ¡½Ãŵ´Ï´Ù.
¸ðµ¨ Á¦°øÀÚ°¡ Á¤ÀǵǸé ResourceMapping#getModelProviderId()
¸Þ¼Òµå¸¦ ´ëüÇÏ¿© ¸ðµ¨ Á¦°øÀÚÀÇ ID¸¦ ¸®ÅÏÇØ¾ß ÇÕ´Ï´Ù.
public String getModelProviderId() {
return "org.eclipse.team.examples.library.adapt.modelProvider";
}
Á¦°øÀÚÀÇ Àο¡À̺í¸ÕÆ® ±ÔÄ¢°ú ÀÏÄ¡ÇÏ´Â ÀÚ¿ø¿¡
´ëÇÑ ÀÚ¿ø ¸ÊÇÎÀÇ ¿Ã¹Ù¸¥ ¹Ý´ë ÀÚ¿ø ¸ÊÇÎÀ» °¡Á®¿À·Á¸é ¶ÇÇÑ
getMapping
¸Þ¼Òµå Áß Çϳª ¶Ç´Â µÎ ¸Þ¼Òµå¸¦ ¸ðµÎ
´ëÃ¼ÇØ¾ß ÇÕ´Ï´Ù. ´ëÃ¼ÇØ¾ß ÇÏ´Â ¸Þ¼Òµå´Â ¸ðµ¨ÀÌ º¹¼ö ÀÚ¿øÀ»
Æ÷ÇÔÇÏ´Â ¿ä¼Ò¸¦ °®´ÂÁö ¿©ºÎ¿¡ µû¶ó ´Ù¸¨´Ï´Ù. ¸ðµ¨ ¿ä¼Ò°¡
´ÜÀÏ ÀÚ¿ø¿¡ ¸ÊÇεǴ °æ¿ì, ´ÜÀÏ IResource
Àμö¸¦
Çã¿ëÇÏ´Â ¸Þ¼Òµå¸¦ ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì,
ÀÚ¿ø ¹è¿À» Çã¿ëÇÏ´Â ¸Þ¼Òµå¸¦ ´ëÃ¼ÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½Àº
´ÜÀÏ ÀÚ¿ø ÄÉÀ̽º¸¦ »ç¿ëÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù.
´ÙÀ½ ¿¹Á¦ ¸Þ¼Òµå´Â ¶óÀ̺귯¸® ¸ðµ¨ ÆÄÀÏÀ»
ÇØ´ç ÀÚ¿ø ¸ÊÇο¡ ·¦ÇÎÇÕ´Ï´Ù. ¶ÇÇÑ ¸ðµ¨ Á¦°øÀÚ¿¡°Ô
Áß¿äÇÑ ÆÄÀÏÀÌ µé¾î ÀÖ´Â Æú´õ¸¦ ·¦ÇÎÇÕ´Ï´Ù.
public class LibraryModelProvider extends ModelProvider {
public ResourceMapping[] getMappings(IResource resource,
ResourceMappingContext context, IProgressMonitor monitor) {
if (isModelFile(resource)) {
// Return a resource mapping on the file
return new LibraryResourceMapping(resource);
} if (containsModelFiles(resource)) {
// Create a deep resource mapping on the container
return new LibraryContainerResourceMapping(resource);
}
// The resource is not of interest to this model provider
return null;
}
}
Ŭ¶óÀÌ¾ðÆ®´Â ¸ðµ¨ Á¦°øÀÚ¿¡ ¾×¼¼½ºÇÏ¿© ¸ðµ¨ Á¦°øÀÚ°¡ Á¶ÀÛÀÌ ¼öÇàµÉ ÀÚ¿øÀ» °í·ÁÇÏ´ÂÁö ¿©ºÎ¸¦ ÆÇº°ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ ¼½¼ÇÀº ¸ðµ¨ Á¦°øÀÚ API¸¦ »ç¿ëÇÏ¿© ¼±ÅÃµÈ ÀÚ¿ø ¶Ç´Â ¸ðµ¨ ¿ä¼Ò ¼¼Æ®¿¡ ´ëÇØ ÆÀ Á¶ÀÛÀÌ ¼öÇàµÉ ¶§ Á¶ÀÛÇØ¾ß ÇÏ´Â Àüü ÀÚ¿ø ¸ÊÇÎ ¼¼Æ®¸¦ ÆÇº°ÇÏ´Â ÆÀ Á¶ÀÛ¿¡ Á¦°øµÉ API¸¦ ¼³¸íÇÕ´Ï´Ù.
ÀÚ¿ø¿¡ ´ëÇØ ¼öÇàµÈ Á¶ÀÛÀº ¸ÕÀú À¯È¿¼ºÀ» °ËÁõÇÏ¿© »ç¿ëÀÚ°¡ ÀáÀçÀûÀÎ ºÎÀÛ¿ëÀ» È®ÀÎÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½Àº ÀÚ¿ø º¯°æÀÇ À¯È¿¼º °ËÁõ¿¡ ÇÊ¿äÇÑ ´Ü°èÀÔ´Ï´Ù.
IResourceChangeDescriptionFactory
¸¦
»ç¿ëÇÏ¿© º¯°æ»çÇ׿¡ ´ëÇÑ ¼³¸íÀ» ÀÛ¼ºÇϽʽÿÀ. ÆÑÅ丮´Â
Á¶ÀÛ ¼öÇà ½Ã °á°ú ÀÚ¿ø µ¨Å¸ÀÇ ¸ð¾çÀ» ¹Ý¿µÇÏ´Â
IResourceDelta
¸¦ »ý¼ºÇÕ´Ï´Ù.ResourceChangeValidator
¸¦ »ç¿ëÇÏ¿©
º¯°æÀÇ À¯È¿¼ºÀ» °ËÁõÇϽʽÿÀ.
À¯È¿¼º °ËÁõ±â´Â ¿µÇâ¹ÞÀº ÀÚ¿ø¿¡ °ü½É»çÇ×À» µî·ÏÇÑ
¸ðµç ¸ðµ¨ Á¦°øÀÚ¸¦ ÂüÁ¶ÇÕ´Ï´Ù. ÇØ´ç °á°ú´Â ¿ø·¡
¸ðµ¨ÀÇ ID°¡ Æ÷ÇÔµÈ Çϳª ÀÌ»óÀÇ »óÅ¿Í, ¸ðµ¨¿¡
´ëÇÑ Á¶ÀÛÀÇ ÀáÀçÀûÀÎ ºÎÀÛ¿ë¿¡ ´ëÇÑ ¼³¸íÀÔ´Ï´Ù.ÆÀ Á¦°øÀÚ°¡ headless º´ÇÕÀ» ½ÃµµÇÒ ¶§ ´ÙÀ½À» ¼öÇàÇÕ´Ï´Ù.
ÆÀ Á¶ÀÛ ÄÁÅØ½ºÆ®ÀÇ ¸ðµ¨ ¿ä¼Ò Ç¥½Ã´Â °øÅë ³×ºñ°ÔÀÌÅÍ ÇÁ·¹ÀÓ¿öÅ©·Î °¡´ÉÇÕ´Ï´Ù.
À§ÀÇ ´Ü°è¸¦ ¼öÇàÇÏ¸é ÆÀ Á¶ÀÛ¿¡¼ »ç¿ëÇÏ´Â ´ëÈ »óÀÚ¿¡ ¸ðµ¨À» Ç¥½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù. º´ÇÕ ¹Ì¸®º¸±â ÅëÇÕÀ» À§Çؼ´Â Ãß°¡ ´Ü°è°¡ ÇÊ¿äÇÕ´Ï´Ù.
ÆÄÀÏ È÷½ºÅ丮 ¹× ¸ðµ¨ ¿ä¼Ò È÷½ºÅ丮 ¿µ¿ªÀÇ °³¼±»çÇ×Àº ´ÙÀ½°ú °°½À´Ï´Ù.
¿ø°Ý ã¾Æº¸±â¸¦ Áö¿øÇϱâ À§ÇØ ´ÙÀ½ ±â´ÉÀÌ Á¦°øµÇ¾ú½À´Ï´Ù.
ÆÀ Á¦°øÀÚ´Â ¿ÀºêÁ§Æ® ÄÁÆ®¸®ºä¼ÇÀÌ ÀÚ¿ø ¸ÊÇÎ ÀÛ¾÷À» ¼öÇàÇϵµ·Ï º¯È¯µÇ´Â °Í°ú µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î °£´ÜÇÑ µ¥ÄÚ·¹ÀÌÅͰ¡ ÀÚ¿ø ¸ÊÇÎ ÀÛ¾÷À» ¼öÇàÇϵµ·Ï º¯È¯ÇÏ¿© ¸ðµ¨ ¿ä¼Ò¸¦ µ¥ÄÚ·¹À̼ÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ³í¸® ¸ðµ¨ ¿ä¼Ò µ¥ÄÚ·¹À̼ǿ¡´Â ÇÑ °¡Áö ¹®Á¦Á¡ Ãø¸éÀÌ ÀÖ½À´Ï´Ù. Áï, ¸ðµ¨ ¿ä¼Ò°¡ ÀÚ¿ø¿¡ ´ëÇØ ÀÏ´ëÀÏ·Î ¸ÊÇεÇÁö ¾Ê´Â °æ¿ì ±âº» ÀÚ¿øÀÌ º¯°æµÇ¸é ¸ðµ¨ ¿ä¼Ò°¡ ·¹ÀÌºí °»½ÅÀ» ¹ÞÁö ¸øÇÕ´Ï´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ, ¸ðµ¨ Á¦°øÀÚ¿¡°Ô ÆÀ µ¥ÄÚ·¹À̼ǿ¡
¿µÇâÀ» ÁÙ ¼ö ÀÖ´Â »óÅ º¯°æ»çÇ׿¡ ´ëÇØ ¾×¼¼½º ±ÇÇÑÀ» ºÎ¿©ÇÏ´Â ITeamStateProvider
°¡ µµÀԵǾú½À´Ï´Ù. ¶ÇÇÑ
¸ðµ¨ º¸±â´Â SynchronizationStateTester
¸¦
»ç¿ëÇÏ¿© ³í¸® ¸ðµ¨ ¿ä¼ÒÀÇ ·¹À̺íÀ» °»½ÅÇØ¾ß ÇÏ´Â ½ÃÁ¡À» ÆÇº°ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ API´Â
ITeamStateProvider
ÀÎÅÍÆäÀ̽º¿¡ ÀÇÁ¸ÇÏ¿© ÀÚ¿øÀÇ ÆÀ »óŰ¡ º¯°æµÇ¾î IDecorationContext
ÀÇ
ÀϺημ ÆÀ µ¥ÄÚ·¹ÀÌÅÍ¿¡ Àü´ÞÇÒ ¼ö ÀÖ´Â ½ÃÁ¡À» ÆÇº°ÇÕ´Ï´Ù.