ÀÛ¾÷°ø°£ ÀúÀå Âü¿©

ÀÛ¾÷°ø°£ ÀúÀå 󸮴 Workbench°¡ »ç¿ëÀÚ¿¡ ÀÇÇØ Á¾·áµÇ°Å³ª Ç÷§Æû¿¡ ÀÇÇØ ÁÖ±âÀûÀ¸·Î Á¾·áµÉ ¶§ Æ®¸®°ÅµË´Ï´Ù.  Ç÷¯±×ÀÎÀº ÀÛ¾÷°ø°£ÀÇ ³ª¸ÓÁö Áö¼ÓÀû µ¥ÀÌÅͰ¡ ÀúÀåµÉ ¶§¸¶´Ù Áß¿äÇÑ Ç÷¯±×ÀÎ µ¥ÀÌÅͰ¡ µð½ºÅ©¿¡ ÀúÀåµÉ ¼ö ÀÖµµ·Ï ÀÛ¾÷°ø°£ ÀúÀå ÇÁ·Î¼¼½º¿¡ Âü¿©ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÛ¾÷°ø°£ ÀúÀå ÇÁ·Î¼¼½º¸¦ »ç¿ëÇÏ¿© Ç÷¯±×ÀΠȰ¼ºÈ­ °£¿¡ ¹ß»ýÇÏ´Â º¯°æ»çÇ×À» ÃßÀûÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

ÀúÀå Âü¿©ÀÚ ±¸Çö

ÀÛ¾÷°ø°£ ÀúÀå¿¡ Âü¿©ÇÏ·Á¸é ÀÛ¾÷°ø°£¿¡ ÀúÀå Âü¿©ÀÚ¸¦ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÌ ÀÛ¾÷Àº Ç÷¯±×ÀÎÀÇ startup ¸Þ¼Òµå µ¿¾È ¼öÇàµË´Ï´Ù. ¶ÇÇÑ Ç÷¯±×ÀÎÀÌ ¸¶Áö¸·À¸·Î Á¾·áµÇ¾úÀ» ¶§ ¿©±â¼­ »ç¿ëÀÚ°¡ ÀúÀåÇÑ »óŸ¦ ÀнÀ´Ï´Ù.

ÀúÀå ÇÁ·Î¼¼½º¸¦ ¼³¸íÇÏ´Â °£´ÜÇÑ Ç÷¯±×ÀÎÀ» »ìÆìº¸°Ú½À´Ï´Ù.

package com.example.saveparticipant;

import org.eclipse.core.runtime.*;
import org.eclipse.core.resources.*;
import java.io.File;
import java.util.*;

public class MyPlugin extends Plugin {
      private static MyPlugin plugin;

      public MyPlugin(IPluginDescriptor descriptor) {
         super(descriptor);
         plugin = this;
      }

      public static MyPlugin getDefault() {
         return plugin;
      }

      protected void readStateFrom(File target) {
      }

      public void startup() throws CoreException {
         super.startup();
ISaveParticipant saveParticipant = new MyWorkspaceSaveParticipant();
ISavedState lastState =
            ResourcesPlugin.getWorkspace().addSaveParticipant(this, saveParticipant);
         if (lastState == null)
            return;
         IPath location = lastState.lookup(new Path("save"));
         if (location == null)
            return;
      // the plugin instance should read any important state from the file.
         File f = getStateLocation().append(location).toFile();
         readStateFrom(f);
      }

      protected void writeImportantState(File target) {
      }
   }

ISaveparticipant´Â ÀÛ¾÷°ø°£ ÀúÀå Âü¿©ÀÚ ÇÁ·ÎÅäÄÝÀ» Á¤ÀÇÇÕ´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ±¸ÇöÀº ¼­·Î ´Ù¸¥ ÀúÀå ÇÁ·Î¼¼½º ´Ü°è¿¡ ´ëÇÑ ÀÛµ¿À» Á¦°øÇÕ´Ï´Ù. ´Ü°è¸¦ »ìÆì º¸°í WorkspaceSaveParticipant Ŭ·¡½º°¡ °¢ ´Ü°è¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀ» »ìÆì º¸µµ·Ï ÇսôÙ.

      public void prepareToSave(ISaveContext context) throws CoreException {
      }
public void saving(ISaveContext context) throws CoreException {
         switch (context.getKind()) {
            case ISaveContext.FULL_SAVE:
         MyPlugin myPluginInstance = MyPlugin.getDefault();
               // save the plug-in state
               int saveNumber = context.getSaveNumber();
         String saveFileName = "save-" + Integer.toString(saveNumber);
      File f = myPluginInstance.getStateLocation().append(saveFileName).toFile();
               // if we fail to write, an exception is thrown and we do not update the path
               myPluginInstance.writeImportantState(f);
               context.map(new Path("save"), new Path(saveFileName));
               context.needSaveNumber();
      break;
            case ISaveContext.PROJECT_SAVE:
               // get the project related to this save operation
               IProject project = context.getProject();
               // save its information, if necessary
      break;
            case ISaveContext.SNAPSHOT:
               // This operation needs to be really fast because
               // snapshots can be requested frequently by the
               // workspace.
      break;
         }
      }

ISaveContext´Â ÀúÀå Á¶ÀÛ¿¡ ´ëÇÑ Á¤º¸¸¦ ¼³¸íÇÕ´Ï´Ù. ÀúÀå Á¶ÀÛ¿¡´Â,  FULL_SAVE, SNAPSHOT ¹× PROJECT_SAVEÀÇ ¼¼ °¡Áö°¡ ÀÖ½À´Ï´Ù. ÀúÀå Âü¿©ÀÚ´Â ¼ö½ÅÇÑ ÀúÀå À̺¥Æ® À¯Çü¿¡ ´ëÇØ ÀûÀýÇÑ Ã³¸®¸¦ ¼öÇàÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ½º³À¼¦ À̺¥Æ®°¡ ÀÚÁÖ ¹ß»ýÇÒ ¼ö Àִµ¥ ½º³À¼¦ À̺¥Æ®´Â Ç÷¯±×ÀÎÀÌ Áß¿äÇÑ »óŸ¦ ÀúÀåÇÒ ¼ö ÀÖµµ·Ï °èȹµË´Ï´Ù. °íÀåÀÌ ¹ß»ýÇÒ °æ¿ì ´Ù½Ã °è»êÇÒ ¼ö ÀÖ´Â »óŸ¦ ÀúÀåÇÏ´Â µ¥ ¿À·£ ½Ã°£ÀÌ ¼Ò¿äµÇ¸é Ç÷§ÆûÀÌ ´À·ÁÁý´Ï´Ù.

ÀúÀå ¹øÈ£´Â ¼øÂ÷ ¹øÈ£(save-1, save-2 µî)¸¦ »ç¿ëÇÏ¿© À̸§ ÁöÁ¤µÈ µ¥ÀÌÅÍ ÀúÀå ÆÄÀÏÀ» ÀÛ¼ºÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. °¢ ÆÄÀÏÀº ÀúÀå ¹øÈ£¿Í °ü°è ¾øÀÌ ³í¸® ÆÄÀÏ À̸§(save)¿¡ ¸ÊÇε˴ϴÙ. Ç÷¯±×ÀÎ µ¥ÀÌÅÍ´Â ÇØ´ç ÆÄÀÏ¿¡ ±â·ÏµÇ±â ¶§¹®¿¡ ¸¶Áö¸· ÀúÀå Á¶ÀÛ¿¡ »ç¿ëµÈ ƯÁ¤ ÀúÀå ¹øÈ£¸¦ ¸ð¸¦ °æ¿ì¿¡µµ ³ªÁß¿¡ °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç÷¯±×ÀÎÀÇ ½ÃÀÛ Äڵ忡¼­ »ìÆì º» ÀÌ ±â¼úÀ» »ó±âÇϽʽÿÀ.

IPath location = lastState.lookup(new Path("save"));

µ¥ÀÌÅ͸¦ ÀúÀåÇÏ°í ÆÄÀÏ À̸§À» ¸ÊÇÎÇÏ¿´´Ù¸é, ÀÛ¾÷°ø°£ ÀúÀå¿¡ Âü¿©ÇßÀ¸¸ç ÀúÀå Ȱµ¿¿¡ ¹øÈ£¸¦ ÁöÁ¤ÇÏ·Á ÇÔÀ» Ç¥½ÃÇϱâ À§ÇØ needSaveNumber¸¦ È£ÃâÇÕ´Ï´Ù. ÀúÀå ¹øÈ£¸¦ »ç¿ëÇÏ¿© À§ÀÇ µ¥ÀÌÅÍ ÆÄÀÏÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. 

      public void doneSaving(ISaveContext context) {
         MyPlugin myPluginInstance = MyPlugin.getDefault();

         // delete the old saved state since it is not necessary anymore
         int previousSaveNumber = context.getPreviousSaveNumber();
         String oldFileName = "save-" + Integer.toString(previousSaveNumber);
         File f = myPluginInstance.getStateLocation().append(oldFileName).toFile();
         f.delete();
      }

¿©±â¼­, ÀÌÀü ÀúÀå Á¶ÀÛÀÇ ÀúÀå Á¤º¸¸¦ Á¤¸®ÇÕ´Ï´Ù. getPreviousSaveNumber¸¦ »ç¿ëÇÏ¿© Áö±Ý ¿Ï·áÇÑ ÀúÀå Á¶ÀÛÀÌ ¾Æ´Ñ ÀÌÀü ÀúÀå Á¶ÀÛ¿¡¼­ ÁöÁ¤ÇÑ ÀúÀå ¹øÈ£¸¦ °¡Á®¿É´Ï´Ù. ÀÌ ¹øÈ£¸¦ »ç¿ëÇÏ¿© »èÁ¦ÇØ¾ß ÇÏ´Â ÆÄÀÏ À̸§À» ±¸¼ºÇÕ´Ï´Ù. ÇöÀç ÀúÀå ÆÄÀÏ ¹øÈ£¸¦ ÀÌ¹Ì ¸ÊÇÎÇßÀ¸¹Ç·Î ÀúÀå »óÅÂÀÇ ³í¸® ÆÄÀÏ ¸ÊÀ» »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. 

      public void rollback(ISaveContext context) {
         MyPlugin myPluginInstance = MyPlugin.getDefault();

         // since the save operation has failed, delete the saved state we have just written
         int saveNumber = context.getSaveNumber();
         String saveFileName = "save-" + Integer.toString(saveNumber);
      File f = myPluginInstance.getStateLocation().append(saveFileName).toFile();
         f.delete();
      }

¿©±â¼­, ¹æ±Ý ÀúÀåÇÑ »óŸ¦ »èÁ¦ÇÕ´Ï´Ù. Áö±Ý ÀúÀåÇÑ ÆÄÀÏ À̸§À» ±¸¼ºÇϱâ À§ÇØ ÇöÀç ÀúÀå ¹øÈ£¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ÆÄÀÏ À̸§À» ISaveContext¿¡ ¸ÊÇÎÇß´Ù´Â »ç½ÇÀº Áß¿äÇÏÁö ¾Ê½À´Ï´Ù. Ç÷§ÆûÀº ÀúÀå Á¶ÀÛÀÌ ½ÇÆÐÇϸé ÄÁÅØ½ºÆ®¸¦ ¹ö¸³´Ï´Ù.

Ç÷¯±×ÀÎÀÌ ÀúÀå ¶óÀÌÇÁ »çÀÌŬ µ¿¾È ¿¹¿Ü¸¦ ó¸®Çϸé, ÇöÀç ÀúÀå Á¶ÀÛ¿¡¼­ Á¦¿ÜµÇ°í ³ª¸ÓÁö ¶óÀÌÇÁ »çÀÌŬ ¸Þ¼Òµå¸¦ °¡Á®¿ÀÁö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¾î, saving ¸Þ¼Òµå µ¿¾È ½ÇÆÐÇϸé rollback ¶Ç´Â doneSaving ¸Þ½ÃÁö°¡ ¼ö½ÅµÇÁö ¾Ê½À´Ï´Ù. 

ÀÌÀü¿¡ ÀúÀåÇÑ »óÅ »ç¿ë

ÀÛ¾÷°ø°£¿¡ ÀúÀå Âü¿©ÀÚ¸¦ Ãß°¡ÇÒ ¶§ ISavedState ¿ÀºêÁ§Æ®°¡ ¸®ÅϵǴµ¥, ÀÌ ¿ÀºêÁ§Æ®´Â ¸¶Áö¸· ÀúÀå Á¶ÀÛ µ¿¾È Ç÷¯±×ÀÎÀÌ ÀúÀåÇÑ ³»¿ë(¶Ç´Â Ç÷¯±×ÀÎÀÌ ÀÌÀü¿¡ »óŸ¦ ÀúÀåÇÏÁö ¾ÊÀº °æ¿ì ³Î)À» ¼³¸íÇÕ´Ï´Ù. ÀÌ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ¿© ÀÌÀü ÀúÀå ÆÄÀÏ(ÀúÀå ¹øÈ£ ¹× ÆÄÀÏ ¸Ê »ç¿ë)¿¡¼­ Á¤º¸¿¡ ¾×¼¼½ºÇϰųª Ç÷¯±×ÀΠȰ¼ºÈ­ °£¿¡ ¹ß»ýÇÑ º¯°æ»çÇ×À» ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀúÀå ÆÄÀÏ¿¡ ¾×¼¼½º

ÀúÀå ¹øÈ£¿¡ µû¶ó ³í¸®ÀûÀ¸·Î À̸§ ÁöÁ¤µÈ ÆÄÀÏ À̸§À» ÀúÀåÇϱâ À§ÇØ ÆÄÀÏ ¸ÊÀÌ »ç¿ëµÈ °æ¿ì, ÀÌ µ¿ÀÏÇÑ ¸ÊÀ» »ç¿ëÇÏ¿© ¸¶Áö¸·À¸·Î ¾Ë·ÁÁø ÀúÀå »óÅ¿¡¼­ µ¥ÀÌÅ͸¦ °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù.

ISaveParticipant saveParticipant = new MyWorkspaceSaveParticipant();
ISavedState lastState =
      ResourcesPlugin.getWorkspace().addSaveParticipant(myPluginInstance, saveParticipant);

if (lastState != null) {
      String saveFileName = lastState.lookup(new Path("save")).toString();
      File f = myPluginInstance.getStateLocation().append(saveFileName).toFile();
      // the plugin instance should read any important state from the file.
      myPluginInstance.readStateFrom(f);
   }

Ȱ¼ºÈ­ °£ ÀÚ¿ø µ¨Å¸ ó¸®

Ç÷¯±×ÀÎÀÌ È°¼ºÈ­µÇ±â Àü¿¡ ÀÛ¾÷°ø°£¿¡¼­ ÀÓÀÇ ¼öÀÇ ÀÚ¿ø º¯°æ À̺¥Æ®°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç÷¯±×ÀÎÀÌ ºñȰ¼ºÈ­µÈ ÀÌÈÄ¿¡ ¹ß»ýÇÑ º¯°æ»çÇ×À» ¾Ë·Á¸é ÀúÀå ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇÏ¸é µË´Ï´Ù(»ç½Ç, ±âŸ µ¥ÀÌÅ͸¦ ÀúÀåÇÒ ÇÊ¿ä´Â ¾øÀ½).

ÀúÀå Âü¿©ÀÚ´Â Ç÷§ÆûÀÌ Âü¿©ÀÚ ´ë½Å ÀÚ¿ø µ¨Å¸¸¦ À¯ÁöÇϵµ·Ï ¿äÃ»ÇØ¾ß ÇÕ´Ï´Ù. À̰ÍÀº ÀúÀå Á¶ÀÛÀÇ ÀϺηΠ¼öÇàµË´Ï´Ù.

public void saving(ISaveContext context) throws CoreException {
      // no state to be saved by the plug-in, but request a
      // resource delta to be used on next activation.
      context.needDelta();
   }

Ç÷¯±×ÀÎÀÌ ½ÃÀ۵Ǵ µ¿¾È ÀÌÀü¿¡ ÀúÀåµÈ »óÅ¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖÀ¸¸ç, ¸¶Áö¸· ÀúÀå ÀÌÈÄ·Î ¹ß»ýÇÑ ¸ðµç º¯°æ»çÇ׿¡ ´ëÇØ º¯°æ À̺¥Æ®°¡ ÀÛ¼ºµË´Ï´Ù.

ISaveParticipant saveParticipant = new MyWorkspaceSaveParticipant();
ISavedState lastState =
      ResourcesPlugin.getWorkspace().addSaveParticipant(myPluginInstance, saveParticipant);
if (lastState != null) {
      lastState.processResourceChangeEvents(new MyResourceChangeReporter());
   }

Á¦°øµÈ Ŭ·¡½º´Â ÀÚ¿ø º¯°æ»çÇ× ÃßÀû¿¡ ¼³¸íµÈ ´ë·Î IResourceChangeListener¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ¸¶Áö¸· ÀúÀå ÀÌÈÄÀÇ º¯°æ»çÇ×Àº POST_AUTO_BUILD ÀÚ¿ø º¯°æ À̺¥Æ®ÀÇ ÀϺηΠº¸°íµË´Ï´Ù.

Âü°í: ¸¶Ä¿ º¯°æ»çÇ×Àº ISavedState¿¡ ÀúÀåµÈ º¯°æ À̺¥Æ®¿¡ º¸°íµÇÁö ¾Ê½À´Ï´Ù. ¸¶Áö¸· »óŰ¡ ÀúÀåµÈ ÀÌÈÄ·Î ÀÓÀÇÀÇ ¶Ç´Â ¸ðµç ¸¶Ä¿°¡ º¯°æµÇ¾ú´Ù°í °¡Á¤ÇØ¾ß ÇÕ´Ï´Ù.

Copyright IBM Corporation and others 2000, 2003.